MHA+ProxySQL實現(xiàn)Mysql的讀寫分離+高可用

一、前言

最近在研究完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ù)庫要停機了,后面我再研究下看看是否有其他解決辦法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容