標籤:ha 高可用 keepalived 讀寫分離 mha
探索MySQL高可用架構之MHA(7)
-----構建mysql高可用系列(共9篇)
上一篇文章介紹了本次架構的keepalive讀寫分離!
本篇文章主要介紹本次架構中的mha安裝部分!
關於MHA
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於 Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟體。在MySQL故障切換過程中,MHA能做到在 0~30秒之內自動完成資料庫的故障切換操作,並且在進行故障切換的過程中,MHA能在最大程度上保證資料的一致性,以達到真正意義上的高可用。
該軟體由兩部分組成:MHA Manager(管理節點)和MHA Node(資料節點)。MHA Manager可以單獨部署在一台獨立的機器上管理多個master-slave叢集,也可以部署在一台slave節點上。MHA Node運行在每台MySQL伺服器上,MHA Manager會定時探測叢集中的master節點,當master出現故障時,它可以自動將最新資料的slave提升為新的master,然後將所有其 他的slave重新指向新的master。整個容錯移轉過程對應用程式完全透明。
在MHA自動故障切換過程中,MHA試圖從宕機的主伺服器上儲存二進位日誌,最大程度的保證資料的不丟失,但這並不總是可行的。例如,如果主伺服器 硬體故障或無法通過ssh訪問,MHA沒法儲存二進位日誌,只進行容錯移轉而丟失了最新的資料。使用MySQL 5.5的半同步複製,可以大大降低資料丟失的風險。MHA可以與半同步複製結合起來。如果只有一個slave已經收到了最新的二進位日誌,MHA可以將最 新的二進位日誌應用於其他所有的slave伺服器上,因此可以保證所有節點的資料一致性。
MHA工作原理
a.從宕機崩潰的master儲存二進位日誌事件(binlog events)。
b.識別含有最新更新的slave。
c.應用差異的中繼日誌(relay log)到其它slave。
d.應用從master儲存的二進位日誌事件(binlog events)。
e.提升一個slave為新master。
f.使其它的slave串連新的master進行複製。
MHA工具包
Manager工具
a.masterha_check_ssh : 檢查MHA的SSH配置。
b.masterha_check_repl : 檢查MySQL複製。
c.masterha_manager : 啟動MHA。
d.masterha_check_status : 檢測當前MHA運行狀態。
e.masterha_master_monitor : 監測master是否宕機。
f.masterha_master_switch : 控制容錯移轉(自動或手動)。
g.masterha_conf_host : 添加或刪除配置的server資訊。
Node工具
a.save_binary_logs : 儲存和複製master的二進位日誌。
b.apply_diff_relay_logs : 識別差異的中繼日誌事件並應用於其它slave。
c.filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用這個工具)。
d.purge_relay_logs : 清除中繼日誌(不會阻塞SQL線程)。
下面就讓我們開始操作吧:
安裝node源碼包(依賴很多per包,請按照我的安裝順序安裝!)
rpm -ivhperl-DBI-1.620-1.el5.rfx.x86_64.rpm rpm -ivhMySQL-shared-compat-5.6.21-1.rhel5.x86_64.rpmrpm -ivhperl-DBD-MySQL-3.0007-2.el5.x86_64.rpm #如果是6系統先安裝 rpm -ivhperl-Data-ShowTable-3.3-1.2.el6.rf.noarch.rpmtar xfmha4mysql-node-0.53.tar.gzcd mha4mysql-node-0.53perl Makefile.PLmake && make install#redhat5系列系統,會出現 Pleaseenter your CPAN site: [] 隨便輸入反正也不用CPAN模組
安裝manager源碼包(依賴很多per包,請按照我的安裝順序安裝!)
rpm -ivhperl-Config-Tiny-2.10-1.el5.noarch.rpm rpm -ivhepel-release-5-4.noarch.rpmrpm -ivh perl-Parallel-ForkManager-0.7.5-4.el5.noarch.rpmrpm -ivhperl-Mail-Sender-0.8.16-1.el5.rf.noarch.rpmrpm -ivhperl-Mail-Sendmail-0.79-1.2.el5.rf.noarch.rpmrpm -ivhperl-Params-Validate-0.95-1.el5.rf.x86_64.rpmrpm -ihvperl-Email-Date-Format-1.002-4.el5.noarch.rpmrpm -ivhperl-MIME-Lite-3.029-1.el5.rf.noarch.rpmrpm -ivhperl-TimeDate-1.16-1.2.el5.rf.noarch.rpm #解決依賴:perl(Date::Format) perl(Date::Parse)rpm -ivhperl-Pod-Escapes-1.04-5.el5.noarch.rpmrpm -ivhperl-Pod-Simple-3.16-1.el5.rf.noarch.rpmrpm -ivhperl-Test-Pod-1.45-1.el5.rf.noarch.rpmrpm -ivh perl-MailTools-2.12-1.el5.rf.noarch.rpm #解決依賴:perl(Mail::send)rpm -ivhperl-Log-Dispatch-2.20-1.el5.noarch.rpmtar xfmha4mysql-manager-0.53.tar.gzcd mha4mysql-manager-0.53perl Makefile.PLmake && make install#redhat5系列系統,會出現 Pleaseenter your CPAN site: [] 隨便輸入反正也不用CPAN模組
配置ssh信任(所有機器全做)
拿47機器舉例(1)#產生公開金鑰ssh-keygen -t rsa 產生公開金鑰(2)#輸出公開金鑰匙cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA7........(3)#在48、50、51、52分別操作, vi authorized_keys 增加47機器上 id_rsa.pub的內容(4)#測試ssh 10.142.132.52 datessh 10.142.132.51 datessh 10.142.132.50 datessh 10.142.132.48 datessh 10.142.132.47 date總結:上面4步操作,在其它機器也一樣操作,所有機器就可以實現ssh信任了
編輯manager節點設定檔 //10.142.132.50
(1) mkdir -p /etc/masterha #建立目錄(2) vi /etc/masterha/app1.cnf #增加如下內容[server default]user=root #linux用於管理mysql用戶名password=mysql #linux用於管理mysql密碼ssh_user=root #ssh免密鑰登入的帳號名repl_user=lipengfei #mysql複製帳號,用來在主從機之間同步二進位日誌等repl_password=lipengfei #mysql複製帳號的密碼manager_workdir=/app/masterha/app1 #manager目錄 manager_log=/app/masterha/app1/app1.log #管理節點工作記錄檔remote_workdir=/app/masterha/app1 #node 上用於產生日誌的工作目錄ping_interval=1 #ping間隔,用來檢測master是否正常[server1]hostname=10.142.132.52 #具體IPcandidate_master=1 #優先順序成為新mastercheck_repl_delay=0 #MHA在選擇新的Master時,會忽略複寫延遲。master_binlog_dir=/app/mysql/data #binlog日誌所在目錄[server2]hostname=10.142.132.51 #具體IPcandidate_master=1 #優先順序成為新mastercheck_repl_delay=0 #MHA在選擇新的Master時,會忽略複寫延遲。master_binlog_dir=/app/mysql/data #binlog日誌所在目錄[server3]hostname=10.142.132.48 #具體IPno_master=1 #不能成為主庫[server4]hostname=10.142.132.47 #具體IPno_master=1 #不能成為主庫
啟動mha-manager
nohup masterha_manager--conf=/etc/masterha/app1.cnf --ignore_last_failover < /dev/null > /app/masterha/app1/app1.log2>&1 & #以nohup模式,放在後台啟動
故障測試
a.手工停止 52上的mysql服務,service mysql stopb.大約30秒,51自動成為新的主庫 #在47或48從庫上show slave status就可以看出來c.52再次啟動mysql服務,要手工加入到AB架構中 #51是主庫,使用如下示範命令加入AB架構 change master to master_host=‘10.142.132.51‘, master_port=3306,master_user=‘lipengfei‘, master_password=‘lipengfei‘,master_log_file=‘binlog.000001‘,master_log_pos=120;d.手工停止51上的Mysql服務e大約30秒,52自動成為新的主庫 #在47或48從庫上show slave status就可以看出來
注意如下2個問題
a.當主DB故障,切換到另外的伺服器上後,即使恢複了原來的主DB,也不能立即加入整套MHA系統中,得重新手工加入AB架構。b.當發生一次切換後,管理節點的監控進程就會自動結束,需要用指令碼來自動啟動。另外還得刪除app1.failover.complete這個檔案,否則新的主DB出現問題MHA就不會切換了。
mha-manager常用命令
(1) nohup masterha_manager--conf=/etc/masterha/app1.cnf --ignore_last_failover < /dev/null > /app/masterha/app1/app1.log2>&1 & #開啟MHA Manager監控(2) masterha_check_status--conf=/etc/masterha/app1.cnf #查看MHA Manager監控是否正常(3) masterha_stop--conf=/etc/masterha/app1.cnf #關閉MHA Manage監控(4)masterha_check_ssh--conf=/etc/masterha/app1.cnf #檢查SSH配置(5)masterha_check_repl--conf=/etc/masterha/app1.cnf #檢查整個複製環境狀況
到此為止,咱們的mah功能就配置結束了!
只要朋友們仔細點按著我寫的文章一步一步操作,相信你也可以成功的,加油吧!
本文出自 “走不完的路,看不完的書!” 部落格,請務必保留此出處http://51power.blog.51cto.com/3549599/1672730
探索MySQL高可用架構之MHA(7)