• RabbitMQ高可用


    集群

     一、多台单节点

    1、准备两台服务器,安装一模一样的rabbitmq

    A服务器节点

    B服务器节点

    2、修改配置文件

    rabbitmq配置文件

    主要加入集群节点

    C:UsersAdministratorAppDataRoamingRabbitMQ

    [
    {rabbit, [
            {vm_memory_high_watermark_paging_ratio, 0.4},
            {vm_memory_high_watermark, 0.4},
            {cluster_nodes, ['rabbit@WIN-BN52SEDCTKA', 'rabbit@WIN-0H2D8V9NVNT']}
            ]
    }
    ].

    3、hosts配置文件

    A,B服务器均做这个配置

     C:WindowsSystem32driversetc

    A服务器:   192.168.140.167 rabbit@WIN-BN52SEDCTKA
    B服务器:   192.168.140.142 rabbit@WIN-0H2D8V9NVNT

    4、rabbitmq配置环境变量文件

     A服务器:添加文件  rabbitmq-env.conf

    NODENAME=rabbit@WIN-BN52SEDCTKA
    NODE_IP_ADDRESS=192.168.140.167
    NODE_PORT=5672
    RABBITMQ_MNESIA_BASE=C:UsersAdministratorAppDataRoamingRabbitMQdb
    RABBITMQ_LOG_BASE=C:UsersAdministratorAppDataRoamingRabbitMQlog

    B服务器:添加文件   rabbitmq-env.conf

    NODENAME=rabbit@WIN-0H2D8V9NVNT
    NODE_IP_ADDRESS=192.168.140.142
    NODE_PORT=5672
    RABBITMQ_MNESIA_BASE=C:UsersAdministratorAppDataRoamingRabbitMQdb
    RABBITMQ_LOG_BASE=C:UsersAdministratorAppDataRoamingRabbitMQlog

    5、erlang.cookie文件统一

    将A服务器中C:UsersAdministrator中的.erlang.cookie 的文件替换掉B服务器中 C:UsersAdministrator

    和C:WindowsSystem32configsystemprofile 目录中的 .erlang.cookie。

    保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的Erlang Cookie

    重启服务配置集群

    B服务器

    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app

    A服务器

    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster rabbit@WIN-0H2D8V9NVNT
    rabbitmqctl start_app
    rabbitmqctl join_cluster命令必须关闭应用,以及B服务器中对应端口必须通。

     登录管理界面,看到配置成功

    需要注意的是,搭建集群建议最少设置一个磁盘节点,防止机器意外关机等、丢失数据。(上面两个都是磁盘节点)

    rabbitmq集群有两种节点 磁盘节点和内存节点。字面上了解,磁盘节点的数据存储在磁盘,内存节点的数据存储的内存中。因此存储速度方面内存节点有优势,数据安全方面磁盘节点有优势。

    内存节点集群时的命令  

    rabbitmqctl join_cluster --ram rabbit@WIN-0H2D8V9NVNT

    二、单台多节点

    https://blog.csdn.net/zhang_jian__/article/details/69589047

    消息镜像/同步

    目的就是集群之间队列中信息同步 ,给A服务器发一条消息,自动同步到B服务器。

    镜像是通过策略实现,把指定好的策略应用到队列。 策略的好处就是可以批量的匹配。

    https://www.rabbitmq.com/ha.html

    1、Ha-mode Ha-params 设置镜像队列

     Ha-mode=all   

    同步到所有节点。当一个新的节点加入后,也会在这 个节点上复制一份。

    Ha-params  

    镜像队列将会在集群上复制count份。如果集群数量少于count时候,队列会复制到所有节点上。如果大于Count集群,有一个节点crash后,新进入节点也不会做新的镜像。(一般ha-mode设置为all,这个就不设置就可以)

    2、Ha-sync-mode 新从节点加入时 数据同步策略  

     ha-sync-mode=automatic  (自动)

    manually “手动”是默认的

    自动同步会使队列在一段时间内无响应,这可能不太好取决于队列的用例.并且,只要有新的从属连接,就会发生自动同步.如果存在大量从属加入,则队列将在相当长的一段时间内无响应,除非队列相当空或网络非常快.

     

    HA负载

     HAProxy:在集群机制基础上可以指定集群内任意数量队列组成镜像队列,队列消息会在多节点间复制

     https://blog.csdn.net/zhuyu19911016520/article/details/80206202

    RabbitMQ脑裂

    1、RabbitMQ 集群的网络分区容错性并不是非常高,在网络经常发生分区时会有些问题。

    2、RabbitMQ 提供了三种配置:
      ignore:默认配置,发生网络分区时不作处理,当认为网络是可靠时选用该配置
      autoheal:各分区协商后重启客户端连接最少的分区节点,恢复集群(CAP 中保证 AP,有状态丢失)
      pause_minority:分区发生后判断自己所在分区内节点是否超过集群总节点数一半,如果没有超过则暂停这些节点(保证 CP,总节点数为奇数个)

     

    CAP理论

     

    一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

    可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

    分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

  • 相关阅读:
    【题解】【HDU 3487】Play with Chain
    学习+复习目标
    【题解】【NOIP2018PJ】对称二叉树
    NOIP2018复赛游记
    论蒟蒻的作死程度
    教你如何不用新分区添加swap
    云主机的极致优化
    Linux权限管理 特殊权限解析
    用户组管理
    vim编辑器详解
  • 原文地址:https://www.cnblogs.com/wudequn/p/10925761.html
Copyright © 2020-2023  润新知