• RabbitMQ之集群搭建


    RabbitMQ之集群搭建

    1.RabbitMQ集群模式

    RabbitMQ集群中节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点

    2.普通模式(默认)

            对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。

            应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。

    3.镜像模式

            与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。

            应用场景:可靠性要求较高场合,如下单、库存队列。

            缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。

            PS:(1)镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列。(2)若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能会重复消费

    2.Erlang安装(官网)

    • RmpFusion软件仓库安装
           RabbitMQ通过ELang(air-lang)开发,故需先安装ErLang,其许多相关依赖并不在yum软件仓库中,需从第三方软件仓库中获取,此处选择RmpFusion 。
     
    yum install epel-release
    rpm -ivh https://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm
     
    • Elang安装
    sudo yum install erlang
    • 验证
    erl -v

    3.RabbitMQ安装

    • RabbitMQ安装(3.7.4版本)
    rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    rpm -ivh https://bintray.com/rabbitmq/rabbitmq-server-rpm/download_file?file_path=rabbitmq-server-3.7.4-1.el7.noarch.rpm 

    PS:安装过程中提示socat被rabbitmq-server依赖,故需要先安装socat

    yum install socat
    • 启动RabbitMQ
    rabbitmq-server -detached  或者
    rabbitmq-server start
    • RabbitMQ-Management安装
    rabbitmq-plugins enable rabbitmq_management
    • 新增账户
    rabbitmqctl add_user mq 123456
    rabbitmqctl set_user_tags mq administrator

    4.集群搭建(官网地址)

    1.集群配置

    编号IP宿主OS硬件配置hostname
    1 192.*.*.147 CentOs 7.4.1708

    CPU:4core,Inter i5-4590,3.3GHz

    Memory:16G

    rabbit1
    2 192.*.*140 CentOs 7.4.1708

    CPU:4core,Inter i5-4590,3.3GHz

    Memory:8G

    rabbit2
    3 192.*.*.6 CentOs 7.4.1708

    CPU:4core,Inter i5-4570,3.2GHz

    Memory:16G

    rabbit3


    2.普通集群

    • Step1:集群节点(对等)通信---erlang Cookie
    erlang分布式的每个节点上要保持相同的.erlang.cookie文件,文件路径:/var/lib/rabbitmq/.erlang.cookie
    • Step2:将rabbit2加入到rabbit1(RAM节点,默认Disk节点)
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@rabbit1 <span style="background-color:rgb(255,204,0);">--ram</span>
    rabbitmqctl start_app
    • Step3:同上,将rabbit3加入到rabbit1(Disk节点)
    rabbitmqctl stop_app
    rabbitmqctl join_cluster rabbit@rabbit1
    rabbitmqctl start_app

    PS:若希望修改节点类型,则(需要先Stop)

    rabbitmqctl stop_app
    rabbitmqctl change_cluster_node_type ram
    rabbitmqctl start_app
     

    3.镜像集群

    • Policy(各节点均会同步)
    RabbitMQ提供"ha-mode"和"ha-params(可选)",组合情况如下:

    • 配置

    有两种配置方式:rabbitmqctl或者Rabbit Management,如

    rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}'
    rabbitmqctl set_policy productsyncinfo-ha ".*.ProductSyncInfo..*" '{"ha-mode":"all","ha-sync-mode":"automatic"}'

     
     

    5.其他

    1.常用命令

    rabbitmq-server -detached  启动RabbitMQ节点
    rabbitmqctl start_app 启动RabbitMQ应用,而不是节点
    rabbitmqctl stop_app  停止
    rabbitmqctl status  查看状态
    rabbitmqctl add_user mq 123456
    rabbitmqctl set_user_tags mq administrator 新增账户
    rabbitmq-plugins enable rabbitmq_management  启用RabbitMQ_Management
    rabbitmqctl cluster_status 集群状态
    rabbitmqctl forget_cluster_node rabbit@rabbit3 节点摘除 
    rabbitmqctl reset application重置

    2.异常处理

    在搭建集群过程中,若节点异常退出且无法再次加入集群时:

    (1)rm /var/lib/rabbitmq/mnesia--->该文件夹保存着集群信息;

    (2)rabbitmq-service stop--->若未执行第一步,会提示异常;

    {"init terminating in do_boot",{error,{inconsistent_cluster,"Node rabbit@rabbit2 thinks it's clustered with node rabbit@rabbit3, but rabbit@rabbit3 disagrees"}}}
    init terminating in do_boot ({error,{inconsistent_cluster,Node rabbit@rabbit2 thinks it's clustered with node rabbit@rabbit3, but rabbit@rabbit3 disagrees}})
    

    (3)在节点(rabbit1)中摘除该节点;

    (4)重启RabbitMQ,并加入集群。

  • 相关阅读:
    sqlserver 执行脚本报内存溢出的处理方式
    框架重构:测试中的DateTime.Now
    框架重构:规范集成测试的结构和命名规则
    框架重构:记录创建人、最后修改人、创建时间、最后修改时间
    从VS2010跳跃到VS2017
    ASP.NET网站发布时的那些坑
    使用pjax时点击浏览器刷新按钮仅加载内容页的解决办法
    让ASP.NET第一次请求不变慢
    正确设置Firefox下载文件文件名的方法
    通过反编译让SpecFlow支持多层属性值的验证
  • 原文地址:https://www.cnblogs.com/well-666/p/12927939.html
Copyright © 2020-2023  润新知