第一部分:mha日常管理
1.查看ssh登陸是否成功
masterha_check_ssh --conf=/app/mha/mha.cnf
2.查看復(fù)制是否建立好
masterha_check_repl --conf=/app/mha/mha.cnf
3.啟動mha
nohup masterha_manager --conf=/app/mha/mha.cnf > /app/mha/log/mha_manager.log 2>&1 &
(1)當有slave節(jié)點宕掉的情況,manager是無法啟動的,
如果在配置文件中設(shè)置ignore_fail=1 ,就可以加上--ignore_fail_on_start ,這時候即使有節(jié)點宕掉也能啟動mha manager。如下:
nohup masterha_manager --conf=/app/mha/mha.cnf --ignore_fail_on_start> /app/mha/log/mha_manager.log 2>&1 &
4.檢查啟動的狀態(tài)
masterha_check_status --conf=/app/mha/mha.cnf
5.停止mha
masterha_stop --conf=/app/mha/mha.cnf
6.failover切換
(1)在failover后,下次重啟mha manager
每次failover 切換后會在管理目錄生成文件app1.failover.complete ,下次在切換的時候會發(fā)現(xiàn)有這個文件導(dǎo)致切換不成功,需要手動清理掉。
rm -rf /masterha/app1/app1.failover.complete
但是,也可以加上參數(shù)--ignore_last_failover 來啟動mha manager
(2)參數(shù)last_failover_minute=(minutes)
? ? 當最近的一個failover 切換發(fā)生在last_failover_minute(默認為8小時) 之內(nèi),MHA manager 將不會在切換。因為它會認為有些問題沒有得到解決。如果設(shè)置了 --ignore_last_failover 參數(shù),參數(shù)(--last_failover_minute) 將會失效
(3)參數(shù)ignore_last_failover
? ? 如果最近failover 失敗,MHA 將不會再次開始failover機制,因為這個問題可能再次發(fā)生。常規(guī)步驟:手動清理failover 錯誤文件,此文件一般在manager_workdir/app_name.failover.error文件,然后在啟動failover機制。如果設(shè)置此參數(shù),MHA 將會繼續(xù)failover 不管上次的failover狀態(tài)
(4)參數(shù)wait_on_failover_error=(seconds)
? ? 在failover的過程,當發(fā)出錯誤了,masterha_manager 等待 wait_no_failover_error 的時間后,退出。如果設(shè)置為了0,直接退出。這個好處,是當后臺運行master monitor 和 failover scripts的時候,masterha_manager 可以在 wait_no_failover_error 時間到達之前重啟監(jiān)控
--remove_dead_master_conf
? ? 如果設(shè)置此參數(shù),當成功failover后,MHA manager將會自動刪除配置文件中關(guān)于dead master的配置選項。
7.手工failover注意事項
手工failover場景,master死掉,但是masterha_manager沒有開啟,這時候可以通過手工failover:
masterha_master_switch --conf=/app/mha/mha.cnf --dead_master_host=master? --master_state=dead --new_master_host=slave01 --ignore_last_failover
#注意:master重啟服務(wù)后,需要change master to (binlog文件及位置見手工切換的輸出日志)
8.masterha_manager是一種監(jiān)視和故障轉(zhuǎn)移的程序。但是另一方面,masterha_master_switch 程序不監(jiān)控主庫。? masterha_master_switch可以用于主庫故障轉(zhuǎn)移,也可用于在線總開關(guān)。
9.手動在線切換方法
(1)、masterha_master_switch --conf=/app/mha/mha.cnf? ? --master_state=alive? --new_master_host=master --orig_master_is_new_slave
或者
(2)、masterha_master_switch? --global_conf=/etc/masterha/masterha_default.conf --conf=/etc/masterha/app1.conf? ? --master_state=alive? --new_master_host=192.168.199.78 --orig_master_is_new_slave --running_updates_limit=10000
--orig_master_is_new_slave切換時加上此參數(shù)是將原master變?yōu)閟lave節(jié)點,如果不加此參數(shù),原來的master將不啟動
--running_updates_limit=10000 切換時候選master如果有延遲的話,mha切換不能成功,加上此參數(shù)表示延遲在此時間范圍內(nèi)都可切換(單位為s),但是切換的時間長短是由recover時relay日志的大小決定
注意:
(1)手動在線切換mha,切換時需要將在運行的mha停掉后才能切換。
(2)在備庫先執(zhí)行DDL,一般先stop slave,一般不記錄mysql日志,可以通過set SQL_LOG_BIN = 0實現(xiàn)。然后進行一次主備切換操作,再在原來的主庫上執(zhí)行DDL。這種方法適用于增減索引,如果是增加字段就需要額外注意。
Online master switch開始只有當所有下列條件得到滿足。
1.所有從庫的 IO線程正常運行。
2. 所有從庫的SQL線程正常運行。
3.? 所有從庫上slave參數(shù)Seconds_Behind_Master小于或者等于--running_updates_limit的時間
4.? 主庫上,沒有更新查詢操作多于running_updates_limit seconds? 在show processlist輸出結(jié)果上。
第二部分:配置文件部分參數(shù)說明
1、candidate_master
? ? 如果設(shè)置candidate_master的值為1,那么這個server會優(yōu)先成為master,但是前提是它需要滿足成為master的條件(binlog開啟的,沒有嚴重的復(fù)制延時等)
2、no_master
? ? 當設(shè)置了no_master=1的服務(wù)器,這個服務(wù)器永遠不會提升為新的master. 這個參數(shù)據(jù)對于永遠不期望成為master的機器很有用。
比如:在一些特定場景下,使用raid0的機器上設(shè)置no_master = 1;或者,是希望在遠程的idc里運行一個slave.
注意:當沒有可以成為新master的機器是MHA就直接退出來了同時停止監(jiān)控和master故障切換。
3、disable_log_bin
當設(shè)置了這個參數(shù),在slave應(yīng)用差異的relay log時不會產(chǎn)生二進制日志。 內(nèi)部實現(xiàn)通過mysqlbinlog的disable-log-bin實現(xiàn)。
4、check_repl_delay
? ? 在默認情況下,當一個slave同步延遲超過100M relay log(需要應(yīng)用超過100M relay log), MHA在做故障切換時不會選擇這個slave做為新的master,因為恢復(fù)需要經(jīng)過很長時間.當設(shè)置了check_repl_delay = 0, MHA將忽略被選擇的slave上的同步延遲?!∵@個選項在設(shè)置了candidate_master = 1特聲明的期望這臺機器成為master的情況下特別有用。
5、latest_priority
在默認情況下,和Master最接近的slave(一個slave從Master上獲得了最一個binlog事件)是最有優(yōu)先權(quán)成為新的master?!∪绻阆肟刂埔幌虑袚Q的策略(如: 先選擇host2,如果不行,選host3;host3不行,選host4…) 那么設(shè)置latest_priority = 0 就可以了。
6、log_level
MHA manager 的日志級別,默認是info級別,在大多數(shù)環(huán)境下沒有問題.可用的級別有.debug/info/warning/error四種級別。
7、multi_tier_slave
從MHA 0.52開始, 多層復(fù)制可以支持了。在默認情況下,不支持三層或是更多層的復(fù)制配置
8、ping_interval
這個參數(shù)設(shè)置MHA Manager多長時間去ping一下master(執(zhí)行一些SQL語句). 當失去和master三次償試,MHA Manager會認為MySQL Master死掉了。即最大的故障切換時間是4次ping_interval的時間,默認是3秒。
9、ping_type
? ? MHA 0.53后出現(xiàn)的參數(shù).(1)在默認情況下,MHA manager和MySQL創(chuàng)建一個連接執(zhí)行”select 1″(ping_type=select)用于檢查master是否健康。
? (2)每次檢測都連接/然后斷開會比較好一點,這樣對于tcp方面的錯誤感知更快一點。設(shè)置ping_type=CONNECT 就行了。
? (3) 從MHA 0.56后pint_type=INSERT也被添加。
第三部分:腳本說明
1、master_ip_failover_script
? ? 負責(zé)故障切換動作的腳本
2、master_ip_online_change_script
? 負責(zé)在線切換動作的腳本
3、secondary_check_script
? ? 默認MHA是通過一個路由檢測:從manager到master.但是secondary_check_script腳本,讓MHA manager可以通過t參數(shù)調(diào)用一個內(nèi)部腳本來實現(xiàn)兩個或者多個路由的檢測.
4、shutdown_script
? 為避免腦裂,有時候需要強制關(guān)閉master服務(wù)器,避免他再次提供服務(wù)。
如:shutdown_script= /usr/local/custom_script/master_shutdown
相關(guān)參數(shù):
--command=stopssh (這個意思就是指停止服務(wù),不會關(guān)機)
--ssh_user=(ssh username so that you can connect to the master)
--host=(master's hostname)
--ip=(master's ip address)
--port=(master's port number)
--pid_file=(master's pid file)
5、report_script
? 這個腳本的功能:是在Master故障完畢后,也許想發(fā)一個送一個報告(如email)報告一下切換完畢或是發(fā)生的錯誤。
相關(guān)參數(shù):
--orig_master_host = (死掉master機器名)
--new_master_host = (新的master機器名)
--new_slave_hosts = (新的slave機器名列表,用逗號隔開)
--subject = (郵件名)–body = (正文)