博客
关于我
PXC / Galera Cluster集群概述及原理分析
阅读量:796 次
发布时间:2023-03-04

本文共 2033 字,大约阅读时间需要 6 分钟。

MariaDB Galera Cluster与PXC集群工作原理及架构分析

MariaDB Galera Cluster与PXC集群在原理上具有高度一致性,两者均采用WSrep(Write Set Replication)机制实现数据同步。以下将从基础原理、集群架构、节点状态及优缺点等方面进行详细分析。

Galera Cluster/PXC集群工作原理

在Galera Cluster和PXC集群中,所有的DML更新操作都需要经过严格的验证机制。具体流程如下:

  • 提交事务:客户端提交事务时,server端的本地进程会立即处理请求并返回OK。
  • 事务验证:在提交事务前,wsrep API会广播事务到集群的所有节点,验证该事务是否能在所有节点上执行。
  • 全局唯一标识:验证通过后,集群会生成唯一的GTID(全局事务ID),并将其发送至所有节点。
  • 执行事务:每个节点接收到GTID后,会验证该事务的合法性。一旦验证通过,节点会执行commit_cd动作,将事务提交到本地数据库;若验证不通过,则执行rollback_cd回滚事务。
  • 数据一致性:通过这种方式,集群能够确保所有节点的数据一致性,避免数据孤立。
  • Galera Cluster和PXC集群均采用乐观锁机制,这意味着所有事务都需要在集群内部广播验证,验证不通过时才会回滚。这种机制虽然保证了数据一致性,但也对性能产生了较大影响,因为所有节点都需要参与事务处理。

    PXC/Galera Cluster集群架构

    PXC/Galera Cluster集群架构主要包括以下几个关键层次:

  • Group Communication层:负责统一全局数据同步策略和集群内部事务排序,用于生成唯一的GTID。
  • Replication层:包括applierslave queue,负责完成数据同步。该层的效率直接决定了集群的写入能力。
  • 节点状态管理:通过WSrep机制实现集群内节点间的通信与状态同步。
  • 节点状态及状态变化因素

    在Galera Cluster/PXC集群中,节点状态会根据集群运行情况发生动态变化,常见状态包括:

    • OPEN:节点启动成功,正在尝试连接集群。
    • PRIMARY:节点已成为集群的主节点,在新节点加入时负责数据同步。
    • JOINER:节点正在接收SST全量数据同步。
    • JOINED:节点完成了SST全量同步,但尚未完全追赶集群进度。
    • SYNCED:节点已完成数据同步,且与集群进度保持一致。
    • DONOR:节点正在为新节点提供全量数据同步,暂时无法提供读写服务。

    节点状态的变化主要由以下因素引起:

    • 新节点加入集群
    • 节点故障恢复,重新加入集群
    • 集群中其他节点的同步失效

    PXC/Galera Cluster集群优缺点

    优点:

  • 高可用性:集群节点功能平等,提供负载和冗余,避免单点故障。
  • 强一致性:所有节点同步修改数据,读写操作无延迟,确保数据一致性。
  • 易扩展:新节点加入集群自动完成SST全量同步和IST增量同步。
  • 缺点:

  • 性能限制:任何更新事务都需要全局验证,集群性能受限于性能最差的节点。
  • 锁冲突:多点并发写入时,由于所有节点都需要验证锁,可能导致严重的锁死问题。
  • 节点状态转换:新节点或延迟较大的节点重新加入时,需要进行全量数据同步(SST),此时该节点无法提供读写服务。
  • 单个节点或所有节点停机情况分析

  • 单个节点停机

    • 节点停机后,重新启动并重新加入集群,通过IST增量同步数据,保持集群一致性。
    • 若停机时间过长,部分数据无法缓存,需进行SST全量同步。
  • 所有节点停机

    • 需采用滚动重启的方式:逐个节点关闭并修复,确保集群始终有至少一个活跃节点。
    • 关闭所有节点时,需记录最后一个关闭节点的GTID,启动时优先启动该节点。
  • 避免数据丢失

    • 保持集群中至少有一个活跃节点,避免所有节点同时停机。
    • 在节点故障恢复时,暂停所有写操作,等待数据一致后再恢复。
  • 常见问题汇总

  • 主节点写入过大

    • 配置wrep_slave_threads为CPU核数或1.5倍,可有效减少apply_cd时间。
  • 脑裂问题

    • 出现“unknown command”错误时,使用SET GLOBAL wsrep_provider_options="pc.ignore_sb=true";配置,跳过少数节点的错误。
  • 并发写操作

    • 避免多个节点同时进行同一行数据的更新操作,可能导致锁死问题。
  • DDL全局锁

    • 使用pt-online-schema-change工具进行在线DDL操作。
  • 引擎兼容性

    • PXC集群仅支持InnoDB引擎,且表结构必须包含主键,否则可能导致数据不一致。
  • 节点状态转换期间的写操作

    • 在新节点或故障节点恢复加入集群时,需暂停所有写操作,避免因锁冲突导致数据不一致。
  • 通过以上分析,可以更好地理解Galera Cluster和PXC集群的工作原理及其在实际应用中的优缺点。对于集群管理和故障恢复,掌握相关知识至关重要。

    转载地址:http://ezafk.baihongyu.com/

    你可能感兴趣的文章
    poi 读取单元格为null者空字符串
    查看>>
    poi-tl简介与文本/表格和图片渲染
    查看>>
    pointnet分割自己的点云数据_PointNet解析
    查看>>
    POI实现Excel导入Cannot get a text value from a numeric cell
    查看>>
    POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log
    查看>>
    POI实现Excel导出时常用方法说明
    查看>>
    POI导出Excel2003
    查看>>
    POI数据获取及坐标纠偏
    查看>>
    POI解析Excel【poi的坑——空行处理】
    查看>>
    POI:POI+JXL实现xls文件添加水印
    查看>>
    POI:POI实现docx文件添加水印
    查看>>
    POJ 1006
    查看>>
    poj 1035
    查看>>
    POJ 1061 青蛙的约会 (扩展欧几里得)
    查看>>
    POJ 1088 滑雪
    查看>>
    poj 1321(回溯)
    查看>>
    POJ 2019 Cornfields (二维RMQ)
    查看>>
    poj 2057 树形DP,数学期望
    查看>>
    poj 2112 最优挤奶方案
    查看>>
    POJ 2229 Sumsets(递推,找规律)
    查看>>