MYSQL + MHA +keepalive + VIP安裝配置(二)--MHA的配置

sunney發表於2014-05-14

一、總概

1、MHA介紹

      MHA(Master High Availability)是自動的master故障轉移和Slave提升的軟體包.它是基於標準的MySQL複製(非同步/半同步).
      MHA有兩部分組成:MHA Manager(管理節點)和MHA Node(資料節點).
      MHA Manager可以單獨部署在一臺獨立機器上管理多個master-slave叢集,也可以部署在一臺slave上.MHA Manager探測叢集的node節點,當發現master出現故障的時候,它可以自動將具有最新資料的slave提升為新的master,然後將所有其 它的slave導向新的master上.整個故障轉移過程對應用程式是透明的。
      MHA node執行在每臺MySQL伺服器上(master/slave/manager),它通過監控具備解析和清理logs功能的指令碼來加快故障轉移的。

2、MHA工作原理

-從當機崩潰的master儲存二進位制日誌事件(binlog events)。
-識別含有最新更新的slave。
-應用差異的中繼日誌(relay log)到其它slave。
-應用從master儲存的二進位制日誌事件(binlog events)。
-提升一個slave為新master。
-使其它的slave連線新的master進行復制。

3、MHA工具包:

(1)、 Manager工具:
- masterha_check_ssh : 檢查MHA的SSH配置。
- masterha_check_repl : 檢查MySQL複製。
- masterha_manager : 啟動MHA。
- masterha_check_status : 檢測當前MHA執行狀態。
- masterha_master_monitor : 監測master是否當機。
- masterha_master_switch : 控制故障轉移(自動或手動)。
- masterha_conf_host : 新增或刪除配置的server資訊。

(2)、 Node工具(這些工具通常由MHA Manager的指令碼觸發,無需人手操作)。
- save_binary_logs : 儲存和複製master的二進位制日誌。
- apply_diff_relay_logs : 識別差異的中繼日誌事件並應用於其它slave。
- filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用這個工具)。
- purge_relay_logs : 清除中繼日誌(不會阻塞SQL執行緒)。

二、主機部署

manager機:192.168.1.201  manager安裝:mha4mysql-manager-0.54-0.el6.noarch.rpm
master機:192.168.1.231   節點安裝: mha4mysql-node-0.54-0.el6.noarch.rpm
slave1機:192.168.1.232(備用master) 節點安裝:mha4mysql-node-0.54-0.el6.noarch.rpm

 三、首先用ssh-keygen實現三臺主機之間相互免金鑰登入

[manager--201]
1、生成證照
shell> ssh-keygen -t rsa -b 2048  //一直按回車直接生成。
shell> scp id_rsa.pub root@192.168.1.231:/root/.ssh/  //復現到主機231
shell> scp id_rsa.pub root@192.168.1.232:/root/.ssh/  //復現到主機232
2.在主機231、232中/root/.ssh/下 執行
cat id_rsa.pub >> authorized_keys
//匯入公鑰到/root/.ssh/authorized_keys檔案中
3.測試201無密登入到231、232
ssh 192.168.1.231
ssh 192.168.1.232
[node--231、232]
重複執行上面的步驟。
通過ssh測試任何兩臺主機間兩兩可以無密登入。

 注意:如果不能實現任何兩臺主機間兩兩可以無密登入,後面的步驟會有問題。

四、安裝MHAmha4mysql-node,mha4mysql-manager 軟體包

1、manager mha4mysql-manager軟體安裝

[manager--201]
shell> yum install perl
shell> yum install cpan
shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm
error:
perl(Config::Tiny) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch::File) is needed by mha4mysql-manager-0.53-0.noarch
perl(Log::Dispatch::Screen) is needed by mha4mysql-manager-0.53-0.noarch
perl(Parallel::ForkManager) is needed by mha4mysql-manager-0.53-0.noarch
perl(Time::HiRes) is needed by mha4mysql-manager-0.53-0.noarch

說明有很多依賴包沒有安裝,解決方法:

shell> wget ftp://ftp.muug.mb.ca/mirror/centos/5.10/os/x86_64/CentOS/perl-5.8.8-41.el5.x86_64.rpm 
shell> wget ftp://ftp.muug.mb.ca/mirror/centos/6.5/os/x86_64/Packages/compat-db43-4.3.29-15.el6.x86_64.rpm 
shell> wget http://downloads.naulinux.ru/pub/NauLinux/6x/i386/sites/School/RPMS/perl-Log-Dispatch-2.27-1.el6.noarch.rpm 
shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm 
shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sender-0.8.16-3.el6.noarch.rpm 
shell> wget http://dl.fedoraproject.org/pub/epel/6/i386/perl-Mail-Sendmail-0.79-12.el6.noarch.rpm 
shell> wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-Time-HiRes-1.9721-136.el6.x86_64.rpm
shell> rpm -ivh perl-Parallel-ForkManager-0.7.9-1.el6.noarch.rpm perl-Log-Dispatch-2.27-1.el6.noarch.rpm perl-Mail-Sender-0.8.16-3.el6.noarch.rpm perl-Mail-Sendmail-0.79-12.el6.noarch.rpm perl-Time-HiRes-1.9721-136.el6.x86_64.rpm

再安裝

shell> rpm -ivh mha4mysql-manager-0.53-0.el6.noarch.rpm

2、node MHAmha4mysql-node軟體安裝

shell>wget http://mirror.centos.org/centos/6/os/x86_64/Packages/perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
shell>rpm -ivh perl-DBD-MySQL-4.013-3.el6.x86_64.rpm
shell>wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54-0.el6.noarch.rpm
shell>rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
安裝過程可能會報錯(具體錯誤我沒有記下)都是依賴包的問題,這麼解決吧
shell>yum install perl-MIME-Lite
     yum install perl-Params-Validate

五、MHA的配置

1、管理機manager上配置MHA檔案

shell> mkdir -p /masterha/app1    //建立目錄
shell> mkdir /etc/masterha        //建立目錄
shell> vi /etc/masterha/app1.cnf  //建立配置檔案
[server default]
user=root                //linux用於管理mysql使用者名稱
password=sunney          //linux用於管理mysql密碼
manager_workdir=/masterha/app1
manager_log=/masterha/app1/manager.log
remote_workdir=/masterha/app1
ssh_user=root            //ssh免金鑰登入的帳號名
repl_user=sunney         //mysql複製帳號,用來在主從機之間同步二進位制日誌等
repl_password=sunney     //mysql密碼
ping_interval=1          //ping間隔,用來檢測master是否正常
[server1]
hostname=192.168.1.231
#ssh_port=9999
master_binlog_dir=/var/lib/mysql //mysql資料庫目錄不同的安裝方式目錄不一樣
candidate_master=1               //master機宕掉後,優先啟用這臺作為新master
[server2]
hostname=192.168.1.232
#ssh_port=9999
master_binlog_dir=/var/lib/mysql
candidate_master=1

2、masterha_check_ssh工具驗證ssh信任登入是否成功

[manager:201]
shell> masterha_check_ssh --conf=/etc/masterha/app1.cnf

 注意:用ssh-keygen實現三臺主機之間相互免金鑰登入決定這一步是否成功。

Wed Apr  23 22:10:01 2014 - [debug]   ok.
Wed Apr  23 22:10:01 2014 - [info] All SSH connection tests passed successfully.

成功!

3、masterha_check_repl工具驗證mysql複製是否成功

[manager:201]
shell> masterha_check_repl --conf=/etc/masterha/app1.cnf

 注意:上一篇文章中的master--slaver是否成功決定這一步是否成功。或是MHA檔案配置的使用者賬號有關。

Wed Apr 23 22:10:56 2014 - [info] Checking replication health on 192.168.1.232..
Wed Apr 23 22:10:56 2014 - [info]  ok.
Wed Apr 23 22:10:56 2014 - [warning] master_ip_failover_script is not defined.
Wed Apr 23 22:10:56 2014 - [warning] shutdown_script is not defined.
Wed Apr 23 22:10:56 2014 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

成功。

4、啟動MHA manager,並監控日誌檔案

[manager:201]
shell> nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1 
shell> tail -f /masterha/app1/manager.log  //這名最好在新視窗執行

結果:

Thu Apr 24 04:41:03 2014 - [info] Slaves settings check done.
Thu Apr 24 04:41:03 2014 - [info] 
192.168.1.231 (current master)
 +--192.168.1.232
Thu Apr 24 04:41:03 2014 - [warning] master_ip_failover_script is not defined.
Thu Apr 24 04:41:03 2014 - [warning] shutdown_script is not defined.
Thu Apr 24 04:41:03 2014 - [info] Set master ping interval 1 seconds.
Thu Apr 24 04:41:03 2014 - [warning] secondary_check_script is not defined. It is highly recommended setting it to check master reachability from two or more routes.
Thu Apr 24 04:41:03 2014 - [info] Starting ping health check on 192.168.1.231(192.168.1.231:3306)..
Thu Apr 24 04:41:03 2014 - [info] Ping(SELECT) succeeded, waiting until MySQL doesn't respond..

5、測試master(231)當機後,是否會自動切換

[master--231]
shell>service mysql stop
[manager--201]
shell>tail -f tail -f /masterha/app1/manager.log
-----日誌顯示如下------
-------- Failover Report -----

app1: MySQL Master failover 192.168.1.231 to 192.168.1.232 succeeded

Master 192.168.1.231 is down!

Check MHA Manager logs at localhost.localdomain:/masterha/app1/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.1.232(192.168.1.232:3306) has all relay logs for recovery.
Selected 192.168.1.232 as a new master.
192.168.1.232: OK: Applying all logs succeeded.
Generating relay diff files from the latest slave succeeded.
192.168.1.232: Resetting slave info succeeded.
Master failover to 192.168.1.232(192.168.1.232:3306) completed successfully.

 

6、故障轉移後,用命令恢復原來的master

(1)、在舊master上執行

1.在舊master上執行
shell>service mysql start //資料庫啟動
shell>mysql -usunney -psunney mysql
> reset master; mysql> change master to master_host='192.168.1.232', master_port=3306, master_user='sunney', master_password='sunney', master_log_file='mysql-bin.000031', master_log_pos=112; mysql> start slave; #暫時先把舊master變為slave

(2)然後在manager節點上:

 

shell> masterha_master_switch --master_state=alive --conf=/etc/masterha/app1.cnf

 

 

 過程中一直輸入YES;

 這樣的話mysql主從機進行了切換。可以測試一下資料在新的master(232)的表中新增資料後,在新slave(231)對應的表中是否已實現資料同步。

六、MHA已完成配置並進行了測試。但如果是程式連線資料庫並不會自動切換IP,那我們如何實現呢,請期待一篇keepalive + VIP安裝配置。

相關文章