前????言
摘???要
MHA?是當?master?出現故障,挑選一個?slave?作為新的?master?并構建成新的
主從架構的管理工具。從?master?出現故障到構建成新的主從架構時間是?10-30
秒。在?master?出現故障時可能會出現?slave?同步的數據不一致的現象,此工具
可以自動應用差異的中繼日志到其他?slave?上保證數據的一致性。
一.Mha?優點
1.M?aster?crash?時可以快速的進行故障切換。
9-12?秒內可以檢測到?master?故障,?7-10?秒內可以關閉?master?機器避免腦
裂,在幾秒內可以應用差異日志,并構建新的主從架構,整個過程大約在?10-30
秒內可以完成,最大化的減少故障修復時間。
2.M?aster?crash?時可以最大化的減少數據丟失
當?master?crash?時?MHA?自動檢測選擇數據同步最全的?slave,并把差異日
志應用到其他?slave?上,?以保障數據的一致性。結合使用?mysql?
3.Semi-Synchronous?Replication?可以最大化的減少數據的丟失。
MHA?的更改升級配置等不影響線上正在運行的數據庫
使用?mha?不需要增加太多的服務器
MHA?由?MHA?Manager?和?MHA?Node?組成。?MHA?Node?運行在?MYSQL?服務器上,
所以不會因為?MHA?node?增加新的服務器。MHA?Manager?通常需要獨立運行在一
臺服務器上,所以你需要增加一臺服務器用于監控管理運行?MHA?Manager,但
是一臺服務器上的?MHA?Manager?可以同時監控管理多達百臺?master,所以總的
來說服務器增加不會太多。MHA?Manger?也可以運行在一臺?slave?上,這樣總的
服務器數也不會增加。
4.原來應用系統整體性能不會降低太多
MHA?工作在異步或半同步的主從架構上。當監控?master?時,MHA?會每隔幾
Mha?部署測試文檔
5
秒?(默認?3?秒)?向?master?發出?ping?包并且不需要大的?sql?語句用于監控?master
的健康狀況。Slave?需要開啟?binlog,整體性能不會有太大的降低。
5.MHA?適合任何存儲引擎
只要能主從復制的存儲引擎它都支持,不限于支持事物的?innodb?引擎。
Mha?部署測試文檔
二.安??裝
共有?4?臺服務器:?一個管理服務器,一個?master?服務器,兩個?slave?服務器。
操作系統?Centos?6.4?64?bit?。
192.168.186.141?MYSQL.COM
192.168.186.142?SLAVE1.COM
192.168.186.146?SLAVE2.COM
192.168.186.144?MANAGER.COM
數據庫版本mysql-5.6.10
1.首先在三臺機器上裝編譯安裝MYSQL-5.6.10
關閉selinux?iptables?服務以便后期主從同步不出錯
[root@MYSQL?~]#?cd?/usr/local/src/
[root@MYSQL?src]#?ls
installmysql5.sh??mysql-5.6.10??mysql-5.6.10.tar.gz
[root@MYSQL?src]#?sh?installmysql5.sh?
please?enter?you?mysql?version?(eg:/mysql-5.5.34):mysql-5.6.10
please?enter?you?mysql?datadir?(eg:/data/mysql/data):/date/mysql/data
2.配置HOSTS環境
[root@MANAGER?~]#?vi?/etc/hosts[root@MYSQL?etc]#?vi?/etc/hosts127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
192.168.186.141?MYSQL.COM
192.168.186.142?SLAVE1.COM
192.168.186.146?SLAVE2.COM
192.168.186.144?MANAGER.COM[root@MYSQL?etc]#?for?i?in??142?146?144;do?scp?/etc/hosts?192.168.186.$i:/etc/;done
root@192.168.186.142's?password:?
Permission?denied,?please?try?again.
root@192.168.186.142's?password:?
Permission?denied,?please?try?again.
root@192.168.186.142's?password:?
hosts?????????????????????????????????????????????????????????????????????????100%??266?????0.3KB/s???00:00????
root@192.168.186.146's?password:?
hosts?????????????????????????????????????????????????????????????????????????100%??266?????0.3KB/s???00:00????
root@192.168.186.144's?password:
3.安裝MYSQL?主從半同步
#?所有mysql數據庫服務器,安裝半同步插件(semisync_master.so,semisync_slave.so)??
mysql>?install?plugin?rpl_semi_sync_master?soname?'semisync_master.so';??????
mysql>?install?plugin?rpl_semi_sync_slave?soname?'semisync_slave.so';??[root@MYSQL?etc]vi?/etc/my.cnf
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
rpl_semi_sync_slave_enabled=1
relay_log_purge=0
skip-name-resolve
#socket=/usr/mysql.sock
#auto_increment_offset?=?2
#auto_increment_increment?=?2
server-id?=?1
log-bin=mysql-bin
read_only=1
slave-skip-errors=1396
三臺機器可以全部開啟?僅僅server-id不同
mysql>?show?variables?like?'%sync%';??
#?查看半同步狀態:??
mysql>?show?status?like?'%sync%';??
#?有幾個狀態參數值得關注的:??
rpl_semi_sync_master_status:顯示主服務是異步復制模式還是半同步復制模式??
rpl_semi_sync_master_clients:顯示有多少個從服務器配置為半同步復制模式??
rpl_semi_sync_master_yes_tx:顯示從服務器確認成功提交的數量??
rpl_semi_sync_master_no_tx:顯示從服務器確認不成功提交的數量??
rpl_semi_sync_master_tx_avg_wait_time:事務因開啟semi_sync,平均需要額外等待的時間??
rpl_semi_sync_master_net_avg_wait_time:事務進入等待隊列后,到網絡平均等待時間 ?
[root@MYSQL?src]#?service?mysqld?restart?每臺機器重啟
4.每一臺機器配置互相無交互
[root@MYSQL?src]#?cat?/etc/hosts
127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4
::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6
192.168.186.141?MYSQL.COM
192.168.186.142?SLAVE1.COM
192.168.186.146?SLAVE2.COM
192.168.186.144?MANAGER.COM[root@MYSQL?src]#?ssh-keygen?
[root@MYSQL?src]#?ssh-copy-id?192.168.186.142
[root@MYSQL?src]#?ssh-copy-id?192.168.186.144
[root@MYSQL?src]#?ssh-copy-id?192.168.186.146其他臺配置方法與以上一致?保證每臺互相無交互
配置完成后每一個都登錄一次
[root@MYSQL?~]#?ssh?MANAGER.COM
[root@MYSQL?~]#?ssh?SLAVE1.COM
[root@MYSQL?~]#?ssh?SALVE2.COM
作用首次連接需要輸入一次YES?在know-hosts問價記錄,達成無交互
5.配置主從
執行主從腳本
建議自己做?用這個腳本要是后期帶來各種不便?不要怪我
詳見附件
[root@MYSQL?src]#?sh?mslave.sh?
please?enter?you?mysql?SLAVEIP??(eg:192.168.152.138):192.168.186.142
please?enter?you?master?mysql?password??(eg:yunwei123):123
please?enter?you?slave?mysql?password??(eg:yunwei123):123
please?enter?you?master?mysql?binlog??(eg:mysql-bin.000001):mysql-bin.000001[root@MYSQL?src]#?sh?mslave.sh?
please?enter?you?mysql?SLAVEIP??(eg:192.168.152.138):192.168.186.146
please?enter?you?master?mysql?password??(eg:yunwei123):123??這個是你的主MYSQL?登錄密碼
please?enter?you?slave?mysql?password??(eg:yunwei123):123????這個是你的從的MYSQL登錄密碼
please?enter?you?master?mysql?binlog??(eg:mysql-bin.000001):mysql-bin.000001至此MYSQL?安裝主從半同步配置完成
三.安裝配置MHA
?
1.安裝
每臺機器做如下操作
[root@SLAVE2?data]#rpm?-ivh?http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm[root@MANAGER?src]#?yum?clean?all
Loaded?plugins:?fastestmirror,?refresh-packagekit,?security
Cleaning?repos:?epel?name
Cleaning?up?Everything
Cleaning?up?list?of?fastest?mirrors[root@MANAGER?src]#?yum?makecache[root@MANAGER?src]#?rpm?--import?/etc/pki/rpm-gpg/*[root@SLAVE2?data]#?yum??-y?install?perl-DBD-MySQL?perl-Config-Tiny?perl-Log-Dispatch?perl-Parallel-ForkManager?perl-Config-IniFiles??ncftp?perl-Params-Validate??perl-CPAN?perl-Test-Mock-LWP.noarch?perl-LWP-Authen-Negotiate.noarch?perl-devel?[root@SLAVE2?data]#yum?install?perl-ExtUtils-CBuilder?perl-ExtUtils-MakeMaker??這個百度文檔沒有但是顯然是要裝的
以下操作管理節點需要兩個都安裝,在3臺數據庫節點只要安裝MHA的node節點:
1?#?如果安裝下面包,報依賴關系錯,請先安裝mysql-share-compat包??
2?#?先安裝下面的?perl-dbd-mysql包??
3?#?在下面執行perl時,如果出現報錯,需要安裝如下這幾個perl包:?perl-devel?perl-CPAN??
[root@MANAGER?src]#?tar?-xf?mha4mysql-node-0.53.tar.gz?
[root@MANAGER?src]#?cd?mha4mysql-node-0.53
[root@MANAGER?mha4mysql-node-0.53]#?perl?Makefile.PL??????????
[root@MANAGER?mha4mysql-node-0.53]#?make?&&?make?install??????***字體這部分是每一臺節點都要做的[root@MANAGER?src]#?tar?-xf??mha4mysql-manager-0.53.tar.gz
[root@MANAGER?src]#?cd?mha4mysql-manager-0.53
[root@MANAGER?mha4mysql-manager-0.53]#?perl?Makefile.PL?
[root@MANAGER?mha4mysql-manager-0.53]#?make?&&?make?install
根據提示輸入?如果中間有卡頓現象?直接crtl+c?然后繼續會出現下載的進度條,說明是正常的
[root@MANAGER?src]#?mkdir?/etc/masterha
[root@MANAGER?mha]#?mkdir?-p?/master/app1
[root@MANAGERmha]#?mkdir?-p?/scripts
[root@MANAGER?mha]#?cp?samples/conf/*?/etc/masterha/
[root@MANAGERmha]#?cp?samples/scripts/*??/scripts
[root@MANAGER?mha4mysql-manager-0.53]#??cp?samples/conf/*?/etc/masterha/
2.配置
[root@MANAGER?masterha]#?vi?app1.cnf?
內容如下;
[server?default]
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
user=mha_mon
password=123
ssh_user=root
repl_user=slave???做主從的用戶??這個也是每一臺都要授權的
repl_password=yunwei123??做主從的密碼??
ping_interval=1
shutdown_script=""
master_ip_online_change_script=""
report_script=""[server1]
hostname=192.168.186.141
master_binlog_dir=/data/mysql/data
candidate_master=1[server2]
hostname=192.168.186.142
master_binlog_dir=/data/mysql/data
candidate_master=1[server3]
hostname=192.168.186.146
master_binlog_dir=/data/mysql/data
no_master=1保存退出!
[root@MANAGER?masterha]#?>masterha_default.cnf
3.測試ssh
[root@MANAGER?masterha]#?masterha_check_ssh?--global_conf=/etc/masterha/masterha_default.cnf??--conf=/etc/masterha/app1.cnf
Wed?Jul??9?02:26:57?2014?-?[info]?Reading?default?configuratoins?from?/etc/masterha/masterha_default.cnf..
Wed?Jul??9?02:26:57?2014?-?[info]?Reading?application?default?configurations?from?/etc/masterha/app1.cnf..
Wed?Jul??9?02:26:57?2014?-?[info]?Reading?server?configurations?from?/etc/masterha/app1.cnf..
Wed?Jul??9?02:26:57?2014?-?[info]?Starting?SSH?connection?tests..
Wed?Jul??9?02:26:58?2014?-?[debug]?
Wed?Jul??9?02:26:57?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.141(192.168.186.141:22)?to?root@192.168.186.142(192.168.186.142:22)..
Wed?Jul??9?02:26:57?2014?-?[debug]???ok.
Wed?Jul??9?02:26:57?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.141(192.168.186.141:22)?to?root@192.168.186.146(192.168.186.146:22)..
Wed?Jul??9?02:26:57?2014?-?[debug]???ok.
Wed?Jul??9?02:26:58?2014?-?[debug]?
Wed?Jul??9?02:26:57?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.142(192.168.186.142:22)?to?root@192.168.186.141(192.168.186.141:22)..
Wed?Jul??9?02:26:57?2014?-?[debug]???ok.
Wed?Jul??9?02:26:57?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.142(192.168.186.142:22)?to?root@192.168.186.146(192.168.186.146:22)..Wed?Jul??9?02:26:58?2014?-?[debug]???ok.
Wed?Jul??9?02:26:58?2014?-?[debug]?
Wed?Jul??9?02:26:58?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.146(192.168.186.146:22)?to?root@192.168.186.141(192.168.186.141:22)..
Wed?Jul??9?02:26:58?2014?-?[debug]???ok.
Wed?Jul??9?02:26:58?2014?-?[debug]??Connecting?via?SSH?from?root@192.168.186.146(192.168.186.146:22)?to?root@192.168.186.142(192.168.186.142:22)..
Wed?Jul??9?02:26:58?2014?-?[debug]???ok.
Wed?Jul??9?02:26:58?2014?-?[info]?All?SSH?connection?tests?passed?successfully.登入每臺數據庫
mysql>?grant?all?privileges?on?*.*?to?mha_mon@'%'?identified?by?'123';
Query?OK,?0?rows?affected?(1.00?sec)mysql>?flush?privileges;
Query?OK,?0?rows?affected?(0.01?sec)
4.注意
[root@SLAVE1?~]#?ln?-s?/usr/local/mysql/bin/*?/usr/bin
在每臺MYSQL?服務器上做這件事情?極度重要哦
?
mysql>set?global?read_only=1;??set??global??relay_log_purge=0;
??在從上執行?或者干脆寫到my.cnf文件里面最好
?
[root@SLAVE1?~]#?vi?/etc/my.cnf
read_only=1
slave-skip-errors=1396
為什么要跳過這個錯誤呢?因為啊在主里面刪除用戶的時候?從會報錯說沒有這個用戶所以跳過這個錯誤吧
?
?
如果數據庫存在空的用戶?域名的用戶?一定要刪除否則MHA??連接MYSQL?會報錯連不上?一般只要在從上面刪除?如果直接沒刪除也OK?那就OK?吧如果報錯登錄不了就刪除掉吧?或者跳過域名解析,或者你授權的時候記得也授權域名等等方法多種?我的方式是跳過域名解析的?skip-name-resolve
mysql>?select?user,host?from?mysql.user;
+---------+---------------+
|?user????|?host??????????|
+---------+---------------+
|?root????|?127.0.0.1?????|
|?mha_mon?|?192.168.186.%?|
|?repl????|?192.168.186.%?|
|?slave???|?192.168.186.%?|
|?root????|?::1???????????|
|?????????|?SLAVE2.COM????|
|?root????|?SLAVE2.COM????|
|?root????|?localhost?????|
+---------+---------------+
8?rows?in?set?(0.00?sec)
mysql>?drop?user?'root'@SLAVE2.COM;
Query?OK,?0?rows?affected?(0.00?sec)
?
5.測試mysql
?
?
[root@MANAGER?masterha]#??masterha_check_repl???--conf=/etc/masterha/app1.cnf
Wed?Jul??9?04:23:16?2014?-?[warning]?Global?configuration?file?/etc/masterha_default.cnf?not?found.?Skipping.
Wed?Jul??9?04:23:16?2014?-?[info]?Reading?application?default?configurations?from?/etc/masterha/app1.cnf..
Wed?Jul??9?04:23:16?2014?-?[info]?Reading?server?configurations?from?/etc/masterha/app1.cnf..
Wed?Jul??9?04:23:16?2014?-?[info]?MHA::MasterMonitor?version?0.53.
Wed?Jul??9?04:23:17?2014?-?[info]?Dead?Servers:
Wed?Jul??9?04:23:17?2014?-?[info]?Alive?Servers:
Wed?Jul??9?04:23:17?2014?-?[info]???192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?04:23:17?2014?-?[info]???192.168.186.142(192.168.186.142:3306)
Wed?Jul??9?04:23:17?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)
Wed?Jul??9?04:23:17?2014?-?[info]?Alive?Slaves:
Wed?Jul??9?04:23:17?2014?-?[info]???192.168.186.142(192.168.186.142:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?04:23:17?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?04:23:17?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)
Wed?Jul??9?04:23:17?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?04:23:17?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?04:23:17?2014?-?[info]?????Not?candidate?for?the?new?Master?(no_master?is?set)
Wed?Jul??9?04:23:17?2014?-?[info]?Current?Alive?Master:?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?04:23:17?2014?-?[info]?Checking?slave?configurations..
Wed?Jul??9?04:23:17?2014?-?[info]?Checking?replication?filtering?settings..
Wed?Jul??9?04:23:17?2014?-?[info]??binlog_do_db=?,?binlog_ignore_db=?
Wed?Jul??9?04:23:17?2014?-?[info]??Replication?filtering?check?ok.
Wed?Jul??9?04:23:17?2014?-?[info]?Starting?SSH?connection?tests..
Wed?Jul??9?04:23:18?2014?-?[info]?All?SSH?connection?tests?passed?successfully.
Wed?Jul??9?04:23:18?2014?-?[info]?Checking?MHA?Node?version..
Wed?Jul??9?04:23:19?2014?-?[info]??Version?check?ok.
Wed?Jul??9?04:23:19?2014?-?[info]?Checking?SSH?publickey?authentication?settings?on?the?current?master..
Wed?Jul??9?04:23:19?2014?-?[info]?HealthCheck:?SSH?to?192.168.186.141?is?reachable.
Wed?Jul??9?04:23:19?2014?-?[info]?Master?MHA?Node?version?is?0.53.
Wed?Jul??9?04:23:19?2014?-?[info]?Checking?recovery?script?configurations?on?the?current?master..
Wed?Jul??9?04:23:19?2014?-?[info]???Executing?command:?save_binary_logs?--command=test?--start_pos=4?--binlog_dir=/data/mysql/data?--output_file=/var/tmp/save_binary_logs_test?--manager_version=0.53?--start_file=mysql-bin.000001?
Wed?Jul??9?04:23:19?2014?-?[info]???Connecting?to?root@192.168.186.141(192.168.186.141)..?Creating?/var/tmp?if?not?exists..????ok.Checking?output?directory?is?accessible?or?not..ok.Binlog?found?at?/data/mysql/data,?up?to?mysql-bin.000001
Wed?Jul??9?04:23:20?2014?-?[info]?Master?setting?check?done.
Wed?Jul??9?04:23:20?2014?-?[info]?Checking?SSH?publickey?authentication?and?checking?recovery?script?configurations?on?all?alive?slave?servers..
Wed?Jul??9?04:23:20?2014?-?[info]???Executing?command?:?apply_diff_relay_logs?--command=test?--slave_user=mha_mon?--slave_host=192.168.186.142?--slave_ip=192.168.186.142?--slave_port=3306?--workdir=/var/tmp?--target_version=5.6.10-log?--manager_version=0.53?--relay_log_info=/data/mysql/data/relay-log.info??--relay_dir=/data/mysql/data/??--slave_pass=xxx
Wed?Jul??9?04:23:20?2014?-?[info]???Connecting?to?root@192.168.186.142(192.168.186.142:22)..?Checking?slave?recovery?environment?settings..Opening?/data/mysql/data/relay-log.info?...?ok.Relay?log?found?at?/data/mysql/data,?up?to?SLAVE1-relay-bin.000002Temporary?relay?log?file?is?/data/mysql/data/SLAVE1-relay-bin.000002Testing?mysql?connection?and?privileges..Warning:?Using?a?password?on?the?command?line?interface?can?be?insecure.done.Testing?mysqlbinlog?output..?done.Cleaning?up?test?file(s)..?done.
Wed?Jul??9?04:23:20?2014?-?[info]???Executing?command?:?apply_diff_relay_logs?--command=test?--slave_user=mha_mon?--slave_host=SLAVE2.COM?--slave_ip=192.168.186.146?--slave_port=3306?--workdir=/var/tmp?--target_version=5.6.10-log?--manager_version=0.53?--relay_log_info=/data/mysql/data/relay-log.info??--relay_dir=/data/mysql/data/??--slave_pass=xxx
Wed?Jul??9?04:23:20?2014?-?[info]???Connecting?to?root@192.168.186.146(SLAVE2.COM:22)..?Checking?slave?recovery?environment?settings..Opening?/data/mysql/data/relay-log.info?...?ok.Relay?log?found?at?/data/mysql/data,?up?to?slave2-relay-bin.000002Temporary?relay?log?file?is?/data/mysql/data/slave2-relay-bin.000002Testing?mysql?connection?and?privileges..Warning:?Using?a?password?on?the?command?line?interface?can?be?insecure.done.Testing?mysqlbinlog?output..?done.Cleaning?up?test?file(s)..?done.
Wed?Jul??9?04:23:21?2014?-?[info]?Slaves?settings?check?done.
Wed?Jul??9?04:23:21?2014?-?[info]?
192.168.186.141?(current?master)+--192.168.186.142+--SLAVE2.COMWed?Jul??9?04:23:21?2014?-?[info]?Checking?replication?health?on?192.168.186.142..
Wed?Jul??9?04:23:21?2014?-?[info]??ok.
Wed?Jul??9?04:23:21?2014?-?[info]?Checking?replication?health?on?SLAVE2.COM..
Wed?Jul??9?04:23:21?2014?-?[info]??ok.
Wed?Jul??9?04:23:21?2014?-?[warning]?master_ip_failover_script?is?not?defined.
Wed?Jul??9?04:23:21?2014?-?[warning]?shutdown_script?is?not?defined.
Wed?Jul??9?04:23:21?2014?-?[info]?Got?exit?code?0?(Not?master?dead).MySQL?Replication?Health?is?OK.至此說明你的MHA?已經配置好了
?6.啟動
[root@MANAGER?~]#?nohup?masterha_manager?--conf=/etc/mastermha/app1.cnf?>?/tmp/mha_manager.log??</dev/null?2>&1?&
???啟動MHA
四.測試重構
1.測試
測試?將MYSQL.COM機器上的MYSQL服務關閉?,注意觀察?manager.log??日志會發現?切換到了SLAVE1.COM?并且SLAVE1.COM變成了主??而SLAVE2.COM?則變成了SLAVE1.COM?的從
root@MANAGER?app1]#?tail?-f?manager.log???這是啟動后還沒關閉主數據庫的日志內容
192.168.186.141?(current?master)+--192.168.186.142+--SLAVE2.COMWed?Jul??9?18:52:32?2014?-?[warning]?master_ip_failover_script?is?not?defined.
Wed?Jul??9?18:52:32?2014?-?[warning]?shutdown_script?is?not?defined.
Wed?Jul??9?18:52:32?2014?-?[info]?Set?master?ping?interval?1?seconds.
Wed?Jul??9?18:52:32?2014?-?[warning]?secondary_check_script?is?not?defined.?It?is?highly?recommended?setting?it?to?check?master?reachability?from?two?or?more?routes.
Wed?Jul??9?18:52:32?2014?-?[info]?Starting?ping?health?check?on?192.168.186.141(192.168.186.141:3306)..
Wed?Jul??9?18:52:32?2014?-?[info]?Ping(SELECT)?succeeded,?waiting?until?MySQL?doesn't?respond..[root@MYSQL?~]#?service?mysqld?stop
Shutting?down?MySQL.....?SUCCESS!?[root@MANAGER?app1]#?tail?-f?manager.log???最要看最后幾行?就知道有沒有切換成功
192.168.186.141?(current?master)+--192.168.186.142+--SLAVE2.COM
Wed?Jul??9?18:56:47?2014?-?[info]?Dead?Servers:
Wed?Jul??9?18:56:47?2014?-?[info]???192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?Alive?Servers:
Wed?Jul??9?18:56:47?2014?-?[info]???192.168.186.142(192.168.186.142:3306)
Wed?Jul??9?18:56:47?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?Alive?Slaves:
Wed?Jul??9?18:56:47?2014?-?[info]???192.168.186.142(192.168.186.142:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Not?candidate?for?the?new?Master?(no_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]?Checking?slave?configurations..
Wed?Jul??9?18:56:47?2014?-?[info]?Checking?replication?filtering?settings..
Wed?Jul??9?18:56:47?2014?-?[info]??Replication?filtering?check?ok.
Wed?Jul??9?18:56:47?2014?-?[info]?Master?is?down!
Wed?Jul??9?18:56:47?2014?-?[info]?Terminating?monitoring?script.
Wed?Jul??9?18:56:47?2014?-?[info]?Got?exit?code?20?(Master?dead).
Wed?Jul??9?18:56:47?2014?-?[info]?MHA::MasterFailover?version?0.53.
Wed?Jul??9?18:56:47?2014?-?[info]?Starting?master?failover.
Wed?Jul??9?18:56:47?2014?-?[info]?*?Phase?2:?Dead?Master?Shutdown?Phase?completed.
Wed?Jul??9?18:56:47?2014?-?[info]???192.168.186.142(192.168.186.142:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Not?candidate?for?the?new?Master?(no_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]?The?oldest?binary?log?file/position?on?all?slaves?is?mysql-bin.000001:214
Wed?Jul??9?18:56:47?2014?-?[info]?Oldest?slaves:
Wed?Jul??9?18:56:47?2014?-?[info]???192.168.186.142(192.168.186.142:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:47?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:47?2014?-?[info]?????Not?candidate?for?the?new?Master?(no_master?is?set)
Wed?Jul??9?18:56:47?2014?-?[info]?
Wed?Jul??9?18:56:47?2014?-?[info]?*?Phase?3.2:?Saving?Dead?Master's?Binlog?Phase..
Wed?Jul??9?18:56:47?2014?-?[info]?
Wed?Jul??9?18:56:48?2014?-?[info]?Fetching?dead?master's?binary?logs..
Wed?Jul??9?18:56:48?2014?-?[info]?Executing?command?on?the?dead?master?192.168.186.141(192.168.186.141:3306):?save_binary_logs?--command=save?--start_file=mysql-bin.000001??--start_pos=214?--binlog_dir=/data/mysql/data?--output_file=/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?--handle_raw_binlog=1?--disable_log_bin=0?--manager_version=0.53Creating?/var/tmp?if?not?exists..????ok.Concat?binary/relay?logs?from?mysql-bin.000001?pos?214?to?mysql-bin.000001?EOF?into?/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?..Dumping?binlog?format?description?event,?from?position?0?to?120..?ok.Dumping?effective?binlog?data?from?/data/mysql/data/mysql-bin.000001?position?214?to?tail(237)..?ok.Concat?succeeded.
Wed?Jul??9?18:56:48?2014?-?[info]?scp?from?root@192.168.186.141:/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?to?local:/masterha/app1/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?succeeded.
Wed?Jul??9?18:56:49?2014?-?[info]?HealthCheck:?SSH?to?192.168.186.142?is?reachable.
Wed?Jul??9?18:56:49?2014?-?[info]?HealthCheck:?SSH?to?SLAVE2.COM?is?reachable.
Wed?Jul??9?18:56:49?2014?-?[info]?
Wed?Jul??9?18:56:49?2014?-?[info]?*?Phase?3.3:?Determining?New?Master?Phase..
Wed?Jul??9?18:56:49?2014?-?[info]?
Wed?Jul??9?18:56:49?2014?-?[info]?Finding?the?latest?slave?that?has?all?relay?logs?for?recovering?other?slaves..
Wed?Jul??9?18:56:49?2014?-?[info]?All?slaves?received?relay?logs?to?the?same?position.?No?need?to?resync?each?other.
Wed?Jul??9?18:56:49?2014?-?[info]?Searching?new?master?from?slaves..
Wed?Jul??9?18:56:49?2014?-?[info]??Candidate?masters?from?the?configuration?file:
Wed?Jul??9?18:56:49?2014?-?[info]???192.168.186.142(192.168.186.142:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:49?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:49?2014?-?[info]?????Primary?candidate?for?the?new?Master?(candidate_master?is?set)
Wed?Jul??9?18:56:49?2014?-?[info]??Non-candidate?masters:
Wed?Jul??9?18:56:49?2014?-?[info]???SLAVE2.COM(192.168.186.146:3306)??Version=5.6.10-log?(oldest?major?version?between?slaves)?log-bin:enabled
Wed?Jul??9?18:56:49?2014?-?[info]?????Replicating?from?192.168.186.141(192.168.186.141:3306)
Wed?Jul??9?18:56:49?2014?-?[info]?????Not?candidate?for?the?new?Master?(no_master?is?set)
Wed?Jul??9?18:56:49?2014?-?[info]??Searching?from?candidate_master?slaves?which?have?received?the?latest?relay?log?events..
Wed?Jul??9?18:56:49?2014?-?[info]?New?master?is?192.168.186.142(192.168.186.142:3306)
Wed?Jul??9?18:56:49?2014?-?[info]?Starting?master?failover..
Wed?Jul??9?18:56:49?2014?-?[info]?
From:
192.168.186.141?(current?master)+--192.168.186.142+--SLAVE2.COMTo:
192.168.186.142?(new?master)+--SLAVE2.COM
Wed?Jul??9?18:56:49?2014?-?[info]?
Wed?Jul??9?18:56:49?2014?-?[info]?*?Phase?3.3:?New?Master?Diff?Log?Generation?Phase..
Wed?Jul??9?18:56:49?2014?-?[info]?
Wed?Jul??9?18:56:49?2014?-?[info]??This?server?has?all?relay?logs.?No?need?to?generate?diff?files?from?the?latest?slave.
Wed?Jul??9?18:56:49?2014?-?[info]?Sending?binlog..
Wed?Jul??9?18:56:50?2014?-?[info]?scp?from?local:/masterha/app1/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?to?root@192.168.186.142:/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?succeeded.
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?*?Phase?3.4:?Master?Log?Apply?Phase..
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?*NOTICE:?If?any?error?happens?from?this?phase,?manual?recovery?is?needed.
Wed?Jul??9?18:56:50?2014?-?[info]?Starting?recovery?on?192.168.186.142(192.168.186.142:3306)..
Wed?Jul??9?18:56:50?2014?-?[info]??Generating?diffs?succeeded.
Wed?Jul??9?18:56:50?2014?-?[info]?Waiting?until?all?relay?logs?are?applied.
Wed?Jul??9?18:56:50?2014?-?[info]??done.
Wed?Jul??9?18:56:50?2014?-?[info]?Getting?slave?status..
Wed?Jul??9?18:56:50?2014?-?[info]?This?slave(192.168.186.142)'s?Exec_Master_Log_Pos?equals?to?Read_Master_Log_Pos(mysql-bin.000001:214).?No?need?to?recover?from?Exec_Master_Log_Pos.
Wed?Jul??9?18:56:50?2014?-?[info]?Connecting?to?the?target?slave?host?192.168.186.142,?running?recover?script..
Wed?Jul??9?18:56:50?2014?-?[info]?Executing?command:?apply_diff_relay_logs?--command=apply?--slave_user=mha_mon?--slave_host=192.168.186.142?--slave_ip=192.168.186.142??--slave_port=3306?--apply_files=/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?--workdir=/var/tmp?--target_version=5.6.10-log?--timestamp=20140709185647?--handle_raw_binlog=1?--disable_log_bin=0?--manager_version=0.53?--slave_pass=xxx
Wed?Jul??9?18:56:50?2014?-?[info]?
MySQL?client?version?is?5.6.10.?Using?--binary-mode.
Applying?differential?binary/relay?log?files?/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?on?192.168.186.142:3306.?This?may?take?long?time...
Applying?log?files?succeeded.
Wed?Jul??9?18:56:50?2014?-?[info]??All?relay?logs?were?successfully?applied.
Wed?Jul??9?18:56:50?2014?-?[info]?Getting?new?master's?binlog?name?and?position..
Wed?Jul??9?18:56:50?2014?-?[info]??mysql-bin.000007:504
Wed?Jul??9?18:56:50?2014?-?[info]??All?other?slaves?should?start?replication?from?here.?Statement?should?be:?CHANGE?MASTER?TO?MASTER_HOST='192.168.186.142',?MASTER_PORT=3306,?MASTER_LOG_FILE='mysql-bin.000007',?MASTER_LOG_POS=504,?MASTER_USER='repl',?MASTER_PASSWORD='xxx';
Wed?Jul??9?18:56:50?2014?-?[warning]?master_ip_failover_script?is?not?set.?Skipping?taking?over?new?master?ip?address.
Wed?Jul??9?18:56:50?2014?-?[info]?Setting?read_only=0?on?192.168.186.142(192.168.186.142:3306)..
Wed?Jul??9?18:56:50?2014?-?[info]??ok.
Wed?Jul??9?18:56:50?2014?-?[info]?**?Finished?master?recovery?successfully.
Wed?Jul??9?18:56:50?2014?-?[info]?*?Phase?3:?Master?Recovery?Phase?completed.
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?*?Phase?4:?Slaves?Recovery?Phase..
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?*?Phase?4.1:?Starting?Parallel?Slave?Diff?Log?Generation?Phase..
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?--?Slave?diff?file?generation?on?host?SLAVE2.COM(192.168.186.146:3306)?started,?pid:?3135.?Check?tmp?log?/masterha/app1/SLAVE2.COM_3306_20140709185647.log?if?it?takes?time..
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?Log?messages?from?SLAVE2.COM?...
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]??This?server?has?all?relay?logs.?No?need?to?generate?diff?files?from?the?latest?slave.
Wed?Jul??9?18:56:50?2014?-?[info]?End?of?log?messages?from?SLAVE2.COM.
Wed?Jul??9?18:56:50?2014?-?[info]?--?SLAVE2.COM(192.168.186.146:3306)?has?the?latest?relay?log?events.
Wed?Jul??9?18:56:50?2014?-?[info]?Generating?relay?diff?files?from?the?latest?slave?succeeded.
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?*?Phase?4.2:?Starting?Parallel?Slave?Log?Apply?Phase..
Wed?Jul??9?18:56:50?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?--?Slave?recovery?on?host?SLAVE2.COM(192.168.186.146:3306)?started,?pid:?3137.?Check?tmp?log?/masterha/app1/SLAVE2.COM_3306_20140709185647.log?if?it?takes?time..
Wed?Jul??9?18:56:51?2014?-?[info]?
Wed?Jul??9?18:56:51?2014?-?[info]?Log?messages?from?SLAVE2.COM?...
Wed?Jul??9?18:56:51?2014?-?[info]?
Wed?Jul??9?18:56:50?2014?-?[info]?Sending?binlog..
Wed?Jul??9?18:56:51?2014?-?[info]?scp?from?local:/masterha/app1/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?to?root@SLAVE2.COM:/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?succeeded.
Wed?Jul??9?18:56:51?2014?-?[info]?Starting?recovery?on?SLAVE2.COM(192.168.186.146:3306)..
Wed?Jul??9?18:56:51?2014?-?[info]??Generating?diffs?succeeded.
Wed?Jul??9?18:56:51?2014?-?[info]?Waiting?until?all?relay?logs?are?applied.
Wed?Jul??9?18:56:51?2014?-?[info]??done.
Wed?Jul??9?18:56:51?2014?-?[info]?Getting?slave?status..
Wed?Jul??9?18:56:51?2014?-?[info]?This?slave(SLAVE2.COM)'s?Exec_Master_Log_Pos?equals?to?Read_Master_Log_Pos(mysql-bin.000001:214).?No?need?to?recover?from?Exec_Master_Log_Pos.
Wed?Jul??9?18:56:51?2014?-?[info]?Connecting?to?the?target?slave?host?SLAVE2.COM,?running?recover?script..
Wed?Jul??9?18:56:51?2014?-?[info]?Executing?command:?apply_diff_relay_logs?--command=apply?--slave_user=mha_mon?--slave_host=SLAVE2.COM?--slave_ip=192.168.186.146??--slave_port=3306?--apply_files=/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?--workdir=/var/tmp?--target_version=5.6.10-log?--timestamp=20140709185647?--handle_raw_binlog=1?--disable_log_bin=0?--manager_version=0.53?--slave_pass=xxx
Wed?Jul??9?18:56:51?2014?-?[info]?
MySQL?client?version?is?5.6.10.?Using?--binary-mode.
Applying?differential?binary/relay?log?files?/var/tmp/saved_master_binlog_from_192.168.186.141_3306_20140709185647.binlog?on?SLAVE2.COM:3306.?This?may?take?long?time...
Applying?log?files?succeeded.
Wed?Jul??9?18:56:51?2014?-?[info]??All?relay?logs?were?successfully?applied.
Wed?Jul??9?18:56:51?2014?-?[info]??Resetting?slave?SLAVE2.COM(192.168.186.146:3306)?and?starting?replication?from?the?new?master?192.168.186.142(192.168.186.142:3306)..
Wed?Jul??9?18:56:51?2014?-?[info]??Executed?CHANGE?MASTER.
Wed?Jul??9?18:56:51?2014?-?[info]??Slave?started.
Wed?Jul??9?18:56:51?2014?-?[info]?End?of?log?messages?from?SLAVE2.COM.
Wed?Jul??9?18:56:51?2014?-?[info]?--?Slave?recovery?on?host?SLAVE2.COM(192.168.186.146:3306)?succeeded.
Wed?Jul??9?18:56:51?2014?-?[info]?All?new?slave?servers?recovered?successfully.
Wed?Jul??9?18:56:51?2014?-?[info]?
Wed?Jul??9?18:56:51?2014?-?[info]?*?Phase?5:?New?master?cleanup?phease..
Wed?Jul??9?18:56:51?2014?-?[info]?
Wed?Jul??9?18:56:51?2014?-?[info]?Resetting?slave?info?on?the?new?master..
Wed?Jul??9?18:56:51?2014?-?[info]??192.168.186.142:?Resetting?slave?info?succeeded.
Wed?Jul??9?18:56:51?2014?-?[info]?Master?failover?to?192.168.186.142(192.168.186.142:3306)?completed?successfully.
Wed?Jul??9?18:56:51?2014?-?[info]?-----?Failover?Report?-----app1:?MySQL?Master?failover?192.168.186.141?to?192.168.186.142?succeededMaster?192.168.186.141?is?down!Check?MHA?Manager?logs?at?MANAGER.COM:/masterha/app1/manager.log?for?details.Started?automated(non-interactive)?failover.
The?latest?slave?192.168.186.142(192.168.186.142:3306)?has?all?relay?logs?for?recovery.
Selected?192.168.186.142?as?a?new?master.
192.168.186.142:?OK:?Applying?all?logs?succeeded.
SLAVE2.COM:?This?host?has?the?latest?relay?log?events.
Generating?relay?diff?files?from?the?latest?slave?succeeded.
SLAVE2.COM:?OK:?Applying?all?logs?succeeded.?Slave?started,?replicating?from?192.168.186.142.
192.168.186.142:?Resetting?slave?info?succeeded.
192.168.186.142:?Resetting?slave?info?succeeded.
看到192.168.186.142:?Resetting?slave?info?succeeded.
Master?failover?to?192.168.186.142(192.168.186.142:3306)?completed?successfully.??說明切換成功了
[root@slave2?~]#?mysql?-e?"show?slave?status\G"
***************************?1.?row?***************************Slave_IO_State:?Waiting?for?master?to?send?eventMaster_Host:?192.168.186.142Master_User:?replMaster_Port:?3306Connect_Retry:?60Master_Log_File:?mysql-bin.000007Read_Master_Log_Pos:?504Relay_Log_File:?slave2-relay-bin.000002Relay_Log_Pos:?283Relay_Master_Log_File:?mysql-bin.000007Slave_IO_Running:?YesSlave_SQL_Running:?Yes
看到已經切換到和142同步了?本來是和141同步的?此時的SALVE1.COM已經變成主了?說明已然生效
2.重構
?
重構我想就不要我做了吧,就是這時候等于你的主掛了?切換在SLAVE1.COM?上變成了主?因此重構我提供一種方案(方案多種),拿出一臺新的服務器重新加入以142為主做成從?再app1.conf配置文件中加入?
[root@MANAGER?app1]#?rm?-rf?app1.failover.complete
刪除該文件后?再次啟動manager端即可
五.擴展Keepalived
1.安裝keepalived
[root@MYSQL?src]#?wget?http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
[root@MYSQL?src]#?tar?-xf?keepalived-1.2.12.tar.gz?
[root@MYSQL?src]#?cd?keepalived-1.2.12
[root@MYSQL?src]#?yum?-y?install?gcc?gcc-c++?gcc-g77?ncurses-devel?bison?libaio-devel?cmake?libnl*?libpopt*?popt-static?openssl-devel
[root@MYSQL?keepalived-1.2.12]#?./configure
[root@MYSQL?keepalived-1.2.12]#?make?&&?make?install
[root@MYSQL?src]#mkdir?/etc/keepalived/[root@MYSQL?src]#?cp?/usr/local/etc/keepalived/keepalived.conf?/etc/keepalived/
[root@MYSQL?src]#??cp?/usr/local/etc/rc.d/init.d/keepalived?/etc/init.d/
[root@MYSQL?src]#?cp?/usr/local/etc/sysconfig/keepalived?/etc/sysconfig/
[root@MYSQL?src]#cp?/usr/local/sbin/keepalived?/usr/sbin/
2.配置keepalived
[root@MYSQL?keepalived]#?vi?keepalived.conf?
!?Configuration?File?for?keepalivedglobal_defs?{notification_email?{acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from?Alexandre.Cassen@firewall.locsmtp_server?192.168.200.1smtp_connect_timeout?30router_id?LVS_DEVEL???????????##配置是為了標識當前節點,兩個節點的此項設置可相同,也可不相同
}vrrp_instance?VI_1?{state?MASTER??????????????????#指定A節點為主節點?備用節點上設置為BACKUP即可interface?eth0virtual_router_id?51?????????????#VRRP組名,兩個節點的設置必須一樣,以指明各個節點屬于同一VRRPpriority?100??????#主節點的優先級(1-254之間),備用節點必須比主節點優先級低????????????????advert_int?1authentication?{??????????#設置驗證信息,兩個節點必須一致auth_type?PASS???????????auth_pass?1111}
virtual_ipaddress?{
192.168.200.16}
}
3.檢測mysql服務腳本
[root@MYSQL?keepalived]#?vi?/root/check_mysql.sh?
#!/bin/bash
MYSQL=/usr/local/mysql/bin/mysql
MYSQL_HOST=127.0.0.1
MYSQL_USER=root
MYSQL_PASSWORD=123
CHECK_TIME=3
#mysql??is?working?MYSQL_OK?is?1?,?mysql?down?MYSQL_OK?is?0
MYSQL_OK=1
function?check_mysql_helth?(){
$MYSQL?-h?$MYSQL_HOST?-u?$MYSQL_USER?-e?"show?status;"?>/dev/null?2>&1
if?[?$??=?0?]?;thenMYSQL_OK=1
elseMYSQL_OK=0
fireturn?$MYSQL_OK
}
while?[?$CHECK_TIME?-ne?0?]
dolet?"CHECK_TIME?-=?1"check_mysql_helth
if?[?$MYSQL_OK?=?1?]?;?thenCHECK_TIME=0exit?0
fi
if?[?$MYSQL_OK?-eq?0?]?&&??[?$CHECK_TIME?-eq?0?]
thenpkill?keepalived
exit?1
fi
sleep?1
Done
該腳本做一個計劃任務每分鐘做一次檢查MYSQL?服務如果掛掉了的話?VIP?就會在SALVE1.COM?上生效?這樣的話?client?端連接的VIP?就會從MYSQL.COM?上變到了SLAVE1.COM?上??此時SLAVE1.COM?由于MHA的生效?已經變為主對外提供服務了?VIP?也在SALVE1.COM上?所以從頭到尾?客戶端只需要連接VIP?就可以了
[root@MYSQL?keepalived]#?yum?-y?install?cronie
[root@MYSQL?~]#?crontab??-l
*/1?*?*?*?*?bash?/root/checkmysql.sh
以上步驟再在下一次切換的SLAVE上做一次也就是SLAVE1.COM上做一次?keepalived.conf配置文件不同的地方已做注釋
4.啟動測試
兩邊啟動keepalived
[root@MYSQL?keepalived]#?keepalived?-f?/etc/keepalived/keepalived.conf
[root@MYSQL?keepalived]#?ps?-ef?|grep?keep
root??????3230?????1??0?23:27??????????00:00:00?keepalived?-f?/etc/keepalived/keepalived.conf
root??????3231??3230??0?23:27??????????00:00:00?keepalived?-f?/etc/keepalived/keepalived.conf
root??????3232??3230??0?23:27??????????00:00:00?keepalived?-f?/etc/keepalived/keepalived.conf
root??????3234??2538??0?23:27?pts/0????00:00:00?grep?keep[root@MYSQL?keepalived]#?ip?a
1:?lo:?<LOOPBACK,UP,LOWER_UP>?mtu?16436?qdisc?noqueue?state?UNKNOWN?link/loopback?00:00:00:00:00:00?brd?00:00:00:00:00:00inet?127.0.0.1/8?scope?host?loinet6?::1/128?scope?host?valid_lft?forever?preferred_lft?forever
2:?eth0:?<BROADCAST,MULTICAST,UP,LOWER_UP>?mtu?1500?qdisc?pfifo_fast?state?UP?qlen?1000link/ether?00:0c:29:c9:85:ba?brd?ff:ff:ff:ff:ff:ffinet?192.168.186.141/24?brd?192.168.186.255?scope?global?eth0inet?192.168.200.16/32?scope?global?eth0inet6?fe80::20c:29ff:fec9:85ba/64?scope?link?valid_lft?forever?preferred_lft?forever
測試關閉該主機的MYSQL?服務看看VIP?是否飄到配好keepalive的SLAVE1.COM上?MHA中的MYSQL?主是不是也變成了SLAVE1.COM
如是?至此全部完成。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。謝謝!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
mha日常維護命令
1.查看ssh登陸是否成功
masterha_check_ssh?--conf=/etc/masterha/app1.cnf
2.查看復制是否建立好
masterha_check_repl?--conf=/etc/masterha/app1.cnf
3.啟動mha
nohup?masterha_manager?--conf=/etc/masterha/app1.cnf?>?/tmp/mha_manager.log??<?/dev/null?2>&1?&?
當有slave節點宕掉的情況是啟動不了的,加上--ignore_fail_on_start即使有節點宕掉也能啟動mha
nohup?masterha_manager?--conf=/etc/masterha/app1.cnf??--ignore_fail_on_start?>?/tmp/mha_manager.log??<?/dev/null?2>&1?&?
4.檢查啟動的狀態
masterha_check_status?--conf=/etc/masterha/app1.cnf
5.停止mha
masterha_stop??--conf=/etc/masterha/app1.cnf
6.failover后下次重啟
每次failover切換后會在管理目錄生成文件app1.failover.complete?,下次在切換的時候會發現有這個文件導致切換不成功,需要手動清理掉。
rm?-rf?/masterha/app1/app1.failover.complete
也可以加上參數--ignore_last_failover
7.手工failover
手工failover場景,master死掉,但是masterha_manager沒有開啟,可以通過手工failover:
masterha_master_switch?--conf=/etc/masterha/app1.cnf?--dead_master_host=10.50.2.10?--master_state=dead?--new_master_host=10.50.2.12?--ignore_last_failover
8.masterha_manager是一種監視和故障轉移的程序。另一方面,masterha_master_switch程序不監控主庫。?masterha_master_switch可以用于主庫故障轉移,也可用于在線總開關。
9.手動在線切換
masterha_master_switch?--conf=/etc/app1.cnf?--master_state=alive?--new_master_host=192.168.119.74?--orig_master_is_new_slave
或者
masterha_master_switch?--conf=/etc/app1.cnf?--master_state=alive?--new_master_host=192.168.119.74?--orig_master_is_new_slave?--running_updates_limit=10000
--orig_master_is_new_slave切換時加上此參數是將原master變為slave節點,如果不加此參數,原來的master將不啟動
--running_updates_limit=10000?切換時候選master如果有延遲的話,mha切換不能成功,加上此參數表示延遲在此時間范圍內都可切換(單位為s),但是切換的時間長短是由recover時relay日志的大小決定
手動在線切換mha,切換時需要將在運行的mha停掉后才能切換。
在備庫先執行DDL,一般先stop?slave,一般不記錄mysql日志,可以通過set?SQL_LOG_BIN?=?0實現。然后進行一次主備切換操作,再在原來的主庫上執行DDL。這種方法適用于增減索引,如果是增加字段就需要額外注意。
可以通過如下命令停止mha
masterha_stop?--conf=/etc/app1.cnf
?
轉載于:https://blog.51cto.com/zuoyuezong/1439579
總結
以上是生活随笔為你收集整理的源代码编译MYSQL5.6 环境下的MHA+KEEPALIVED的安装和维护的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。