zoukankan      html  css  js  c++  java
  • RabbitMQ集群

    CentOS7系统内核版本:3.10.0-514.26.2.el7.x86_64

    一、对应主机host地址(三台主机host文件要保持一致)

    10.0.1.20 node1
    10.0.1.21 node2
    10.0.1.22 node3
    # node1节点执行
    hostnamectl set-hostname node1
    # node2节点执行
    hostnamectl set-hostname node2
    # node3节点执行
    hostnamectl set-hostname node3
    reboot

    二、3台主机都安装相同的软件:

    1.erlang,rabbitMQ安装安装:  

    rpm -ivh erlang-21.3.8.13-1.el7.x86_64.rpm
    rpm -ivh socat-1.7.3.2-2.el7.x86_64.rpm
    rpm -ivh rabbitmq-server-3.8.2-1.el7.noarch.rpm

    2.启动服务和查看状态:  

    service rabbitmq-server start
    service rabbitmq-server status
    #CentOS7推荐使用如下方法:
    systemctl start rabbitmq-server.service
    systemctl status rabbitmq-server.service

    3.安装管理插件:

    web管理插件
    rabbitmq-plugins list      #查看插件列表
    rabbitmq-plugins enable rabbitmq_management
     
    日志跟踪插件
    rabbitmq-plugins enable rabbitmq_tracing  #rabbitmq启用trace插件
    rabbitmqctl trace_on      #打开trace的开关
    rabbitmqctl trace_on -p test #打开trace的开关(test为需要日志追踪的vhost)
    rabbitmqctl trace_off     #关闭trace的开关
    安装rabbitmq_delayed_message_exchange(延时队列)
     
    默认插件目录:
    cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.12/plugins
    wget https://dl.bintray.com/rabbitmq/community-plugins/rabbitmq_delayed_message_exchange-0.0.1.ez
     
    rabbitmq-plugins enable rabbitmq_delayed_message_exchange
    The following plugins have been enabled:
    rabbitmq_delayed_message_exchange
     
    Applying plugin configuration to v01-app-rabbit@localhost... started 1 plugin.

    至此3台上面的rabbitmq都已安装完成,并且启动正常,现在开始配置集群服务。

    三、普通集群配置

    1.说明:

    Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 $home/.erlang.cookie 中,我的是用rpm安装的,所以.erlang.cookie就放在/var/lib/rabbitmq中

    2.复制cookie内容 
    erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400,不然节点之间就无法通信。

    打开文件然后需要先把其中的一台服务器的.erlang.cookie中的内容复制到别的机器上,最好是复制内容,因为文件权限不对的话会出现问题,在最后退出保存的时候使用wq!用!来进行强制保存即可.

    也可是直接使用scp传过去,记得文件权限和用户属主属组如scp .erlang.cookie root@10.100.2.12:/tmp

    ##操作

    3.erlang.cookie复制完成后,逐个重启节点服务:

    ## 每个node上传 .erlang.cookie

    echo "123456" > .erlang.cookie

    mv .erlang.cookie /var/lib/rabbitmq/

    chmod 400 .erlang.cookie

    ## 重启

    systemctl restart rabbitmq-server.service

    systemctl status rabbitmq-server.service

    4.添加到集群:

    将rabbit@node1作为集群主节点,在节点弄得node2和节点node3上面分别执行如下命令,以加入集群中.

    rabbitmqctl stop_app

    rabbitmqctl reset

    rabbitmqctl join_cluster rabbit@v01-app-rabbitmq01

    rabbitmqctl start_app

    5.台都查看集群状态

    rabbitmqctl cluster_status

    6.账号管理

    添加账号:
    rabbitmqctl add_user admin admin
    添加 权限tag
    rabbitmqctl set_user_tags admin administrator
     
    删除用户(删除guest用户)
    [root@v01-app-rabbitmq01 rabbitmq]# rabbitmqctl delete_user guest
    Deleting user "guest"
     
    修改用户的密码
    rabbitmqctl  change_password  Username  Newpassword
     
    [root@v01-app-rabbitmq01 ~]# rabbitmqctl  change_password  admin 0GM1aol4z8GeSZY99
    Changing password for user "admin"
     
    查看当前用户列表
    rabbitmqctl  list_users
    Listing users
    admin   [administrator]

    7.访问WEB地址:10.0.1.20:15672

    至此rabbitmq普通集群模式创建完成.

    从集群中移除节点:

    [root@node2]# rabbitmqctl stop_app

    Stopping rabbit application on node 'rabbit@node2'

    [root@node2]# rabbitmqctl reset

    Resetting node 'rabbit@v01-app-rabbitmq02'

    [root@node2]#  rabbitmqctl start_app

    Starting node 'node2'

    加入集群时指定节点类型:

    rabbitmqctl stop_app

    rabbitmqctl join_cluster --ram rabbit@v01-app-rabbitmq01

    rabbitmqctl start_app

    --ram 指定内存节点类型,--disc指定磁盘节点类型

    修改节点类型

    rabbitmqctl stop_app

    rabbitmqctl change_cluster_node_type disc

    rabbitmqctl start_app

    日志文件:

    /var/log/rabbitmq/rabbit@v01-app-rabbitmq01.log

    /var/log/rabbitmq/rabbit@v01-app-rabbitmq01-sasl.log  

    集群镜像模式配置:

         上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。

    我们看看如何镜像模式来解决复制的问题,从而提高可用性.

    使用Rabbit镜像功能,需要基于rabbitmq策略来实现,策略是用来控制和修改群集范围的某个vhost队列行为和Exchange行为

    下面我们使用web端创建一个完整的镜像队列:

    1.点击admin菜单-->右侧的Virtual Hosts选项- Add a new virtual host 

     2.点击admin菜单-->右侧的Policies选项-->左侧最下下边的Add / update a policy

     添加一个queues队列

     

    添加后刷新就可以看到策略已经应用了

    命令行配置集群镜像模式:

    使用Rabbit镜像功能,需要基于rabbitmq策略来实现,政策是用来控制和修改群集范围的某个vhost队列行为和Exchange行为

    在cluster中任意节点启用策略,策略会自动同步到集群节点

    # rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'

    这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue, 策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。

    实例:

       rabbitmqctl set_policy ha-all "^ha." '{"ha-mode":"all"}'

       rabbitmqctl set_policy ha-all "^SMS_BUSINESS_NOW." '{"ha-mode":"all","ha-sync-mode":"automatic"}'

    virtual_host管理

    新建virtual_host: rabbitmqctl add_vhost  xxx
    撤销virtual_host: rabbitmqctl delete_vhost  xxx

     删除队列:

    rabbitmqctl -p /activity purge_queue activity_register
     
    RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。 安装并配置 HAProxy
    在 10.0.1.23上安装 HAProxy,然后修改 /etc/haproxy/haproxy.cfg:
     
    listen rabbitmq_cluster 0.0.0.0:5672

    mode tcp
    balance roundrobin

    server node1 192.168.1.1:5672 check inter 2000 rise 2 fall 3
    server node2 192.168.1.2:5672 check inter 2000 rise 2 fall 3
    server node2 192.168.1.3:5672 check inter 2000 rise 2 fall 3

    
    

    参考文档:
    rabbitmq——用户管理
    http://www.cnblogs.com/AloneSword/p/4200051.html
    http://blog.csdn.net/njys1/article/details/53001728

    集群高可用配置:
    http://88250.b3log.org/rabbitmq-clustering-ha
    http://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html
    http://www.cnblogs.com/wangiqngpei557/p/6158094.html

    在WEB端创建镜像队列:
    https://jingyan.baidu.com/article/e73e26c0c3841b24adb6a7b9.html

    systemctl restart rabbitmq-server.service
    systemctl status rabbitmq-server.service
  • 相关阅读:
    codeforces#1343E. Weights Distributing(bfs)
    Windows编程调试技巧-控制台调试
    Windos编程中窗口的尺寸cxClient和cyClient初始化的问题
    windows下pip安装python模块时报错总结
    .md即markdown文件的基本常用编写语法(图文并茂)
    如何转载cnsd的博客
    codeforces#1332F. Independent Set(树上dp)
    codeforces#1333 E. Road to 1600(构造)
    codeforces#1329C
    codeforces#1293E. Xenon's Attack on the Gangs(树上dp)
  • 原文地址:https://www.cnblogs.com/edeny/p/13804973.html
Copyright © 2011-2022 走看看