美文网首页Linux科技
Rabbitmq集群搭建

Rabbitmq集群搭建

作者: Miracle001 | 来源:发表于2019-04-10 17:55 被阅读0次

    rabbitmq普通集群配置

    准备
    镜像: centos7.5 1804
    网络: NAT+仅主机
        192.168.25.x
        192.168.50.x
    yum源: 额外安装了一个epel源,网上下载该包
    
    3台主机都操作
    vim /etc/hosts
    192.168.25.11 node1.fgq.com node1
    192.168.25.12 node2.fgq.com node2
    192.168.25.13 node3.fgq.com node3
    yum clean all
    yum repolist
    yum -y install rabbitmq-server
    systemctl start rabbitmq-server
    ss -ntl | grep -E "5672|4369"
    ll /var/lib/rabbitmq/.erlang.cookie
    
    node1
    [root@node1 ~]# scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/
    [root@node1 ~]# scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/
    
    3台主机都操作,以node1为例
    [root@node1 ~]# rabbitmq-plugins list
    [root@node1 ~]# rabbitmq-plugins enable rabbitmq_management
    [root@node1 ~]# systemctl restart rabbitmq-server
    [root@node1 ~]# ss -ntl | grep -E "5672|4369"
    插件端口是15672
    
    
    node2和node3都操作,以node2为例
    [root@node2 ~]# rabbitmqctl stop_app
    Stopping node rabbit@node2 ...
    ...done.
    [root@node2 ~]# rabbitmqctl join_cluster --ram rabbit@node1
    Clustering node rabbit@node2 with rabbit@node1 ...
    ...done.
    [root@node2 ~]# rabbitmqctl start_app
    Starting node rabbit@node2 ...
    ...done.
    
    node1
    [root@node1 ~]# rabbitmqctl cluster_status
    Cluster status of node rabbit@node1 ...
    [{nodes,[{disc,[rabbit@node1]},{ram,[rabbit@node3,rabbit@node2]}]},
     {running_nodes,[rabbit@node3,rabbit@node2,rabbit@node1]},
     {cluster_name,<<"rabbit@node1.fgq.com">>},
     {partitions,[]}]
    ...done.
    
    浏览器: http://192.168.25.11:15672/
    默认账号:guest  
    默认密码:guest
    
    1
    创建一条队列
    
    2
    在RabbitMQ集群集群中,必须至少有一个磁盘节点,
    否则队列元数据无法写入到集群中,
    当磁盘节点宕掉时,集群将无法写入新的队列元数据信息。
    
    3

    镜像集群配置

    上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,
    尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。
    虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,
    所以要想在队列节点宕机或故障也能正常应用,
    就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
    
    镜像队列是基于普通的集群模式的,然后再添加一些策略,
    所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
    
    设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,
    这里说的是其中的网页设置方式。
    
    1.创建rabbitmq策略
    在node1节点的控制台上创建策略
    按照图中的内容根据自己的需求填写
    
    4
    Name:策略名称
    Pattern:匹配的规则,这里表示匹配a开头的队列,如果是匹配所有的队列,那就是^.
    Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档。
    
    5
    http://192.168.25.12:15672/
    http://192.168.25.13:15672/
    此时分别登陆node2、node3两个节点的控制台,可以看到上面添加的这个策略,如图所示
    
    6 7
    2.添加队列
    8
    Name:队列名称
    Durability:队列是否持久化
    Node:消息队列的节点
    Auto delete:自动删除
    Arguments:使用的策略类型
    
    9
    将鼠标指向".+2"可以显示出另外两台消息节点。
    
    10
    3.创建消息
    11 12 13
    2-Persistent:表示持久化
    Headers:随便填写即可
    Properties:点击问号,选择一个消息ID号
    Payload:消息内容
    
    14
    点击queue按钮,发现ab队列的Ready和Total中多了一条消息记录。
    
    15
    4.做破坏性测试
    (1)将node1节点的服务关闭,再通过node2和node3查看消息记录是否还存在。
    [root@node1 ~]# rabbitmqctl stop_app
    Stopping node rabbit@node1 ...
    ...done.
    
    16 17
    从中可以看到ab队列已经从之前的+2显示成+1了,而且消息记录是存在的。
    
    (2)再将node2节点的服务关闭,通过node3查看消息记录是否还存在
    [root@node2 ~]# rabbitmqctl stop_app
    Stopping node rabbit@node2 ...
    ...done.
    
    18
    从中可以看到ab队列和消息记录还是存在的,只是变成了一个节点了。
    
    (3)将node1和node2的服务再启动起来
    [root@node1 ~]# rabbitmqctl start_app
    Starting node rabbit@node1 ...
    ...done.
    [root@node2 ~]# rabbitmqctl start_app
    Starting node rabbit@node2 ...
    ...done.
    
    19
    从中可以看到ab队列后面+2变成了粉色,鼠标指上去显示镜像无法同步。
    如果这时候停掉node3节点的服务,那么队列里面的消息将会丢失。
    
    采取的解决办法是选择在node2节点上执行同步命令。
    [root@node2 ~]# rabbitmqctl sync_queue ab
    Synchronising queue 'ab' in vhost '/' ...
    ...done.
    
    20
    同步完成后,+2又变成了蓝色。
    
    这样,我们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。
    
    参考文章
    https://blog.51cto.com/11134648/2155934
    

    相关文章

      网友评论

        本文标题:Rabbitmq集群搭建

        本文链接:https://www.haomeiwen.com/subject/emzyiqtx.html