MySQL集羣MHA架構部署

MHA的組件中主要有兩個,一個是Manager節點組件。相似於一個監督者。node

Node節點組件則是安裝於數據庫節點,其中一個做爲Master。mysql

MHA在主節點發生故障時須要進行主節點自動切換,因此必不可少地須要管理員權限。因此多個節點之間須要基於ssh祕鑰認證。sql

MHA的主要配置在於manager。數據庫




準備三臺機器統一安裝mysql-5.7 (1922.168.6.12,192.168.6.92,192.168.6.91)vim



建立用戶bash

useradd -s /sbin/nologin -M mysql

建立數據目錄架構

mkdir -p /data/mysql
chown -R mysql.mysql /data/mysql

初始化數據庫 (5.7版本注意初始化時的密碼)app

/usr/local/mysql/bin/mysqld --no-defaults --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/

配置開機自啓動ssh

cp support-files/mysql.server /etc/init.d/mysqld 
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list
/etc/init.d/mysqld start

修改初始密碼:socket

/usr/local/mysql/bin/mysqladmin -uroot -p password '123456'

建立軟鏈接

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog

第一步:修改/etc/my.cnf配置文件 (三臺節點的server-id不一樣)

master節點

[mysqld]
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log-bin=/data/mysql/mysql-bin
binlog_format=row                        開啓行模式
secure-file-priv=/tmp                      限制mysqld 的導入|導出只能發生在/tmp/目錄下
server-id=12                         
 #GTID
gtid-mode=on                          啓用gtid類型,不然就是普通的複製架構
enforce-gtid-consistency=true                 強制GTID的一致性
log-slave-updates=1                      slave更新是否記入日誌(5.6必須的)
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

slave 節點

[mysqld]
server-id=13
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/var/log/mysql.log
log-bin=/data/mysql/mysql-bin
binlog_format=row
secure-file-priv=/tmp 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
slave_parallel_workers = 16
slave_parallel_type= logical_clock
#GTID
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1

開啓半同步複製 

master 節點安裝插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

#半同步複製(加到配置文件my.cnf)

rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000

slave 節點 安裝插件 主從同步開啓才能啓動

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

#半同步複製(加到配置文件my.cnf)

rpl_semi_sync_slave_enabled=1

注意:修改完,重啓三個節點的數據庫

第二步:建立複製用戶

主節點:

GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY '123456';

從庫開啓複製:

change master to master_host='192.168.6.12',master_user='repl',master_password='123456',MASTER_AUTO_POSITION=1;
start slave;


第三步:關閉relaylog自動刪除

MySQL數據庫主從複製在缺省狀況下從庫的relay logs會在SQL線程執行完畢後被自動刪除,可是對於MHA場景下,對於某些滯後從庫的恢復依賴於其餘從庫的relay log,所以採起禁用自動刪除功能以及按期清理的辦法。對於清理過多過大的relay log須要注意引發的複製延遲資源開銷等。MHA可經過purge_relay_logs腳本及配合cronjob來完成此項任務。

set global relay_log_purge = 0; 臨時(建議三個節點都作)
relay_log_purge = 0   永久,在配置文件,建議在三個節點都作


第四步:安裝各個節點node軟件包

安裝mha node:

依賴包perl-DBD-MySQL ,並在三個節點都安裝node軟件

yum  -y install perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

主庫中建立mha管理用戶

grant all privileges on *.* to mha@'%' identified by '123456';

第五步:部署manger節點(從庫192.168.6.91上部署)

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

建立必須目錄

mkdir -p /etc/mha
mkdir -p /var/log/mha/app1    ----》能夠管理多套主從複製

建立配置文件

vim /etc/mha/app1.cnf          -----》serverdefault能夠獨立
[server default]                        
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
master_ip_failover_script=/usr/local/bin/master_ip_failover
user=mha
password=123456
ping_interval=2
repl_password=123456
repl_user=repl
ssh_user=root
[server1]
candidate_master=1
check_repl_delay=0 
hostname=192.168.6.12
port=3306
[server2]
candidate_master=1                           ----》無論怎樣都切到優先級高的主機,通常在主機性能差別的時候用
check_repl_delay=0                           ----》無論優先級高的備選庫,數據延時多久都要往那切
hostname=192.168.6.92
port=3306
[server3]
hostname=192.168.6.91
port=3306

檢測互信

masterha_check_ssh  --conf=/etc/mha/app1.cnf

測試複製是否正常

masterha_check_repl --conf=/etc/mha/app1.cnf

第六步:MHA自帶高可用

vim /usr/local/bin/master_ip_failover
my $vip = '192.168.6.166/24';
my $key = '0';
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";

在主節點上作

ifconfig eth0:0 192.168.6.166/24


啓動mha

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

檢查狀態:

masterha_check_status --conf=/etc/mha/app1.cnf
相關文章
相關標籤/搜索