问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何看待MySQL发布的Group Replication

发布网友 发布时间:2022-05-01 19:46

我来回答

4个回答

懂视网 时间:2022-05-02 00:07

组复制可以在两种模式下运行。

1.在单主模式下,组复制具有自动选主功能,每次只有一个 server成员接受更新。
2.在多主模式下,所有的 server 成员都可以同时接受更新.


组复制与异步主从复制区别.

1.传统mysql主从复制,是在主节点执行和提交事务,然后把他们异步的发送到从节点,行复制的重新执行主节点的SQL语句,这是一个 shared-nothing 的系统,默认情况下所有 server 成员都有一个完整的数据副本。


技术分享


2.半同步复制,它在协议中添加了一个同步步骤。 这意味着主节点在提交时需要等待从节点确认它已经接收到事务。只有这样,主节点才能继续提交操作。


技术分享




3.MySQL 组复制实现了基于复制协议的多主更新。
1)复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事务。但所有读写(RW)事务只有在冲突检测成功后才会提交。只读(RO)事务不需要在冲突检测,可以立即提交。

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

3)组复制使您能够根据在一组 server 中复制系统的状态来创建具有冗余的容错系统。因此,只要它不是全部或多数 server 发生故障,即使有一些 server 故障,系统仍然可用,最多只是性能和可伸缩性降低,但它仍然可用。server 故障是孤立并且独立的。它们由组成员服务来监控,组成员服务依赖于分布式故障检测系统,其能够在任何 server 自愿地或由于意外停止而离开组时发出信号。

4)他们是由一个分布式恢复程序来确保当有 server 加入组时,它们会自动更新组信息到最新。并且多主更新确保了即使在单个服务器故障的情况下也不会阻止更新,不必进行 server故障转移。因此,MySQL 组复制保证数据库服务持续可用。

5)值得注意的一点是,尽管数据库服务可用,但当有一个 server 崩溃时,连接到它的客户端必须定向或故障转移到不同的 server。
这不是组复制要解决的问题。连接器,负载均衡器,路由器或其他形式的中间件更适合处理这个问题。
总之,MySQL 组复制提供了高可用性,高弹性,可靠的 MySQL 服务。




技术分享




下面展示,Mysql组复制之多主模式


server* (33,44,55)


vim /etc/my.cnf

24 server_id=3
25 gtid_mode=ON
26 enforce_gtid_consistency=ON
27 master_info_repository=TABLE     
28 relay_log_info_repository=TABLE  
#此选项可以写FILE(明文存储在relay-log.info 不安全,推荐写TABLE,存储在mysql.slave_relay_log_info)
29 binlog_checksum=NONE #关闭binlog校验
30 log_slave_updates=ON   
#当server为slave时,要记录数据改变到自己二进制日志中,换句话说,是否让他的slave同步其数据.
31 log_bin=binlog
32 binlog_format=ROW    #组复制依赖基于行的复制格式
33
34 transaction_write_set_extraction = XXHASH64    
#以便在server收集写集合的同时将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突。
35 group_replication_start_on_boot = OFF  #同下
36 group_replication_bootstrap_group = OFF 
#为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
37 group_replication_group_name = "b6ddfda0-d8bc-4272-a58f-4ea75acbbc79"  #组的名字可以随便起,但不能用主机的GTID
38 group_replication_local_address = ‘172.25.88.33:23306‘ #写自己主机所在IP
39 group_replication_group_seeds = ‘172.25.88.33:23306,172.25.88.44:23306,172.25.88.55:2330‘
40 #41,42行是开启多主模式的参数
41 group_replication_single_primary_mode=FALSE
42 group_replication_enforce_update_everywhere_checks=TRUE

server*:


组内每台主机都需要先安装组复制插件.
mysql>INSTALL PLUGIN group_replication SONAME ‘group_replication.so‘;

server33:


mysql>SET GLOBAL group_replication_bootstrap_group=ON; 
#这句只有server33,在第一次执行引导组的时候执行.
mysql> CREATE USER repl@‘%‘;
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@‘%‘ IDENTIFIED BY ‘repl‘;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER=‘repl‘,MASTER_PASSWORD=‘repl‘ FOR CHANNEL ‘group_replication_recovery‘;
Query OK, 0 rows affected, 2 warnings (0.27 sec)

mysql> set global group_replication_ip_whitelist="127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.25.88.0/24";
Query OK, 0 rows affected (0.00 sec)

mysql> START GROUP_REPLICATION;                                                 Query OK, 0 rows affected (1.32 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST         | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
| group_replication_applier | eb724b27-19b2-11e7-8c21-525400cef621 | server33.lalala.com |        3306 | ONLINE       |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
1 row in set (0.00 sec)


配置 group_replication_recovery 通道的恢复凭据


server44,55:


mysql> CHANGE MASTER TO MASTER_USER=‘repl‘,MASTER_PASSWORD=‘repl‘ FOR CHANNEL ‘group_replication_recovery‘;
Query OK, 0 rows affected, 2 warnings (0.56 sec)

mysql> set global group_replication_ip_whitelist="127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.25.88.0/24";
Query OK, 0 rows affected (0.01 sec)

mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (4.02 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST         | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
| group_replication_applier | 8d5b8fa6-19a1-11e7-9641-52540042c9d3 | server44.lalala.com |        3306 | ONLINE       |
| group_replication_applier | c5070c7c-19a3-11e7-9c1d-5254008cd713 | server55.lalala.com |        3306 | ONLINE       |
| group_replication_applier | eb724b27-19b2-11e7-8c21-525400cef621 | server33.lalala.com |        3306 | ONLINE       |
+---------------------------+--------------------------------------+---------------------+-------------+--------------+
3 rows in set (0.00 sec)


检验

server33:


mysql> create database test;
Query OK, 1 row affected (0.15 sec)

mysql> use test;
Database changed
mysql>  CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
Query OK, 0 rows affected (0.94 sec)

mysql>  INSERT INTO t1 VALUES (1, ‘lalala‘);
Query OK, 1 row affected (0.46 sec)

mysql> select * from t1;
+----+--------+
| c1 | c2     |
+----+--------+
|  1 | lalala |
+----+--------+
1 row in set (0.00 sec)


在server44,55 可以看见组复制,同步过来的数据


技术分享



可以在performance_schema中看见组成员


技术分享



排错


没有设置白名单网段:需要添加自己所在网段.


报错:‘[GCS] The member is leaving a group without being on one.‘

解决:set global group_replication_ip_whitelist="127.0.0.1/32,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,172.25.88.0/24"; START GROUP_REPLICATION;


本文出自 “12049878” 博客,谢绝转载!

MGR——Mysql的组复制之多主模式

标签:mysql   mgr   组复制   多主模式   

热心网友 时间:2022-05-01 21:15

仅支持InnoDB表,并且每张表一定要有一个主键,用于做write set的冲突检测;必须打开GTID特性,二进制日志格式必须设置为ROW,用于选主与write setCOMMIT可能会导致失败,类似于快照事务隔离级别的失败场景目前一个MGR集群最多支持9个节点不支持外键于save point特性,无法做全局间的约束检测与部分部分回滚二进制日志不支持binlog event checksum

热心网友 时间:2022-05-01 22:33

但和当年对比,圈子更热闹了,吃瓜群众也更多,当年MySQL支持事务的时候,恕我孤陋寡闻,当年貌似不像现在这样,国内的大公司有自己的实现方案并开源,如腾讯前不久开源的PhxSQL和阿里的OceanBase。

Oracle有强大的资金来确保MySQL官方做这样的事情,也有生态的先发优势,国内很多企业可能会更容易接受MySQL的这个方案,但开源产品在大公司的业务场景里面,也不一定是最优的。

请参考*自己造的一个轮子 MyRocks存储引擎,给FB省了不少MySQL服务器。

热心网友 时间:2022-05-02 00:08

背景

为获得最佳兼容性和性能,组的所有成员为了 Group Replication,应运行相同版本的 MySQL Server。但是,在某些情况下,可能需要组内有不同版本的服务器运行共存。例如,在滚动升级期间。当组中存在不同的版本时,某些成员可能与其他成员不兼容,因为它们支持其他人没有或缺乏其他人所具有的功能。因此,组复制需实现兼容性策略以防止运行到不兼容的版本组合方案。在 MySQL 8.0.17 中,组复制为组中的成员版本实现的兼容性策略考虑了成员的 MySQL Server 版本的补丁版本。

以前,只考虑过主要版本。使用维护版本(8.0.17)意味着组复制可以在组重新配置和升级过程中更好地维护混合版本组的复制安全性。


内容大纲

1. 主成员选项

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ccie安全到底是讲些什么 血型亲子鉴定原理是什么? 亲子医学鉴定的方法是什么?? 厦门劲草信息科技有限公司怎么样? 河北劲草信息科技有限公司怎么样? 老公妈妈去世了,带的孝帕被老公带回家,影响吗? ...值和劳动定额有什么区别?敢请高手赐教,越详细越好!谢谢! WPS教程怎么取消打印预览分割线 西安的消费水平是高吗? 西安的消费水平怎么样 平面镜成像作图问题 平面镜成像作图的两种方法.. 宝宝坐凳用什么材质比较好 手机充不进电,重启一下又好了,这是怎么回事? 为什么手机充不进去电 可是重启以后又能充进去了 为什么手机充不进去电 可是重启以后又能充进去了? 手机充不上电,重启后又能充,怎么办 手机没开机的情况下充不进去电,开机就可以正常充电? 励志句子致自己 抖音卖的小米s手表真假299 南京中山陵门票多少钱 名词解释:南京中山陵? 儿童手表怎样下载抖音? 中山陵有什么好玩的地方?哪些景点必去? 中山陵简介? 南京中山陵介绍 小寻怎么下载抖音 南京中山陵始建于哪一年?谁设计修建的?及历史? 洋葱吃多了有什么坏处和好处... 到银行办理社保卡需要什么证件 小公司cto面试数据分析师会问什么 mysql搭建mgr后还需要备份吗 淡奶油对人身体好吗 稀奶油是反式脂肪酸吗 黛珂KZ代表什么日期 到国内了什么messenger用不了? 为什么用不了messenger? win10商店messenger不可用,怎么回事 峨的AU号Messenger(聊天工具)为什么使用不了? 我的MESSENGER服务突然不能用了 为什么Messenger不能用呢?打开之后没有反应 请问电脑上的Windows Messenger为什么不可用 MSN的Messenger为什么更新不了?现在用不了了。。 messenger不能用了,求解答 MSN在语聊时会突然掉线,再连时显示Messenger 暂时无法使用请稍后再试。(0x8ac70101)请问我该怎么办? 脚底地筋有疙瘩怎么办 微信etc路费补贴怎么用 苹果手机怎么用messenger 微信上办理的etc有哪些优惠? 请教医生:脚底的地筋疼痛是什么原因引起的