MHA簡介
MHA能夠自動化實現主服務器故障轉移,這樣就能夠快速將從服務器晉級爲主服務器(一般在10-30s),而不影響複製的一致性,不須要花錢買更多的新服務器,不會有性能損耗,容易安裝,沒必要更改現有的部署環境,適用於任何存儲引擎。node
MHA提供在線主服務器切換,改變先正運行的主服務器到另一臺上,這個過程只需0.5-2s的時間,這個時間內數據沒法寫入。mysql
MHA Manager經過ssh鏈接mysql slave服務器。因此在配置MHA的時候,咱們首先實現的就是各個節點的互信。linux
雖然MHA試圖從宕掉的主服務器上保存二進制日誌,並非老是可行的。例如,若是主服務器硬件故障或沒法經過ssh訪問,MHA無法保存二進制日誌,只進行故障轉移而丟失最新數據。
使用半同步複製,能夠大大下降數據丟失的風險。MHA能夠與半同步複製結合起來。若是隻有一個slave已經收到了最新的二進制日誌,MHA能夠將最新的二進制日誌應用於其餘全部的slave服務器上,所以他們彼此保持一致性。sql
MySQL高可用架構圖
MySQL高可用架構圖說明
1.10.220.5.131做爲MHA主節點,監控MySQL的各個節點,實現MySQL的高可用。數據庫
2.10.220.5.134下方一臺做爲MHA的備用節點,實現MHA服務器的高可用。在MHA主服務器端運行MHA監測腳本,當主MHA服務器宕機以後,自動啓動備用MHA節點,完成MHA的高可用。vim
3.10.220.5.132做爲整個MySQL集羣中的主節點,用來執行客戶端的寫操做。後端
4.10.220.5.133做爲主節點的從節點,採用主從同步的價格,實時同步主節點中的內容。centos
5.10.220.5.135配置MySQL-PROXY實現讀寫分離,提高整個MySQL集羣結構的性能。客戶端寫的操做會被調度到10.220.5.132主節點之上,讀操做會被調度到10.220.5.129(VIP)。安全
6.10.220.5.139做爲LVS調度器,接收客戶端的讀請求並根據LVS調度規則,把請求調度到後方節點。bash
7.10.220.5.137以及10.220.5.138做爲MySQL整個結構中的一環,一方面從一級節點同步客戶端的寫操做,另外還要實時返回客戶端的讀請求數據
MySQL架構集羣腳本詳解
上面的集羣架構我已經寫成了一個腳本,能夠實現一鍵部署。已經把全部腳本壓縮成一了個文件,解壓以後會有下面一些文件。如今對整個腳本逐一進行講解。
1.ssh祕鑰自動分發腳本
要想實現上面的架構首先必須讓各個節點實現互信,即各個節點均可以使用ssh免密登陸到對方服務器上面,因此咱們首先須要來解讀一下ssh祕鑰分發的腳本。
1. 下載expect。要想實現自動分發祕鑰就要用到expect軟件,它能夠根據你要匹配的內容進行自動輸入,因此咱們首先要下載expect軟件。
2. 刪除保存的祕鑰信息。首先須要判斷一下私鑰和公鑰文件,以及保存host-key信息的known_hosts文件是否存在,若是存在就刪除,這樣能夠實現腳本的循環使用。
3. 自動生成祕鑰對。這個時候就要用到expect了,咱們把須要執行的expect腳本內容傳送給expect,就能夠執行了。
4.在各個節點分發祕鑰。把你各個節點的ip地址按照下述規則寫進去便可。
5.執行該腳本便可完成對各個節點的分發了。
[root@ken ~]# vim ssh1.sh #!/bin/bash . /etc/init.d/functions #下載expect yum install expect -y &>/dev/null if [ $? -eq 0 ];then echo -n "download expect" success echo "" else echo -n "download expect" failure echo "" exit 8 fi #刪除保存的祕鑰信息 if [ -f id_rsa -o -f id_rsa.pub -o known_hosts ];then rm -rf /root/.ssh/id* rm -rf /root/.ssh/known* fi #自動生成祕鑰對 /usr/bin/expect<<eof spawn ssh-keygen expect { "(/root/.ssh/id_rsa)" {send \r;exp_continue} "passphrase" {send \r;exp_continue} "again" {send \r} } expect eof exit eof #在各個節點分發祕鑰 for i in 1 2 3 4 5 7 8 9 do ken=10.220.5.13$i /usr/bin/expect<<eof spawn ssh-copy-id $ken expect { "yes/no" {send yes\r;exp_continue} "password" {send o\r} } expect eof exit eof done
2.在各個節點之上執行ssh1.sh腳本
上面的ssh1.sh腳本已經完成了本機能夠鏈接到各個節點了,如今咱們須要把這個腳本推送至各個節點之上並執行,這樣就能夠實現架構中各個節點互信了。
[root@ken ~]# vim ssh2.sh
#!/bin/bash for i in 1 2 3 4 5 7 8 9 do ip=10.220.5.13$i scp /root/ssh1.sh $ip:/root/ &>/dev/null ssh $ip bash /root/ssh1.sh done
3.執行下載軟件依賴的腳本
在這個腳本里面把全部的依賴包都安裝一下。
1.登陸到各個節點下載所須要的依賴軟件。
2.把mha4mysql-node這個軟件也推送到各個節點之上.
3.判斷一下對方節點之上是否已經安裝了node,沒安裝的話就再安裝一下吧。
4.啓動各個節點中的mysql.
[root@ken ~]# vim down2.sh #!/bin/bash . /etc/init.d/functions #在各個節點下載相應的依賴軟件 for i in 1 2 3 4 5 7 8 9 do ken=10.220.5.13$i ssh $ken yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y &>/dev/null if [ $? -eq 0 ];then echo -n " download softs at $ken" success echo "" else echo -n " download softs $ken" failure echo "" fi #把node軟件推送到各個節點 scp /root/mha4mysql-node-0.58-0.el7.centos.noarch.rpm $ken:/root &>/dev/null #各個節點安裝mha node組件 if [ `ssh $ken rpm -ql mha4mysql-node | wc -l` -lt 2 ];then ssh $ken rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm &>/dev/null fi #開啓各個節點中的mysql ssh $ken mysqld & &>/dev/null done
4.執行配置MySQL-PROXY的腳本
要想實現MySQL讀寫分離,如今咱們就須要用到MySQL-PROXY軟件了,如今就來安裝吧。
1.解壓mysql-proxy.首先咱們須要準備mysql-proxy軟件,這個軟件我已經把它壓縮在了整個腳本中,你們解壓以後就能夠執行一鍵安裝的腳本,這個軟件會被遠程傳送到須要安裝的服務器節點之上。
2.建立運行的用戶。首先建立一個運行mysql-proxy的系統用戶。
3.配置mysql-proxy。接下來就是配置mysql-proxy了。你們能夠根據腳本操做步驟進行一一配置。
4.準備mysql-proxy的配置文件。這裏使用了cat結合重定向符進行寫入,你們能夠直接複製配置文件內容到你的服務器中,只須要修改爲你的對應的IP地址便可
5.啓動mysql-proxy。配置完成以後如今咱們就能夠啓動了,若是你是按照下面腳本內容一步一步來的,應該不會報錯。若是啓動失敗,能夠查看/usr//local/mysql-proxy/logs/下面的日誌文件,相信報的一些小錯誤你是能夠解決的,加油。
6.若是你是和我同樣是在centos7上配置的該軟件,建議下載使用本機自帶的mysql客戶端即mariadb,避免軟件兼容問題。
[root@ken ~]# vim mysqlp3.sh #!/bin/bash . /etc/init.d/functions mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz /usr/local/ -f &>/dev/null cd /usr/local/ tar xf mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz ln -s mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy &>/dev/null #建立運行用戶 useradd -s /sbin/nologin -r mysql-proxy &>/dev/null #配置proxy #建立目錄 cd /usr/local/mysql-proxy mkdir logs lua &>/dev/null #準備文件 cp share/doc/mysql-proxy/rw-splitting.lua ./lua/ -f cp share/doc/mysql-proxy/admin-sql.lua ./lua/ -f
#配置讀寫分離規則 #sed -ri 's/min_idle_connections = ?/min_idle_connections = 1' ./lua/w-splitting.lua &>/dev/null #sed -ri 's/min_idle_connections = ?/max_idle_connections = 1' ./lua/w-splitting.lua &>/dev/null
#建立配置文件 cd /usr/local/mysql-proxy touch mysql-proxy.cnf chmod 0660 mysql-proxy.cnf cat>mysql-proxy.cnf<<eof [mysql-proxy] user=mysql-proxy admin-username=root admin-password=123 proxy-address=10.220.5.135:4040 proxy-read-only-backend-addresses=10.220.5.132 proxy-backend-addresses=10.220.5.140 proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log log-level=debug daemon=true keepalive=true eof
#啓動服務 /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/mysql-proxy.cnf if ss -tnl |grep 4040 ;then echo -n "start mysql-proxy" success echo "" else echo -n "start mysql-proxy" failure echo "" exit 8 fi
5.執行配置LVS服務器端的腳本
畢竟咱們是實現mysql的高性能架構,因此咱們須要配置LVS實現讀操做的調度。
1.定義VIP以及後端節點的IP地址。根據你的集羣架構IP端,配置好各個節點的IP地址。
2.下載所須要的依賴以及服務。在下載這裏你能夠再判斷一下是否下載成功,畢竟若是沒有下載成功下面的就不會配置成功了。
3.檢查是否配置成功。在這個腳本最後我添加了一行用來顯示配置的命令,若是你的配置成功的話,會顯示出來你的配置結果。
[root@ken ~]# vim lvs4.sh #!/bin/bash #3.實現lvs #lvs主服務器端腳本 #!/bin/bash . /etc/init.d/functions
#配置VIP及後端節點IP vip=10.220.5.129 rip1=10.220.5.137 rip2=10.220.5.138
#下載依賴即軟件
yum install libnl* popt* kernel-devel -y &> /dev/null ln -s /usr/src/kernels/2.6.32-754.el6.x86_64 /usr/src/linux &>/dev/null yum install ipvsadm -y &>/dev/null
#綁定VIP以及添加後端節點服務器
ip a a $vip/24 dev eth0 &>/dev/null ipvsadm -A -t $vip:3306 -s rr &>/dev/null #採用輪詢 ipvsadm -a -t $vip:3306 -r $rip1:3306 -w 1 -g &>/dev/null #權重爲1,採用DR模式 ipvsadm -a -t $vip:3306 -r $rip2:3306 -w 1 -g &>/dev/null #權重爲1,採用DR模式 ipvsadm -L -n --stats
6.執行配置LVS客戶端的腳本
LVS服務不僅須要配置服務器端,客戶端也須要配置哦。畢竟咱們是實現的一鍵部署,手工操做客戶端的話也太low了,因此讓腳原本代替咱們完後這項工做吧!
1.首先定義一下你的VIP吧。
2.在本地迴環地址之上綁定VIP。這樣前方服務器就能夠正常的日後端服務器節點進行調度了。
3.IP抑制瞭解一下?配置LVS必定要記得IP抑制問題。
4.執行完上下兩個腳本就完成了LVS的配置了,是否是so easy信心爆棚了哪?
[root@ken ~]# vim lvs4c.sh #!/bin/bash vip=10.220.5.129 ip a a $vip/32 dev lo:0 echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
7.執行配置級聯複製的腳本--一級從腳本
mysql命令能夠在bash命令行執行的,只須要加個參數-e就能夠了,真是要感嘆無數前輩的智慧了,這個選項對於寫自動化腳本真的實在實在實在太好用了。強烈建議分分鐘記住它,分分鐘用起來!
1.首先須要停掉slave。目的是實現腳本的複用,又強調了一遍哦。
2.重置slave配置。這樣咱們又能夠從新開始了啊。
3.受權一個用戶吧。這樣就能夠實現兩端同步了啊。若是基於安全起見,你也能夠只賦予replication slave權限,這樣會讓你的數據庫更加的安全。演示起見因此我就直接複製了all權限,畢竟能夠少敲12345...鍵盤。
4.change一下master到你的主服務器端吧。
5.啓動slave吧。
6.若是你放心你是否已經配置完畢能夠再加一條: mysql -uroot -p123 -e "show slave status\G"
[root@ken ~]# vim yijis.sh #!/bin/bash mysql -uroot -p123 -e "stop slave;" mysql -uroot -p123 -e "reset slave all;" mysql -uroot -p123 -e "grant all on *.* to ken@'%' identified by '123';" &>/dev/null mysql -uroot -p123 -e "change master to master_host='10.220.5.132',master_user='ken',master_password='123';" mysql -uroot -p123 -e "start slave;"
8.執行配置級聯複製的腳本--二級從腳本
二級腳本的內容和一級腳本內容是同樣的,只是把master的IP地址指向你的二級從節點就能夠了,因此這裏就再也不贅述。至於你要問我爲何不把這個腳本合在一級腳本之上的問題,還不是寫完了以後纔想到的。。。真是懶得改了。
#!/bin/bash mysql -uroot -p123 -e "stop slave;" mysql -uroot -p123 -e "reset slave all;" mysql -uroot -p123 -e "grant all on *.* to ken@'%' identified by '123';" &>/dev/null mysql -uroot -p123 -e "change master to master_host='10.220.5.133',master_user='ken',master_password='123';"; mysql -uroot -p123 -e "start slave;"
9.執行配置主節點MHA的腳本
1.首先須要安裝一下MHA所依賴的包,畢竟使用日本大佬使用perl寫的。
2.在主服務端安裝manager節點。一個用來管理監控的軟件。
3.全局配置文件。你只須要複製配置文件裏面的內容,並修改你的IP以及用戶就能夠了。
4.主配置文件。由於個人架構是級聯複製, 因此server裏面只要寫一個主節點IP一個一級從節點就能夠了。
5.配置VIP腳本的文件我已經壓縮在軟件包裏面了,解壓以後就能夠看到了。
#!/bin/bash . /etc/init.d/functions #5.實現MHA #在本機即manager安裝依賴包及所需軟件 yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y &>/dev/null if [ $? -eq 0 ];then echo -n "manager download softs" success echo "" else echo -n "manager download softs" failure echo "" fi rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm &>/dev/null if [ $? -eq 0 ];then echo -n " manager download node" success echo "" else echo -n "manager download node" failure echo "" fi rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm &>/dev/null if [ $? -eq 0 ];then echo -n "manager download manger soft" success echo "" else echo -n "manager download manager softs" failure echo "" fi #建立工做目錄 mkdir -p /etc/mha/scripts &>/dev/null #建立全局配置文件 cat>/etc/masterha_default.cnf<<eof [server default] user=root password=123 ssh_user=root repl_user=ken repl_password=123 ping_interval=1 #master_binlog_dir= /var/lib/mysql,/var/log/mysql secondary_check_script=masterha_secondary_check -s 10.220.5.132 -s 10.220.5.133 master_ip_failover_script="/etc/mha/scripts/master_ip_failover" master_ip_online_change_script="/etc/mha/scripts/master_ip_online_change" report_script="/etc/mha/scripts/send_report" eof #生成主配置文件 cat>/etc/mha/app1.cnf<<eof [server default] manager_workdir=/var/log/mha/app1 manager_log=/var/log/mha/app1/manager.log [server1] hostname=10.220.5.132 candidate_master=1 master_binlog_dir="/var/lib/mysql" #查看方式 find / -name mysql-bin* [server2] hostname=10.220.5.133 candidate_master=1 master_binlog_dir="/var/lib/mysql" eof #配置VIP cp /root/master_ip_failover /etc/mha/scripts/ -f #配置編寫VIP腳本 cp /root/master_ip_online_change /etc/mha/scripts/ -f #賦予腳本可執行權限 chmod +x /etc/mha/scripts/master_ip_failover chmod +x /etc/mha/scripts/master_ip_online_change #chmod +x /etc/mha/scripts/send_report # 經過 masterha_check_ssh 驗證 ssh 密鑰是否正常 masterha_check_ssh --conf=/etc/mha/app1.cnf #經過 masterha_check_repl 驗證 mysql 主從複製是否成功 masterha_check_repl --conf=/etc/mha/app1.cnf #在master上綁定vip ssh 10.220.5.132 ip a a 10.220.5.140/24 dev eth0:0 &>/dev/null #經過 masterha_manager 啓動 MHA 監控(在manager角色上執行) mkdir /var/log/mha/app1 -p &>/dev/null touch /var/log/mha/app1/manager.log &>/dev/null 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 & #檢查MHA的啓動狀態 #檢查集羣狀態 masterha_check_status --conf=/etc/mha/app1.cnf
10.MHA高可用監測腳本
這個監測腳本放在主服務器端後臺運行,若是發現主節點服務宕機就啓動備用節點。爲了以防主機點意外關機,沒法執行ssh命令啓動備用節點,你也能夠把這個腳本放在備用節點,具體怎麼修改相信聰明的你一下就看明白了。
#!/bin/bash while true do if [ `ps -aux |grep perl.*mha |wc -l` -eq 1 ];then ssh 10.220.5.134 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 & exit 3 fi done
MySQL架構集羣實現
目前爲止全部的腳本都已經接收完畢,如今須要把這些腳本整合在一個腳本里面,只要進行推送就好了,這樣咱們就實現了一鍵部署。下面來看一下這個腳本里面都有什麼吧。
1.首先關閉防火牆,以避免遇到沒必要要的錯誤。
2.在本機(MHA主節點)運行分發祕鑰的腳本,保證可以連同各個節點,推送腳本及軟件。
3.執行下載軟件的腳本。
4.執行mysql-proxy的腳本
5.執行部署LVS的腳本
6.執行實現級聯複製的腳本
7.打包的腳本文件以及把mha備節點的腳本都推送到備節點執行,得到一個mha備用節點
8.執行配置mha的腳本。
9.執行監控mha主節點的腳本。
[root@ken ~]# vim jiagouzhu.sh #!/bin/bash . /etc/init.d/functions #關閉本機防火牆 setenforce 0 &>/dev/null systemctl stop firewalld &>/dev/null #執行分配祕鑰腳本 bash /root/ssh1.sh #推送腳本至各個節點 bash /root/ssh2.sh #執行下載相應軟件及啓動mysqld的腳本 bash /root/down2.sh #執行部署mysql-proxy的腳本 scp /root/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz 10.220.5.135:/root scp /root/mysqlp3.sh 10.220.5.135:/root ssh 10.220.5.135 bash /root/mysqlp3.sh #執行部署lvs服務器端腳本 scp /root/lvs4.sh 10.220.5.139:/root ssh 10.220.5.139 bash /root/lvs4.sh #執行部署lvs客戶端腳本 scp /root/lvs4c.sh 10.220.5.137:/root scp /root/lvs4c.sh 10.220.5.138:/root ssh 10.220.5.137 bash /root/lvs4c.sh ssh 10.220.5.138 bash /root/lvs4c.sh #執行實現級聯複製腳本 scp /root/zhum.sh 10.220.5.132:/root ssh 10.220.5.132 bash /root/zhum.sh scp /root/yijis.sh 10.220.5.133:/root ssh 10.220.5.133 bash /root/yijis.sh scp /root/erjis.sh 10.220.5.137:/root ssh 10.220.5.137 bash /root/erjis.sh scp /root/erjis.sh 10.220.5.138:/root ssh 10.220.5.138 bash /root/erjis.sh #執行發送備mha腳本 scp /root/mysqljiagou.tar.gz 10.220.5.134:/root ssh 10.220.5.134 tar xf /root/mysqljiagou.tar.gz ssh 10.220.5.134 bash /root/ssh1.sh ssh 10.220.5.134 bash /root/ssh2.sh ssh 10.220.5.134 bash /root/mha6bei.sh #執行監控主節點的腳本 #nohup bash /root/checkmha.sh & #執行實現mha的腳本 bash /root/mha6.sh
當你看到下面的返回結果的時候,你的MySQL架構集羣已經開始運行起來了.
... Tue Oct 30 00:42:16 2018 - [info] binlog_do_db= , binlog_ignore_db= Tue Oct 30 00:42:16 2018 - [info] Replication filtering check ok. Tue Oct 30 00:42:16 2018 - [info] GTID (with auto-pos) is supported. Skipping all SSH and Node package checking. Tue Oct 30 00:42:16 2018 - [info] Checking SSH publickey authentication settings on the current master.. Tue Oct 30 00:42:16 2018 - [info] HealthCheck: SSH to 10.220.5.132 is reachable. Tue Oct 30 00:42:16 2018 - [info] 10.220.5.132(10.220.5.132:3306) (current master) +--10.220.5.133(10.220.5.133:3306) Tue Oct 30 00:42:16 2018 - [info] Checking replication health on 10.220.5.133.. Tue Oct 30 00:42:16 2018 - [info] ok. Tue Oct 30 00:42:16 2018 - [info] Checking master_ip_failover_script status: Tue Oct 30 00:42:16 2018 - [info] /etc/mha/scripts/master_ip_failover --command=status --ssh_user=root --orig_master_host=10.220.5.132 --orig_master_ip=10.220.5.132 --orig_master_port=3306 IN SCRIPT TEST====/sbin/ifconfig eth0:1 down==/sbin/ifconfig eth0:1 10.220.5.140/24=== Checking the Status of the script.. OK Tue Oct 30 00:42:16 2018 - [info] OK. Tue Oct 30 00:42:16 2018 - [warning] shutdown_script is not defined. Tue Oct 30 00:42:16 2018 - [info] Got exit code 0 (Not master dead). MySQL Replication Health is OK. <<主從複製顯示正常 app1 is stopped(2:NOT_RUNNING).
[root@ken ~]# ps aux | grep perl <<服務正常啓動 root 14382 0.4 4.3 301488 21928 pts/1 S 00:42 0:00 perl /bin/masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover root 14469 0.0 0.1 112704 972 pts/1 R+ 00:43 0:00 grep --color=auto perl
MySQL架構集羣測試
1.檢測mha中VIP
能夠看到10.220.5.140已經在mysql主服務節點之上了,檢測成功。
[root@ken ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 00:0c:29:ab:76:d6 brd ff:ff:ff:ff:ff:ff inet 10.220.5.132/24 brd 10.220.5.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 10.220.5.140/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:feab:76d6/64 scope link valid_lft forever preferred_lft forever
2.檢測LVS節點是否配置成功
lvs節點已經配置成功
[root@ken ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.220.5.129:3306 rr -> 10.220.5.137:3306 Route 1 0 0 -> 10.220.5.138:3306 Route 1 0 0
3.檢測mysql-proxy是否配置成功
登陸成功,配置成功。
[root@ken ~]# mysql -uroot -p123 -h10.220.5.135 -P4040 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 58 Server version: 5.7.23-log MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]>
4.建立數據庫檢測
在主節點之上建立數據庫,查看一級節點以及二級從節點是否能夠同步數據。
在主節點建立數據庫ken99
[root@ken ~]# mysql -uroot -p -e "create database ken99;"
在一級從節點查看數據庫信息
[root@ken ~]# mysql -uroot -p -e "show databases;" Enter password: +--------------------+ | Database | +--------------------+ | information_schema | | ken99 | | ken999 | | mysql | | performance_schema | | sys | +--------------------+
在二級從節點查看數據庫信息,一級二級從節點都已經同步主節點數據庫,驗證成功。
[root@ken ~]# mysql -uroot -p -e "show databases;" Enter password: +--------------------+ | Database | +--------------------+ | information_schema | | ken99 | | ken999 | | mysql | | performance_schema | | sys | +--------------------+
5.關掉mysql主服務器
關掉mysql的主服務器,查看VIP是否會漂移到備節點之上。
[root@ken ~]# pkill mysqld
查看備節點是否已經有了VIP。能夠發現VIP已經漂移到了10.220.5.133之上,完成了mysql的高可用。
[root@ken ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000 link/ether 00:0c:29:ab:76:d6 brd ff:ff:ff:ff:ff:ff inet 10.220.5.133/24 brd 10.220.5.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet 10.220.5.140/24 scope global secondary eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:feab:76d6/64 scope link valid_lft forever preferred_lft forever