1. 程式人生 > >Master High Availability 安裝配置

Master High Availability 安裝配置

mha

MHA(Master High Availability)目前在 MySQL 高可用方面是一個相對成熟的解決方案,
是一套優秀的作為 MySQL 高可用性環境下故障切換和主從提升的高可用軟件。在
MySQL 故障切換過程中,MHA 能做到在 0~30 秒之內自動完成數據庫的故障切換操
作,並且在進行故障切換的過程中,MHA 能在最大程度上保證數據的一致性,以達
到真正意義上的高可用。
該軟件由兩部分組成:MHA Manager(管理節點)和 MHA Node(數據節點)。MHA Manager
可以單獨部署在一臺獨立的機器上管理多個 master-slave 集群,也可以部署在一臺 slave

點上。
MHA Node 運行在每臺 MySQL 服務器上,MHA Manager 會定時探測集群中的 master
節點,當 master 出現故障時,它可以自動將最新數據的 slave 提升為新的 master,然後將
所有其他的 slave 重新指向新的 master。整個故障轉移過程對應用程序完全透明。MHA 可

與半同步復制結合起來,目前 MHA 主要支持一主多從的架構,要搭建 MHA,要求一個復制集群
中必須最少有三臺數據庫服務器,一主二從,即一臺充當 master,一臺充當備用 master,另
外一臺充當從庫.
MHA 切換步驟:
1.從宕機的 master 中保存二進制文件
2.檢測含有最新日至更新的 slave
3.應用差異的中繼日至(relay log)到其他的 slave
4.應用從 master 中保存的二進制日至事件到其他的 slave 中
5.提升一個 slave 為 master
6.使其他的 slave 指向最新的 master 進行復制。
manager 的工具:
masterha_check_ssh 檢查 MHA 的 SSH 配置狀況
masterha_check_repl 檢查 MySQL 復制狀況
masterha_manger 啟動 MHA
masterha_check_status 檢測當前 MHA 運行狀態
masterha_master_monitor 檢測 master 是否宕機
masterha_master_switch 控制故障轉移(自動或者手動)
masterha_conf_host 添加或刪除配置的 server 信息
node 的工具:
save_binary_logs 保存和復制 master 的二進制日誌
apply_diff_relay_logs 識別差異的中繼日誌事件並將其差異的事件應用於其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具)
purge_relay_logs 清除中繼日誌(不會阻塞 SQL 線程)
Mha 實驗環境配置:我們這個是在主從復制(一主兩從)的基礎上搭建的,mha 是可以放在一個 slave 端也可以單

運行:
實驗環境配置:
Rhel6.5
iptables selinux down
172.25.40.1 server1.example.com master
172.25.40.2 server2.example.com slave candidate master
172.25.40.3 server3.example.com slave
mha
Master 端配置:

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

構建免密登陸
ssh-keygen
##生成密鑰 ssh-copy-id 172.25.40.2
##給另外兩臺 mysql 主機分發,這樣可以免密連接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]
server-id=1

##數據庫的唯一標示,不能重復
log-bin=mysql-bin
##二進制記錄文件名為 mysql-bin
binlog-do-db=test ##同的庫為 test
binlog-ignore-db=mysql ##不同步 mysql
gtid-mode=ON ##打開 gtid 模式
enforce-gtid-consistency=ON##強制使用 gtid 模式
slave-parallel-type=LOGICAL_CLOCK ##打開多線程模式
slave-parallel-workers=16 ##開啟 16 個線程
relay_log_info_repository=TABLE
##以表格形式存放 relay-log 信息
relay_log_recovery=ON
rpl_semi_sync_master_enabled=ON ##設置半同步 master 和 slave 開啟
rpl_semi_sync_slave_enabled=ON
重新啟動兩臺服務器上的 mysql
/etc/init.d/mysqld restart
進入數據庫下載半同步模塊

mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
Query OK, 0 rows affected (0.50 sec)
mysql> set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.00 sec)

給所創建的認證用戶復制權限及 root 用戶所有權限的授權

mysql> grant all privileges on *.* to ‘root‘@‘172.168.40.%‘ identified
‘xxxxxxxxxx‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)by
mysql> grant replication slave on *.* to ‘redhat‘@‘172.168.40.%‘ identified by
‘xxxxxxxxx‘;
mysql> grant all on *.* to root@‘172.25.40.%‘ identified by ‘xxxxxxxx‘;
Query OK, 0 rows affected, 1 warning (0.38 sec)

Slave(candidate master)端配置:

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

構建免密登陸
ssh-keygen
##生成密鑰
ssh-copy-id 172.25.40.1 ##給另外兩臺 mysql 主機分發,這樣可以免密連接
ssh-copy-id 172.25.40.3
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]
除過 server-id 是不同的,其他參數均一樣
server-id=2

重新啟動兩臺服務器上的 mysql
/etc/init.d/mysqld restart 進入數據庫下載半同步模塊

mysql> install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
Query OK, 0 rows affected (0.14 sec)
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global read_only=1;

#設置為只讀模式,因為是備選 master,所以當
master 宕機時,candidate master 要充當 master,故不用寫進配置文件中
Query OK, 0 rows affected (0.00 sec)
給所創建的認證用戶復制權限及 root 用戶所有權限的授權
mysql> grant all privileges on .to root@’172.25.40.%’ identified by ‘xxxxxxxx’;
##這個密碼是 manager 主機配置文件裏面所寫的密碼
Slave 端配置:

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

構建免密登陸
ssh-keygen
##生成密鑰
ssh-copy-id 172.25.40.1##給另外兩臺 mysql 主機分發,這樣可以免密連接
ssh-copy-id 172.25.40.2
mysql 主配置文件(/etc/my.cnf)配置

[mysqlnd]
除過 server-id 是不同的,其他參數均一樣
server-id=3

重新啟動兩臺服務器上的 mysql
/etc/init.d/mysqld restart
進入數據庫下載半同步模塊

mysql>  install plugin rpl_semi_sync_slave soname ‘semisync_slave.so‘;
Query OK, 0 rows affected (0.14 sec)lave_enabled=1;
Query OK, 0 rows affected (0.00 
mysql> set global rpl_semi_sync_slave_enabled=1

給所創建的認證用戶復制權限及 root 用戶所有權限的授權

mysql> grant all privileges on *.* to ‘root‘@‘172.168.40.%‘ identified
‘xxxxxxxxx‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)
by
mysql> grant replication slave on *.* to ‘redhat‘@‘172.168.40.%‘ identified by
‘xxxxxxxx‘;
mysql> change master to
master_host=‘172.25.40.1‘,master_user=‘redhat‘,master_password=‘xxxxxxxxxx‘,
master_auto_position=1;

Mha 主機

yum install perl-* mha4mysql-manager-0.56-0.el6.noarch.rpm -y
mkdir /usr/local/mha

##創建工作目錄 workdir

mkdir /etc/mha
cd /etc/mha/

##創建配置文件所在目錄

vim app.conf       
 [server default]      
 manager_workdir=/usr/local/mha    
 manager_log=/usr/local/mha/mha.log    
 master_binlog_dir=/var/lib/mysql   
 user=root               ##數據庫用戶 登陸數據庫的用戶 ,用於manager監控管理用戶和密碼       
 password=xxxxxxxx        ##數據庫登陸密碼   初始化的時候登陸數據庫的密碼        
 ping_interval=1     
 remote_workdir=/tmp   
 repl_user=redhat            ##復制用戶(授權在slave上)用於主從間復制        
 repl_password=xxxxxxxx      ##slave復制用戶的密碼        ssh_user=root               ##ssh用戶   
 [server1]    
 hostname=172.25.40.1   
 port=3306        
 [server2]  
 hostname=172.25.40.2     
 port=3306   
 candidate_master=1          ##備用主機          check_repl_delay=0          ##日至差異大於100M的時候,不做master,兩個參數通常一起使用      
 [server3]  
 hostname=172.25.40.3        
 port=3306    
 #no_master=1                ##永遠不會作為master

檢查MySQL復制狀況

masterha_check_repl –conf=/etc/mha/app.cnf 
Tue Apr 24 09:14:45 2018 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Tue Apr 24 09:14:45 2018 - [info] Reading application default configuration from /etc/mha/app.conf..
Tue Apr 24 09:14:45 2018 - [info] Reading server configuration from /etc/mha/app.conf..
Tue Apr 24 09:14:45 2018 - [info] MHA::MasterMonitor version 0.56.
Tue Apr 24 09:14:45 2018 - [info] GTID failover mode = 1
Tue Apr 24 09:14:45 2018 - [info] Dead Servers:
Tue Apr 24 09:14:45 2018 - [info] Alive Servers:
Tue Apr 24 09:14:45 2018 - [info]   172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info]   172.25.40.2(172.25.40.2:3306)
Tue Apr 24 09:14:45 2018 - [info]   172.25.40.3(172.25.40.3:3306)
Tue Apr 24 09:14:45 2018 - [info] Alive Slaves:
Tue Apr 24 09:14:45 2018 - [info]   172.25.40.2(172.25.40.2:3306)  Version=5.7.17-log (oldest major version between slaves) log-bin:enabled
Tue Apr 24 09:14:45 2018 - [info]     GTID ON
Tue Apr 24 09:14:45 2018 - [info]     Replicating from 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info]     Primary candidate for the new Master (candidate_master is set)
Tue Apr 24 09:14:45 2018 - [info]   172.25.40.3(172.25.40.3:3306)  Version=5.7.17 (oldest major version between slaves) log-bin:disabled
Tue Apr 24 09:14:45 2018 - [info]     GTID ON
Tue Apr 24 09:14:45 2018 - [info]     Replicating from 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info]     Not candidate for the new Master (no_master is set)
Tue Apr 24 09:14:45 2018 - [info] Current Alive Master: 172.25.40.1(172.25.40.1:3306)
Tue Apr 24 09:14:45 2018 - [info] Checking slave configurations..
Tue Apr 24 09:14:45 2018 - [info]  read_only=1 is not set on slave 172.25.40.2(172.25.40.2:3306).
Tue Apr 24 09:14:45 2018 - [info]  read_only=1 is not set on slave 172.25.40.3(172.25.40.3:3306).
Tue Apr 24 09:14:45 2018 - [warning]  log-bin is not set on slave 172.25.40.3(172.25.40.3:3306). This host cannot be a master.
Tue Apr 24 09:14:45 2018 - [info] Checking replication filtering settings..
Tue Apr 24 09:14:45 2018 - [info]  binlog_do_db= , binlog_ignore_db= 
Tue Apr 24 09:14:45 2018 - [info]  Replication filtering check ok.
Tue Apr 24 09:14:46 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking.
Tue Apr 24 09:14:46 2018 - [info] Checking SSH publickey authentication settings on the current master..
Tue Apr 24 09:14:46 2018 - [info] HealthCheck: SSH to 172.25.40.1 is reachable.
Tue Apr 24 09:14:46 2018 - [info] 
172.25.40.1(172.25.40.1:3306) (current master)
 +--172.25.40.2(172.25.40.2:3306)
 +--172.25.40.3(172.25.40.3:3306)

Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.2..
Tue Apr 24 09:14:46 2018 - [info]  ok.
Tue Apr 24 09:14:46 2018 - [info] Checking replication health on 172.25.40.3..
Tue Apr 24 09:14:46 2018 - [info]  ok.
Tue Apr 24 09:14:46 2018 - [warning] master_ip_failover_script is not defined.
Tue Apr 24 09:14:46 2018 - [warning] shutdown_script is not defined.
Tue Apr 24 09:14:46 2018 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

Master High Availability 安裝配置