MySQL集群MHA架構部署
Node節點組件則是安裝於數據庫節點,其中一個作為Master。
MHA在主節點發生故障時需要進行主節點自動切換,所以必不可少地需要管理員權限。所以多個節點之間需要基於ssh秘鑰認證。
MHA的主要配置在於manager。
準備三臺機器統一安裝mysql-5.7 (1922.168.6.12,192.168.6.92,192.168.6.91)
創建用戶
useradd -s /sbin/nologin -M mysql
創建數據目錄
mkdir -p /data/mysql chown -R mysql.mysql /data/mysql
初始化數據庫 (5.7版本註意初始化時的密碼)
/usr/local/mysql/bin/mysqld --no-defaults --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/
配置開機自啟動
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
修改初始密碼:
/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
MySQL集群MHA架構部署