本文中設(shè)計到的環(huán)境都是真實的騰訊云環(huán)境,下面設(shè)計到的虛擬IP需要使用騰訊云的高可用虛擬 IP
前期準(zhǔn)備
三臺服務(wù)器厂榛,分別為節(jié)點一、二种柑、三,節(jié)點一為主服務(wù)器匹耕,節(jié)點二聚请、三為從服務(wù)器,
節(jié)點一: 172.27.0.13 (主)
節(jié)點二:?172.27.0.11 (從--安裝manager)
節(jié)點三:?172.27.0.17 (從)
在他們之間配置好基于gtid主從復(fù)制稳其,可以參考MySQL主從復(fù)制(日志點和gtid)
MHA是基于SSH服務(wù)的驶赏,所以我們先在集群的所有服務(wù)器中建立ssh免認(rèn)證登錄,這樣使用ssh鏈接的時候就不需要在輸入密碼了既鞠,具體操作如下:
????1. 在節(jié)點一上執(zhí)行 ssh-keygen煤傍,然后三次回車后就生成了ssh秘鑰
2. 使用ssh-copy-id將秘鑰拷貝到各個服務(wù)器上,包括當(dāng)前(自己)服務(wù)器嘱蛋,也就是說這里在每個服務(wù)器都要要拷貝三次
ssh-copy-id -i 上一步秘鑰生成的位置 -p ssh登錄的端口 usernname@ip地址,下面例子:
?ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@172.27.0.17
mkdir -p /home/mysql_mha三次配置完成后蚯姆,可以在服務(wù)器上執(zhí)行ssh鏈接看是否還需要輸入密碼五续,如果不需要則成功
最后登錄其他兩個服務(wù)器重復(fù)上面兩個步驟
安裝軟件包
一、下載node和manager軟件包
wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-node-0.57-0.el7.noarch.rpm
wget https://raw.githubusercontent.com/linyue515/mysql-master-ha/master/mha4mysql-manager-0.57-0.el7.noarch.rpm
二龄恋、查看系統(tǒng)中是否已經(jīng)有存在的軟件包
安裝之前最好查看一下系統(tǒng)中是否已經(jīng)安裝了軟件包,有的話可以先卸載安裝上面的版本,因為老的版本可能有很多坑(親身體會)
三疙驾、安裝node軟件包
node包需要在三臺服務(wù)器都安裝,安裝之前需要先安裝perl的幾個依賴包(perl-DBD-MySQL ncftp perl-DBI.x86),,然后在安裝node.執(zhí)行下面兩個命令
yum install -y perl-DBD-MySQL ncftp perl-DBI.x86
rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
四、安裝manager軟件包
和node不同,manage包只需要安裝到一個服務(wù)器就行,這里我直接安裝到作為從服務(wù)器的節(jié)點二上面,當(dāng)然,服務(wù)器資源充足的情況下,單獨用一臺服務(wù)器安裝manager包更好.?
和安裝node相同的,也需要你先安裝相關(guān)的依賴包,然后在安裝manager包.執(zhí)行如下兩條命令
yum install -y perl-Config-Tiny.noarch perl-Time-HiRes.x86_64 perl-Parallel-ForkManager perl-Log-Dispatch.noarch perl-DBD-MySQL ncftp
rpm -ivh mha4mysql-manager-0.57-0.el7.noarch.rpm
ps: 安裝node或者manager包的時候,必須要相關(guān)的依賴包,確定相關(guān)的依賴包安裝成功了
配置MHA
在安裝有manager包的節(jié)點二,創(chuàng)建一個放MHA的配置目錄,其他節(jié)點上不需要配置
1. 在主服務(wù)器(節(jié)點一)上建立一個mha用戶(就可以直接同步到所有從服務(wù)器郭毕,配置文件中需要)
grant all privileges on *.* to 'mha'@'172.27.0.%' identified by 'Mha123456.';
2. 在集群所有服務(wù)器中都先建立一個mha工作目錄(配置文件需要用)
mkdir -p /home/mysql_mha
3. 在節(jié)點二(manager)上的/opt/soft/mha目錄(自定義)下建立一個配置文件mysql_mha.cnf(名字自定義)
[server default]
user=mha
password=Mha123456.
manager_workdir=/home/mysql_mha?
manager_log=/home/mysql_mha/manager.log?
remote_workdir=/home/mysql_mha?
ssh_user=rootrepl_user=repl?
repl_password=Repl123456.?
ping_interval=1?
master_binlog_dir=/var/log/sql_log
master_ip_failover_script=/usr/bin/master_ip_failover
secondary_check_script=/usr/bin/masterha_secondary_check -s 172.27.0.11 -s 172.27.0.13 -s 172.27.0.17
[server1]
hostname=172.27.0.13
candidate_master=1
[server2]
hostname=172.27.0.17
candidate_master=1
[server1]
hostname= 172.27.0.11
no_master=1
remote_workdir=/home/mysql_mha 三個節(jié)點都要建立
ping_interval=1 manager進(jìn)程去檢查主數(shù)據(jù)庫是否聯(lián)通的時間間隔它碎,用ping命令檢查 1S
master_binlog_dir 配置好的二進(jìn)制日志文件的目錄,集群中參與選舉主服務(wù)器的數(shù)據(jù)庫的二進(jìn)制文件都配置在相同的目錄下显押,方便主從切換后扳肛,不需要修改配置文件
master_ip_failover_script: (可選),指定一個腳本---在完成主從切換后煮落,可以把主的虛擬ip綁定在新選舉的主上敞峭,如果不提供這個參數(shù),要實現(xiàn)這種虛擬ip的轉(zhuǎn)移蝉仇,就需要借助第三方的組件了旋讹,比如keepalived
secondary_check_script: 通過多個網(wǎng)絡(luò)檢測master是否可用,安裝好以后再服務(wù)器上就有
ps:? ?master_ip_failover_script這個本可以在這里下載,也可以網(wǎng)上搜一個,只需要改一個vip(虛擬ip)就行
檢測mha配置是否正確
masterha_check_ssh --conf=/opt/soft/mha/mysql_mha.cnf
檢測主從復(fù)制環(huán)境
masterha_check_repl --conf=/opt/soft/mha/mysql_mha.cnf
后臺啟動mha
nohup masterha_manager --conf=/opt/soft/mha/mysql_mha.cnf &
啟動后轿衔,主服務(wù)器(節(jié)點一)會自動分配相應(yīng)的虛擬ip沉迹,如果不分配就按照下面方式手動分配
ifconfig eth0:1 172.27.0.19/20
簡單測試故障轉(zhuǎn)移
在主服務(wù)器(節(jié)點一)停掉mysql,監(jiān)聽節(jié)點二上/home/mysql_mha/manager.log日志
分別查看節(jié)點一和節(jié)點三的虛擬IP是否已經(jīng)轉(zhuǎn)移
在節(jié)點二上查看當(dāng)前的主從復(fù)制鏈路,確認(rèn)主服務(wù)器已經(jīng)轉(zhuǎn)移到節(jié)點三
ps: 還可以測試一下這種架構(gòu)的壓力和其他故障處理的情況,比如加大主庫的并發(fā)寫入;停止一臺從庫,讓二進(jìn)制文件落后主庫,看最后會不會恢復(fù)等等.