MGR 實戰(zhàn)
對一個企業(yè)級系統(tǒng)來說,數(shù)據(jù)庫是非常核心的組成部分,數(shù)據(jù)庫的可用性尤為重要。因此,數(shù)據(jù)庫架構(gòu)在設(shè)計時必須考慮足夠的高可用,才可以確保業(yè)務(wù)的連續(xù)性,不會因為故障而導(dǎo)致業(yè)務(wù)中斷。在高可用這一章,我們一起來學(xué)習(xí)一套時髦的 MySQL 高可用架構(gòu):3節(jié)點 MGR+3節(jié)點 ProxySQL+3節(jié)點 Consul
1. 一套時髦的高可用架構(gòu)
提起 MySQL的高可用,大家都會想到 MHA、MMM、PXC、MGR,特別是 MGR,近幾年成為新一代網(wǎng)紅,也是 MySQL 官方主推的一套高可用方案。在 MGR 的基礎(chǔ)上,結(jié)合一些成熟的開源軟件,可以組合出幾乎滿足所有業(yè)務(wù)場景的高可用方案。
在這里介紹一套時髦的高可用架構(gòu):3節(jié)點 MGR+3節(jié)點 ProxySQL+3節(jié)點 Consul
該架構(gòu)主要分為三層:
- Consul:dns解析、服務(wù)發(fā)現(xiàn)、健康檢查;
- ProxySQL:負(fù)載均衡、讀寫分離、故障發(fā)現(xiàn);
- MGR:單主模式、故障轉(zhuǎn)移、強(qiáng)一致性。
2. MGR
下面從實戰(zhàn)的角度一步步搭建 MGR 環(huán)境。
2.1 基本環(huán)境
MySQL-1 | MySQL-2 | MySQL-3 | |
---|---|---|---|
MySQL版本 | MySQL 5.7.30 | MySQL 5.7.30 | MySQL 5.7.30 |
操作系統(tǒng) | CentOS 7.8 | CentOS 7.8 | CentOS 7.8 |
服務(wù)器IP | 192.168.0.1 | 192.168.0.2 | 192.168.0.3 |
端口 | 對外服務(wù)端口-3066 MGR通訊端口-33061 |
對外服務(wù)端口-3066 MGR通訊端口-33061 |
對外服務(wù)端口-3066 MGR通訊端口-33061 |
服務(wù)器配置 | 2c4g | 2c4g | 2c4g |
2.2 安裝配置
1. 安裝插件:
--安裝mgr插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
--檢查
show plugins
2. 配置 hosts:
vi /etc/hosts
192.168.0.1 mysql-1
192.168.0.2 mysql-2
192.168.0.3 mysql-3
3. 修改 auto.cnf:
如果三臺 MySQL 目錄的 server-uuid 一致,需進(jìn)行修改
vi /mysql/data/auto.cnf
--主庫的server-uuid的末尾建議設(shè)置成0001,依次類推,這樣方便識別
[auto]
server-uuid=c734397b-3b0a-11e8-add1-fa163e8e0001
4. 配置 my.cnf:
#Group Replication
binlog_checksum = NONE
transaction_write_set_extraction = XXHASH64
slave_preserve_commit_order = true
loose-group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
loose-group_replication_start_on_boot = off
loose-group_replication_local_address = '192.168.0.1:33061'
loose-group_replication_group_seeds ='192.168.0.2:33061, 192.168.0.3:33061, 192.168.0.1:33061'
loose-group_replication_bootstrap_group = off
# single primary
loose-group_replication_single_primary_mode = on
# multi primary
#loose-group_replication_single_primary_mode = off
#loose-group_replication_enforce_update_everywhere_checks=true
5. 啟動MGR-主庫
--配置復(fù)制用戶
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
--建立channel
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
--第一個節(jié)點啟動時,需要設(shè)置bootstrap_group
SET GLOBAL group_replication_bootstrap_group = ON;
--啟動MGR
START GROUP_REPLICATION;
--取消bootstrap_group
SET GLOBAL group_replication_bootstrap_group = OFF;
--查看當(dāng)前MGR成員信息
SELECT * FROM performance_schema.replication_group_members;
6. 啟動MGR-從庫
--配置復(fù)制用戶
set sql_log_bin=off;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' IDENTIFIED BY '123456';
set sql_log_bin=on;
--建立channel
CHANGE MASTER TO MASTER_USER='repl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
--啟動MGR
START GROUP_REPLICATION;
7. 查看MGR
--查看當(dāng)前MGR成員信息
SELECT * FROM performance_schema.replication_group_members;
--查看只讀參數(shù)
show variables like '%read_only%';
2.3 基礎(chǔ)維護(hù)
1. 啟動MGR
START GROUP_REPLICATION;
2. 停止MGR
STOP GROUP_REPLICATION;
3. 小結(jié)
本小節(jié)主要介紹了當(dāng)前主流的高可用架構(gòu):3節(jié)點 MGR+3節(jié)點 ProxySQL+3節(jié)點 Consul,以及從實戰(zhàn)角度介紹如何搭建 MGR 環(huán)境。
MGR 在 MySQL 高可用領(lǐng)域,屬于新一代網(wǎng)紅,也是 MySQL 官方主推的高可用方案,掌握 MGR 這門技術(shù)已經(jīng)變得越來越重要。