MGR添加新成员

添加新的MySQL Pod

详细信息请参见新添加MySQL Pod(mysql-4 Pod)

初始化新成员数据库

由于本文使用到的MySQL镜像会在启动时检查并自动初始化,可跳过本步骤。

使用其他非自动初始化的镜像时,可参考初始化操作如下:

假设K8s集群中已新添加了mysql-4 Pod,并已将其所在物理机上的“/data/mysql/mysql_4/mysql_arm.cnf”文件挂载为了Pod中的“/etc/my.cnf”文件,在K8s master节点上执行如下初始化操作:

  1. 登录数据库。

    1
    kubectl exec -it mysql-4 -n ns-mysql-test -- /bin/bash
    

  2. 数据库初始化。

    1
    mysqld --defaults-file=/etc/my.cnf --initialize
    

  3. 启动数据库。

    1
    mysqld --defaults-file=/etc/my.cnf &
    

  4. 连接数据库。

    1
    mysql -uroot -p -S /data/mysql/run/mysql.sock
    

  5. 修改root用户密码。

    1
    2
    3
    4
    alter user 'root'@'localhost' identified by "test123";
    create user 'root'@'%' identified by 'test123';
    grant all privileges on *.* to 'root'@'%';
    flush privileges;
    

配置MGR参数

  1. 成员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
    

  2. 修改group其他成员的group_replication_group_seeds参数。

    1
    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。

  3. 在新增节点执行以下命令,创建复制账号。

    第一个命令表示当前session里的所有操作都不记录到bin_log里。

    1
    2
    3
    4
    5
    6
    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;
    

  4. 在新增节点执行以下命令,设置认证信息。

    1
    CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
    

  5. 在新增节点执行以下命令,确认是否安装group_replication插件。

    1
    show plugins
    

  6. 重启MySQL。

    1
    shutdown;
    

    重启MySQL后会使mysql-4的Pod退出并自动部署新的Pod,需要重新登录该Pod的MySQL。

  7. 启动group复制。

    1
    START GROUP_REPLICATION;
    

  8. 确认成员状态。

    1
    SELECT * FROM performance_schema.replication_group_members;
    

    确认节点加入成功并且状态为ONLINE时,可对比新增节点和主库的数据。