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

    你可能感兴趣的文章
    Python 将JPEG图片批量改成jpg并删除JPEG图片
    查看>>
    python 将函数加到列表中进行调用
    查看>>
    python 将图片与字符串相互转换
    查看>>
    Python 嵌套字典全面指南
    查看>>
    Python 工具v简介
    查看>>
    Python编程入门指南:从零开始探索编程的奇妙世界
    查看>>
    python 常见内置函数setattr、getattr、delattr、setitem、getitem、delitem
    查看>>
    Python 常见的错误类型和继承关系
    查看>>
    python 常量_零基础学Python系列之一:Python的变量与常量
    查看>>
    Python 并发编程
    查看>>
    Python编程入门基础及高级技能、Web开发、数据分析和机器学习与人工智能
    查看>>
    python 序列化操作
    查看>>
    Python 开发者,这 7 个 VS Code 插件极力推荐
    查看>>
    python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
    查看>>
    python 录音左右声道_Python分离立体声wav压缩文件的左右声道
    查看>>
    Python 循环异或对文件进行加解密
    查看>>