• MySQL Group Replication集群部署,基于官方文档


    mysql 集群部署

    修改/etc/hosts配置

    10.10.21.11 cluster1

    10.10.21.12 cluster2

    10.10.21.13 cluster3

    更改服务器hostname

    hostnamectl set-hostname cluster1

    配置mysql 配置文件 /etc/my.cnf

    在[mysqld]下加入

    server_id=12
    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_start_on_boot=off
    group_replication_local_address= "10.10.21.12:33061"
    group_replication_group_seeds= "10.10.21.12:33061,10.10.21.13:33061,10.10.21.14:33061"
    group_replication_bootstrap_group=off

    注意:

    server_id 为主机标识;用来区分其他成员;

    group_replication_group_name为集群名 格式为UUID;可以通过SELECT UUID()生成一个UUID作为组名

    group_replication_local_address 为当前主机和其他集群成员通信地址(本机host地址:端口号);

    group_replication_group_seeds 为当前集群成员地址列表,中间','隔开

    以root用户或 管理员用户连接mysql ,授权普通用户(idss)为管理员
    GRANT ALL PRIVILEGES ON *.* TO 'idss'@'localhost' WITH GRANT OPTION;
    GRANT ALL PRIVILEGES ON *.* TO 'idss'@'%' WITH GRANT OPTION;
    

    注意: 'localhost' 为本地连接的权限, '%' 为所有任何主机连接权限

    创建用于分布式恢复的复制用户

    连接mysql后,执行

    # 如果要禁用二进制日志记录以便在每个实例上分别创建复制用户
    
    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 MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
    

    配置并启动服务器后,安装组复制插件

    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    

    检查插件安装成功

    SHOW PLUGINS;
    

    自选举

    首次启动组的过程称为引导。您可以使用 group_replication_bootstrap_group 系统变量来引导组。引导程序只能由一台服务器(启动该组的服务器)执行一次,并且只能执行一次。这就是为什么group_replication_bootstrap_group 选项值 未存储在实例的选项文件中的原因。如果将其保存在选项文件中,则服务器在重新启动时会自动引导另一个具有相同名称的组。这将导致两个不同的组具有相同的名称。相同的理由适用于在此选项设置为的情况下停止和重新启动插件ON。因此,为了安全地引导该组,请连接到s1并发出以下语句:

    SET GLOBAL group_replication_bootstrap_group=ON;
    
    START GROUP_REPLICATION;
    
    SET GLOBAL group_replication_bootstrap_group=OFF;
    

    如果您要为START GROUP_REPLICATION语句提供分布式恢复的用户凭据(可以从MySQL 8.0.21开始),则发出以下语句:

    SET GLOBAL group_replication_bootstrap_group=ON;
    
    START GROUP_REPLICATION USER='rpl_user', PASSWORD='password'; 
    
    SET GLOBAL group_replication_bootstrap_group=OFF;
    

    一旦START GROUP_REPLICATION 语句返回,该集团已启动。您可以检查是否已创建该组,并且其中有一个成员:

    SELECT * FROM performance_schema.replication_group_members;
    
    将其他实例添加到组中
    server_id=13
    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_start_on_boot=off
    group_replication_local_address= "10.10.21.13:33061"
    group_replication_group_seeds= "10.10.21.12:33061,10.10.21.13:33061,10.10.21.14:33061"
    group_replication_bootstrap_group=off
    

    创建复制组用户

    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 MASTER TO语句提供用户凭据 ,请在此之后发出以下语句:

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

    启动组复制,并且s2启动加入组的过程。

    START GROUP_REPLICATION;
    

    或者,如果您要为START GROUP_REPLICATION语句提供分布式恢复的用户凭据(可以从MySQL 8.0.21开始):

    START GROUP_REPLICATION USER='rpl_user', PASSWORD='password';
    

    不像是同在S1上执行这些前面的步骤,这里有在你的差异 并不需要引导组,因为组已经存在。换句话说,s2 group_replication_bootstrap_group 上的设置为OFF,并且SET GLOBAL group_replication_bootstrap_group=ON;在开始组复制之前不会发出问题 ,因为该组已经由服务器s1创建并引导。此时,仅需要将服务器s2添加到已经存在的组中。

    注意:

    当组复制成功启动并且服务器加入该组时,它将检查该 super_read_only变量。通过super_read_only 在成员的配置文件中设置为ON,可以确保由于任何原因启动组复制而失败的服务器不接受事务。如果服务器应将该组作为读写实例加入该组,例如作为单主要组的主要实例或多主要组的成员,则在将该 super_read_only变量设置为ON时,将其设置为OFF加入小组。

  • 相关阅读:
    Computer Vision: Algorithms and ApplicationsのImage processing
    LOJ6079「2017 山东一轮集训 Day7」养猫
    网络七层协议及其作用
    观察者模式深度剖析
    NIO 中的读和写
    NIO的通道和缓冲区
    NIO简介
    使用OutputStream向屏幕上输出内容
    对象的序列化
    PushBackInputStream回退流
  • 原文地址:https://www.cnblogs.com/cheng825/p/14000261.html
Copyright © 2020-2023  润新知