mysql3

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=relay-log

log_bin=master-log

relay_log_purge=0

read_only=1

節點slave2的配置:

server_id=3

relay_log=relay-log

log_bin=master-log

relay_log_purge=0

read_only=1

下面進行主從複製架構

主服務器

授權從服務器,並刷新

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.

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

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

root@slave1'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@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:

id_rsa 100% 1675 1.6KB/s 00:00

authorized_keys 100% 402 0.4KB/s 00:00

安裝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

rpm安裝方式:

~]# yum install perl-DBD-MySQL

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

tar包安裝方式:

tar -zxfmha4mysql-node-0.56.tar.gz

cd mha4mysql-node-0.56

perl Makefile.PL

make

make install

初始化 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

candidate_master=1

[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獲取:

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


0

當這裏顯示是0了,同時通過ps命令可以查看這個進程確實已經啓動了,於是使用zabbix完成masterha-manager重新啓動就成功了。

zabbix_get是在命令行下獲取數值的zabbix命令:

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

-p zabbix_agentd的端口

-k key值

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