集群脑裂问题分析

如何避开redis-1脑裂?RabbitMQ 脑裂当前生产环境RabbitMQ 集群分布在铜牛机房和马驹桥机房 , 其中铜牛机房两个节点 , 马驹桥机房两个节点;当铜牛和马蜂窝机房之间的网络中断或波动较大时 , RabbitMQ 集群会被分成两个分区(脑裂) 。当网络恢复后,除非采取一些措施来解决异常消息消耗等问题,否则网络分区的状态将保持不变 。

1、 脑裂以及Redis主从同步中的坑所谓的脑裂是指在主从式集群中,同时有两个主节点,并且都可以接收写请求 。脑裂最直接的影响就是客户端不知道要向哪个主节点写数据 。因此 , 不同的客户端将向不同的主节点写入数据 。而且,严重的话,脑裂会进一步导致数据丢失 。主库因为某些原因无法处理请求,没有响应哨兵的心跳,被哨兵错误判断为客观离线 。结果,在被判断为脱机后 , 原来的主库恢复处理请求 。此时sentinel还没有完成主从切换,客户端仍然可以和原主库通信,客户端发送的写操作会在原主库上写数据 。
【集群脑裂问题分析】
Redis提供了两个配置项来限制主库的请求处理,分别是minslavestowrite和minslavesmaxlag 。这两个配置项合并后的要求是至少有n个从库连接到主库,并且与主库复制数据时ACK消息的延迟不能超过t秒,否则主库将不再接收任何来自客户端的请求 。

2、RabbitMQ 脑裂当前生产环境RabbitMQ 集群分布在铜牛机房和马驹桥机房,其中铜牛机房两个节点,马驹桥机房两个节点;当铜牛和马蜂窝机房之间的网络中断或波动较大时,RabbitMQ 集群会被分成两个分区(脑裂) 。当网络恢复后,除非采取一些措施来解决异常消息消耗等问题,否则网络分区的状态将保持不变 。处理网络分区有两种方法:1 。手动处理网络分区:选择一个可信分区 , 重启其他分区的节点;2.网络分区的自动处理RabbitMQ提供了四种处理网络分区的方式,只需在rabbitmq.config中配置cluster_partition_handling参数,即:ignore、pause _ priority、pause_if_all_down、autoheal 。经过对比,pause _ priority模式更符合目前的场景,下面用这个方案进行测试 。

3、如何防止ElasticSearch 集群出现 脑裂现象有两个参数可以减缓脑裂 problem的发生:discovery.zen.ping_timeout(默认值为3秒):默认情况下,一个节点会认为如果主节点在3秒内没有应答,那么这个节点就死了,增加这个值会增加节点等待响应的时间 , 在一定程度上减少误判 。discovery . Zen . minimum _ master _ nodes(默认值为1):该参数控制节点在集群中运行之前需要看到的最小主节点数 。

    推荐阅读