MySQL全新高可用解决方案-MGR(全称 MySQL Group Replication)
docker run -itd --restart always -p 3300:3306 -p 3360:33061 --name mysql800 -h mysql800 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/file/:/data/file/ \
-v /data/docker/mysql/mysql8/mgr-00.cnf:/etc/mysql/conf.d/mgr.cnf:ro \
-e MYSQL_ROOT_PASSWORD=wdqdmm@r \
-e MYSQL_ALLOW_EMPTY_PASSWORD=no \
mysql:latest --default-authentication-plugin=mysql_native_password
docker stop mysql800
docker rm mysql800
rm -rf /data/db/mysql8/mysql80*/* /data/file/logs/mysql8/mysql80*/*
vim /data/docker/mysql/mysql8/mgr-00.cnf
[mysqld]
skip-host-cache
skip-name-resolve
#skip-grant-tables
bind-address=0.0.0.0
max_connections = 10000
max_allowed_packet = 500M
wait_timeout = 600
connect_timeout = 10
interactive_timeout = 600
max_connect_errors = 10000
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
explicit_defaults_for_timestamp = true
character_set_filesystem = utf8mb4
init_connect = 'SET collation_connection = utf8mb4_general_ci'
#设置client连接mysql时的字符集,防止乱码
init-connect = 'SET NAMES utf8mb4'
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-client-handshake = FALSE
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
skip-character-set-client-handshake=1 //使用服务端字符集
# 每个节点要求不一样
server_id=800
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_replica_updates=ON
binlog_format=ROW
innodb_buffer_pool_size=1g
# 启动加载组复制插件
plugin_load_add='group_replication.so'
# 集群唯一ID
group_replication_group_name="20210831"
# 是否启动MySQL服务时启动组复制,建议值:off
group_replication_start_on_boot=off
# 本地IP后面端口33061可自定义,集群通信端口,建议统一端口
group_replication_local_address= "127.0.0.1:3360"
# 初始化集群成员列表,可动态修改
group_replication_group_seeds= "127.0.0.1:3360,127.0.0.1:3361,127.0.0.1:3362"
# 判断是否为引导组
group_replication_bootstrap_group=off
# 设置白名单,这里特别注意,如果是同网段可以不用设置,如果是不同网段则需要修改否则通信端口不可访问
#loose-group_replication_ip_whitelist='10.10.1.214,10.10.1.217,10.10.6.91'
log_error=/var/lib/mysql/error.log
slow_launch_time=2
slow_query_log=ON
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
---具备以下特性:
高一致性,基于原生复制及Paxos协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;
高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
高灵活性,有单主模式(图1)和多主模式(图2),单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有server都可以同时处理更新操作。
10.10.1.214
10.10.1.217
10.10.6.91
安装版本均为最新版本8.0.24
---通用配置说明
[mysqld]
bind-address=0.0.0.0
datadir=/home/mysql/mysql-8.0.24-linux-glibc2.12-x86_64/data
basedir=/home/mysql/mysql-8.0.24-linux-glibc2.12-x86_64
port=3306
socket=/home/mysql/mysql-8.0.24-linux-glibc2.12-x86_64/data/mysqld.sock
user=mysql
# 每个节点要求不一样
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
innodb_buffer_pool_size=1g
# 8.0 默认值XXHASH64,针对写事务进行哈希处理
transaction_write_set_extraction=XXHASH64
# 启动加载组复制插件
plugin_load_add='group_replication.so'
# 集群唯一ID
group_replication_group_name="8d3cebd8-b132-11eb-8529-0242ac130003"
# 是否启动MySQL服务时启动组复制,建议值:off
group_replication_start_on_boot=off
# 本地IP后面端口33061可自定义,集群通信端口,建议统一端口
group_replication_local_address= "10.10.1.214:33061"
# 初始化集群成员列表,可动态修改
group_replication_group_seeds= "10.10.1.214:33061,10.10.1.217:33061,10.10.6.91:33061"
# 判断是否为引导组
group_replication_bootstrap_group=off
# 设置白名单,这里特别注意,如果是同网段可以不用设置,如果是不同网段则需要修改否则通信端口不可访问
#loose-group_replication_ip_whitelist='10.10.1.214,10.10.1.217,10.10.6.91'
---单主模式部署
1.1 引导节点初始化
# 创建用户和安装插件
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS;
+------------------------+----------+--------------------+---------------------------------+
| Name | Status | Type | Library |
+------------------------+----------+--------------------+----------------------------------+
| group_replication | ACTIVE | GROUP REPLICATION | group_replication.so |
+------------------------+----------+--------------------+----------------------------------+
# 启动引导节点
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+---------------+-------------+------------+--------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST |MEMBER_PORT| MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+---------------+-------------+------------+--------------------+
| group_replication_applier | 4cf69361-b22b | 10-10-1-214 | 3306 | ONLINE | PRIMARY | 8.0.24
+---------------------------+---------------+-------------+------------+--------------------+
1.2 加入从节点
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;
# 检查状态
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+---------------+-------------+-------------+--------------+---------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+---------------+-------------+-------------+--------------+---------------+
| group_replication_applier | 4cf69361-b22b | 10-10-1-214 | 3306 | ONLINE | PRIMARY | 8.0.24
| group_replication_applier | 53f39dba-b22b | 10-10-1-217 | 3306 | ONLINE | SECONDARY | 8.0.24
+---------------------------+---------------+-------------+-------+----------+-------------------------+
其他一个节点执行上述即可,执行完成后检查
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+---------------+---------------+-------------+--------------+-------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+---------------+---------------+-------------+--------------+--------------+
| group_replication_applier | 4cf69361-b22b | 10-10-1-214 | 3306 | ONLINE | PRIMARY | 8.0.24 |
| group_replication_applier | 53f39dba-b22b | 10-10-1-217 | 3306 | ONLINE | SECONDARY | 8.0.24 |
| group_replication_applier | 56779526-b22b | 10-10-6-91 | 3306 | ONLINE | SECONDARY | 8.0.24 |
+---------------------------+-------------------------------+--------------+-------------+--------------+
---多主模式部署
-多主模式和单主部署方式差不多,只在加入集群时多执行:
set global group_replication_single_primary_mode=off;
https://my.oschina.net/vivotech/blog/5214439