PXC知识点总结

    xiaoxiao2021-03-25  59

    PXC是基于引擎层的同步复制,而不是异步复制,所以数据一致性更高。 同时,基于引擎层,没有sql thread应用过程,所以没有延迟。

    多个节点同时更新到同一行记录,无法避免更新丢失问题,所以建议写操作在一个节点上(对insert影响不大,可以多个节点insert)。

    每台机器上的Server-id不要相同,否则只会在写的那台机器上生成binlog,其他节点不生成binlog,这是一个坑。每个节点Server-id设置为不同值,则每个节点都一个份全量的binlog,每个节点都可以挂slave从库。 在这种情况下,是不是slave可以随便Change到任何一个机器上(不管有没有GTID)?也就是说三个节点的show master status输出结果是不是一样的? 这可不一定,因为每个节点的binlog裁剪时间可能不同。比如你在一个节点flush logs,其他节点不会切换binlog。所以show master status不是一样的,不能随便的change到任何一个节点上。需要去看看到底到什么位置了。

    新加节点时,怎样防止传全量给新节点?也就是说怎样实现传增量的方式加节点? 方法是新节点先设成从库,然后将从库转入PXC集群。

    PXC和MM架构更新丢失示例

    t1: A,B 都读到old值 t2: A基于old值进行更新new_v1 t3: B基于old值更新得到new_v2 结果:更新丢失

    因为没有全局分布式锁,如果有分布式锁的话,可以避免更新丢失。 所以PXC建议不要多节点写操作,一个节点写,其他节点读。可以多节点insert,但别update。

    PXC提交返回OK之前,会将更新发送给所有组成员,不是以逻辑SQL的方式发送的,是以物理块的方式发送的(write set(单位不是page)),解决了一致性问题。

    因为没表级锁,以至于所以的DDL操作都是实例级别的锁!!!!!!!!!!!! 那么怎么改表结构呢?用 pt-osc

    PXC所有节点全都关掉后,不管怎么启动都有可能做SST的传输。 原因:增量数据需要在内存里面记录,如果全部关闭,数据就是失效了,节点之间不知道同步到什么位置了,那么第一个节点启动之后,它会声明它是全组里面唯一的主,那么其他节点进来之后,不知道跟主节点数据是不是一致,这样的话就会请求一份全量的数据,就造成了这种全量传输的情况。 预防措施:滚动重启,不能让所有节点都关机。 滚动重启的话,每个节点能离线多长时间? 大概的公式:如果需要Server离线两个小时,那需要算一下两个小时能生成多少binlog,看参数gcache.size。 gcache.size 是需要实际分配内存的,不要设太大,否则可能导致数据库OOM,如果停机时间短,可以设小点。 gcache.size 是需要实际分配内存的,不要设太大,否则可能导致数据库OOM,如果停机时间短,可以设小点。 掉电了怎么办???xid??(有待继续研究)

    pxc脑裂 有可能是端口被封了,或者网络断了,节点不知道集群的状态怎么样了,联系不到其他节点了。执行任何命令都会返回unknown command。 PXC每个节点都是主节点,但是在得到其他节点承认之前,它们谁都不是主节点。此时不对外提供服务。

    PXC用到的端口: 4444是传输全量的 4567是传输增量的

    SST传输三种方式: mysqldump rsync xtrabackup(推荐)

    第一个节点起来之后,连不上其他成员,它自己变成primary + synced。 第二个节点起来后,首先把数据库打开,然后连接到primary上(也就是说,找到集群中一个正在工作的primary),变成joined状态。变成joined状态后,就需要有一个节点给他提供数据,提供数据的节点,就是donor状态,donor节点提供数据的备份,这意味着它的服务能力会下降很多。可以指定谁给他传增量,提供增量的节点可以暂时先从负载里拿出来,专门提供增量服务,提供完增量之后再加进负载里,避免既要贡献增量,又要提供集群服务,造成节点压力大,整个集群卡顿的情况。 当新加入的节点需要同步数据时,可以指定一个集群中的节点去给他传输,并且把该节点从负载均衡上剔除下来,避免既要提供增量数据,又要提供服务,导致系统慢的情况。 指定谁是贡献者的参数:wsrep_sst_donor参数。

    bootstrap-pxc ? 当PXC所有的节点都关闭了,那么第一个启动的节点采用bootstrat-pxc方式启动,其他节点正常方式启动。

    PXC该监控那些参数? wsrep_cluster_status wsrep_local_state_comment wsrep_local_send_queue

    开发建个表告诉你数据不能复制 MyISAM引擎不能被复制,PXC只支持Innodb mysql库全是MyISAM人家咋复制呢 DCL语句 Create user, drop user, grant ,revoke

    pxc结构里面每个表必须有主键 如果没有主建,有可能会造成集群中每个节点的Data page里的数据不一样 node1 data page 6 rows node2 data page : 7rows select * from tb limit 100;

    转载请注明原文地址: https://ju.6miu.com/read-35488.html

    最新回复(0)