mha+keepalived安裝配置過程
一、MHA的簡單介紹
MHA是由perl語言編寫的,用外掛腳本的方式實現mysql主從復制的高可用性。MHA可以自動檢測mysql是否宕機,如果宕機,在 10-30s內完成new master的選舉,應用所有差異的binlog日志到所有slave,將所有的slave切換到新的master上來。
MHA除了自動檢測mysql是否宕機,還能夠交互式的切換master,在日常的數據庫維護中,這個功能還是挺有用的。
由于MHA本身只負責數據庫主從的切換,但是應用程序并不知道數據庫的master變了。針對這種情況,可以使用MHA預留的幾個腳本接口,通過虛擬IP或者修改全局配置文件的方法通知應用程序,master數據庫已經改變。
MHA還是一個很活躍的項目,生產環境的使用者眾多,不乏大公司,MHA的版本也很快,MHA作者在持續更新版本,最新版本已經支持GTID了。
二、MHA的原理
MHA的架構如下:
Mysql master1(MHA manger,MHA node)
|
____|____
| |
Mysql slave1(node) Mysql slave2(node)
首先介紹一下架構,上面這個圖很挫,大家見諒哈,看下面文字。
MHA只支持兩層的mysql復制架構,如上圖,Mysql slave1下面還有slave的話,那么下面的slave屬于第三層了,MHA是沒法控制的。
在每個mysql的服務器上,都需要安裝一個MHA的node節點。
全局一個MHA manger,manger節點需要通過配置文件中的賬號訪問到每個節點的Mysql,和ssh(非交互式)到每個節點的操作系統。所以這里就需要通過ssh key來完成。
MHA manage節點包含這幾個程序:
masterha_manager (監控master,如果master down,自動完成failover)
masterha_master_switch (手動或者交互的完成failover或者master切換)
masterha_master_switch –conf=/etc/app1.cnf –master_state=dead –dead_master_host=192.168.153.150
masterha_master_switch –conf=/etc/app1.cnf –master_state=alive –new_master_host=192.168.153.151
masterha_check_status(檢查masterha_manager是否運行)
masterha_check_repl(檢查master復制環境是否正確)
masterha_stop(停止MHA)
masterha_conf_host
masterha_ssh_check (檢查通過ssh是否可以登錄對應的node節點)
purge_relay_logs (刪除無用的relay log,避免延時)
masterha_secondary_check(通過其他路由去檢測master是否真的掛了)
masterha_secondary_check -s 192.168.153.151 -s 192.168.153.152 –user=root –master_host=localhost –master_ip=192.168.153.150 –master_port=3306
Master is reachable from 192.168.153.151!
MHA node節點包含著四個程序:
save_binary_logs(保存和復制當掉的主服務器二進制日志)
apply_diff_relay_logs(識別差異的relay log事件,并應用于其他salve服務器)
purge_relay_logs(清除relay log文件)
filter_mysqlbinlog(這個腳本現在已經廢棄了)
需要在所有mysql服務器上安裝MHA節點,MHA管理服務器也需要安裝。MHA管理節點模塊內部依賴MHA節點模塊。MHA管理節點通過ssh連接管理mysql服務器和執行MHA節點腳本。
MHA的failover流程:
#啟動前的準備工作
檢查數據庫服務器狀態,獲取相關參數設置
測試ssh連接是否成功
測試MHA node是否可用
創建MHA日志目錄
開始檢查slave的差異日志應用權限
確定當前的復制架構
調試master_ip_failover_script
調試shutdown_script
設置二次檢查的主機masterha_secondary_check
MHA啟動完畢,進入監測狀態
監測DB1服務器掛了
通過定義的二次監測,確認master是否掛了
確認master掛了,開始進入failover流程
再試嘗試連接master和master的ssh
通過MHA配置文件,監測其他slave的狀態
再次監測slave的配置是否有變化,是否符合failover條件
正式開始failover
再次對slave配置做檢查
對原Master做master_ip_failover_script和shutdown_script的操作
開始差異日志的恢復:獲取slave最后得到的binlog位置
獲取原master的binlog日志
確定新的master
在new master上應用差異的binlog日志
獲取new master的binlog位置。
如果有master_ip_failover_script,那么給new master設置VIP
開始恢復其他slave,也是從原master的binlog對比來做恢復
差異日志應用完成以后,切換所有slave到new master。
failover操作完成,生成failover報告</p>
三、安裝配置
環境設定:
主機 角色 IP 安裝軟件
db1 MASTER 192.168.153.150 mysql,mha manger,mha node,keepalived
db2 SLAVE1 192.168.153.151 mysql,mha node,keepalived(候選MASTER)
db3 SLAVE2 192.168.153.152 mysql,mha node
VIP(virtual ip):192.168.153.100
大概的安裝流程:
1、關閉selinux和iptables
2、安裝開發庫和基礎庫,以及相關的開發工具,perl庫
3、配置ssh的公匙,免密碼登錄
4、安裝配置mysql數據庫,并且授權
5、安裝mha node
6、安裝mha manager
7、修改mha配置文件
8、測試mha切換
9、安裝,配置,測試keepalived
10、將mha和keepalived結合,加上相關腳本,聯合調試。
1、cat /etc/sysconfig/selinux
設置SELINUX=disabled
2、
iptables -F INPUT
service iptables save
iptables -xvnL //查看沒有任何規則為準,如果你真需要iptables規則,建議再安裝調試玩MHA以后,在設置規則,再調試一次規則是否對MHA有影響。</p>
3、配置ssh key免密碼登錄.
db1:
ssh-keygen -t rsa //一路回車
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.150
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.151
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.152</p>
db2:
ssh-keygen -t rsa //一路回車
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.150
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.152</p>
db2:
ssh-keygen -t rsa //一路回車
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.150
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.153.151</p>
4、安裝mysql數據庫,并授權
所有機器上安裝mysql server,修改配置文件,完成三臺機器主從復制的搭建,由于這塊描述起來挺多的,大家可以參考我寫的安裝mysql-mmm的資料.
《mysql-mmm安裝手冊》http://isadba.com/?p=142
5、安裝mha node,所有機器上都需要安裝
在https://code.google.com/p/mysql-master-ha/下載最新的rpm包或者源碼包安裝,我使用的rpm包,如果包缺乏依賴關系,使用yum安裝對應的包就可以。
rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm</p>
6、在db1上安裝MHA manager軟件。
開始我也嘗試用rpm包安裝,但是遇見兩個兼容行問題,我的yum庫沒有對應的包,使用CPAN安裝以后,rpm包不能識別,轉而使用了源碼編譯.總的來說MHA的軟件包還是比較好安裝的。
tar -zxvf mha4mysql-manager-0.55.tar.gz
cd mha4mysql-manager-0.55
ls
perl Makefile.PL
make install</p>
7、修改配置文件,配置文件只需要mha_manager機器上存在就行了.
默認的配置文件模板在源碼包里面有,具體位置如下.
/root/soft/mha4mysql-manager-0.55/samples/conf,有app1.cnf和masterha_default.cnf兩個配置文件。masterha_manager會同時讀取這兩個配置文件。
app1.cnf主要是存放node節點的配置,masterha_default.cnf主要存放服務器端的配置.但是通常的處理方式是不用masterha_default.cnf,而是把這個文件里面的配置寫入到app1.cnf里面。
我的app1.cnf配置如下:
# cat /etc/app1.cnf [server default] user=mha //mha用來獲取數據庫一些配置和狀態的用戶 password=mha ssh_user=root //ssh key的用戶 repl_user=slave //mysql復制使用的賬號和密碼 repl_password=slave manager_workdir=/var/log/masterha/app1 //mha狀態和日志,差異日志保存的目錄 manager_log=/var/log/masterha/app1/manager.log //mha日志 remote_workdir=/var/log/masterha/app1 //node節點的工作目錄 secondary_check_script="masterha_secondary_check -s 192.168.153.151 -s 192.168.153.152" //二次檢查的配置.意思是manager將連接到192.168.153.151和152的系統上,測試master是否可用,避免腦裂問題. //下面幾個腳本控制稍后來講,我們現在先不啟用他們。master_ip_failover_script="/opt/master_ip_failover.sh" //failover的控制Vip的腳本
master_ip_online_change_script="" //交互式出發的在線切換時調用的腳本
shutdown_script="/opt/master_ip_failover.sh" //關機腳本
report_script="" //通知腳本
//下面是每個node節點的單獨配置 [server1] hostname=192.168.153.150 candidate_master=1
[server2] hostname=192.168.153.151 candidate_master=1
[server3] hostname=192.168.153.152 no_master=1</pre>
8、測試mha
首先兩個小測試:
#測試ssh key是否可用
# masterha_check_ssh --conf=/etc/app1.cnf Sun Sep 28 14:39:57 2014 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Sun Sep 28 14:39:57 2014 - [info] Reading application default configurations from /etc/app1.cnf.. Sun Sep 28 14:39:57 2014 - [info] Reading server configurations from /etc/app1.cnf.. Sun Sep 28 14:39:57 2014 - [info] Starting SSH connection tests.. Sun Sep 28 14:40:02 2014 - [debug] Sun Sep 28 14:39:58 2014 - [debug] Connecting via SSH from root@192.168.153.150(192.168.153.150:22) to root@192.168.153.151(192.168.153.151:22).. Sun Sep 28 14:40:01 2014 - [debug] ok. Sun Sep 28 14:40:01 2014 - [debug] Connecting via SSH from root@192.168.153.150(192.168.153.150:22) to root@192.168.153.152(192.168.153.152:22).. Sun Sep 28 14:40:02 2014 - [debug] ok. Sun Sep 28 14:40:02 2014 - [debug] Sun Sep 28 14:39:58 2014 - [debug] Connecting via SSH from root@192.168.153.151(192.168.153.151:22) to root@192.168.153.150(192.168.153.150:22).. Sun Sep 28 14:40:01 2014 - [debug] ok. Sun Sep 28 14:40:01 2014 - [debug] Connecting via SSH from root@192.168.153.151(192.168.153.151:22) to root@192.168.153.152(192.168.153.152:22).. Sun Sep 28 14:40:02 2014 - [debug] ok. Sun Sep 28 14:40:03 2014 - [debug] Sun Sep 28 14:39:59 2014 - [debug] Connecting via SSH from root@192.168.153.152(192.168.153.152:22) to root@192.168.153.150(192.168.153.150:22).. Sun Sep 28 14:40:02 2014 - [debug] ok. Sun Sep 28 14:40:02 2014 - [debug] Connecting via SSH from root@192.168.153.152(192.168.153.152:22) to root@192.168.153.151(192.168.153.151:22).. Sun Sep 28 14:40:03 2014 - [debug] ok. Sun Sep 28 14:40:03 2014 - [info] All SSH connection tests passed successfully.測試復制環境
# masterha_check_repl --conf=/etc/app1.cnf Sun Sep 28 14:40:43 2014 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Sun Sep 28 14:40:43 2014 - [info] Reading application default configurations from /etc/app1.cnf.. Sun Sep 28 14:40:43 2014 - [info] Reading server configurations from /etc/app1.cnf.. Sun Sep 28 14:40:43 2014 - [info] MHA::MasterMonitor version 0.55. Sun Sep 28 14:40:53 2014 - [info] Checking replication health on 192.168.153.151..省略若干行.............................. Sun Sep 28 14:40:53 2014 - [info] ok. Sun Sep 28 14:40:53 2014 - [info] Checking replication health on 192.168.153.152.. Sun Sep 28 14:40:53 2014 - [info] ok. Sun Sep 28 14:40:53 2014 - [warning] master_ip_failover_script is not defined. Sun Sep 28 14:40:53 2014 - [info] Checking shutdown script status: Sun Sep 28 14:40:53 2014 - [info] /opt/master_ip_failover.sh --command=status --ssh_user=root --host=192.168.153.150 --ip=192.168.153.150 Sun Sep 28 14:40:53 2014 - [info] OK. Sun Sep 28 14:40:53 2014 - [info] Got exit code 0 (Not master dead).</pre>
如果以上兩個測試都通過,看來環境和配置基本OK,我們來啟動MHA
# masterha_manager --conf=/etc/app1.cnf Sun Sep 28 14:42:43 2014 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping. Sun Sep 28 14:42:43 2014 - [info] Reading application default configurations from /etc/app1.cnf.. Sun Sep 28 14:42:43 2014 - [info] Reading server configurations from /etc/app1.cnf..進程在切換觸發以后會自動關掉.這個命令建議放到screen里面跑。
現在可以去# cd /var/log/masterha/app1/看看生成的日志
如果沒有什么很嚴重的錯誤信息,那么就可以準備嘗試failover了。#開始failover
關閉master的mysql服務,觀察db02和db03的復制變化情況。service mysql stop
Shutting down MySQL (Percona Server)….. SUCCESS!
查看/var/log/masterha/app1/manager.log的日志.如果看見如下信息,那么就是failover成功了。</p>----- Failover Report -----app1: MySQL Master failover 192.168.153.150 to 192.168.153.151 succeeded
Master 192.168.153.150 is down!
Check MHA Manager logs at localhost.localdomain:/var/log/masterha/app1/manager.log for details.
Started automated(non-interactive) failover. The latest slave 192.168.153.151(192.168.153.151:3306) has all relay logs for recovery. Selected 192.168.153.151 as a new master. 192.168.153.151: OK: Applying all logs succeeded. 192.168.153.152: This host has the latest relay log events. Generating relay diff files from the latest slave succeeded. 192.168.153.152: OK: Applying all logs succeeded. Slave started, replicating from 192.168.153.151. 192.168.153.151: Resetting slave info succeeded. Master failover to 192.168.153.151(192.168.153.151:3306) completed successfully.</pre>
接下來觀察一下db2和db3的復制情況:
db2:(root:hostname)[(none)]> show slave status\G Empty set (0.00 sec)db3:
(root:hostname)[(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.153.151 Master_User: slave Master_Port: 3306 Connect_Retry: 10 Master_Log_File: mysql-bin.000016 Read_Master_Log_Pos: 688 Relay_Log_File: mysql-relay.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000016 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 688 Relay_Log_Space: 452 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 151 Master_UUID: dd079e18-4244-11e4-b851-000c29da163e Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)9、安裝測試keepalived,在db1和db2上安裝keepalived。
關于keepalvied的信息,可以閱讀《LVS+Keepalived使用總結》http://isadba.com/?p=67
或者搜索《keepalived權威指南》
下載keepalived的軟件包http://www.keepalived.org/download.html 下載最新的tar.gz包。yum install kernel-devel
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.29.2.el6.x86_64/
make && make install</pre>
安裝完成后,修改配置文件,下面是db1上面的配置文件,db2的話,將優先級改低50就可以了。
# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL }
vrrp_instance VI_1 { state MASTER interface eth0 //keepalived使用的網口 virtual_router_id 51 priority 150 //優先級越高,優先獲取虛擬IP advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.153.100 //虛擬IP } }</pre>
測試keepalived是否正常工作.
db1#service keepalived restart db2#service keepalived restartdb1#ip add 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:da:16:3d brd ff:ff:ff:ff:ff:ff inet 192.168.153.150/24 brd 192.168.153.255 scope global eth0 inet 192.168.153.100/32 scope global eth0 inet6 fe80::20c:29ff:feda:163d/64 scope link valid_lft forever preferred_lft forever</pre>
現在關掉db1的keepalived的進程:
db1# killall keepalived db1#ip add 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:da:16:3d brd ff:ff:ff:ff:ff:ff inet 192.168.153.150/24 brd 192.168.153.255 scope global eth0 inet6 fe80::20c:29ff:feda:163d/64 scope link valid_lft forever preferred_lft foreverdb2# ip add 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:da:16:3e brd ff:ff:ff:ff:ff:ff inet 192.168.153.151/24 brd 192.168.153.255 scope global eth0 inet 192.168.153.100/32 scope global eth0 inet6 fe80::20c:29ff:feda:163e/64 scope link valid_lft forever preferred_lft forever</pre>
大家可以發現,虛擬IP瞬間已經漂移到了db2上面.調試信息可以在/var/log/messages 中看見。
我們使用keepalived的目的就是在MHA檢測到master掛掉的時候,調用shutdown_script關掉keepalived進程,從而是虛擬IP移動到新的master上面去。
9、聯合MHA和keepalived調試.
在調試之前,我們需要搞清楚一些事情.那就是關于上面我們注釋掉的幾個script,他們是干什么的,在什么時候調用.
master_ip_failover_script:</p>
首先啟動的時候會調用這個腳本
/opt/master_ip_failover_script.sh –command=status –ssh_user=root –orig_master_host=192.168.153.150 –orig_master_ip=192.168.153.150 –orig_master_port=3306然后在正式failover過程中的第二步,Dead Master Shutdown Phase階段會在次執行。
/opt/master_ip_failover_script.sh –orig_master_host=192.168.153.150 –orig_master_ip=192.168.153.150 –orig_master_port=3306 –command=stopssh –ssh_user=root在正式failover過程中的第3.4步驟中(選舉新的master以后,應用差異的binlog后),會再次執行。
/opt/master_ip_failover_script.sh –command=start –ssh_user=root –orig_master_host=192.168.153.150 –orig_master_ip=192.168.153.150 –orig_master_port=3306 –new_master_host=192.168.153.151 –new_master_ip=192.168.153.151 –new_master_port=3306 –new_master_user=’mha’ –new_master_password=’mha’#master_ip_online_change_script:
在使用masterha_master_switch –conf=/etc/app1.cnf –master_state=alive –new_master_host=192.168.153.151主動切換mysql master的時候會調用.
在online切換的第二階段,拒絕寫入原master的時候執行。
/opt/master_ip_online_change_script.sh –command=stop –orig_master_host=192.168.153.150 –orig_master_ip=192.168.153.150 –orig_master_port=3306 –orig_master_user=’mha’ –orig_master_password=’mha’ –new_master_host=192.168.153.151 –new_master_ip=192.168.153.151 –new_master_port=3306 –new_master_user=’mha’ –new_master_password=’mha’然后會在new master上執行
/opt/master_ip_online_change_script.sh –command=start –orig_master_host=192.168.153.150 –orig_master_ip=192.168.153.150 –orig_master_port=3306 –orig_master_user=’mha’ –orig_master_password=’mha’ –new_master_host=192.168.153.151 –new_master_ip=192.168.153.151 –new_master_port=3306 –new_master_user=’mha’ –new_master_password=’mha’#shutdown_script:
首先啟動的時候會執行這個腳本,執行時間緊跟著master_ip_failover_script第一次執行后面
/opt/shutdown_script.sh –command=status –ssh_user=root –host=192.168.153.150 –ip=192.168.153.150第二次執行是在master_ip_failover_script第二次執行后面
/opt/shutdown_script.sh –command=stopssh –ssh_user=root –host=192.168.153.150 –ip=192.168.153.150 –port=3306#report_script=”” //通知腳本
在masterha_manager自動切換完成的最后會調用一次這個腳本。
report_script.sh –orig_master_host=(dead master’s hostname) –new_master_host=(new master’s hostname) –new_slave_hosts=(new slaves’ hostnames, delimited by commas) –subject=(mail subject) –body=(body)在mha4mysql-manager源碼包的samples/scripts/目錄,會有幾個示例的腳本.是perl編寫的,我不太懂perl啦.如果有一樣像我這樣不太懂perl的同學,可以根據上面的調用參數,使用shell或者python從新實現一次。
自己在從新實現這些腳本的時候,有兩點注意:
1、盡量符合調用的參數,讓腳本更人性化
2、腳本的返回值需要是0或者10,不然會認為腳本執行錯誤,后面的操作將不再繼續執行,failover操作將會停止。我們現在需要自己寫一個shutdown_script的腳本,內容就是檢測master上的mysql是否真的掛掉了,如果真的掛掉了,那么就殺掉master上面的keepalived進程,觸發VIP的漂移。
修改app.cnf中被注釋掉的shutdown_script,指定到對應的腳本.我的shutdow_script.sh腳本在文章末尾公布,其實最簡單的shutdown_script只需要干兩個事情,一檢查mysql是否當掉,二如果當掉就killall keepalived。下面我們開始聯合調試.
檢查三臺mysql的復制情況
master和備用master開啟keepalived監聽,檢查虛擬ip是否在master上面。
啟動mha_manager
關閉master mysql
檢查slave的復制情況以及VIP漂移情況.TIPS:有兩個數據安全方面可以需要優化的地方
1、設置所有slave的read_only=on
如果設置了這個參數,就需要使用master_ip_failover_script和master_ip_online_change_script參數,在新master初始化的時候設置成read_only=off.這個設置的主要目的是避免master的os宕機時,keepalived的VIP 比MHA先切換到new master.
2、設置所有的slave的relay_log_purge=0
設置這個參數以后,已完成的relay log就不會自動的purge掉.這個設置的主要目的是為了避免在failover的3.3和4.1階段,diff log需要某個slave的已經完成的relay log存在.使用這個參數以后,會產生一個問題,
那就是relay log會越來越來,并且清理relay log的時候可能會導致復制阻塞.所以MHA的node提供了一個腳本purge_relay_logs來完成無阻塞的清理relay log.
我們需要在slave加上一個計劃任務.
[app@slave_host1]$ cat /etc/cron.d/purge_relay_logspurge relay logs at 5am
0 5 * app /usr/bin/purge_relay_logs –user=root –password=PASSWORD –disable_relay_log_purge >> /var/log/masterha/purge_relay_logs.log 2>&1</p>
下面是我的shutdown_script腳本,這個腳本主要使用的是stopssh方法,stop方法一般沒有調用,如果你有需要,自己在稍微修改一下.
shutdown_script.sh:[root@localhost opt]# cat shutdown_script.sh!/bin/bash
masterha shutdown_script.
version: 2013-11-06 frist version
#
by andy.feng
copy right
LANG=C for i in $@ do if [ ${i:2:2} = "ip" ] then IP=${i:5:20} elif [ ${i:2:7} = "command" ] then CMD=${i:10:20} elif [ ${i:2:4} = "port" ] then MYSQL_PORT=${i:7:20} fi done USER="mha" PASSWORD="mha" function stopssh { mysql -s -u$USER -p$PASSWORD -h$IP -P$MYSQL_PORT -e 'select count(*) as c from mysql.user;' &> /dev/null if [ $? -ne 0 ] then ssh $IP 'killall keepalived' if [ $? != 0 ] then echo "$IP killall keepalived fail....." return 1 fi return 0 fi }
function stop { mysql -s -u$USER -p$PASSWORD -h$IP -P$MYSQL_PORT -e 'select count(*) as c from mysql.user;' &> /dev/null if [ $? -ne 0 ] then ssh $IP 'shutdown -h now' if [ $? != 0 ] then echo "$IP shutdown fail....." return 1 fi return 0 fi }
if [ $CMD = 'stopssh' ] then stopssh fi</pre>來源:isadba