博客
关于我
PXC / Galera Cluster集群概述及原理分析
阅读量:795 次
发布时间: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/

    你可能感兴趣的文章
    ptyhon POSIX
    查看>>
    public private protected default小结
    查看>>
    PublicCMS怎么用金蝶Apusic Application Server部署
    查看>>
    publish over ssh、 Kubernetes Continuous Deploy插件
    查看>>
    PubMed详解-ChatGPT4o作答
    查看>>
    Pubsub Extensions for Smack
    查看>>
    pulsar mq 单体验证demo, docker启动pulsar mq验证生产者消费者命令
    查看>>
    pulsar mq 学习使用,pulsar java客户端, spring boot pulsar , spring pulsarTemplate如何使用 pulsar4.0.0
    查看>>
    Pulsar mq 设置延迟消息模式 pulsar mq 发送延迟消息 pulsar如何发送消费延时消息
    查看>>
    Pulsar 游标回滚,移动偏移量测试
    查看>>
    pulsar开源消息队列_了解Pulsar---Pulsar工作笔记001
    查看>>
    Puppet 在大规模分布式系统中的性能优化策略有哪些?
    查看>>
    puppet 学习总结(1)——puppet 入门详解
    查看>>
    puppet 集中化管理PDF by 守住
    查看>>
    Puppet---自动化运维工具(进阶)
    查看>>
    puppeteer(三)常用API
    查看>>
    PyTorch 微调终极指南:第 2 部分 — 提高模型准确性
    查看>>
    pure css做的手机页面
    查看>>
    PureMVC--一款多平台MVC框架
    查看>>
    pure框架
    查看>>