按照教程配置了双A同步的channel,开启了一致性算法。测试时发现无更新冲突时双向同步均正常,而一旦两个DB同时update一个字段为不同值,这个字段就开始反复在两个值之间变动,产生一个死循环。请问是否是配置有问题?是否有日志有助于排查此问题原因?期待您的回复。
节点布置: 机器A:zookeeper,manager, node1,mysql1 机器B:node2,mysql2
软件版本: CentOS release 6.3 java version "1.6.0_24" otter: 4.2.11 zookeeper: 3.4.6 mysql: 5.1.61
manager配置:
DDL同步为单向。其余设置均为默认值。
mysql配置: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0
server-id两台机器分别配置为1和2 server-id=2 log-bin=/var/lib/mysql/log_bin binlog-do-db=test character-set-server=utf8 binlog_format=ROW skip-name-resolve [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
原提问者GitHub用户 charlygao
您所遇到的问题可能是由于双向同步的数据一致性算法引起的。数据一致性算法需要在管理节点和数据节点之间进行协调,确保数据在进行双向同步时能够保持一致。如果两个节点同时更新了相同的记录,数据一致性算法可能会出现冲突,导致数据在两个节点之间反复变化,产生死循环。
为解决这个问题,您可以尝试以下步骤:
确认您的数据同步配置是否正确。可以通过检查管理节点和数据节点的配置文件,以及相关日志文件,来确保数据同步配置正确。
针对数据更新冲突的情况,可以通过在管理节点中添加数据处理逻辑来解决。例如,您可以使用数据处理逻辑来判断哪个数据节点应该具有更高的优先级,以确保数据在进行同步时能够保持一致。您可以在管理节点的配置文件中配置数据处理逻辑,并在相应的日志文件中查看处理结果。
如果以上方法都不能解决问题,可以尝试升级Otter版本。Otter的新版本通常会修复已知的问题,并增强数据同步的稳定性和可靠性。
另外,如果您能提供更详细的日志信息,可能有助于我们更好地理解和解决您所遇到的问题。在Otter和MySQL的日志文件中,可以查看各种错误和警告信息,以及数据同步的详细过程。如果您能提供这些信息,那么我们可以更好地帮助您解决问题。
希望这些信息能够帮助您解决问题。
问题出在mysql配置中的binlog-do-db=test
双A同步需要对otter的retl表也开启binlog,才能保持一致性。只对业务表开启binlog是不够的。
原回答者GitHub用户charlygao
Otter的一致性算法产生的问题。
首先,当两个数据库同时更新一个字段时,确实有可能产生"重复冲突",进入死循环。
为了解决这个问题,Otter采用了一致性算法,在有冲突时根据算法决定使用哪个版本的数据。
从您提供的信息来看,可能存在以下几个可能的原因:
一致性算法配置错误 比如算法类型配置错误,导致不能正常解决冲突
一致性算法Bug 特殊的场景下,算法存在Bug无法正常工作
日志不足,无法判断原因 没有详细的日志,无法准确定位问题。
为了解决这个问题,我建议您做以下事情:
查看Otter日志,尤其是channel和consistency相关日志。看看日志是否有记录一致性算法执行过程和最终决策。
在Otter配置文件里为channel和consistency相关组件开启更详细的日志打印。
提供更多信息包括:
完整的Otter配置 日志文件 重复死循环的字段信息 两个DB同时更新时执行的SQL 尝试升级Otter到最新版本,排除 potential bug。
在Otter用户社区提供信息,看看有没有类似的案例。
如果仍然无法定位问题,最终只能认为是Otter一致性算法Bug。可以提交issue给Otter开发者,由他们查看并修复。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。