MySQL高可用架构故障自动转移插件MHA
mha高可用架構(gòu)是目前mysql高可用故障轉(zhuǎn)移比較成熟的解決方案。MHA插件復(fù)雜監(jiān)控mysql主節(jié)點(diǎn)的健康情況。在主節(jié)點(diǎn)宕機(jī)后,MHA把binlog通過(guò)ssh傳到從節(jié)點(diǎn)進(jìn)行重做補(bǔ)齊。并提升其中一個(gè)從節(jié)點(diǎn)為主節(jié)點(diǎn)。如:A>B ,A>C??。A宕機(jī)后。B,C補(bǔ)齊日志。并將故障轉(zhuǎn)移后的架構(gòu)變?yōu)锽>C。
轉(zhuǎn)移的流程如下:
1、從出現(xiàn)故障的主節(jié)點(diǎn)A拉取binlog日志到B、C節(jié)點(diǎn)。
2、識(shí)別有最近Relay_Master_Log_File,Exec_Master_Log_Pos?更新的slave節(jié)點(diǎn)。假設(shè)是B
3、應(yīng)用差異的中繼日志(relay?log)到其他slave節(jié)點(diǎn)。如C
4、提升slave?(B)為新的主節(jié)點(diǎn)。
5、其他的節(jié)點(diǎn)(C)連接到新的主節(jié)點(diǎn)。
MHA?切換完了之后并沒(méi)有其他的操作了。如服務(wù)發(fā)現(xiàn),重新注冊(cè)。但是MHA提供了腳本接口。可以手動(dòng)指定切換完了MHA執(zhí)行指定的腳本。如注冊(cè)虛擬ip到新的主節(jié)點(diǎn)。或者調(diào)用接口注冊(cè)新的服務(wù)域名。發(fā)告警郵件?等。
mha的架構(gòu)如下
MHA插件分為兩部分 Manager工具包和Node工具包:
?
Manager?插件是管理節(jié)點(diǎn),主要用于監(jiān)控Mysql主從架構(gòu)的正常狀態(tài)。
有以下命令集:
?masterha_check_status??檢查?masterha_manager狀態(tài)
?masterha_check_ssh???檢查ssh是否正常
?masterha_check_repl???檢查復(fù)制鏈?zhǔn)欠裾?br />?masterha_master_monitor
?masterha_manager???啟動(dòng)mha管理進(jìn)程(發(fā)現(xiàn)故障時(shí)切換)
?masterha_conf_host
?masterha_master_switch
?masterha_stop
?master_ip_failover
?masterha_switch_domain
?master_ip_online_change
?masterha_secondary_check
Node?節(jié)點(diǎn)在每個(gè)mysql實(shí)例上存在,供Manager?健康檢測(cè),故障轉(zhuǎn)移時(shí)調(diào)用。
有如下命令集:
apply_diff_relay_logs
filter_mysqlbinlog
purge_relay_logs
save_binary_logs
注意:Node節(jié)點(diǎn)如果是編譯安裝。會(huì)在/usr/local/bin?目錄下存在以上命令。如果是直接用編譯完的二進(jìn)制包解壓安裝。必須把Node的4個(gè)命令?拷貝到 /usr/local/bin目錄下。否則找不到命令。
【MHA的安裝】
mha的安裝可以到官網(wǎng)下載進(jìn)行編譯安裝。
https://code.google.com/p/mysql-master-ha/?
為了省事,可以到我已經(jīng)編譯架構(gòu)好的百度云盤下載:
鏈接:https://pan.baidu.com/s/11fh_wolEYHg-VhaJDwYglA 密碼:3zie
以下介紹安裝按照我已經(jīng)編譯好的安裝包解壓即可:
tar -xcf? mha56.tar.gz -C /usr/local
解壓之后有以下文件夾:
auth? bin? conf? MHA? rpm? workdir
rpm目錄存在了mha所依賴的所有rpm包。也可以eperl?源yum安裝。
yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-IO-Socket-SSL perl-DBD-MySQL perl-Time-HiRes perl-File-Which perl-Digest-SHA1 perl-Crypt-SSLeay perl-libwww-perl perl-TermReadKey -y MHA?目錄存在了mha整套perl腳本需要 cp?-rp ? MHA?? /usr/local/share/perl5/?? chmod?rp?444 ? /usr/local/share/perl5/MHA bin?目錄存放了Manager?節(jié)點(diǎn)和Node節(jié)點(diǎn)的所有腳本。Node腳本需要拷貝到/usr/local/bin目錄: cp?-rp cp -rp apply_diff_relay_logs? filter_mysqlbinlog? save_binary_logs? purge_relay_logs???/usr/local/bin 【配置mha配置文件】 conf?目錄存放配置文件的模板 這里只指定兩個(gè)節(jié)點(diǎn)A>B。可以指定3個(gè)節(jié)點(diǎn),或更多。 ##定義每套cluster端口為[portnum] ## mkdir -p /usr/local/mha56/workdir ; chown mha:mysql /usr/local/mha56/workdir [server default] client_bindir=/usr/local/mysql/bin/ manager_workdir=/usr/local/mha56/workdir remote_workdir=/usr/local/mha56/workdir manager_log=/usr/local/mha56/workdir/portnum.log master_binlog_dir=binary_log_dir #手動(dòng)切換腳本 master_ip_online_change_script= /usr/local/mha56/bin/master_ip_online_change report_script=/usr/local/mha56/bin/send_report #自動(dòng)切換時(shí)vip管理 #master_ip_failover_script=/usr/local/mha56/bin/master_ip_failover init_conf_load_script=/usr/local/mha56/auth/mha_auth user=mymha #password= repl_user=myrepl #repl_password= ssh_port=10000 ssh_user=mha ssh_options="-i /home/mha/.ssh/id_rsa_mha.key" ping_interval=3 max_ping_errors=10 check_repl_filter=0[server1] hostname=master_server_ip port=portnum[server2] candidate_master=1 check_repl_delay=0 hostname=slave_server_ip port=portnummha?需要開(kāi)通ssh。這里用指定公鑰的形式拷貝公鑰到每臺(tái)mha?manager?和node機(jī)器下。 ssh_options="-i /home/mha/.ssh/id_rsa_mha.key"??(5.3開(kāi)始支持)。
系統(tǒng)賬號(hào):
為了避開(kāi)使用rool賬號(hào),重新開(kāi)啟?mha?普通系統(tǒng)賬號(hào)。
系統(tǒng)賬號(hào)mha要和mysql?實(shí)例啟動(dòng)賬號(hào)在同一個(gè)組。才可以讀取mysql的binlog。
mysql賬號(hào)(2個(gè)):
mha的監(jiān)控與故障切換mysql賬號(hào)mymha?的最小權(quán)限要求:
GRANT?RELOAD,?SUPER,?LOCK?TABLES,?REPLICATION?SLAVE,?REPLICATION?CLIENT?ON?*.*?TO?'mha'@'192.168.%';
GRANT?SELECT?ON?`mysql`.*?TO?'mha'@'192.168.%'
若數(shù)據(jù)庫(kù)無(wú)開(kāi)啟GTID,需要多賦一個(gè)權(quán)限:
grant? Create,alter,delete,insert,update,drop?? on `mysql`.apply_diff_relay_logs_test? to? 'mha'@'192.168.%';
mysql的復(fù)制賬號(hào) repl_user?。權(quán)限只需要
GRANT?REPLICATION?SLAVE,?REPLICATION?CLIENT?ON?*.*?TO?'mha'@'192.168.%';
把?mha的mysql管理賬號(hào)mymha?和?復(fù)制賬號(hào)myrepl的密碼存在在單獨(dú)的文件:
init_conf_load_script=/usr/local/mha56/auth/mha_auth
mha_auth 這個(gè)文件必須為系統(tǒng)賬號(hào)mha可執(zhí)行文件,否則報(bào)錯(cuò)。
manager_workdir??是mha存放心跳信息。以及故障切換時(shí)的工作目錄。
這里為了方便:直接?chown? -R mha:mysql /usr/local/mha56??把整個(gè)目錄屬主節(jié)賦權(quán)mha賬號(hào)。mysql組。
其他配置選項(xiàng)說(shuō)明參照官網(wǎng)說(shuō)明。
----------------------
【檢測(cè)MHA】:
安裝完了mha。并配置了第一個(gè)第一套mysql的主從 3306?的mha高可用故障轉(zhuǎn)移。假設(shè)配置文件為/usr/local/mha56/conf/mha_3998.conf??。可以開(kāi)始檢測(cè)。
檢測(cè)ssh是否正常:
/usr/local/mha56/bin/masterha_check_repl?? --conf=/usr/local/mha56/conf/mha_3998.conf
最終信息為 MySQL Replication Health is OK.?表示正常。
檢測(cè)mysql主從復(fù)制集群是否正常:
/usr/local/mha56/bin/masterha_check_repl?? --conf=/usr/local/mha56/conf/mha_3998.conf
最終為:MySQL Replication Health is OK.?表示正常
手動(dòng)進(jìn)行主從切換。
masterha_master_switch? --master_state=alive --conf=/usr/local/mha56/conf/mha_3998.conf?? --orig_master_is_new_slave
最終為:[info] Switching master to 192.168.100.51(192.168.100.51:3998) completed successfully.?表示主從切換成功,從A>B?變?yōu)锽>A。
最后可以開(kāi)啟mha的管理進(jìn)程。在主節(jié)點(diǎn)出現(xiàn)故障時(shí)。mha自動(dòng)切換。
/usr/local/mha56/bin/masterha_manager? --conf=/usr/local/mha56/conf/mha_3998.conf??? --ignore_last_failover???&
檢查進(jìn)程運(yùn)行狀態(tài):
/usr/local/mha56/bin/masterha_check_status?? --conf=/usr/local/mha56/conf/mha_3998.conf?
注:故障切換完畢masterha_manager?進(jìn)程會(huì)退出。workdir目錄下回生成 ?mha_3998.failover.complete?文件。下一次啟動(dòng)masterha_manager?時(shí)需要?jiǎng)h除該文件才可正常啟動(dòng)。
------------------------------
【服務(wù)發(fā)現(xiàn)與注冊(cè)】:
mha只負(fù)責(zé)master節(jié)點(diǎn)出現(xiàn)故障,把主節(jié)點(diǎn)轉(zhuǎn)移到其中一個(gè)從節(jié)點(diǎn),成為新的的主節(jié)點(diǎn)。其余從節(jié)點(diǎn)接入到新的主節(jié)點(diǎn)。mha切換完畢后。應(yīng)用鏈接到原來(lái)的master會(huì)出現(xiàn)錯(cuò)誤的。這是需要把指向mysql主節(jié)點(diǎn)的鏈接轉(zhuǎn)移走。
1、用vip的方式。在新的主節(jié)點(diǎn)注冊(cè)vip。
2、使用域名,用consul?服務(wù)發(fā)現(xiàn)。把域名指向的ip指走。
3、使用域名。用power+python腳本檢測(cè)的方式。把域名指向的ip指走。
說(shuō)明:用域名靈活,如果有讀寫分離域名。可以靈活編寫python腳本。判斷從節(jié)點(diǎn)延遲的時(shí)候或者從節(jié)點(diǎn)?復(fù)制斷開(kāi)的時(shí)候把域名指向主節(jié)點(diǎn)的ip。
Q:1123654342
?
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/vansky/p/9238276.html
總結(jié)
以上是生活随笔為你收集整理的MySQL高可用架构故障自动转移插件MHA的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 写bat文件,报系统找不到指定文件的处理
- 下一篇: 大话 Redis 数据结构