美文网首页
centos7 搭建 rabbitMq集群

centos7 搭建 rabbitMq集群

作者: 进击大斌 | 来源:发表于2019-07-28 21:32 被阅读0次

    * 参考博客

    准备:

    配置每台服务器的 hosts 文件:

    192.168.10.133 rabbit1
    192.168.10.136 rabbit2
    

    一、erlang安装
    • 1、首先安装erlang语言环境,需要安装C++编译:
    $ yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
    
    • 2、下载erlang
    $ wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3.8.6-1.el7.centos.x86_64.rpm/download.rpm
    
    • 3、将rpm包放在/opt目录下,安装erlang
    $ rpm -ivh erlang-20.3.8.6-1.el7.centos.x86_64.rpm
    
    二、rabbitMq安装
    • 1、下载rabbitMq
    $ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
    
    • 2、安装rabbitMq
    $ rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm
    
    • [x] 2.1、安装过程报错如下:
    [root@localhost ~]# rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm 
    warning: rabbitmq-server-3.7.7-1.el7.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
    error: Failed dependencies:
        socat is needed by rabbitmq-server-3.7.7-1.el7.noarch
    
    • 3、安装依赖包:socat
    $ yum -y install socat
    
    • 4、生成配置文件
    cp /usr/share/doc/rabbitmq-server-3.7.7/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
    
    • 5、启动rabbitMq
    $ systemctl start rabbitmq-server
    # 查看启动状态
    $ systemctl status rabbitmq-server
    
    • 6、管理插件安装
    # 查看插件:
    $ rabbitmq-plugins list
    # web插件安装:
    $ rabbitmq-plugins enable rabbitmq_management
    
    • 7、常用命令:
    # 停止服务
    rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z stop_app
    # 加入集群 --ram 类型为内存节点;不加此参数默认为磁盘节点
    rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z join_cluster --ram rabbit@izuf6ghdadtcqh6fnjs6zgz
    # 启动服务
    rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z start_app
    # 查看节点的集群状态
    rabbitmqctl -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz cluster_status
    # 启动界面管理服务插件
    rabbitmq-plugins -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz enable rabbitmq_management
    # 将节点移除集群
    rabbitmqctl -n rabbit_2@izuf6e78y3y0pi1watmli4z reset
    # 更改节点类型 disc:磁盘节点;ram:内存节点
    rabbitmqctl -n rabbit@izuf6ghdadtcqh6fnjs6zgz change_cluster_node_type disc
    查看rabbitMq进程:ps -ef | grep rabbitmq
    
    默认监听端口15672/5672:netstat -anplt | grep LISTEN rabbitmq
    
    • 8、用户管理:
    # 新增一个用户
    rabbitmqctl add_user Username Password
    # 删除一个用户
    rabbitmqctl delete_user Username
    # 修改用户的密码
    rabbitmqctl change_password Username Newpassword
    # 查看当前用户列表
    rabbitmqctl list_users
    
    # 用户角色:
    (1) 超级管理员(administrator)
    可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
    
    (2) 监控者(monitoring)
    可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
    
    (3) 策略制定者(policymaker)
    可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
    与administrator的对比,administrator能看到这些内容
    
    (4) 普通管理者(management)
    仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
    
    (5) 其他
    无法登陆管理控制台,通常就是普通的生产者和消费者。
    
    # 设置用户角色的命令为:
    rabbitmqctl set_user_tags User Tag
    # User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
    # 也可以给同一用户设置多个角色,例如
    rabbitmqctl set_user_tags hncscwc monitoring policymaker
    
    # 允许用户远程访问
    rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
    
    三、集群服务配置
    • 一、普通集群:
    • 1、说明:

      Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 home/.erlang.cookie 中,我的是用rpm安装的,所以.erlang.cookie就放在/var/lib/rabbitmq中。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下。
    • 2、复制cookie内容
    # .erlang.cookie 路径
    cd /var/lib/rabbitmq
    
    # 修改其他节点服务器的的.erlang.cookie 保证所有服务器的 .erlang.cookie文件保持一致
    # 修改文件权限(可编辑):
    chmod 777  /var/lib/rabbitmq/.erlang.cookie
    # 修改完 .erlang.cookie 后必须改回文件权限(启动前必须设置400,只有owner拥有权限即可,否则启动rabbitmq服务失败)
    chmod 400  /var/lib/rabbitmq/.erlang.cookie
    
    • 3、设置好cookie后先将每个节点的rabbitmq重启
    # 停止服务
    service rabbitmq-server stop
    # 开启服务
    service rabbitmq-server start
    # 查看服务状态,检查是否启动成功
    service rabbitmq-server status
    
    # 查看每个节点集群状态:
    rabbitmqctl cluster_status
    可以看到节点情况:
    Cluster status of node rabbit@rabbit1
    
    [{nodes,[{disc,[rabbit@rabbit1]}]},
    
    {running_nodes,[rabbit@rabbit1]},
    
    {cluster_name,<<"rabbit@rabbit1">>},
    
    {partitions,[]},
    
    {alarms,[{rabbit@rabbit1,[]}]}]
    
    • 4、添加集群节点

      说明:

      ++rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。++
    # 初始化主节点执行队列
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    
    将rabbit1作为集群主节点,rabbit2和rabbit3加入集群,所以在rabbit2和rabbit3节点上执行如下命令,加入集群节点:
    
    # rabbit2节点执行命令:
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbit1
    rabbitmqctl start_app
    
    其中–-ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加–-ram这个参数了。
    PS:只要在节点列表里包含了本身,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。
    
    # 查看集群节点状态:
    rabbitmqctl cluster_status
    出现如下信息即表示集群完成:
    [root@rabbit1 rabbitmq]# rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbit1 ...
    [{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@rabbit2]}]},
     {running_nodes,[rabbit@rabbit2,rabbit@rabbit1]},
     {cluster_name,<<"rabbit@rabbit2">>},
     {partitions,[]},
     {alarms,[{rabbit@rabbit2,[]},{rabbit@rabbit1,[]}]}]
    
    • 5、单服务器启动多实例
    # 启动多个实例
    RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detatched &amp
    RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}] -rabbitmq_stomp tcp_listeners [61614] -rabbitmq_mqtt  tcp_listeners [1884]" RABBITMQ_NODENAME=rabbit_2 rabbitmq-server -detached
    
    # 查看节点状态信息
    rabbitmqctl -n rabbit_2@rabbit2 cluster_status
    
    # 加入集群
    rabbitmqctl -n rabbit_2@rabbit2 stop_app
    rabbitmqctl -n rabbit_2@rabbit2 join_cluster rabbit@rabbit1
    # rabbitmqctl -n rabbit_1@rabbit1 reset #将节点移除集群
    rabbitmqctl -n rabbit_2@rabbit2 start_app
    
    # 开启节点监控
    rabbitmq-plugins -n rabbit_2 enable rabbitmq_management
    
    • 6、其他运维
    # 退出集群节点:
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    
    # 移除节点:
    rabbitmqctl stop_app
    rabbitmqctl forget_cluster_node rabbit@rabbit2
    
    # 加入集群时指定节点类型:
    rabbitmqctl stop_app
    rabbitmqctl join_cluster --ram rabbit@rabbit2
    rabbitmqctl start_app
    其中,--ram 指定内存节点类型,--disc指定磁盘节点类型
    
    # 修改节点类型:
    rabbitmqctl stop_app
    rabbitmqctl change_cluster_node_type disc
    rabbitmqctl start_app
    
    • 7、普通集群需注意:

      这种模式更适合非持久化队列,只有该队列是非持久的,客户端才能重新连接到集群里的其他

    • 二、镜像集群:
    • 1、设置镜像队列策略

    # 在任意一个节点上执行:
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    
    # 查看策略
    rabbitmqctl list_policies
    
    • 2、语法讲解:

    在cluster中任意节点启用策略,策略会自动同步到集群节点
    rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
    这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
    例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'
    注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"
    官方set_policy说明参见
    set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
    http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

    四、安装插件
    # 插件存放路径
    /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/plugins
    
    # 查看插件列表
    rabbitmq-plugins list
    
    # 启动插件
    rabbitmq-plugins enable plugin-name
    
    # 关闭插件
    rabbitmq-plugins disable plugin-name
    

    相关文章

      网友评论

          本文标题:centos7 搭建 rabbitMq集群

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