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 吧。

Performance Tests

Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication的更多相关文章

  1. Paxos算法与Zookeeper分析,zab (zk)raft协议(etcd) 8. 与Galera及MySQL Group replication的比较

    mit 分布式论文集 https://github.com/feixiao/Distributed-Systems wiki上描述的几种都明白了就出师了 raft 和 zab 是类似的,都是1.先选举 ...

  2. MySQL Group Replication 技术点

    mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构.mysql group replication基 ...

  3. MySQL Group Replication 动态添加成员节点

    前提: MySQL GR 3节点(node1.node2.node3)部署成功,模式定为多主模式,单主模式也是一样的处理. 在线修改已有GR节点配置 分别登陆node1.node2.node3,执行以 ...

  4. 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 ...

  5. Mysql 5.7 基于组复制(MySQL Group Replication) - 运维小结

    之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  6. MySQL group replication介绍

    “MySQL group replication” group replication是MySQL官方开发的一个开源插件,是实现MySQL高可用集群的一个工具.第一个GA版本正式发布于MySQL5.7 ...

  7. mysql group replication 主节点宕机恢复

    一.mysql group replication 生来就要面对两个问题: 一.主节点宕机如何恢复. 二.多数节点离线的情况下.余下节点如何继续承载业务. 在这里我们只讨论第一个问题.也就是说当主结点 ...

  8. mysql group replication观点及实践

    一:个人看法 Mysql  Group Replication  随着5.7发布3年了.作为技术爱好者.mgr 是继 oracle database rac 之后. 又一个“真正” 的群集,怎么做到“ ...

  9. MySQL Group Replication配置

    MySQL Group Replication简述 MySQL 组复制实现了基于复制协议的多主更新(单主模式). 复制组由多个 server成员构成,并且组中的每个 server 成员可以独立地执行事 ...

随机推荐

  1. 探秘Tomcat——连接器和容器的优雅启动

    前言: 上篇<探秘Tomcat——启动篇>粗线条的介绍了在tomcat在启动过程中如何初始化Bootstrap类,加载并执行server,从而启动整个tomcat服务,一直到我们看到控制台 ...

  2. java关于值传递和引用传递的有趣试验

    上代码: public class Demo { public static void main(String[] args) { test_1(); test_2(); } public stati ...

  3. myeclipse启动报JVM terminated. Exit code=1

    报错信息如图: 解决办法: 删除当前workspaces下文件夹,路径为:%Workspaces%/.metadata/.plugins/org.eclipse.core.runtime

  4. jQuery中的on()和click()的区别 分类: 前端 HTML jQuery 2014-11-06 10:26 96人阅读 评论(0) 收藏

    HTML页面代码 <div> <h1>Click</h1> <button class="add">Click me to add ...

  5. Oracle数据库之PL/SQL游标

    1. 游标概念 字面意思是游动的光标,是指向上下文区域的句柄或指针. 在PL/SQL块中执行CRUD操作时,ORACLE会在内存中为其分配上下文区.用数据库语言来描述游标就是:映射在上下文区结果集中一 ...

  6. Labview学习之程序Web发布

    Labview学习之程序Web发布 1. LabVIEW Web服务器     在LabVIEW开发环境中,自身带了一个已连接好的Web服务器.LabVIEW Web服务器除了与其他Web服务器一样能 ...

  7. .Net程序员学用Oracle系列(30):零碎补充、最后总结(The End)

    1.同义词 2.Flashback 技术 3.连接字符串的写法 4.转义字符 & 特殊运算符 5.文件类型 6.查看参数 & 修改参数 7.AWR 工具 8.学习方法 & 学习 ...

  8. 还能不能愉快地起一个web服务啦?——1st Step!白话http和代码交互的那点儿事儿~

    学写python的时候,我们多多少少都接触到了web程序,然而你有没有想过,当浏览器发送了一个http请求时,等待接收这个请求的后端代码是一种什么样的思想感情? 就像下面这张图里画的一样,后端也许是一 ...

  9. [daily][tcpdump] tcpdump查找reset包

    tcpdump -r xxxx.pcap 'tcp[tcpflags] & tcp-rst != 0'

  10. CSerialPort串口类最新修正版(解决关闭死锁问题)

    这是一份优秀的类文件,好多的地方值得我们学习,具体在多线程,事件,自定义消息,类的封装方面等等.Remon提供的串口类网址为:http://codeguru.earthweb.com/network/ ...