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

探索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 -ivh perl-DBI-1.620-1.el5.rfx.x86_64.rpm          
rpm -ivh MySQL-shared-compat-5.6.21-1.rhel5.x86_64.rpm
rpm -ivh perl-DBD-MySQL-3.0007-2.el5.x86_64.rpm   #如果是6系統先安裝 rpm -ivhperl-Data-ShowTable-3.3-1.2.el6.rf.noarch.rpm
tar xfmha4mysql-node-0.53.tar.gz
cd mha4mysql-node-0.53
perl Makefile.PL
make && make install
#redhat5系列系統,會出現 Pleaseenter your CPAN site: []   隨便輸入反正也不用CPAN模塊

        安裝manager源碼包(依賴很多per包,請按照我的安裝順序安裝!)

rpm -ivh perl-Config-Tiny-2.10-1.el5.noarch.rpm       
rpm -ivh epel-release-5-4.noarch.rpm
rpm -ivh perl-Parallel-ForkManager-0.7.5-4.el5.noarch.rpm
rpm -ivh perl-Mail-Sender-0.8.16-1.el5.rf.noarch.rpm
rpm -ivh perl-Mail-Sendmail-0.79-1.2.el5.rf.noarch.rpm
rpm -ivh perl-Params-Validate-0.95-1.el5.rf.x86_64.rpm
rpm -ihv perl-Email-Date-Format-1.002-4.el5.noarch.rpm
rpm -ivh perl-MIME-Lite-3.029-1.el5.rf.noarch.rpm
rpm -ivh perl-TimeDate-1.16-1.2.el5.rf.noarch.rpm     #解決依賴:perl(Date::Format) perl(Date::Parse)
rpm -ivh perl-Pod-Escapes-1.04-5.el5.noarch.rpm
rpm -ivh perl-Pod-Simple-3.16-1.el5.rf.noarch.rpm
rpm -ivh perl-Test-Pod-1.45-1.el5.rf.noarch.rpm
rpm -ivh perl-MailTools-2.12-1.el5.rf.noarch.rpm  #解決依賴:perl(Mail::send)
rpm -ivh perl-Log-Dispatch-2.20-1.el5.noarch.rpm
tar xfmha4mysql-manager-0.53.tar.gz
cd mha4mysql-manager-0.53
perl Makefile.PL
make && 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 date
ssh 10.142.132.51 date
ssh 10.142.132.50 date
ssh 10.142.132.48 date
ssh 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  #具體IP
candidate_master=1    #優先級成爲新master
check_repl_delay=0    #MHA在選擇新的Master時,會忽略複製延遲。
master_binlog_dir=/app/mysql/data  #binlog日誌所在目錄
[server2]
hostname=10.142.132.51   #具體IP
candidate_master=1     #優先級成爲新master
check_repl_delay=0      #MHA在選擇新的Master時,會忽略複製延遲。
master_binlog_dir=/app/mysql/data  #binlog日誌所在目錄
[server3]
hostname=10.142.132.48   #具體IP
no_master=1     #不能成爲主庫
[server4]
hostname=10.142.132.47    #具體IP
no_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 stop
b.大約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功能就配置結束了!

    只要朋友們仔細點按着我寫的文章一步一步操作,相信你也可以成功的,加油吧!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章