相關概念
1)MHA
- 由日本DeNA公司youshimaton開發
- 優秀的實現MySQL高可用的解決方案
- 數據庫的自動故障切換操作能做到在30s之內完成
- MHA能確保在故障切換過程中最大限度保證數據的一致性
2)MHA組成
MHA Manager 管理節點
- 管理所有數據庫服務器
- 可以單獨部署在一臺獨立的機器上
- 也可以部署在某臺數據庫服務器上
MHA Node 數據節點
- 存儲數據的MySQL服務器
- 運行在每臺MySQL服務器上
3)MHA工作過程
- MHA集羣架構
由Manager定時探測集羣中的master節點,當master故障時,Manager自動將擁有最新數據的slave提升爲新的master
準備集羣環境
- 配置所有數據庫服務器之間彼此ssh免密登錄
- 配置管理主機ssh免密登錄所有數據庫服務器
本次案例:
服務器ip | 服務器角色 |
---|---|
192.168.4.51 | master |
192.168.4.52 | slave1 |
192.168.4.53 | slave2 |
192.168.4.57 | MHA管理節點 |
192.168.4.100 | virtual ip |
- 配置數據庫服務器主從半同步模式,從服務器開啓binlog日誌
所有數據庫服務器同樣操作,不論主從
,因爲需要所有服務器都有能擔任主服務器的能力
master,slave1,slave2:
vim /etc/my.cnf
server_id=51 #注意id別重複
log_bin=master51 #binlog日誌名
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #加載半同步模塊
rpl_semi_sync_master_enabled=1 #啓用
rpl_semi_sync_slave_enabled=1 #啓用
relay_log_purge=0 #禁止自動刪除中繼日誌
systemctl restart mysqld
slave1,slave2:
mysql> change master to ... #設置主服務器
mysql> start slave; #啓動slave進程
mysql> show slave status; #確認狀態
配置管理主機
- 安裝軟件:
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
tar -xvf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56
perl Makefile.pl
make
make install
- 創建並編輯主配置文件:
模板文件:mha4mysql-manager-0.56/samples/conf/app1.cnf
mkdir /etc/mha #創建工作目錄
cp mha4mysql-manager-0.56/sample/conf/app1.cnf /etc/mha/ #拷貝模板文件
vim /etc/mha/app1.cnf #編輯主配置文件
[server default] #管理服務默認配置
manager_workdir=/etc/mha #工作目錄
manager_log=/etc/mha/manager.log #日誌文件
master_ip_failover_script=/etc/mha/master_ip_failover #故障切換腳本
ssh_user=root #訪問ssh服務用戶
ssh_port=22 #ssh服務端口
repl_user=repluser #數據同步授權用戶
repl_password=123qqq...A #密碼
user=root #監控用戶
password=123qqq...A #密碼
[server1] #指定數據庫服務器
hostname=192.168.4.51 #ip
candidate_master=1 #競選主服務器
port=3306 #端口
[server2] #第二臺
hostname=192.168.4.52
candidate_master=1
port=3306
[server3] #第三臺
hostname=192.168.4.53
candidate_master=1
port=3306
- 部署故障切換腳本:
有服務器故障時,該腳本會自動將VIP移動到新的master服務器
cp mha-soft-student/master_ip_failover /etc/mha/
vim /etc/mha/master_ip_failover #手動添加四行
my $vip = '192.168.4.100/24'; # Virtual IP #定義VIP地址
my $key = "1"; #定義變量$key
my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; #部署vip地址命令
my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; #釋放vip地址命令
- master服務器部署VIP:
[root@master] ifconfig eth0:1 192.168.4.100
配置數據庫服務器(數據節點)
- 在所有數據庫服務器上安裝mha_node
yum -y install mha4mysql-node-0.56-0.el6.noarch.rpm
- 在所有數據庫服務器上授權用戶
master:
mysql> grant all on *.* to root@'%' identified by '123qqq...A';
#授權監控用戶,從服務器會自動同步授權
slave1,salve2:
grant replication slave on *.* to repluser@'%' identified by '123qqq...A';
#因爲從服務器成爲主服務器時,需要有此用戶
啓動管理服務
- 相關命令:安裝目錄/bin/
命令 | 作用 |
---|---|
masterha_check_ssh | 檢查MHA的ssh配置狀況 |
masterha_check_repl | 檢查MySQL複製狀況 |
masterha_manager | 啓動MHA |
masterha_check_status | 檢測MHA運行狀態 |
masterha_stop | 停止MHA |
1)測試配置
[root@mha] masterha_check_ssh --conf=/etc/mha/app1.cnf #測試ssh配置
Sat Jan 11 16:06:40 2020 - [info] All SSH connection tests passed successfully. #配置正常的輸出信息
[root@mha] masterha_check_repl --conf=/etc/mha/app1.cnf #測試主從
MySQL Replication Health is OK. #配置正常的輸出信息
2)啓動
[root@mha] masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover
#選項1:指定配置文件
#選項2:主庫宕機時從配置文件中刪除它的配置
#選項3:忽略xxx.health文件,作用爲不記錄上次故障切換
#啓動該服務會佔用終端,主服務器宕機該進程會停止
[root@mha] masterha_check_status --conf=/etc/mha/app1.cnf #查看服務狀態
app1 (pid:2803) is running(0:PING_OK), master:192.168.4.51 #正常運行的輸出信息
向集羣添加新的數據庫服務器(修復故障)
- 啓動mysql服務
- 確保與主服務器數據一致
- 指定主服務器信息
- 啓動slave進程
- 查看狀態信息
- MHAmanager配置文件寫入該服務器
- masterha_check_repl