zoukankan      html  css  js  c++  java
  • rabbitmq3.8集群部署

    环境介绍

    主机名 IP
    rabbitmq1 192.168.50.134
    rabbitmq2 192.168.50.135
    rabbitmq3 192.168.50.136

    1、修改主机名

    如果已经修改过主机名的话,就不再进行修改。但是切记rabbitmq搭建完成后期不要再进行修改,否则会出现问题。

    hostnamectl set-hostname rabbitmq1
    hostnamectl set-hostname rabbitmq2
    hostnamectl set-hostname rabbitmq3
    

    每个节点添加hosts

    192.168.50.134 rabbitmq1
    192.168.50.135 rabbitmq2
    192.168.50.136 rabbitmq3
    

    最好是重启一下

    reboot
    

    2、安装源

    三台分别都进行操作

    分别是erlang和rabbitmq的源。默认地源下载的版本比较低,这里安装的erlang版本是21.3.8.18。rabbitmq的版本是3.8.9

    erlang的源

    [rabbitmq-erlang]
    name=rabbitmq-erlang
    baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
    gpgcheck=1
    gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    

    rabbitmq-server的源

    [bintray-rabbitmq-server]
    name=bintray-rabbitmq-rpm
    baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.8.x/el/7/
    gpgcheck=0
    repo_gpgcheck=0
    enabled=1
    

    接下来需要生成一下yum缓存

    dnf clean all
    dnf makecache
    

    3、安装

    三台分别都进行操作

    3.1、先安装erlang和socat

    dnf install socat erlang -y
    

    3.2、安装rabbitmq-server

    dnf install rabbitmq-server -y
    

    分别启动rabbitmq-server服务

    systemctl start rabbitmq-server
    

    4、三台机器同步.erlang.cookie文件

    这里我们以rabbtmq1节点作为集群管理节点,.erlang.cookie文件在rabbitmq的安装目录/var/lib/rabbitmq目录下,这是一个隐藏文件,需要加上-a参数

    [root@rabbitmq1 rabbitmq]# ls -al
    total 8
    drwxr-xr-x   3 rabbitmq rabbitmq   42 Oct 30 21:47 .
    drwxr-xr-x. 27 root     root     4096 Oct 30 21:20 ..
    -r--------   1 rabbitmq rabbitmq   20 Oct 30 00:00 .erlang.cookie
    drwxr-x---   4 rabbitmq rabbitmq  135 Oct 30 21:47 mnesia
    

    这里我们把.erlang.cookie文件同步到其他机器上面

    [root@rabbitmq1 rabbitmq]# scp .erlang.cookie  root@192.168.50.135:/var/lib/rabbitmq/
    root@192.168.50.135's password: 
    .erlang.cookie                             100%   20    27.0KB/s   00:00    
    [root@rabbitmq1 rabbitmq]# scp .erlang.cookie  root@192.168.50.136:/var/lib/rabbitmq/
    root@192.168.50.136's password: 
    .erlang.cookie                             100%   20    36.7KB/s   00:00 
    

    同步完成之后我们再来查看几个节点的.erlang.cookie文件,发现都是一致的,这是我们想要的结果。

    [root@rabbitmq1 rabbitmq]# cat .erlang.cookie 
    SFWVLUCDUUVPIVRJDWTE[root@rabbitmq1 rabbitmq]#
    

    这个文件是不带结尾换行符的,大家应该能看出来。

    5、重启服务

    三个节点分别重启rabbitmq-server服务

    systemctl restart rabbitmq-server
    

    6、三个节点都打开rabbitmq监控插件

    如果不打开的话,那么集群之间无法查看对方的数据,查看数据就是依靠web插件来实现的

    [root@rabbitmq1 ~]# rabbitmq-plugins enable rabbitmq_management
    Enabling plugins on node rabbit@rabbitmq1:
    rabbitmq_management
    The following plugins have been configured:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    Applying plugin configuration to rabbit@rabbitmq1...
    The following plugins have been enabled:
      rabbitmq_management
      rabbitmq_management_agent
      rabbitmq_web_dispatch
    
    started 3 plugins.
    

    其他另外两个节点都打开此功能(如有必要,需要重启服务,不过一般都不用重启rabbitmq)

    7、在rabbitmq1上面添加用户

    默认下,我们上面打开了监控插件功能,那么此时就能够看到15672端口了,我们可以使用IP:PORT的方式来进行访问,默认地账户密码都是guest,但是rabbitmq只允许本机通过localhost的方式进行通讯,因此我们再创建个其他的用户实现远程访问。

    rabbitmq1添加用户实现web访问

    [root@rabbitmq1 ebin]# rabbitmqctl add_user admin 111111
    Adding user "admin" ...
    [root@rabbitmq1 ebin]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    Setting permissions for user "admin" in vhost "/" ...
    [root@rabbitmq1 ebin]# rabbitmqctl set_user_tags admin administrator
    Setting tags for user "admin" to [administrator] ...
    

    这个时候再次访问并登录即可。

    8、将其他两个节点rabbitmq2、rabbitmq3加入集群中

    这里需要强调的是,我们将rabbitmq1作为第一个集群节点,然后在rabbitm2和rabbitmq3节点分别操作申请加入集群的方式。

    8.1、rabbitmq1节点查看当前集群。

    虽然只有一个节点,但也是集群,也是可以查看本身的集群信息的。

    [root@rabbitmq1 ebin]# rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbitmq1 ...
    Basics
    
    Cluster name: rabbit@rabbitmq1
    
    Disk Nodes
    
    rabbit@rabbitmq1
    
    Running Nodes
    
    rabbit@rabbitmq1
    
    Versions
    
    rabbit@rabbitmq1: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    
    Maintenance status
    
    Node: rabbit@rabbitmq1, status: not under maintenance
    
    Alarms
    
    (none)
    
    Network Partitions
    
    (none)
    
    Listeners
    
    Node: rabbit@rabbitmq1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    Node: rabbit@rabbitmq1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    
    Feature flags
    
    Flag: drop_unroutable_metric, state: disabled
    Flag: empty_basic_get_metric, state: disabled
    Flag: implicit_default_bindings, state: enabled
    Flag: maintenance_mode_status, state: enabled
    Flag: quorum_queue, state: enabled
    Flag: virtual_host_metadata, state: enabled
    

    我们需要注意的一行信息就是Cluster name: rabbit@rabbitmq1。要记住这个名字,一会我们要使用。

    8.2、现在我们操作rabbitmq2节点

    需要强调一下,集群中至少有一个节点是磁盘节点用于数据持久化,然后剩下的节点都设置为内存节点以提高性能。

    这里将 rabbitmq2 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点

    [root@rabbitmq2 ~]# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@rabbitmq2 ...
    [root@rabbitmq2 ~]# rabbitmqctl reset
    Resetting node rabbit@rabbitmq2 ...
    [root@rabbitmq2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
    Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1
    [root@rabbitmq2 ~]# rabbitmqctl  start_app
    Starting node rabbit@rabbitmq2 ...
    

    好了,现在rabbitmq2节点已经加入集群中了,怎么验证呢?我们来到rabbitmq1节点上面查看集群信息即可看到rabbitmq2节点。

    [root@rabbitmq1 ~]# rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbitmq1 ...
    Basics
    
    Cluster name: rabbit@rabbitmq1
    
    Disk Nodes
    
    rabbit@rabbitmq1
    
    RAM Nodes
    
    rabbit@rabbitmq2
    
    Running Nodes
    
    rabbit@rabbitmq1
    rabbit@rabbitmq2
    
    Versions
    
    rabbit@rabbitmq1: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    rabbit@rabbitmq2: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    
    Maintenance status
    
    Node: rabbit@rabbitmq1, status: not under maintenance
    Node: rabbit@rabbitmq2, status: not under maintenance
    
    Alarms
    
    (none)
    
    Network Partitions
    
    (none)
    
    Listeners
    
    Node: rabbit@rabbitmq1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    Node: rabbit@rabbitmq1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    Node: rabbit@rabbitmq2, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    Node: rabbit@rabbitmq2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    

    8.3、现在操作rabbitmq3节点加入集群

    [root@rabbitmq3 ~]# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@rabbitmq3 ...
    [root@rabbitmq3 ~]# rabbitmqctl reset
    Resetting node rabbit@rabbitmq3 ...
    [root@rabbitmq3 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq1
    Clustering node rabbit@rabbitmq3 with rabbit@rabbitmq1
    [root@rabbitmq3 ~]# rabbitmqctl start_app
    Starting node rabbit@rabbitmq3 ...
    

    现在也可以来到rabbitmq1节点查看到rabbitmq3的节点信息了。

    当然也可以在web上面查看到三个节点的信息,如下所示:、

    9、设置集群为镜像模式

    镜像队列机制就是将队列在 N 个节点之间设置主从关系,消息会在 N 个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提升 MQ 集群的整体高可用性。

    这里在rabbitmq1节点操作(在任意节点操作都是可以的)

    [root@rabbitmq1 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
    

    10、验证当前集群

    [root@rabbitmq1 ~]# rabbitmqctl cluster_status
    Cluster status of node rabbit@rabbitmq1 ...
    Basics
    
    Cluster name: rabbit@rabbitmq1
    
    Disk Nodes
    
    rabbit@rabbitmq1
    
    RAM Nodes
    
    rabbit@rabbitmq2
    rabbit@rabbitmq3
    
    Running Nodes
    
    rabbit@rabbitmq1
    rabbit@rabbitmq2
    rabbit@rabbitmq3
    
    Versions
    
    rabbit@rabbitmq1: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    rabbit@rabbitmq2: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    rabbit@rabbitmq3: RabbitMQ 3.8.9 on Erlang 21.3.8.18
    
    Maintenance status
    
    Node: rabbit@rabbitmq1, status: not under maintenance
    Node: rabbit@rabbitmq2, status: not under maintenance
    Node: rabbit@rabbitmq3, status: not under maintenance
    
    Alarms
    
    (none)
    
    Network Partitions
    
    (none)
    
    Listeners
    
    Node: rabbit@rabbitmq1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    Node: rabbit@rabbitmq1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    Node: rabbit@rabbitmq2, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    Node: rabbit@rabbitmq2, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq2, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    Node: rabbit@rabbitmq3, interface: [::], port: 15672, protocol: http, purpose: HTTP API
    Node: rabbit@rabbitmq3, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
    Node: rabbit@rabbitmq3, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
    
  • 相关阅读:
    Struts2 参数传递总结
    简单的 MySQL 用户管理
    一道好题
    javascript 常用代码大全(2) 简单飞扬
    读取word和pdf文件的几种方法 简单飞扬
    模拟身份证号码JS源代码 简单飞扬
    兵法感悟 简单飞扬
    跨应用Session共享 简单飞扬
    放假前必须做的事情 简单飞扬
    javascript 常用代码大全(4) 简单飞扬
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/13905563.html
Copyright © 2011-2022 走看看