RabbitMQ两种集群模式配置管理(2)

在三个节点分别安装rabbitmq-server,如果是CentOS使用yum即可,如果是Debian使用apt-get即可。

1 $apt-getinstall rabbitmq-server

在三个节点分别启动rabbitmq-server

$service rabbitmq-server start

$rabbitmq-server-detached

同步erlang.cookie文件,通过Erlang的分布式特性(通过magic cookie认证节点)进行RabbitMQ集群,各RabbitMQ服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。

root@live-mq-01:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA
root@live-mq-02:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA
root@live-mq-03:~# cat /var/lib/rabbitmq/.erlang.cookie
WJLPTHZIMFLJRTOGPYNA

在live-mq-01节点上查看集群信息,此时集群中应只有自己。

root@live-mq-01:~# rabbitmqctl cluster_status
Cluster status of node'rabbit@live-mq-01'...
[
{nodes,[{disc,['rabbit@live-mq-01']}]},
#集群中的节点,disc表示为磁盘模式,ram表示为内存模式
{running_nodes,['rabbit@live-mq-01']},
#正在运行的集群节点
{cluster_name,<<"rabbit@live-mq-01">>},
#集群的名称
{partitions,[]}
]
...done.

下面将live-mq-01、live-mq-02、live-mq-03组成集群:

live-mq-02加入live-mq-01节点。

root@live-mq-02:~# rabbitmqctl stop_app
root@live-mq-02:~# rabbitmqctl join_cluster rabbit@live-mq-01
root@live-mq-02:~# rabbitmqctl start_app

live-mq-03加入live-mq-01节点。

root@live-mq-03:~# rabbitmqctl stop_app
root@live-mq-03:~# rabbitmqctl join_cluster rabbit@live-mq-01 --ram
root@live-mq-03:~# rabbitmqctl start_app

此时live-mq-02与live-mq-03也会自动建立连接,上面我的两个节点,其中live-mq-02是磁盘节点,live-mq-03是内存节点,但live-mq-01节点默认是磁盘节点(一个集群中最少要有一个磁盘节点)。如果想把live-mq-02由磁盘节点改成内存节点,使用如下change_cluster_node_type命令修改即可,但要先stop:

root@live-mq-02:~# rabbitmqctl stop_app
Stopping node'rabbit@live-mq-02'...
...done.
root@live-mq-02:~# rabbitmqctl change_cluster_node_type ram
Turning'rabbit@live-mq-02'intoaram node...
...done.
root@live-mq-02:~# rabbitmqctl start_app
Starting node'rabbit@live-mq-02'...
...done.

查看集群信息

root@live-mq-01:~# rabbitmqctl cluster_status
Cluster status of node'rabbit@live-mq-01'...
[{nodes,[{disc,['rabbit@live-mq-01']},
{ram,['rabbit@live-mq-03','rabbit@live-mq-02']}]},
{running_nodes,['rabbit@live-mq-02','rabbit@live-mq-03','rabbit@live-mq-01']},
{cluster_name,<<"rabbit@live-mq-01">>},
{partitions,[]}]
...done.

我们可以看到三个节点都加入了集群中,两个ram节点、一个disc节点。其中三个节点都在运行中,以及集群名称显示。

2)允许远程用户访问

第一、添加mq用户并设置密码

1 root@live-mq-01:~# rabbitmqctl add_user mq 123456

第二、设置mq用户为管理员

1 root@live-mq-01:~# rabbitmqctl set_user_tags mq administrator

第三、设置mq用户的权限,指定允许访问的vhost以及write/read

root@live-mq-01:~# rabbitmqctl set_permissions -p "/" mq ".*" ".*" ".*"
Setting permissions foruser"live"invhost"/"...
...done.

第四、查看vhost(/)允许哪些用户访问

root@live-mq-01:~# rabbitmqctl list_permissions -p /
Listing permissions invhost"/"...
mq.*.*.*
...done.

第五、配置允许远程访问的用户,rabbitmq的guest用户默认不允许远程主机访问。

root@live-mq-01:~# cat /etc/rabbitmq/rabbitmq.config
[                                                                                                                                 
{rabbit,[{tcp_listeners,[5672]},{loopback_users,["mq"]}]}
].

ps:主机1设置完以上这些之后,在集群内的机器都会同步此配置,但是/etc/rabbitmq/rabbitmq.config文件不会同步。

root@live-mq-02:~# rabbitmqctl list_users
Listing users...
mq[administrator]
...done.

最后,可以选择删除默认guest用户(密码也是guest)

1 root@live-mq-01:~# rabbitmqctl delete_user guest

3)RabbitMQ退出集群

假设要把rabbit@live-mq-02退出集群,在rabbit@live-mq-02上执行:

$rabbitmqctl stop_app
$rabbitmqctl reset
$rabbitmqctl start_app

在集群主节点上执行

$rabbitmqctl forget_cluster_node rabbit@live-mq-02

4)RabbitMQ集群重启

集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启:

先在一个节点上执行

$rabbitmqctl force_boot
$service rabbitmq-server start

在其他节点上执行

$service rabbitmq-server start

查看cluster状态是否正常(要在所有节点上查询)。

rabbitmqctl cluster_status

如果有节点没加入集群,可以先退出集群,然后再重新加入集群。

上述方法不适合内存节点重启,内存节点重启的时候是会去磁盘节点同步数据,如果磁盘节点没起来,内存节点一直失败。

5)RabbitMQ开启图形化页面

RabbitMQ提供了一个非常友好的图形化监控页面插件(rabbitmq_management),让我们可以一目了然看��Rabbit的状态或集群状态。

分别在三个节点上执行开启rabbitmq_management插件的命令,注意开启几个节点在监控页面就可以看见几个节点:

root@live-mq-01:~# rabbitmq-plugins enable rabbitmq_management
root@live-mq-01:~# rabbitmq-plugins list

查看监听端口(插件监控的端口是15672)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/749f353998a0294ed5b148bae3e50ae6.html