PXC验证不经过只有俩个状况
- 快照太久
- SQL语句执行时间太长,或者UNDO表空间太小,或者事务量过大,或者过于频繁的提交,致使执行SQL过程当中进行一致性读时,SQL执行后修改的前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。 这种状况最多。
- SQL语句执行过程当中,访问到的块,在进行延迟块清除时,不能肯定该块的事务提交时间与SQL执行开始时间的前后次序。 这种状况不多。
- 对同一行数据进行修改
PXC其余node节点apply应用失败通常是硬件层次出现问题node
- 失败以后通常进行IST增量补全
- 如果IST失败则会被T出集群
PXC没有lock tablemysql
- 进行alter table DDL操做的时候会升级为全局锁,将整个实例锁住。因此最好建议是DDL操做的时候不能进行online DDL,最好是使用pt-osc或者gh-ost等
PXC的IST
- 当一个节点加入,它当前的UUID于现集群相同,而且缺失的数据可以在donor的writeset的cache中找到,则能够进行IST,不然只能所有初始化数据,而且进行SST
- gcache.size默认是128M,能够根据高峰时期binlog一个小时内生成的binlog大小设置
- 须要注意的是,IST所须要的cache是临时存在的,因此一个集群彻底关闭,可是各个节点关闭的时候seqno不一致,则即便先启动最新sequo的节点,其余落后的节点任然不可以作IST,只能SST。因此,若是须要彻底关闭整个集群,须要先中断外部连接,而后在集群相对静止的状况下来关闭,才能避免SST。
- PXC之间的IST和SST数据的传输主要有三种方式:
- mysqldump逻辑备份,会锁表。
- rsync 会存在文件锁
- xtrabackup 通常建议使用这个
脑裂
- 俩个节点发生脑裂的话,那么就不能针对整个集群进行操做,任何命令都是显示"unkown command"
- pc.ignore_db = yes 忽略脑裂,继续操做
PXC的局限性
- 仅仅工做在InnoDB引擎表上面,所以对mysql库下面的系统表的修改不能复制,可是DDL操做时能够被复制的,因此能够经过create user,grant等方式操做系统表。
- 不支持在没有主键的表上面的DELETE操做,select...limit也会在不一样节点返回不一样的值。(仅仅只是在没有主键的状况下limit会返回不一样的结果集么?)
- 不支持的操做:LOCK/UNLOCK TABLES,lock functions(GET_LOCKS(),RELEASE_LOCK()...)
- query log日志不能存放在表里,必须存放在文件中。
- 最大的事务大小由wsrep_max_ws_rows,wrsep_max_ws_size定义,LOAD DATA INFILE 每10K行提交一次,这种事务被分割为成数个小事务。(XtraDB Cluster 自动分割,仍是操做时手动分割?)
- wsrep_max_ws_rows,wrsep_max_ws_size 谁先触发,谁先进行拆分
- 因为集群是基于乐观的并发控制(optimistic consurrency control),事务冲突的状况可能哎commit阶段发生,当多个节点修改同一行数据的时候,只有一个节点可以成功,失败的节点将终止,而且返回死锁错误码 Error:1213 SQLSTATE:4001(ER_LOCK_DEADLOCK).(这样是否太不稳定了?动不动就会有某个节点终止刮掉的状况?并且这种状况如何处理?)
- 不支持XA事务,由于XA事务有可能在commit的时候出现异常rollback.(参考http://www.infoq.com/cn/articles/xa-transactions-handle)
- 整个集群的吞吐量/性能取决于最慢的那个节点,由于须要在全部的节点上面certification,同时还取决于节点之间的网络性能,所以须要全部的节点都有相同的硬件配置,而且网络,磁盘等性能要尽量的高,例如使用SSD。
流控
- 什么是流控?
- 流控简而言之就是流量控制,在PXC虽然是属于同步复制,可是它也只是在逻辑或者说虚拟的同步复制,在apply和commit并非同步而是异步的,存在某些缘由会致使apply和commit会落后于集群中的其余节点,一旦落后的事务过多,这个时候就会启动流控,在整个流控的过程当中,集群是不对外提供写功能,可是并不会影响读。
- fc.limit=1
- 控制流控的阀值,一旦node落后这个值则会发起流控,这个值并非固定的。会根据集群中节点的数量动态调整的。
- fc_master_slave=NO
- fc_factor = 0.0~1.0
- 控制流控何时回复正常,通常默认是0.5 便是fc.limit的50%的值就会恢复正常,流控结束。
引用
部分信息来自于知数堂课件总结sql