频道栏目
首页 > 资讯 > Linux > 正文

MySQL多组复制

18-12-15        来源:[db:作者]  
收藏   我要投稿

组复制原理:

组复制是一种可用于实现容错系统的技术。 复制组是一个通过消息传递相互交互的 server 集群。

通信层提供了原子消息(atomic message)和完全有序信息交互等保障机制。 这些是非常强大的功能,我们可以据此架构设计更高级的数据库复制解决方案。

MySQL 组复制以这些功能和架构为基础,实现了基于复制协议的多主更新。

复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。换句话说,对于任何 RW 事务,提交操作并不是由始发 server 单向决定的,而是由组来决定是否提交。准确地说,在始发 server 上,当事务准备好提交时,该 server 会广播写入值(已改变的行)和对应的写入集(已更新的行的唯一标识符)。然后会为该事务建立一个全局的顺序。最终,这意味着所有 server 成员以相同的顺序接收同一组事务。因此,所有 server 成员以相同的顺序应用相同的更改,以确保组内一致。

在不同 server 上并发执行的事务可能存在冲突。 根据组复制的冲突检测机制,对两个不同的并发事务的写集合进行检测。如在不同的 server 成员执行两个更新同一行的并发事务,则会出现冲突。排在最前面的事务可以在所有 server 成员上提交,第二个事务在源 server 上回滚,并在组中的其他 server 上删除。 这就是分布式的先提交当选规则。

在单主模式下部署组复制

组中的每个 server 实例可以在独立的物理机器上运行,也可以在同一台机器上运行。 如何在一台物理机上创建具有三个 MySQL Server 实例的复制组。这意味着需要三个数据目录,每个 server 实例一个,每个实例都需要单独配置。

组架构

【server1】主机设置

1.组复制 server 设置

【server1】

[root@server1 ~]# /etc/init.d/mysqld stop

[root@server1 ~]# cd /var/lib/mysql

[root@server1 mysql]# rm -fr *

[root@server1 mysql]# vim /etc/my.cnf

删除之前加进去的所有行

[root@server1 mysql]# /etc/init.d/mysqld start

2.复制框架,组复制设置

[root@server1 mysql]# vim /etc/my.cnf

29 server_id=1

30 gtid_mode=ON

31 enforce_gtid_consistency=ON

32 master_info_repository=TABLE

33 relay_log_info_repository=TABLE

34 binlog_checksum=NONE

35 log_slave_updates=ON

36 log_bin=binlog

37 binlog_format=ROW

......

40 transaction_write_set_extraction=XXHASH64 #指示Server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列

41 loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

42 loose-group_replication_start_on_boot=off #设置为Server启动时不自动启动组复制

43 loose-group_replication_local_address= "172.25.40.1:24901" #本机IP

44 loose-group_replication_group_seeds="172.25.40.1:24901,172.25.40.2:24901,172.25.40.3:24901"

45 loose-group_replication_bootstrap_group=off #配置是否自动引导组

[root@server1 mysql]# /etc/init.d/mysqld restart

Stopping mysqld: [ OK ]

Starting mysqld: [ OK ]

这里写图片描述

【server3】

mysql> select uuid();

这里写图片描述

【server1】

[root@server1 mysql]# vim /etc/my.cnf

#加入任意一台mysql的uuid

41 loose-group_replication_group_name="c125de12-9c7d-11e8-ba9d-525400ccfb41"

......

46 loose-group_replication_single_primary_mode=off #设置组自动选择一个 server 来处理读/写工作。

47 loose-group_replication_enforce_update_everywhere_checks=on #多主模式下为多主更新启用或禁用严格一致性检查。

48 loose-group_replication_ip_whitelist="172.25.40.0/24,127.0.0.1/8" #加入白名单

[root@server1 mysql]# /etc/init.d/mysqld restart

[root@server1 mysql]# grep password /var/log/mysqld.log #查看初始化密码

#复制日志下面的一个初始化密码

3.启动组复制

[root@server1 mysql]# mysql -p

Enter password: #初始化密码

mysql> ALTER USER root@localhost identified by 'Westos.123'; #更改密码

mysql> show databases;

mysql> SET SQL_LOG_BIN=0; #以下操作不写入日志

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'Westos.123'; #创建用户 rpl_use

mysql> FLUSH PRIVILEGES;

mysql> reset master;

mysql> SET SQL_LOG_BIN=1;

mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='Westos.123' FOR CHANNEL 'group_replication_recovery'; #将 rpl_user 和 rpl_pass 替换为创建用户时使用的值

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; #安装组复制插件

mysql> show plugins; #检查插件是否安插成功

这里写图片描述

mysql> SET GLOBAL group_replication_bootstrap_group=ON;

mysql> START GROUP_REPLICATION;

mysql> SET GLOBAL group_replication_bootstrap_group=OFF;

mysql> SELECT * FROM performance_schema.replication_group_members;

这里写图片描述

【server2】主机设置

[root@server2 ~]# /etc/init.d/mysqld stop

[root@server2 ~]# cd /var/lib/mysql

[root@server2 mysql]# rm -fr *

[root@server2 mysql]# vim /etc/my.cnf

删除之前加进去的所有行

[root@server2 mysql]# /etc/init.d/mysqld start

2.复制框架,组复制设置

[root@server2 mysql]# vim /etc/my.cnf

29 server_id=1

30 gtid_mode=ON

31 enforce_gtid_consistency=ON

32 master_info_repository=TABLE

33 relay_log_info_repository=TABLE

34 binlog_checksum=NONE

35 log_slave_updates=ON

36 log_bin=binlog

37 binlog_format=ROW

......

40 transaction_write_set_extraction=XXHASH64

41 loose-group_replication_group_name="c125de12-9c7d-11e8-ba9d-525400ccfb41" #uuid和server1写的一致

42 loose-group_replication_start_on_boot=off

43 loose-group_replication_local_address= "172.25.40.2:24901" #本机IP

44 loose-group_replication_group_seeds="172.25.40.1:24901,172.25.40.2:24901,172.25.40.3:24901" #集群所有节点ip

45 loose-group_replication_single_primary_mode=off

46 loose-group_replication_enforce_update_everywhere_checks=on

47 loose-group_replication_ip_whitelist="172.25.40.0/24,127.0.0.1/8" #加入白名单

[root@server1 mysql]# /etc/init.d/mysqld restart

Stopping mysqld: [ OK ]

Starting mysqld: [ OK ]

【server2】

[root@server1 mysql]# grep password /var/log/mysqld.log #查看初始化密码

#复制日志下面的一个初始化密码

3.启动组复制

[root@server2 mysql]# mysql -p

Enter password: #初始化密码

mysql> ALTER USER root@localhost identified by 'Westos.123'; #更改密码

mysql> show databases;

mysql> SET SQL_LOG_BIN=0;

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'Westos.123'; #创建用户 rpl_use

mysql> FLUSH PRIVILEGES;

mysql> reset master;

mysql> SET SQL_LOG_BIN=1; #操作写入日志

mysql> CHANGE MASTER TO MASTER_USER='rpl_user',MASTER_PASSWORD='Westos.123' FOR CHANNEL 'group_replication_recovery'; #将 rpl_user 和 rpl_pass 替换为创建用户时使用的值

mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; #安装组复制插件

mysql> show plugins; #检查插件是否安插成功

mysql> START GROUP_REPLICATION;

mysql> SELECT * FROM performance_schema.replication_group_members;

这里写图片描述

【server3】主机设置操作和【server2】一样

测试:

【server1】 创建数据库

mysql> CREATE DATABASE test;

mysql> use test

mysql> INSERT INTO t1 VALUES (1, 'Luis');

mysql> SELECT * FROM t1;

这里写图片描述

【server2】

mysql> show databases;

mysql> use test

mysql> SELECT * FROM t1;

可以看到server1主机上的数据库信息已经复制到server2主机上。

配置过程常见的错误:

1.来源IP没有在白名单列表中,所以连接拒绝

2.没有配置同步账号跟密码,使用的是空密码进行同步。 需要为复制通道group_replication_recovery设置同步信息:CHANGE MASTER TO MASTER_USER=’mysqlsync’, MASTER_PASSWORD=’mysqlsync_password’ FOR CHANNEL ‘group_replication_recovery’;

3.删除validate_password密码验证插件。

相关TAG标签
上一篇:Coatue领投,作业帮完成3.5亿美元D轮融资
下一篇:hive根据现有数据表创建分区表,进行动态或静态分区插入数据
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站