zoukankan      html  css  js  c++  java
  • CentOS7环境RabbitMQ集群配置管理

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

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

    10.100.2.10 v01-app-rabbitmq01
    10.100.2.11 v01-app-rabbitmq02
    10.100.2.12 v01-app-rabbitmq03
    

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

    1.erlang安装:  

    下载地址:
    http://www.rabbitmq.com/releases/erlang/
    
    [root@v01-app-rabbitmq01 opt]# wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm
    [root@v01-app-rabbitmq01 opt]# rpm -ivh erlang-19.0.4-1.el6.x86_64.rpm
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:erlang-19.0.4-1.el6              ################################# [100%]
    [root@v01-app-rabbitmq01 opt]# 
    

    2.rabbitMQ安装:

    下载地址:https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/
    
    [root@v01-app-rabbitmq01 opt]# wget https://dl.bintray.com/rabbitmq/rabbitmq-server-rpm/rabbitmq-server-3.6.12-1.el6.noarch.rpm
    [root@v01-app-rabbitmq01 opt]# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
    [root@v01-app-rabbitmq01 opt]# rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm
    错误:依赖检测失败:
            socat 被 rabbitmq-server-3.6.12-1.el6.noarch 需要
    解决报错:
    
    [root@v01-app-rabbitmq01 opt]# wget –no-cache http://www.convirture.com/repos/definitions/rhel/6.x/convirt.repo -O /etc/yum.repos.d/convirt.repo #如果下载yum源有问题,可以不适用yum源直接安装试试.
    [root@v01-app-rabbitmq01 opt]# yum makecache -y
    [root@v01-app-rabbitmq01 opt]# yum install socat -y
    [root@v01-app-rabbitmq01 opt]# rpm -ivh rabbitmq-server-3.6.12-1.el6.noarch.rpm
    准备中...                          ################################# [100%]
    正在升级/安装...
       1:rabbitmq-server-3.6.12-1.el6     ################################# [100%]

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

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

    4.安装管理插件:

    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复制完成后,逐个重启节点服务:

    systemctl restart rabbitmq-server.service
    systemctl status rabbitmq-server.service
    

    4.添加到集群:

    将rabbit@v01-app-rabbitmq01作为集群主节点,在节点rabbitmq02和节点rabbitmq03上面分别执行如下命令,以加入集群中.

    rabbitmqctl stop_app 
    rabbitmqctl reset
    rabbitmqctl join_cluster rabbit@v01-app-rabbitmq01
    rabbitmqctl start_app
    

    5.3台都查看集群状态

    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.100.2.10:15672

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

    从集群中移除节点:

    [root@v01-app-rabbitmq02 rabbitmq]# rabbitmqctl stop_app
    Stopping rabbit application on node 'rabbit@v01-app-rabbitmq02'
    [root@v01-app-rabbitmq02 rabbitmq]# rabbitmqctl reset
    Resetting node 'rabbit@v01-app-rabbitmq02'
    [root@v01-app-rabbitmq02 rabbitmq]#  rabbitmqctl start_app
    Starting node 'rabbit@v01-app-rabbitmq02'
    

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

    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

    如果有多个队列应用ha-all策略,patten就写成正则的,如下

    添加一个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——用户管理
    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

  • 相关阅读:
    MSDN Magazine搞错了
    Visual Studio 2005中设置调试符号(Debug Symbols)
    BCB 6的问题
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现人与身份证的一对一关系映射
    吴裕雄天生自然Spring BootSpring Data JPA
    吴裕雄天生自然Spring BootSpring Boot对JSP的支持
    吴裕雄天生自然Spring BootSpring Boot的异常统一处理
    吴裕雄天生自然Spring Boot使用Spring Data JPA实现Author与Article的一对多关系映射
    吴裕雄天生自然Spring Boot解决 Error creating bean with name 'entityManagerFactory' defined in class path resource
    吴裕雄天生自然Spring Boot@ExceptionHandler注解和@ControllerAdvice注解
  • 原文地址:https://www.cnblogs.com/saneri/p/7798251.html
Copyright © 2011-2022 走看看