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
-w610
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 增量同步
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 吧。