天天看點

MySQL(三):MHA實作MySQL主從架構中主伺服器的高可用,zabbix完成manager重新開機

MHA(Master High Availability)是目前在MySQL高可用方面相對成熟的一個解決方案,MHA在監控到master節點故障時,會提升其中擁有最新資料的slave節點成為新的master節點,在此期間,MHA會通過于其它從節點擷取額外資訊來避免一緻性方面的問題。MHA還提供了master節點的線上切換功能。

MHA 服務有兩種角色,MHA Manager(管理節點)和 MHA Node(資料節點):

  MHA Manager:通常單獨部署在一台獨立機器上管理多個 master/slave 叢集,每個master/slave叢集稱作一個application。

  MHA node:運作在每台MySQL伺服器上(master/slave/manager),它通過監控具備解析和清理logs功能的腳本來加快故障轉移。

環境

本次實驗環境共有四個節點,其角色配置設定如下所示。

manager: MHA Manager

master:  MariaDB master

slave1:  MariaDB slave

slave2:  MariaDB slave

修改各節點名字,各節點的/etc/hosts 檔案配置内容中添加:

172.16.1.2 manager.zrs.com manager

172.16.1.3 master.zrs.com master

172.16.1.4 slave1.zrs.com slave1

172.16.1.5 slave2.zrs.com slave2

初始主節點master配置:

server_id=1

relay_log=relay-log

log_bin=master-log

節點slave1的配置:

server_id=2 

relay_log_purge=0

read_only=1

節點slave2的配置:

server_id=3

下面進行主從複制架構

主伺服器

授權從伺服器,并重新整理

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'172.16.1.4'identified by 'replpass';

MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'172.16.1.5'identified by 'replpass';

MariaDB [(none)]>  flush privileges;

從伺服器配置

兩個slave都指定主伺服器

MariaDB [(none)]> change master to master_host='172.16.1.3',master_user='repluser',master_password='replpass',master_log_file='binlog.000003',master_log_pos=245;

開啟io線程和sql線程

MariaDB [(none)]> start slave io_thread;

MariaDB [(none)]> start slave sql_thread;

在所有MySQL節點授權

MariaDB [(none)]> GRANT ALL ON *.* TO 'mhamngr'@'172.16.1.%' IDENTIFIED BY 'mhapass';

建立免鑰通信

MHA叢集中的各節點彼此之間均需要基于ssh互信通信,以實作遠端控制及資料管理功能。可在Manager節點生成密鑰對,并設定其可遠端連接配接本地主機後,将私鑰檔案及authorized_keys檔案複制給餘下的所有節點即可。

[root@manager ~]# ssh-keygen -t rsa -P ''

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): .ssh/id_rsa          

Your identification has been saved in .ssh/id_rsa.

Your public key has been saved in .ssh/id_rsa.pub.

The key fingerprint is:

80:59:23:b9:f8:ce:7e:86:66:ad:23:82:b3:d9:a8:81 [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

|    ..o          |

|    .= .         |

|   .o..          |

|  . .  .         |

|   .    S        |

|.   .            |

|E  o o           |

|+=. B +          |

|*+.=o=           |

+-----------------+

[root@manager ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys

[root@manager ~]# chmod go= .ssh/authorized_keys

[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@master:/root/.ssh/

The authenticity of host 'master (172.16.1.3)' can't be established.

ECDSA key fingerprint is 65:f7:d6:d7:ae:3b:a2:dc:2b:bc:33:64:0e:47:11:b4.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'master' (ECDSA) to the list of known hosts.

root@master's password: 

id_rsa                                                100% 1675     1.6KB/s   00:00    

authorized_keys                                       100%  402     0.4KB/s   00:00    

[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@slave1:/root/.ssh/

The authenticity of host 'slave1 (172.16.1.4)' can't be established.

ECDSA key fingerprint is eb:b4:c4:c4:aa:15:2c:f8:6b:e8:cc:59:75:7a:a5:89.

Warning: Permanently added 'slave1' (ECDSA) to the list of known hosts.

root@slave1's password: 

[root@manager ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@slave2:/root/.ssh/

The authenticity of host 'slave2 (172.16.1.5)' can't be established.

ECDSA key fingerprint is be:2f:9f:d7:f8:2e:09:b1:7d:29:c2:76:53:0f:d2:94.

Are you sure you want to continue connecting (yes/no)? yes 

Warning: Permanently added 'slave2,172.16.1.5' (ECDSA) to the list of known hosts.

root@slave2's password: 

安裝MHA

除了源碼包,MHA官方也提供了rpm格式的程式包,其下載下傳位址為https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2。這次安裝是使用的rpm格式,在manager和node的所有節點均需安裝MHA Node。

安裝 MHA Manager

rpm安裝方式:

[root@manager ~]# yum install perl-DBD-MySQLperl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager

[root@manager ~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

[root@manager ~]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

tar包安裝方式:

tar -zxf mha4mysql-manager-0.56.tar.gz

cd mha4mysql-manager-0.56

perl Makefile.PL

make

make install

安裝 MHA Node

~]# yum install perl-DBD-MySQL

~]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

tar -zxfmha4mysql-node-0.56.tar.gz

cd mha4mysql-node-0.56

初始化 MHA

Manger節點需要為每個監控的master/slave叢集提供一個專用的配置檔案,而所有的master/slave 叢集也可共享全局配置。全局配置檔案預設為/etc/masterha_default.cnf,其為可選配置。如果僅監控一組 master/slave叢集,也可直接通過application的配置來提供各伺服器的預設配置資訊。而每個application的配置檔案路徑為自定義,本次實驗将使用/etc/masterha/app1.cnf

[server default]

user=mhamngr

password=mhapass

manager_workdir=/data/masterha/app1

manager_log=/data/masterha/app1/manager.log

remote_workdir=/data/masterha/app1

ssh_user=root

repl_user=repluser

repl_password=replpass

ping_interval=1

[server1]

hostname=172.16.1.3

candidate_master=1

[server2]

hostname=172.16.1.4

[server3]

hostname=172.16.1.5

檢測各節點間ssh互信通信配置是否正常

[root@manager ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf

看到輸出的資訊中,最後一行顯示如下,表示其通過檢測。

[info] All SSH connection tests passed successfully.

檢查管理的MySQL複制叢集的連接配接配置參數是否正常

[root@manager ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf

MySQL Replication Health is OK.

啟動MHA

[root@manager ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /data/masterha/app1/manager.log 2>&1 &

檢視master節點的狀态

[root@manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf

app1 (pid:23265) is running(0:PING_OK), master:172.16.1.3

[root@manager ~]# 

停止MHA

[root@manager ~]# masterha_stop --conf=/etc/masterha/app1.cnf

Stopped app1 successfully.

MHA 提供諸多工具程式,其常見的如下所示。

Manager 節點:

- masterha_check_ssh:MHA 依賴的 SSH 環境檢測工具;

- masterha_check_repl:MySQL 複制環境檢測工具;

- masterha_manager:MHA 服務主程式;

- masterha_check_status:MHA 運作狀态探測工具;

- masterha_master_monitor:MySQL master 節點可用性監測工具;

- masterha_master_switch:master 節點切換工具;

- masterha_conf_host:添加或删除配置的節點;

- masterha_stop:關閉 MHA 服務的工具;

Node 節點:

- save_binary_logs:儲存和複制 master 的二進制日志:

- apply_diff_relay_logs:識别差異的中繼日志事件并應用于其它 slave:

- filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具):

- purge_relay_logs:清除中繼日志(不會阻塞 SQL 線程):

自定義擴充:

- secondary_check_script:通過多條網絡路由檢測 master 的可用性;

- master_ip_failover_script:更新 application 使用的 masterip;

- shutdown_script:強制關閉 master 節點;

- report_script:發送報告;

- init_conf_load_script:加載初始配置參數;

- master_ip_online_change_script:更新 master 節點 ip 位址;

測試故障轉移

在master節點上面關閉mariadb服務

[root@master ~]# killall -9 mysqld mysqld_safe

檢視日志發現,172.16.1.3這個節點down了,172.16.1.4提升為master。

使用zabbix完成masterha-manager重新啟動

大緻步驟

略過zabbix server和agent端的安裝步驟,我在manager主機上同時安裝了zabbix server和zabbix agent,監控剛才設定的nohup啟動的manager管理程序,一旦發現這個背景指令執行結束了,立即通過zabbix裡面設定的條件和觸發器,來調用腳本,使得manager程序始終運作在manager上。

在agent上需要完成的配置:

1.zabbix使用者擁有所需要的管理權限

編輯/etc/sudoers檔案

注釋如下行:因為系統預設是要能夠通過tty登陸的使用者,執行指令,zabbix沒有可以登入系統的權限,是以要把這個注釋

添加如下行:這樣做不怎麼安全,生産環境下,要用更為安全的方法

#Defaults requiretty 

zabbix ALL=(ALL)NOPASSWD:ALL

2.agent程序要允許執行遠端指令

開啟遠端指令,即将/etc/zabbix/zabbix_agentd.conf配置檔案中的該配置設定為1即可。

EnableRemoteCommands=1

3.開啟服務

[root@manager ~]# systemctl start zabbix-agent.service

4.在用戶端的界面上設定Hosts,items,Triggers,Actions(Action,Conditions,Operations),

需要注意的是Operations需要設定Commands調用腳本來啟動MHA程式

[root@manager ~]# cat mannager.sh

nohup masterha_manager --conf=/etc/masterha/app1.cnf > /data/masterha/app1/manager.log 2>&1 &

5.可以測試zabbix是否根據設定的事務動作,完成腳本的調用,完成manager的背景啟動

關閉nohup執行的程序用

[root@manager ~]# kill -9 +id     #這個id号需要先查詢

手動get擷取:

[root@manager ~]# zabbix_get -s 172.16.1.2 -k masterha.manager

2

再次get擷取:

當這裡顯示是0了,同時通過ps指令可以檢視這個程序确實已經啟動了,于是使用zabbix完成masterha-manager重新啟動就成功了。

zabbix_get是在指令行下擷取數值的zabbix指令:

-s   要查的ip位址,本地或者遠端的都可以

繼續閱讀