Percona XtraDB Cluster(PXC)——架构原理

Percona XtraDB Cluster(PXC):Percona XtraDB Server +WSREP API(write set replication patches)  +  Galera(galera library)

转自:http://blog.chinaunix.net/uid-25206403-id-3912291.html
同类基于验证复制的集群结构:
codership 开源产品:Galera Cluster for MySQL
mariadb 基于galera集群:maria galera cluster

pxc是基于验证的数据强一致性数据复制的mysql集群,特性分析:
优点:
          1.高可用性,节点不可用不影响集群正常运行。
          2.强一致性,可以将读扩展到多个节点上。     
          3. 节点的增加数据同步自动化(IST,SST)。
          4. 可实现多点读写,但写压力仍要同步到所有节点。
缺点:
        1.由于ddl需全局验证通过,则集群性能由集群中最差性能节点决定。
        2.为保证一致性,galera 总是优先保证数据一致性,在多点并发写时,锁冲突问题严重
        3.新节点加入或延后较大的节点重新加入需全量拷贝数据(sst),作为donor的节点在同步过程中无法提供读写
        4.数据冗余度为节点数

名词:
    WS:write set 写数据集
    IST: Incremental State Transfer 增量同步
    SST:State Snapshot Transfer 全量同步 
    UUID:节点状态改变及顺序的唯一标识。
    GTID:Global Transaction ID ,由UUID和偏移量组成。wsrep api 中定义的集群内全局事务id。

PXC工作原理:

     节点接收sql 请求后,对于ddl 操作,在commit之前,由wsrep API 调用galera 库进行集群内广播,所有其他节点验证成功后事务在集群所有节点进行提交,反之roll back。pxc 保证整个集群所有数据的强一致性,满足CAP理论中满足:Consistency 和  Availability。

WSREP API:
    在DBMS和wsrep provider 之间提供接口。

    GTID:Global Transaction ID. 由UUID 和 sequence number组成,用于标示集群中发生状态改变的唯一标示以及队列中的偏移量。
Galera wsrep provider:

  •      完成事务在集群内的广播:本地事务发送给其他节点验证,接收其他节点事件本地验证并返回结果
  •     应用从其他节点接收并全局验证通过的事件到本地。
  •     集群内通信,节点存活的检测,pc的选举等
  •     脑裂,为避免节点失效导致pc选举失败整个集群不可用,建议节点数至少为3
  •     多点写入时的锁冲突检测机制
  •     等待队列中事务的并发提交

复制模块:
转:Percona <wbr>XtraDB <wbr>Cluster(PXC)——架构原理


    galera的group communication 层实现统一全局数据同步策略和集群内所有事务的排序,便于生成GTID。
对于每一个节点有2方面工作:
 

  •     完成数据同步。
  •     完成与其他节点的通信。

    galera 的replication 层完成数据同步,由slave queue 和applier 组成,在事务的同步过程中,事务在队列中以及应用线程中时于节点本地产生锁冲突处理方式。replication 模块的效率直接影响整个集群的写入性能。
同步过程中,本地事务和等待队列中的锁冲突:
     innodb内部使用悲观锁,保证事务的成功进行和提交。pxc中使用乐观锁,以避免在每个节点获取锁以及网路开销,在写入节点上,事务在提交之前与单点的innodb一样,到达提交点时,向集群其他节点广播(galera 库完成 并发)事物并等待各节点验证结果,如果所有节点都返回成功,则提交,反之,回滚。
     pxc 中先提交的事物成功,其他事务(本地或其他节点同步)将回滚或报死锁错误。
相关状态值:
 

  • wsrep_local_cert_failures  同步过程中节点认证失败计数,冲突来自本地提交的事务和同步队列中事务存在锁冲突,则本地验证失败(保证全局数据一致性)
  • wsrep_local_bf_aborts     强制放弃,本地事务和同步队列中正在执行的事务存在锁冲突时,将强制保证先提交的事务成功,后者回滚活报错

验证模块:

转:Percona <wbr>XtraDB <wbr>Cluster(PXC)——架构原理


验证过程中,节点在接收到其他节点writeset后,在本地做冲突验证并返回验证结果

节点状态机:
Regular Transitions:

状态机变化阶段:
     1.OPEN: 节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
     2.PRIMARY: 节点处于集群PC中,尝试从集群中选取donor进行数据同步
     3.JOINER: 节点处于等待接收/接收数据文件状态,数据传输完成后在本地加载数据
     4.JOINED: 节点完成数据同步工作,尝试保持和集群进度一致
     5.SYNCED:节点正常提供服务:数据的读写,集群数据的同步,新加入节点的sst请求
     6.DONOR:节点处于为新节点准备或传输集群全量数据状态,对客户端不可用。
状态机变化因素:
     1.新节点加入集群
     2.节点故障恢复
     3.节点同步实效 

猜你喜欢

转载自blog.csdn.net/linshenyuan1213/article/details/82848640