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
    
  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/13905563.html
Copyright © 2011-2022 走看看