Board logo

标题: 消息中间件—RabbitMQ(集群原理与搭建篇)-2 [打印本页]

作者: look_w    时间: 2019-3-8 18:34     标题: 消息中间件—RabbitMQ(集群原理与搭建篇)-2

二、RabbitMQ集群的搭建
(1)搭建RabbitMQ集群所需要安装的组件

在搭建RabbitMQ集群之前有必要在每台虚拟机上安装如下的组件包,分别如下:
a.Jdk 1.8
b.Erlang运行时环境,这里用的是otp_src_19.3.tar.gz (200MB+)
c.RabbitMq的Server组件,这里用的rabbitmq-server-generic-unix-3.6.10.tar.gz
关于如何安装上述三个组件的具体步骤,已经有不少博文对此进行了非常详细的描述,那么本文就不再赘述了。有需要的同学可以具体参考这些步骤来完成安装。
(2)搭建10节点组成的RabbitMQ集群

该节中主要展示的是集群搭建,需要确保每台机器上正确安装了上述三种组件,并且每台虚拟机上的RabbitMQ的实例能够正常启动起来。
a.编辑每台RabbitMQ的cookie文件,以确保各个节点的cookie文件使用的是同一个值,可以scp其中一台机器上的cookie至其他各个节点,cookie的默认路径为/var/lib/rabbitmq/.erlang.cookie或者$HOME/.erlang.cookie,节点之间通过cookie确定相互是否可通信。
b.配置各节点的hosts文件( vim /etc/hosts)

    xxx.xxx.xxx.xxx rmq-broker-test-1
    xxx.xxx.xxx.xxx rmq-broker-test-2
    xxx.xxx.xxx.xxx rmq-broker-test-3
    ......
    xxx.xxx.xxx.xxx rmq-broker-test-10

c.逐个节点启动RabbitMQ服务

rabbitmq-server -detached

d.查看各个节点和集群的工作运行状态

rabbitmqctl status, rabbitmqctl cluster_status

e.以rmq-broker-test-1为主节点,在rmq-broker-test-2上:

    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster rabbit@rmq-broker-test-2
    rabbitmqctl start_app

在其余的节点上的操作步骤与rmq-broker-test-2虚拟机上的一样。
d.在RabbitMQ集群中的节点只有两种类型:内存节点/磁盘节点,单节点系统只运行磁盘类型的节点。而在集群中,可以选择配置部分节点为内存节点。
内存节点将所有的队列,交换器,绑定关系,用户,权限,和vhost的元数据信息保存在内存中。而磁盘节点将这些信息保存在磁盘中,但是内存节点的性能更高,为了保证集群的高可用性,必须保证集群中有两个以上的磁盘节点,来保证当有一个磁盘节点崩溃了,集群还能对外提供访问服务。在上面的操作中,可以通过如下的方式,设置新加入的节点为内存节点还是磁盘节点:

    #加入时候设置节点为内存节点(默认加入的为磁盘节点)
    [root@mq-testvm1 ~]# rabbitmqctl join_cluster rabbit@rmq-broker-test-1 --ram

    #也通过下面方式修改的节点的类型
    [root@mq-testvm1 ~]# rabbitmqctl changeclusternode_type disc | ram

e.最后可以通过“rabbitmqctl cluster_status”的方式来查看集群的状态,上面搭建的10个节点的RabbitMQ集群状态(3个节点为磁盘即诶但,7个节点为内存节点)如下:

    Cluster status of node 'rabbit@rmq-broker-test-1'
    [{nodes,[{disc,['rabbit@rmq-broker-test-1','rabbit@rmq-broker-test-2',
                    'rabbit@rmq-broker-test-3']},
             {ram,['rabbit@rmq-broker-test-9','rabbit@rmq-broker-test-8',
                   'rabbit@rmq-broker-test-7','rabbit@rmq-broker-test-6',
                   'rabbit@rmq-broker-test-5','rabbit@rmq-broker-test-4',
                   'rabbit@rmq-broker-test-10']}]},
     {running_nodes,['rabbit@rmq-broker-test-10','rabbit@rmq-broker-test-5',
                     'rabbit@rmq-broker-test-9','rabbit@rmq-broker-test-2',
                     'rabbit@rmq-broker-test-8','rabbit@rmq-broker-test-7',
                     'rabbit@rmq-broker-test-6','rabbit@rmq-broker-test-3',
                     'rabbit@rmq-broker-test-4','rabbit@rmq-broker-test-1']},
     {cluster_name,<<"rabbit@mq-testvm1">>},
     {partitions,[]},
     {alarms,[{'rabbit@rmq-broker-test-10',[]},
              {'rabbit@rmq-broker-test-5',[]},
              {'rabbit@rmq-broker-test-9',[]},
              {'rabbit@rmq-broker-test-2',[]},
              {'rabbit@rmq-broker-test-8',[]},
              {'rabbit@rmq-broker-test-7',[]},
              {'rabbit@rmq-broker-test-6',[]},
              {'rabbit@rmq-broker-test-3',[]},
              {'rabbit@rmq-broker-test-4',[]},
              {'rabbit@rmq-broker-test-1',[]}]}]




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0