您好,登錄后才能下訂單哦!
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 root@manager.zrs.com
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:添加或刪除配置的節點;
Node 節點:
save_binary_logs:保存和復制 master 的二進制日志:
apply_diff_relay_logs:識別差異的中繼日志事件并應用于其它 slave:
filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具):
自定義擴展:
secondary_check_script:通過多條網絡路由檢測 master 的可用性;
master_ip_failover_script:更新 application 使用的 masterip;
shutdown_script:強制關閉 master 節點;
report_script:發送報告;
init_conf_load_script:加載初始配置參數;
測試故障轉移
在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了,同時通過ps命令可以查看這個進程確實已經啟動了,于是使用zabbix完成masterha-manager重新啟動就成功了。
zabbix_get是在命令行下獲取數值的zabbix命令:
-s 要查的ip地址,本地或者遠程的都可以
-p zabbix_agentd的端口
-k key值
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。