探索MySQL高可用架構之MHA(7)

來源:互聯網
上載者:User

標籤: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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.