PXC为MySQL提供了开源的高可用解决方案。

它集成了percona Server、Percona XtraBackup、和Galera Library。

其中核心部分为Galera Library,它保证了多主的同步复制。


Galera简介


Galera也使用GTID技术,但是和MySQL的GTID有所不同。

Galera使用group communication channel来确保所有nodes上以相同的顺序读取消息(事务)。




优缺点


优点

    • 当执行查询时,直接在本地node执行,无需从远程获取。(这是对比oracle RAC ?)
    • 非中心化。任何时间都可以允许丢失任何node,整个集群不会丢失数据,也不会有停机时间
    • 可以作为读操作的负载均衡方案。

缺点

    • 新增node时工作量较大。需要完全复制现有的数据集。数据冗余度高,有几个node就有多少份冗余。
    • 对于写操作,没有很好的负载均衡的效果。
    • 处理高并行、小请求的场景并不是很好  (https://www.slideshare.net/marcotusa/galera-explained-3
    • 对外键支持不佳
    • 不能用于数据分片

使用限制


  • 复制只支持InnoDB引擎。
    包括mysql.*在内的其他存储引擎的表不会被复制。 但是DDL语句是语句级别复制的,所以mysql.*的某些表会通过这种方式进行复制。
    可以配置wsrep_replicate_myisam来支持实验性的MyISAM复制。
  • 不支持的语句
    多主情况下,LOCK TABLES和UNLOCK tables不被支持。
    需要加锁的函数不被支持,如get_lock()、release_lock()等。
  • 查询日志不能指定到表,必须指定到文件。 log_output = FILE。 配合使用general_log和general_log_file进行配置。
  • 最大允许的事务量由wsrep_max_ws_rows、wsrep_max_ws_size参数指定。
    LOAD DATA INFILE每10000行进行提交,所以LOAD DATA会切分成一系列小事务。
  • 由于集群级别的乐观并发控制,执行了commit的事务有可能被中断。
    发生集群级别的终端时,有提示如下:(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
  • 不支持XA事务
  • 整个集群写操作的负载由最弱的node限定。
  • 最小建议节点数为3
  • 不支持InnoDB的 fake changes feature(虚假变更功能?)
  • enforce_storage_engine = InnoDB与wsrep_replicate_myisam = OFF不兼容
  • 不要使用alter table ... import/export,可能会导致节点不一致
  • 所有的表必须由主键


  • No labels