簡介:
MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,master節點故障後,管理節點會在slave節點裏面選取一個節點提升爲新master。要搭建MHA,要求一個複製集羣中最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫。管理節點程序可以安裝在從服務器上也可以單獨安裝一臺服務器作爲管理節點。
管理節點程序分爲Manager節點程序和Node節點程序。
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地址
基礎環境:
MHA管理工具下載鏈接:https://pan.baidu.com/s/1pMo93Nd 密碼:27i2
mha4mysql-manager-0.56-0.el6.noarch.rpm
mha4mysql-node-0.56-0.el6.noarch.rpm
配置過程:
首先將三臺服務器配置爲主從複製
三臺服務器分別執行:yum install mairadb-server mariadb -y
[root@localhost ~]# vim /etc/my.cnf
在[mysqld]中加入如下內容:
主服務器:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id=1
從服務器1:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id = 2
read_only = 1
relay_log_purge = 0
從服務器2:
innodb_file_per_table = 1
skip_name_resolve = 1
log-bin = master-bin
relay-log = relay-bin
server_id = 3
read_only = 1
relay_log_purge = 0
主服務器上:
MariaDB [(none)]> show master status #這一步一定要先執行,查看position後再創建用戶,設置從服務器時用這個position,新創建的用戶才能同步到從服務上,從服務器也需要這兩個賬號。因爲主服務器故障時從服務器會被提升爲主。
-> ;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000002 | 245 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
創建複製用戶和管理節點用於管理的用戶。
MariaDB [(none)]> grant replication slave,replication client on *.* to 'repluser'@'172.16.6.%' identified by '123456';
MariaDB [(none)]> grant all on *.* to 'admin'@'172.16.6.%' identified by 'admin';
MariaDB [(none)]> flush privileges;
從服務器1上執行:
MariaDB [(none)]> change master to master_host='172.16.6.80',master_user='repluser',master_password='123456',master_log_file='master-bin.000002',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
從服務器2上執行:
MariaDB [(none)]> change master to master_host='172.16.6.80',master_user='repluser',master_password='123456',master_log_file='master-bin.000002',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
開始配置MHA:
配置SSH互通: (注意:配置方法有多種)
在管理節點:172.16.6.79上面生成祕鑰。直接拷貝私鑰和公鑰到三臺數據庫服務器上。
[root@localhost ~]# ssh-keygen -t rsa -P ''
[root@localhost ~]# cat .ssh/id_rsa.pub > .ssh/authorized_keys
[root@localhost ~]# chmod go= .ssh/authorized_keys
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.80:/root/.ssh
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.81:/root/.ssh
[root@localhost ~]# scp .ssh/id_rsa .ssh/authorized_keys 172.16.6.82:/root/.ssh
安裝EPEL源:
[root@localhost ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@localhost ~]# rpm -ivh epel-release-latest-7.noarch.rpm
[root@localhost ~]# yum repolist ##檢查是否已添加至源列表
安裝管理節點程序:
將下載的上傳到管理節點上:
[root@localhost ~]# yum install mha4mysql-*
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.80:/root
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.81:/root
[root@localhost ~]# scp mha4mysql-node-0.56-0.el6.noarch.rpm 172.16.6.82:/root
三個數據庫節點分別執行:
[root@localhost ~]# yum install mha4mysql-node-0.56-0.el6.noarch.rpm -y
配置管理節點:
[root@localhost ~]# mkdir /etc/masterha
[root@localhost ~]# vi /etc/masterha/app1.cnf
[server default]
user=admin
password=amdin
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=123456
ping_interval=1
[server1]
hostname=172.16.6.80
#ssh_prot=22222
[server2]
hostname=172.16.6.81
#ssh_prot=22222
candidate_master=1
[server3]
hostname=172.16.6.82
#ssh_prot=22222
candidate_master=1
檢測SSH互通:
[root@localhost ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
檢測複製環境:
[root@localhost ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
啓動管理程序
[root@localhost ~]# masterha_manager --conf=/etc/masterha/app1.cnf