初始化新成员数据库
由于本文使用到的MySQL镜像会在启动时检查并自动初始化,可跳过本步骤。
使用其他非自动初始化的镜像时,可参考初始化操作如下:
假设K8s集群中已新添加了mysql-4 Pod,并已将其所在物理机上的“/data/mysql/mysql_4/mysql_arm.cnf”文件挂载为了Pod中的“/etc/my.cnf”文件,在K8s master节点上执行如下初始化操作:
- 登录数据库。
| kubectl exec -it mysql-4 -n ns-mysql-test -- /bin/bash
|
- 数据库初始化。
| mysqld --defaults-file=/etc/my.cnf --initialize
|
- 启动数据库。
| mysqld --defaults-file=/etc/my.cnf &
|
- 连接数据库。
| mysql -uroot -p -S /data/mysql/run/mysql.sock
|
- 修改root用户密码。
| alter user 'root'@'localhost' identified by "test123";
create user 'root'@'%' identified by 'test123';
grant all privileges on *.* to 'root'@'%';
flush privileges;
|
配置MGR参数
- 成员4(mysql-4)参数文件(mysql-4 Pod所在物理机上“/data/mysql/mysql_4/mysql_arm.cnf”文件)里增加如下参数设置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | skip_log_bin
#log-bin=mysql-bin
ssl=0
table_open_cache=30000
max_connect_errors=2000
innodb_adaptive_hash_index=0
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=4 ##组内每个成员有各自的server_id
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so' ##服务器启动时,加载该参数设置的引擎
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" ##配置Group replication的组名
group_replication_start_on_boot=off ##Mysql服务起来以后,引擎不会自动起来。如果所有group成员配置完成,可以设置成on
group_replication_local_address= "10.99.0.18:33061" ##本机地址和端口,此地址只是用来与group communication engine进行交互,不能等同于client端连接的地址和端口,8.0.14以后,可以使用IPV6
group_replication_group_seeds= "10.99.0.15:33061,10.99.0.16:33061,10.99.0.17:33061,10.99.0.18:33061" ##所有group成员的地址和端口
group_replication_bootstrap_group=off ##此参数不能在参数文件里设置成on
|
- 修改group其他成员的group_replication_group_seeds参数。
| set global group_replication_group_seeds= "10.99.0.15:33061,10.99.0.16:33061,10.99.0.17:33061,10.99.0.18:33061";
|
并在其他成员的mysql_arm.cnf文件中相应修改group_replication_group_seeds参数,添加新成员10.99.0.18:33061。
- 在新增节点执行以下命令,创建复制账号。
第一个命令表示当前session里的所有操作都不记录到bin_log里。
| SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
|
- 在新增节点执行以下命令,设置认证信息。
| CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
|
- 在新增节点执行以下命令,确认是否安装group_replication插件。
- 重启MySQL。
重启MySQL后会使mysql-4的Pod退出并自动部署新的Pod,需要重新登录该Pod的MySQL。
- 启动group复制。
- 确认成员状态。
| SELECT * FROM performance_schema.replication_group_members;
|
确认节点加入成功并且状态为ONLINE时,可对比新增节点和主库的数据。