一、前言
最近在研究完P(guān)roxySQL之后發(fā)現(xiàn),當后端主從服務(wù)器的Master宕機之后,這個復(fù)制架構(gòu)就需要人工介入重新部署Master。此時想著有沒有什么版本能讓后端的從服務(wù)器自動成為Master來接替宕機的Master的功能。后來百度了一下,發(fā)現(xiàn)MHA能實現(xiàn)這種需求。MHA,即Master High Availability Manager and Tools for MySQL,是日本的一位MySQL專家采用Perl語言編寫的一個腳本管理工具,該工具僅適用于MySQL Replication(二層)環(huán)境,目的在于維持Master主庫的高可用性。從架構(gòu)上來說,MHA分為如下兩大部分:
Node:我們知道,MHA是基于MySQL Replication環(huán)境的,在該環(huán)境中,不管是Master角色,還是Slave角色,都稱為Node,是被監(jiān)控管理的對象節(jié)點。 Node服務(wù)器上需要安裝MHA Node包。
Manager:為MHA架構(gòu)中的管理者,建議部署在一臺獨立的服務(wù)器上,當然也可部署在某個Slave上,但該Slave永遠不要被選擇成為新的Master,否則故障切換后的MHA架構(gòu)就失去了高可用性。 Manager服務(wù)器需要安裝MHA Manager包,并完善一個主配置文件。 一個Manager可管理多套MySQL Replication環(huán)境。
MHA的manager工具包主要包括以下幾個工具:
masterha_check_ssh 檢查MHA的SSH配置狀況
masterha_check_repl 檢查MySQL復(fù)制狀況
masterha_manger 啟動MHA
masterha_check_status 檢測當前MHA運行狀態(tài)
masterha_master_monitor 檢測master是否宕機
masterha_master_switch 控制故障轉(zhuǎn)移(自動或者手動)
masterha_conf_host 添加或刪除配置的server信息
本次實驗我們采取一主兩從的數(shù)據(jù)庫復(fù)制架構(gòu),然后通過proxysql來代理主從服務(wù),接著配置MHA來實現(xiàn)Master的高可用,其配置拓撲圖如下:

二、配置數(shù)據(jù)庫
此處我們配置數(shù)據(jù)庫為半同步復(fù)制的主從架構(gòu)。
1、構(gòu)建master
首先配置master 的mariadb-server服務(wù)的配置文件:
[root@master ~]# vim /etc/my.cnf
skip-name-resolve=ON ##取消解析登錄主機名
log-bin=master.log #啟動master服務(wù)器的log-bin功能
innodb-file-per-table=ON
sync_binlog = 1 #默認,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系統(tǒng)自己控制它的緩存的刷新。這時候的性能是最好的,但是風(fēng)險也是最大的。因為一旦系統(tǒng)Crash,在binlog_cache中的所有binlog信息都會被丟失。
server_id=1 #mysql的同步的數(shù)據(jù)中是包含server-id的,用于標識該語句最初是從哪個server寫入的,所以server-id一定要有的
然后啟動mariadb服務(wù)并授權(quán)主從同步賬號:
[root@master ~]# systemctl start mariadb
[root@master ~]# mysql
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
查看master服務(wù)器上對應(yīng)的二進制日志名稱及日志pos位置:
MariaDB [(none)]> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| master.000003 | 473 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
接著安裝半同步復(fù)制的插件(非必要,可不配置,此處我純當練手):
MariaDB [(none)]> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.00 sec)
然后修改/etc/my.cnf文件,添加如下配置并重啟mariadb服務(wù)啟動半同步復(fù)制功能:
[root@master ~]# vim /etc/my.cnf
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=30000
[root@master ~]# systemctl restart mariadb
2、構(gòu)建slave1和slave2
首先配置slave主機的配置文件:
skip-name-resolve=ON #取消解析登錄主機名
innodb-file-per-table=ON
relay-log=relay.log #用于保存master服務(wù)器的binlog日志
read-only=ON #設(shè)置從庫為只讀模式,但僅對非SUPER權(quán)限的用戶有效
server_id=2 #slave1和slave2的server_id需修改為不一樣,如2,3;
接著在slave主機上啟動mariadb服務(wù),并執(zhí)行change master語句:
[root@slave2 ~]# systemctl start mariadb
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.0.82',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master.000003',MASTER_LOG_POS=473;
Query OK, 0 rows affected (0.06 sec)
MariaDB [(none)]> start slave;
然后安裝slave的半同步插件(非必要,可不配置,此處我純當練手):
MariaDB [(none)]> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)
最后修改/etc/my.cnf配置文件,添加下述配置并重啟mariadb服務(wù):
[root@slave2 ~]# vim /etc/my.cnf
rpl_semi_sync_slave_enabled=1
[root@slave2 ~]# systemctl restart mariadb
slave1 和slave2的配置雷同,可參考上述模板進行配置。
至此數(shù)據(jù)庫相關(guān)的配置就配置完了。
三、配置ProxySQL
在proxysql主機上安裝proxysql服務(wù):
[root@proxysql ~]# yum install -y https://www.percona.com/downloads/proxysql/proxysql-1.4.8/binary/redhat/7/x86_64/proxysql-1.4.8-1.1.el7.x86_64.rpm
[root@proxysql ~]# systemctl start proxysql
在配置proxySQL服務(wù)之前,首先在后端數(shù)據(jù)庫中添加相應(yīng)的proxysql授權(quán)賬號:
MariaDB [(none)]> grant all on *.* to 'proxysql'@'192.168.0.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
接著在proxysql主機的本地連接proxysql的管理接口,然后配置proxysql服務(wù):
[root@proxysql ~]# mysql -uadmin -padmin -h127.0.0.1 -P6032
#添加proxysql用于訪問后端數(shù)據(jù)庫
MySQL [(none)]> insert into mysql_users(username,password,default_hostgroup,transaction_persistent) values('proxysql','123456',0,1);
Query OK, 1 row affected (0.00 sec)
#添加做健康檢測的賬號
MySQL [(none)]> set mysql-monitor_username='proxysql';
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> set mysql-monitor_password='123456';
Query OK, 1 row affected (0.00 sec)
#添加后端數(shù)據(jù)庫主機,hostgroup_id 0表示寫組,1表示讀組
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(0,'192.168.0.82',3306,1,'Write Group');
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,'192.168.0.87',3306,1,'Read Group');
Query OK, 1 row affected (0.00 sec)
#將insert這樣的修改語句路由到0組(寫組)
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port,weight,comment) values(1,'192.168.0.89',3306,1,'Read Group');
Query OK, 1 row affected (0.00 sec)
#將select語句全部路由至hostgroup_id=1的組(也就是讀組)
MySQL [(none)]> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(1,1,'^INSERT.*',0,0);
Query OK, 1 row affected (0.00 sec)
#將select語句全部路由至hostgroup_id=1的組(也就是讀組)
MySQL [(none)]> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(2,1,'^SELECT',1,0);
Query OK, 1 row affected (0.00 sec)
#將show語句全部路由至hostgroup_id=1的組(也就是讀組)
MySQL [(none)]> insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply)values(3,1,'^SHOW',1,0);
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> select rule_id,active,match_digest,destination_hostgroup,apply from mysql_query_rules;
+---------+--------+--------------+-----------------------+-------+
| rule_id | active | match_digest | destination_hostgroup | apply |
+---------+--------+--------------+-----------------------+-------+
| 1 | 1 | ^INSERT.* | 0 | 0 |
| 2 | 1 | ^SELECT | 1 | 0 |
| 3 | 1 | ^SHOW | 1 | 0 |
+---------+--------+--------------+-----------------------+-------+
3 rows in set (0.00 sec)
#添加mysql_replication_groups,此配置用于與MHA結(jié)合實現(xiàn)高可用
MySQL [(none)]> insert into mysql_replication_hostgroups (writer_hostgroup,reader_hostgroup,comment)values(0,1,'test with proxysql and MHA');
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> select * from runtime_mysql_replication_hostgroups;
+------------------+------------------+----------------------------+
| writer_hostgroup | reader_hostgroup | comment |
+------------------+------------------+----------------------------+
| 0 | 1 | test with proxysql and MHA |
+------------------+------------------+----------------------------+
1 row in set (0.01 sec)
#加載剛才添加的配置
MySQL [(none)]> load mysql users to runtime;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> load mysql servers to runtime;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]> load mysql variables to runtime;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> load admin variables to runtime;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> load mysql query rules to runtime;
Query OK, 0 rows affected (0.00 sec)
#保存配置至db文件中
MySQL [(none)]> save mysql users to disk;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]> save mysql servers to disk;
Query OK, 0 rows affected (0.01 sec)
MySQL [(none)]> save mysql query rules to disk;
Query OK, 0 rows affected (0.02 sec)
MySQL [(none)]> save mysql variables to disk;
Query OK, 94 rows affected (0.01 sec)
MySQL [(none)]> save admin variables to disk;
Query OK, 31 rows affected (0.00 sec)
配置完成后,應(yīng)能夠通過192.168.0.81的6033端口訪問后端的數(shù)據(jù)庫服務(wù),如:
[root@proxysql ~]# mysql -uproxysql -p123456 -h192.168.0.81 -P6033
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
MySQL [(none)]>
MySQL [(none)]> select * from hellodb.students;
+-------+---------------+-----+--------+---------+-----------+
| StuID | Name | Age | Gender | ClassID | TeacherID |
+-------+---------------+-----+--------+---------+-----------+
| 1 | Shi Zhongyu | 22 | M | 2 | 3 |
| 2 | Shi Potian | 22 | M | 1 | 7 |
| 3 | Xie Yanke | 53 | M | 2 | 16 |
| 4 | Ding Dian | 32 | M | 4 | 4 |
| 5 | Yu Yutong | 26 | M | 3 | 1 |
| 6 | Shi Qing | 46 | M | 5 | NULL |
| 7 | Xi Ren | 19 | F | 3 | NULL |
| 8 | Lin Daiyu | 17 | F | 7 | NULL |
| 9 | Ren Yingying | 20 | F | 6 | NULL |
| 10 | Yue Lingshan | 19 | F | 3 | NULL |
| 11 | Yuan Chengzhi | 23 | M | 6 | NULL |
| 12 | Wen Qingqing | 19 | F | 1 | NULL |
| 13 | Tian Boguang | 33 | M | 2 | NULL |
| 14 | Lu Wushuang | 17 | F | 3 | NULL |
| 15 | Duan Yu | 19 | M | 4 | NULL |
| 16 | Xu Zhu | 21 | M | 1 | NULL |
| 17 | Lin Chong | 25 | M | 4 | NULL |
| 18 | Hua Rong | 23 | M | 7 | NULL |
| 19 | Xue Baochai | 18 | F | 6 | NULL |
| 20 | Diao Chan | 19 | F | 7 | NULL |
| 21 | Huang Yueying | 22 | F | 6 | NULL |
| 22 | Xiao Qiao | 20 | F | 1 | NULL |
| 23 | Ma Chao | 23 | M | 4 | NULL |
| 24 | Xu Xian | 27 | M | NULL | NULL |
| 25 | Sun Dasheng | 100 | M | NULL | NULL |
+-------+---------------+-----+--------+---------+-----------+
25 rows in set (0.01 sec)
MySQL [(none)]> insert into hellodb.students values (26,'Jin Yong',75,'M',2,3);
Query OK, 1 row affected (0.01 sec)
此時在proxysql的管理接口中,通過下述命令可以查看proxysql的工作情況:
[root@proxysql ~]# mysql -uadmin -padmin -h127.0.0.1 -P6032
MySQL [(none)]> select * from stats_mysql_query_digest;
+-----------+--------------------+----------+--------------------+---------------------------------------------------+------------+------------+------------+----------+----------+----------+
| hostgroup | schemaname | username | digest | digest_text | count_star | first_seen | last_seen | sum_time | min_time | max_time |
+-----------+--------------------+----------+--------------------+---------------------------------------------------+------------+------------+------------+----------+----------+----------+
| 0 | information_schema | proxysql | 0xF705DF6D769FEE0D | insert into hellodb.students values (?,?,?,?,?,?) | 1 | 1530285228 | 1530285228 | 6063 | 6063 | 6063 |
| 0 | information_schema | proxysql | 0x65E26382DB42BC29 | insert into hellodb.students values (?,?,?,M,?,?) | 1 | 1530285224 | 1530285224 | 4176 | 4176 | 4176 |
| 1 | information_schema | proxysql | 0x234E67CE83C9D8AD | select * from hellodb.students | 1 | 1530285184 | 1530285184 | 5992 | 5992 | 5992 |
| 1 | information_schema | proxysql | 0x02033E45904D3DF0 | show databases | 1 | 1530285175 | 1530285175 | 3938 | 3938 | 3938 |
+-----------+--------------------+----------+--------------------+---------------------------------------------------+------------+------------+------------+----------+----------+----------+
5 rows in set (0.00 sec)
相關(guān)的語句均都proxysql代理到指定的hostgroup中,說明proxysql工作正常。
四、配置MHA
在配置完成proxysql+mysql半同步主從后,最后我們來配置MHA提供Mysql的高可用。因此MHA架構(gòu)分為Manger和node,因此我需要在各監(jiān)控的節(jié)點上安裝mha4mysql-node,然后在MHA節(jié)點上安裝mha4mysql-node和mha4mysql-manager。
1、安裝mha4mysql-node
在各數(shù)據(jù)庫節(jié)點及MHA主機上安裝mha4mysql-node的rpm包:
[root@slave2 ~]# yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm
2、安裝mha4mysql-manager
另外還需要在MHA管理節(jié)點上安裝mha4mysql-manager:
#部分依賴包需要安裝epel-release來提供
[root@MHA ~]# yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm
3、修改各數(shù)據(jù)庫節(jié)點的配置文件并授權(quán)MHA管理賬號
在兩個slave節(jié)點上編輯/etc/my.cnf,添加下述配置后重啟mariadb服務(wù):
[root@slave2 ~]# vim /etc/my.cnf
relay_log_purge=0 #關(guān)閉中繼日志自動修剪功能,因為中繼日志默認會自動修剪,此時為了以后各從服務(wù)器之間的執(zhí)行過的操作對比
log-bin=master.log #因為slave有可能會變成master ,因此需要開啟binlog日志
[root@slave2 ~]# systemctl restart mariadb
在Master節(jié)點的/etc/my.cnf文件上,添加下述配置并重啟mariadb服務(wù):
[root@master ~]# vim /etc/my.cnf
relay-log=relay-bin #因為master有可能會變成slave,所以需要開啟中繼日志
[root@master ~]# systemctl restart mariadb
授權(quán)MHA管理賬號:
MariaDB [(none)]> GRANT ALL ON *.* TO 'mhauser'@'192.168.0.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4、配置MHA各節(jié)點之間的SSH免密鑰登錄
在MHA管理節(jié)點上輸入下述命令:
[root@MHA ~]# ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:NwX89jz5FtOyaeeQe9Ik1nfwWDTBFE7Uf45DjdCPxgM root@MHA
The key's randomart image is:
+---[RSA 2048]----+
| .. .+*+|
| ..E +oo|
| ..+ Bo|
| .o O *|
| S o. = @o|
| . . %+O|
| .o@=|
| =o*|
| ..*.|
+----[SHA256]-----+
[root@MHA ~]# cat .ssh/id_rsa.pub >> .ssh/authorized_keys
[root@MHA ~]# chmod go= .ssh/authorized_keys
[root@MHA ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.0.82:/root/.ssh/
[root@MHA ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.0.87:/root/.ssh/
[root@MHA ~]# scp -p .ssh/id_rsa .ssh/authorized_keys root@192.168.0.89:/root/.ssh/
#注意:請事先確保各節(jié)點上/root/.ssh目錄存在
5、配置MHA
首先創(chuàng)建MHA的配置文件:
[root@MHA ~]# vim /etc/masterha/app.cnf
[server default]
user=mhauser # MySQL 管理員,用來管理各個節(jié)點
password=123456
manager_workdir=/data/masterha/app1 #這個目錄/data/masterha/app1不需要創(chuàng)建,不存在時會自動創(chuàng)建
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1 #指各個node節(jié)點的工作目錄,自動創(chuàng)建
ssh_user=root
ssh_port=22
repl_user=slave #此處使用此前做mysql 主從時的repl賬號,注意需確保此賬號在master和slave中都存在
repl_password=123456
ping_interval=1 #多長時間檢測一次
[server1]
hostname=192.168.0.82
candidate_master=1
[server2]
hostname=192.168.0.87
candidate_master=1 #將來是否可以成為主節(jié)點,如果不定義,就不能成為候選的主節(jié)點
[server3]
hostname=192.168.0.89
candidate_master=1
#no_master=1 #如果定義no_master就不能成為主節(jié)點
創(chuàng)建配置完配置文件后,可以使用命令masterha_check_ssh來檢查各節(jié)點的ssh連通性:
[root@MHA ~]# masterha_check_ssh --conf=/etc/masterha/app.cnf
.....
MySQL Replication Health is OK.
#若最后一行出現(xiàn)上述信息,說明檢查成功;如有報錯,請根據(jù)報錯進行排查。
最后啟動MHA,需注意的是,masterha_manager沒有啟動程序,需手動啟動服務(wù):
[root@MHA ~]# nohup masterha_manager --conf=/etc/masterha/app.cnf > /data/masterha/app1/manager.log 2>& 1 &
[1] 11941
[root@MHA ~]# ps aux | grep masterha_manager | grep -v grep
root 11941 3.1 2.1 297132 21592 pts/1 S 13:13 0:00 perl /usr/bin/masterha_manager --conf=/etc/masterha/app.cnf
啟動成功后,可通過如下命令來查看 master 節(jié)點的狀態(tài)。
[root@MHA ~]# masterha_check_status --conf=/etc/masterha/app.cnf
app (pid:11429) is running(0:PING_OK), master:192.168.0.82
上述信息表示MHA服務(wù)運行正常,否則會顯示為類似于“app is stopped”類似的字眼。
若需要停止MHA,需要使用masterha_stop命令:
[root@MHA ~]# masterha_stop --conf=/etc/masterha/app.cnf
Stopped app successfully.
[1]+ Exit 1 nohup masterha_manager --conf=/etc/masterha/app.cnf > /data/masterha/app1/mnager.log 2>&1
6、測試故障轉(zhuǎn)移
在master 節(jié)點關(guān)閉mariadb服務(wù):
[root@master ~]# systemctl stop mariadb
在MHA管理節(jié)點上如果能在/data/masterha/app1/manager.log日志文件中查看到如下信息,說明manager檢查到192.168.0.82節(jié)點故障,并自動執(zhí)行故障轉(zhuǎn)移了,將192.168.0.87提升為主節(jié)點:
----- Failover Report -----
app: MySQL Master failover 192.168.0.82(192.168.0.82:3306) to 192.168.0.87(192.168.0.87:3306) succeeded
Master 192.168.0.82(192.168.0.82:3306) is down!
Check MHA Manager logs at MHA:/data/masterha/app1/manager.log for details.
Started automated(non-interactive) failover.
The latest slave 192.168.0.87(192.168.0.87:3306) has all relay logs for recovery.
Selected 192.168.0.87(192.168.0.87:3306) as a new master.
192.168.0.87(192.168.0.87:3306): OK: Applying all logs succeeded.
192.168.0.89(192.168.0.89:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.0.89(192.168.0.89:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.0.87(192.168.0.87:3306)
192.168.0.87(192.168.0.87:3306): Resetting slave info succeeded.
Master failover to 192.168.0.87(192.168.0.87:3306) completed successfully.
此時登錄Proxysql的管理接口查看相應(yīng)的servers狀態(tài):
MySQL [(none)]> select * from mysql_servers;
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-------------+
| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-------------+
| 0 | 192.168.0.87 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | Read Group |
| 1 | 192.168.0.82 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | Write Group |
| 1 | 192.168.0.89 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | Read Group |
| 1 | 192.168.0.87 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | Read Group |
+--------------+--------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-------------+
4 rows in set (0.00 sec)
從上述信息發(fā)現(xiàn),192.168.0.87被提升為hostgroup 0(寫組),而192.168.0.82則變成hostgroup 1(讀組)。這是因為proxysql的mysql_replication_hostgroups表配置的原因,mysql_replication_hostgroups 表的主要作用是監(jiān)視指定主機組中所有服務(wù)器的read_only值,并且根據(jù)read_only的值將服務(wù)器分配給寫入器或讀取器主機組,從而定義 hostgroup 的主從關(guān)系。ProxySQL monitor 模塊會監(jiān)控后端所有servers 的 read_only 變量,如果發(fā)現(xiàn)從庫的 read_only 變?yōu)?、主庫變?yōu)?,則認為角色互換了,自動改寫 mysql_servers 表里面 hostgroup 的數(shù)值,達到自動 Failover 效果。因此當MHA把后端的Master更改為192.168.0.87的時候,ProxySQL也能夠?qū)⑾鄳?yīng)的192.168.0.87調(diào)整為寫組。
結(jié)尾
最后配置完做冗余切換的時候發(fā)現(xiàn),mysql主從的半同步在MHA高可用切換后就失效了(因為master變更了),新的master上也沒有啟動相關(guān)的master插件,那估計還得重啟新master的mariadb服務(wù)才能重做,這時候相當于數(shù)據(jù)庫要停機了,后面我再研究下看看是否有其他解決辦法。