mariadb的galera集群集群抄袭percona的PXC数据库集群,所以原理一样
<强> # # # galera集群/PXC集群工作原理强>
客户端向服务器端发送dml更新操作请求时,服务器的本地本地进程处理请求,并返回好准备接收,客户发送提交更新事务给服务器,服务器将复制writeset复制写数据集发给组(集群集群),集群将该数据集对应产生的唯一的GTID(全局事务ID)发送给集群每个服务器(节点)。当服务器前节点验证通过后,执行commit_cd动作更新本地数据库,并返回好,若其他节点验证不通过,则执行rollback_cd,回滚刚提交的事务。其他服务器(服务器)接收并验证通过后,执行apply_cd和commit_cd动作更新本地数据库;若验证不通过,则丢弃该数据集。
innodb内部使用悲观锁,保证事务的成功提交和执行。
PXC/Galera集群采用乐观锁,所有的事务都广播给集群每个节点,验证不通过再回滚,
<强> # # # PXC/Galera集群集群架构强>
<李>
OPEN ,,,节点启动成功,尝试连接到集群,如果失败则根据配置退出或创建新的集群
李> <李>PRIMARY 节点已处于集群中,在新节点加入时,选取供体进行数据同步时会产生的状态
李> <李>JOINER 节点处于等待接收/接收同步文件时的状态
李> <李>JOINED ,节点完成数据同步,但有部分数据没跟的上,在尝试保持和集群进度一致的过程状态
李>,,,,,例如某个节点故障后,重新加入集群,在追赶集群进度时的状态
5。SYNCED ,,,节点正常提供服务的状态,表示已经同步完成并和集群进度保持一致。
6。DONOR ,,,节点处于为新节点提供全量数据数据同步时的状态。此时该节点对客户端不提供服务。
# #节点状态发生变化因素
- <李>
新节点加入集群,
节点故障恢复,重新加入集群
李> <李>节点同步失效
李>
<强> # # # PXC/Galera集群集群优缺点强>
优点:
,,,, 1。高可用性。集群多个节点功能平等,提供负载和冗余,避免单点故障
,,, 2。强一致性。集群所有节点同步修改数据,真正同步读写,不存延迟。
,,, 3。易扩展。增加新节点,只需扔进集群,会自动完成SST全量同步,和后续是增量同步
缺点:
,,,, 1。任何更新事务都需要全局验证通过,才会在每个节点库执行。集群性能受限于性能最差的节点
,,, 2。galera/pxc集群保证数据一致性,必须所有节点验证通过。多点并发写入,锁冲突严重。
,,,,,,,,例如:多台同时有写操作,每个更新操作时,都会锁库来验证