所为Galera Cluster强一致性怎样理解

今天突然MariaDB Galera Cluster收到一个报错日志分析请求:

错误如下:
[Warning] WSREP: transaction size limit (4294901759) exceeded: 4294967296
[ERROR] WSREP: rbr write fail, data_len: 0, 2

大致意思,事务超过了边界大小 所以失败。下面来看看 是什么问题导致的吧。

1)Galera Cluster原理:

   当客户端提交一个commit命令,在事务提交之前,所有对数据库的操作都会被写入write-set中,包括主键,
   然后数据库会将这个write-set发给所有其他节点,
   write-set将在每个节点(包括生成write-set的节点)上使用主键进行认证尝试。
   如果认证失败,节点会丢弃这个write-set,同时集群会回滚到之前的事务点;
   如果认证成功,commit正常提交,事务会应用到其他节点上。
   所有节点以相同的顺序接受事务,所有节点对事务是否提交做一致性决定。
   事务提交成功之后,首先生成此事务的节点会通知应用程序事务已正确提交。
   Galera_certification
   备注:主键认证(Certification)成功之后 才提交commit,
   首先生成此事务的节点会通知应用。所以这里就存在一个问题,
   除了通知节点,其他个节点都没法确认是否完成事务成功。
 
 
2)以下错误信息是在commit 的时候触发的。
    所以进入了执行阶段。
    WSREP: rbr write fail, data_len: 0, 2:
     
   WSREP: transaction size limit (4294901759) exceeded: 4294967296:
   

 

3) [Warning] WSREP: transaction size limit (4294901759) exceeded: 4294967296
     这里是 4294967296 =4M
   调整repl.max_ws_size为128M
MariaDB [test]> set global wsrep_provider_options="repl.max_ws_size=134217728";
4) 查看了 mariadb 10.1 , 10.2, 10.3 ,10.4 各版本源码基本上都有这个问题, 
    10.4 稍微进行了优化,
    但基本原理没变认证(Certification)成功之后 才提交commit,
   首先生成此事务的节点会通知应用。除了通知节点,
   其他个节点都没法确认是否完成事务成功。

 

之后跟一个很熟悉的同事,电话交流了一下心得,
mariadb Galera Cluster 强一致性只是做到了一半,个人感觉还不如mysql5.7增强半同步或则MGR呢。

今天分享到这里。

做好准备,做好备份,微信公众号,请关注

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值