mysql组复制
组复制是一种可用于实现容错系统的技术。 复制组是一个通过消息传递相互交互的 server 集群。通信层提供了原子消息(atomic message)和完全有序信息交互等保障机制,实现了基于复制协议的多主更新,复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。
实验主机:
Server1—->172.25.25.1
Server2—->172.25.25.2
Server3—->172.25.25.3
根据 MySQL 组复制要求更改配置文件/etc/my.cnf
以server1为例,其他两个一样,只是id号与local_address不同,id号不要冲突,local_address为本机ip地址
[root@server1 ~]# vim /etc/my.cnf
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
##组复制设置
transaction_write_set_extraction=XXHASH64 #指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"#表示将加入或者创建的复制组命名为aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa,可以自己指定
loose-group_replication_start_on_boot=off #插件在 server 启动时不自动启动组复制
loose-group_replication_local_address= "172.25.25.1:24901"#绑定本地的172.25.25.1以及25901端口接受其他组成员的连接,IP地址必须为其他组成员可正常访问
loose-group_replication_group_seeds="172.25.1:24901,172.25.25.2:24901,172.25.25.3:24901" #本行为告诉服务器当服务器加入组时,应当连接到172.25.25.1:24901,172.25.25.2:24901,172.25.25.3:24901这些种子服务器进行配置。本设置可以不是全部的组成员服务地址
loose-group_replication_bootstrap_group= off#配置是否自动引导组
loose-group_replication_ip_whitelist=”172.25.25.0/24,127.0.0.1/8”#开启白名单,认情况下只允许白名单连接到复制组,如果是其他IP则需要配置。
loose-group_replication_single_primary_mode=off#设置组自动选择一个 server 来处理读/写工作。 这个 server 是主(PRIMARY),所有其他的都是从
loose-group_replication_update_everywhere_checks=on
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
配置数据库
在其中一个节点,如Server3上
更改数据库密码
创建具有 REPLICATION-SLAVE 权限的 MySQL 用户。 此操作不应记录到二进制日志中,
避免将更改传递到其他 server
用户进行上述配置后,需要使用 CHANGE MASTER TO 语句将 server 配置为,在下次需要从其他成员恢复其状态时,使用 group_replication_recovery 复制通道的给定凭据
启动组复制
配置并启动 server s1后,安装组复制插件
要检查插件已成功安装
要启动组,请指示 server s1 引导组,然后启动组复制程序。 此引导应仅由单个 sever 独立完成,该 server 启动组并且只启动一次。如果将其保存在配置文件中,则在重新启动时,server 会自动引导具有相同名称的第二个组。 这将导致两个不同的组具有相同的名称。 同样的道理适用于停止和重新启动插件,并且此选项设置为 ON。
查看,显示为online则配置成功,检查该组现在是否已创
建并且其中已经有一个成员
其他两个主机(server1,server2)与server3的过程类似,在配置文件就位的情况下启动 server
Server2
装组复制插件,并启动将 server 加入组的程序
与之前的步骤不同,这里与 s1 上执行的那些步骤有一个区别
就是不执行 SET GLOBAL group_replication_bootstrap_group = ON 的操作; 在启动组复制之前,因为该组已由 server s1创建和引导。 此时,server s2 只需要添加到已经存在的组中
检查该组现在是否已创建并且其中已经加入一个成员
Server1
与server2 的配置完全一样
查看server1已加入组且已与组中的其他 server 成员同步
测试
在其中一个节点上操作数据库,其他两个节点都会同步到
如在server3上操作数据库
server2查看
server1查看
在server1或server2上操作数据库,同样也会同步到其余两个主机上面