Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Overview
Galera Cluster
- 由 Codership 开发 官网
- 包含在MariaDB,在Percona、MySQL 都可以使用
Galera Cluster 是一个基于 InnoDB 多主的同步复制,可以读写任何节点,即使失去任何一个节点也不影响业务中断,而且无需复杂的 failover 操作。
Percona XtraDB Cluster
- 由 Percona 开发,在 Galera 基础打 Patch [官网](https://www.percona.com/software/mysql- database/percona-xtradb-cluster)
- 自 2012 年 4 月可用
- 附加的特性
- PFS 扩展支持
- SST/XtraBackup 方式的改变
- PXC Strict mode *
- ProxySQL 集成 *
- 提升性能 *
MySQL Group Replication
- 由 Oracle 官方开发
- 2016 年 12 月 MySQL 5.7.17 发布 GA
- MySQL InnoDB Cluster 整体解决方案
MySQL Group Replication 是一个 MySQL Server Plugin,提供分布式状态机复制与 Server 强大协调,当在一个 Group Replication 时,Server 将自动协调,每个节点都可以自动处理更新,自动检测,有一个 membership service 维护一个 view,记录组内 记录可见成员在某个时间点一致性和高可用性的,当任何一个成加入或离开,view 就会相应的更新
MySQL InnoDB Cluster

Similarities
- MySQL/MariaDB
- 复制方法
- 所有节点都有全部的数据 - 读仅发生在当前本地节点
- 都需要 InnoDB/XtraDB 引擎
- 都支持 多主的拓扑 (Active-active multi-master Topology)
- 写多主节点
- 不需要复杂的 Failover 操作
- 节点管理,加入和离开都是完全自动处理的
- 执行和写都是按全局的顺序进行的
- 数据一致性
- 乐观锁 / 最早提交的先赢
- Quorum - 防止脑裂
Similar - Use Cases
- 严格的持久化环境
- 同时定入多个节点,保证数据一致性
- 减少故障转移时间 (Reduce failover time)
Similar Limitation
- 大事务或长事务
- 很大的可能失败
- 大事务导致在有效事务
- 热点,多个节点更新同一行数据
- 只有一个节点写,是最好的解决方案
Differences GR & Galera
- Group Communication System 组通信系统
- Binlogs & Gcache
- Node Provisioning 节点配置
- GTID vs Seqno
- Partition Handling 分区控制
- Full Solution or Plugin
- Flow Control 流控制
- WAN Support
- OS Support
- Schema Changes DDL
Group Communication System 组通信系统
Galera
- 标志的单环顺序 Totem Single-ring Ordering
- 所有节点都必须有 ACK 消息
MySQL Group Replication
- 基于 Paxos
- Paxos 只要求大多数 ACK 消息
Binlogs & Gcache
Galera Cluster/PXC
- uses binlog row events
- but does not require binary logging
- writes events to Gcache (con gurable size)
MySQL Group Replication
- requires binary logging
Node Provisioning 节点配置
Galera Cluster/PXC
- has State Snapshot Transfer (SST) 全量同步
- Percona XtraBackup (Recommended)
- rsync
- mysqldump
- incremental State Transfer (IST) using GCache 增量同步
- has State Snapshot Transfer (SST) 全量同步
MySQL Group Replication
- 没有自动全量同步,除非保留所有 Binlog
- 用于同步的异步复制通道
GTID vs. Seqno
Galera Cluster/PXC
- has a seqno which is a incrementing number
MySQL Group Replication
- 依赖 MySQL GTID
- writes to a cluster create GTID events on the GR Cluster UUID
Partition Handling
Galera Cluster/PXC
- A partitioned node will refuse reads/writes (con gurable)
- A partitioned node will automatically recover and rejoin
MySQL Group Replication
- A partitioned node will accept reads
- A partitioned node will accept write requests, but will hang forever
- A partitioned node needs to be manually rejoined to the cluster
Full Solution or Plugin
Plugin
- Group Replication is a 'Replication Plugin'
- several split brain bugs in current code ( fixes pending!)
Solution
- Galera Cluster 不处理应用连接
- 与 GR 相比有更强的防止脑裂
- MySQL InnoDB Cluster (w. MySQLRouter)
Full Solution
- Percona XtraDB Cluster (w. ProxySQL)
- 集成 ProxySQL
- 严格的 mode,防止使用限制
Flow Control 流控制
防止太慢的节点,被落下太远
Galera Cluster/PXC
- 当一个节点慢到一个限制,阻止所有节点写
- Flow Control 的消息已经发送
- low defaults; Galera: 16(*), PXC: 100
- Tell others to stop writes
MySQL Group Replication
- 每个节点都有每个成员的统计信息
- 每个独立的节点决定写的阈值
- high default: 25000
- 如果有节点太慢,其他节点放慢写速度
WAN Support
Galera Cluster/PXC
- 投票权重
- 调节网络通信设置
- 减少分段网络流量
- 仲裁人
MySQL Group Replication
- 不建议在 WAN 上使用
OS Support
Galera
- FreeBSD & Linux
Galera Cluster/PXC
- Linux
MySQL Group Replication
- Linux, Windows, Solaris, OSX, FreeBSD
Schema Changes - DDL
Galera Cluster/PXC
- Total Order Isolation
- All writes will be blocked during Writes on other nodes will be terminated
- Workarounds 变通办法
- pt-online-schema-change
- wsrep_osu_method=RSU
- 更多的操作工作
- 并不是所有 DDL 可行
MySQL Group Replication
- DDL 并不会阻塞写,像平常使用一样
- 仅建议在单主模式下使用 (因为 DDL 并没有冲突检测)
Differences PXC & Galera
- 扩展 PFS 支持
- SST/XtraBackup 方式的改变
- Bug-Fixes
- PXC Strict Mode - PXC 严格的 Mode
- ProxySQL 集成
- 性能提升
PXC Strict Mode
预防实验性或不支持的特性
- 仅支持 InnoDB 的操作
- 预防修改 binlog_format!=ROW
- 需要 Table 有主键
- 禁用不支持的特性
- GET_LOCK,LOCK TABLES,CTAS
- FLUSH TABLES <tables> WITH READ LOCK
- tx_isolation=SERIALIZABLE
ProxySQL 集成
ProxySQL 在 PXC 当负载均衡的角色
proxysql-admin 配置工具
ProxySQL schedulers
- 健康检查
- 重新配置节点
PXC 维护模式
- tell load balancer to rebalance load
性能提升
可伸缩性 fixs PXC 5.7.17
新的默认值
- gcs.fc_limit=100
- evs.send_window=10
- evs.user_send_window=4
[图片上传失败...(image-b39cb1-1513951864372)]
Limitations
Galera Cluster/PXC
- InnoDB/XtraDB Only
- tx_isolation=SERIALIZABLE
- GET_LOCK()
- LOCK TABLES
- SELECT ... FOR UPDATE
- Careful with ALTER TABLE ... IMPORT/EXPORT
- Capped maximum transaction size 最大事务
- XA transactions
Group Replication
- InnoDB/XtraDB Only
- tx_isolation=SERIALIZABLE
- GET_LOCK()
- LOCK TABLES
- SELECT ... FOR UPDATE
- CarefulwithALTER TABLE ... IMPORT/EXPORT.
- Careful with large transactions
- no support for tables with multi-level foreign key dependencies, can create inconsistencies
Known Issues
Galera Cluster/PXC Issues
Crashes due to background thread handling trx
processing- mysql-wsrep#306: stored procedure aborts
- mysql-wsrep#305: event scheduler
- mysql-wsrep#304: local scope functions such as CURRENT_USER()
Various crashes related to DDL
- mysql-wsrep#301:runningSHOW CREATE TABLE in multiple nodes with DDL can cause crash.
- mysql-wsrep#275: Aborting trx leaves behind open tables in cache can cause crash
Concurrent DDLs using wsrep_OSU_method=RSU crash/inconsistency issues
- mysql-wsrep#283 & mysql-wsrep#282
Shutdown issues
- mysql-wsrep#303: cleanup during shutdown fails to clear the EXPLICT MDL locks (FTWRL)
- mysql-wsrep#273: Not getting clean shutting down message if we start the server with unknown variable
- mysql-wsrep#279: Trying to access stale binlog handler leads to crash
Group Replication Issues
分区容忍问题,不能防止脑裂
* #84727: partitioned nodes still accept writes: queries hang (~Fixed in 5.7.20)
* #84728: GR failure at start still starts MySQL (~Fixed in 8.0.2)
* #84729: block reads on partitioned nodes
* #84733: not possible to start with super_read_only=1 (Fixed in 8.0.2)
* #84784: Nodes Do Not Reconnect
* #84795: STOP GROUP_REPLICATION sets super_read_only=off
减少冲突
* #84731: mysql client connections get stuck during GR start
稳定性
* #84785: Prevent Large Transactions in Group Replication (~Fixed in 5.7.19)
* #84792: Member using 100% CPU in idle cluster (*)
* #84796: GR Member status is wrong
可用性
* #84674: unresolved hostnames block GR from starting (~Fixed in 5.7.18)
* #84794: cannot kill query that is stuck inside GR
* #84798: Group Replication can use some verbosity in the error log
Q & A
这个看原 PDF 吧。
Performance Tests
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication的更多相关文章
- Galera将死——MySQL Group Replication正式发布
2016-12-14 来源:InsideMySQL 作者:姜承尧 MySQL Group Replication GA 很多同学表示昨天的从你的全世界路过画风不对,好在今天MySQL界终于有大事情发生 ...
- Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较
mit 分布式论文集 https://github.com/feixiao/Distributed-Systems wiki上描述的几种都明白了就出师了 raft 和 zab 是类似的,都是1.先选举 ...
- 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(一)
导读: 在之前,我们搭建了MySQL组复制集群环境,MySQL组复制集群环境解决了MySQL集群内部的自动故障转移,但是,组复制并没有解决外部业务的故障转移.举个例子,在A.B.C 3台机器上搭建了组 ...
- MySQL Group Replication 技术点
mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...
- MySQL Group Replication 动态添加成员节点
前提: MySQL GR 3节点(node1.node2.node3)部署成功,模式定为多主模式,单主模式也是一样的处理. 在线修改已有GR节点配置 分别登陆node1.node2.node3,执行以 ...
- Docker Images for MySQL Group Replication 5.7.14
In this post, I will point you to Docker images for MySQL Group Replication testing. There is a new ...
- Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结
之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...
- MySQL group replication介绍
“MySQL group replication” group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具.第一个GA版本正式发布于MySQL5.7 ...
- mysql group replication 主节点宕机恢复
一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...
随机推荐
- 理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
原文见:http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/ from:ht ...
- shell脚本结构
echo $? 代表上一次命令的状态返回值,‘0’则代表为真<执行成功>,‘非零’则代表为假<执行失败>. shell脚本: <判断老男孩的年纪> [root@bo ...
- WINDOWS SERVER 2016 设置使用照片查看器查看图片
1.使用win+R快捷键快速打开运行,输入regedit打开注册表 2.在注册表中找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Photo Viewe ...
- json&pickle序列化和软件开发规范
json和pickle 用于序列化的两个模块 json 用于字符串和python数据类型间进行转换,json只支持列表,字典这样简单的数据类型 但是它不支持类,函数这样的数据类型转换 pickle ...
- 2019-04-11-day030-网络编程并发
内容回顾 黏包 tcp协议为了保证数据的可靠传输和传输效率 合包机制 : 连续多条短数据会合并成一条 拆包机制 : 一个过大的数据会在发出之前被拆成几个小包 tcp的黏包发生在两端: 发送端 : 合包 ...
- 学习Hibenate随笔
1.Hibenate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,将pojo类与数据库表建立映射关系,是一个全自动orm框架,Hibenate可以自动生成sql语句,自动执行 ...
- CMake 构建项目教程-简介
CMake 构建项目教程-简介 Linux 平台构建项目,选择了CLion作为C++的IDE,而CLion默认就是使用CMake构建项目,所以这里记录了CMake在构建项目过程的一些小知识. 1. 项 ...
- CC攻击原理及防范方法
一. CC攻击的原理: CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃.CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数 ...
- Centos系统下 Gitolite安装与相关配置(git权限控制软件)
确保已经安装了最新版的git服务Git源码安装 Linux指定安装目录,并且创建了 用户名为git 的账户 修改.gitolite.rc #设置gitolite管理的仓库目录 GL_REPO_BAS ...
- Python全栈之路----三元运算
· 三元运算又称三目运算,是对简单条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成立 else 2 &g ...