RabbitMQ集群搭建--CentOs7、rabbitmq-server3.6

目录

CentOs7.6 搭建 RabbitMQ 3.6 单机服务与使用

安装

安装 RabbitMQ

启动服务

服务状态

查看日志

开启管理UI

访问管理UI

开启镜像集群

停止RabbitMQ 服务

设置 Erlang Cookie

注意事项

运行各节点

组成集群

设置内存节点

更改节点属性

查看集群状态

登录后台

​设置镜像队列策略

集群重启

优化Linux内核参数(最大文件数量)

授权操作

添加用户

删除用户

修改密码

用户授权

查看用户授权

查看当前用户列表

添加角色

CentOs7.6 搭建 RabbitMQ 3.6 单机服务与使用

环境

台主机

CentOS7.6.1810

RabbitMQ3.6

 

注意事项

关闭防火墙或iptables

centos 6.x 关闭 iptables

$ service iptables stop # 关闭命令:

centos 7.x 关闭firewall

$ systemctl stop firewalld.service # 停止firewall

注:不想关闭防火墙,就开放5672、1567225672端口与4369端口,设置之后可以通过网页方式管理MQ

4369 -- erlang发现口

5672 --client端通信口

15672 -- 管理界面ui端口

25672 -- server间内部通信口                            

firewall-cmd --permanent --zone=public --add-port=4369/tcp

firewall-cmd --permanent --zone=public --add-port=5672/tcp

firewall-cmd --permanent --zone=public --add-port=15672/tcp

firewall-cmd --permanent --zone=public --add-port=25672/tcp

firewall-cmd  --reload

修改主机名(建议重启

]# hostnamectl set-hostname node1

]# hostnamectl set-hostname node2

 

修改hosts文件三台主机文件必须相同

vim /etc/hosts

192.168.2.3 node1

192.168.2.4 node2

注:保证集群的高可用,至少要有1个disc节点

     RabbitMQ Cluster 全部挂掉,RAM节点无法先启动,必须先启动disc节点

     推荐 2 RAM 1 DISC 集群搭建方式

(当disc节点崩溃,集群仍可以运行,但无法进行其他操作(增删查改),知道disc节点恢复,解决:增加disc节点)

 

 

安装

RabbitMQ 安装需要依赖 Erlang 环境

$ cd /opt

$ wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x86_64.rpm

 

$ yum install erlang-19.0.4-1.el7.centos.x86_64.rpm

安装 RabbitMQ

$ cd /opt

$ wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm

$ yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm  -y

启动服务

systemctl start  rabbitmq-server.service

systemctl enable rabbitmq-server.service

服务状态

$ service rabbitmq-server status

查看日志

$ cat /var/log/rabbitmq/rabbit@node1.log

=INFO REPORT==== 16-Aug-2017::11:43:32 ===

Starting RabbitMQ 3.6.10 on Erlang 19.0.4

Copyright (C) 2007-2017 Pivotal Software, Inc.

Licensed under the MPL.  See http://www.rabbitmq.com/

 

=INFO REPORT==== 16-Aug-2017::11:43:32 ===node           : rabbit@localhost

home dir       : /var/lib/rabbitmq

config file(s) : /etc/rabbitmq/rabbitmq.config (not found)

cookie hash    : kuUba2xGLitNNO48qE0Hrg==log            : /var/log/rabbitmq/rabbit@localhost.log

sasl log       : /var/log/rabbitmq/rabbit@localhost-sasl.log

database dir   : /var/lib/rabbitmq/mnesia/rabbit@localhost

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Memory limit set to 390MB of 976MB total.

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Enabling free disk space monitoring

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Disk free limit set to 50MB

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Limiting to approx 924 file handles (829 sockets)

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

FHC read buffering:  OFF

FHC write buffering: ON

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Database directory at /var/lib/rabbitmq/mnesia/rabbit@localhost is empty. Initialising from scratch...

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Waiting for Mnesia tables for 30000 ms, 9 retries left

 

=INFO REPORT==== 16-Aug-2017::11:43:33 ===

Waiting for Mnesia tables for 30000 ms, 9 retries left

这里显示的是没有找到配置文件,我们可以自己创建这个文件

config file(s) : /etc/rabbitmq/rabbitmq.config (not found)

创建rabbitmq.config

$ cd /etc/rabbitmq/

$ vi rabbitmq.config

编辑内容如下:

[{rabbit, [{loopback_users, []}]}].

  • 这里的意思是开放使用,rabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置。

保存配置后重启服务

$ service rabbitmq-server restart

开启管理UI

$ rabbitmq-plugins enable rabbitmq_management    #重启报错不要急 稍等几秒  等服务端完全启动

重启服务

$ service rabbitmq-server restart

访问管理UI

通过 http://ip:15672 使用guest,guest 进行登陆了

 

 

开启镜像集群

停止RabbitMQ 服务

$ service rabbitmq-server stop

Redirecting to /bin/systemctl stop  rabbitmq-server.service

设置 Erlang Cookie

设置不同节点间同一认证的Erlang Cookie

$ scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/

$ scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/

 

  • 然后将 node1 中的该文件拷贝到 node2node3最后将权限和所属用户/组修改回来

$ chown rabbitmq /var/lib/rabbitmq/.erlang.cookie

$ chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

 

注意事项

cookie在所有节点上必须完全一样,同步时一定要注意。
erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。

注意:主机名禁止特殊字符和小数点

 

运行各节点

$ rabbitmqctl stop

$ rabbitmq-server -detached

Warning: PID file not written; -detached was passed.#忽略警告

组成集群

这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的

node1 $ rabbitmqctl stop_app #注意不执行

Stopping rabbit application on node rabbit@localhost#忽略警告

按照顺序执行 先node2node3

node2 $ rabbitmqctl stop_app            # 停止rabbitmq服务

node2 $ rabbitmqctl join_cluster rabbit@node1  

Clustering node rabbit@node2 with rabbit@node1  # node2和node1构成集群, node2必须能通过node1的主机名ping通

node2 $ rabbitmqctl start_app            # 开启rabbitmq服务

 

node3 $ rabbitmqctl stop_app            # 停止rabbitmq服务

node3 $ rabbitmqctl join_cluster rabbit@node1    # node3和node1构成集群, node2必须能通过node1的主机名ping通

node3 $ rabbitmqctl start_app            # 开启rabbitmq服务

此时 node2 与 node3 也会自动建立连接

设置内存节点

其中–ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加–ram这个参数了

加入内存节点集群

node2 # rabbitmqctl join_cluster --ram rabbit@node1

只要在节点列表里包含了本身,它就成为一个磁盘节点。

在RabbitMQ集群里,必须至少有一个磁盘节点存在

更改节点属性

node2 $ rabbitmqctl stop_app  # 停止rabbitmq服务

 

node2 $ rabbitmqctl change_cluster_node_type ram # 更改节点为内存节点

Turning rabbit@node2 into a ram node

 

node2 $ rabbitmqctl change_cluster_node_type disc # 更改节点为磁盘节点

Turning rabbit@node2 into a disc node

 

node2 $ rabbitmqctl start_app # 开启rabbitmq服务

查看集群状态

执行完之后分别在每台机器上查看节点状态

[root@node1 ~]# rabbitmqctl cluster_status

Cluster status of node rabbit@node1

[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},

 {running_nodes,[rabbit@node2,rabbit@node1]},

 {cluster_name,<<"rabbit@node1">>},

 {partitions,[]},

 {alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]

[root@node2 ~]# rabbitmqctl cluster_status

Cluster status of node rabbit@node2

[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},

 {running_nodes,[rabbit@node1,rabbit@node2]},

 {cluster_name,<<"rabbit@node1">>},

 {partitions,[]},

 {alarms,[{rabbit@node1,[]},{rabbit@node2,[]}]}]

第一行是集群中的节点成员,disc表示这些都是磁盘节点

第二行是正在运行的节点成员

登录后台

RabbitMQ集群搭建--CentOs7、rabbitmq-server3.6_第1张图片

设置镜像队列策略

在普通集群的中任意节点启用策略,策略会自动同步到集群节点

命令格式

set_policy [-p vhostpath] {name} {pattern} {definition} [priority]

在任意一个节点上执行

[root@node1 ~]# rabbitmqctl set_policy -p / ha-allqueue "^message" '{"ha-mode":"all"}'

Setting policy "ha-allqueue" for pattern "^message" to "{\"ha-mode\":\"all\"}" with priority "0"

注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,配置时使用的应用于所有队列,所以表达式为"^"

集群重启

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

先在一个节点上执行

$ rabbitmqctl force_boot

$ service rabbitmq-server start #重启时需要等待几秒钟

在其他节点上执行

$ service rabbitmq-server start

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

$ rabbitmqctl cluster_status

 

 

优化Linux内核参数(最大文件数量)

查看本机最大打开的数量

[root@node2 ~]# cat /proc/sys/fs/file-max

95086(根据磁盘内存计算)

更改系统级别打开最大文件句柄数量(永久)

vim /etc/sysctl.conf

fs.file-max = 102400

sysctl -p | grep file-max

执行命令立即生效

sysctl  -p   

 [root@proxy ~]# ulimit -n //查看当前打开最大文件描述符

[root@proxy ~]# ulimit -a                        //查看所有属性值

[root@proxy ~]# ulimit -Hn 100000                //设置硬限制(临时规则)

[root@proxy ~]# ulimit -Sn 100000                //设置软限制(临时规则)用户可以调节自己的软限制,但是不允许超过硬限制

[root@proxy ~]# vim /etc/security/limits.conf //永久修改

    .. ..

* soft nofile 204800

* hard nofile 204800

* soft nproc 204800

* hard nproc 204800

设置当前用户立即生效(临时修改之后,无需操作)

 ulimit -n 100000

注:修改RabbitMQ配置

在CentOS7中,如果是以systemd方式管理rabbitmq服务,则需要修改rabbitmq的service文件。

vim /usr/lib/systemd/system/rabbitmq-server.service

添加如下参数,其值请根据实际情况进行调整:

[Service]

LimitNOFILE=50000

重启rabbitmq即可

systemctl daemon-reload

systemctl restart rabbitmq-server

 

授权操作

添加用户

处于安全的考虑,guest这个默认的用户只能通过http://localhost:15672 来登录,其他的IP无法直接使用这个账号。 这对于服务器上没有安装桌面的情况是无法管理维护的,除非通过在前面添加一层代理向外提供服务,这个又有些麻烦了,这里通过配置文件来实现这个功能

命令格式

rabbitmqctl add_user  

$ rabbitmqctl add_user ymq 123456

Creating user "ymq"

删除用户

命令格式

rabbitmqctl delete_user 

$ rabbitmqctl  delete_user penglei

Deleting user "penglei"

修改密码

命令格式

rabbitmqctl change_password  

$ rabbitmqctl  change_password  ymq 123456

Changing password for user "ymq"

用户授权

命令格式

rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}

该命令使用户ymq /(可以访问虚拟主机) 中所有资源的配置、写、读权限以便管理其中的资源

$ rabbitmqctl set_permissions -p "/" ymq ".*" ".*" ".*"

Setting permissions for user "ymq" in vhost "/"

查看用户授权

命令格式

rabbitmqctl list_permissions [-p VHostPath]

$ rabbitmqctl list_permissions -p /

Listing permissions in vhost "/"

guest    .*    .*    .*

ymq    .*    .*    .*

查看当前用户列表

可以看到添加用户成功了,但不是administrator角色

$ rabbitmqctl list_users

Listing users

guest    [administrator]

ymq    []

添加角色

这里我们也将ymq用户设置为administrator角色

命令格式

rabbitmqctl set_user_tags  

$ rabbitmqctl set_user_tags ymq administrator

Setting tags for user "ymq" to [administrator]

再次查看权限

$ rabbitmqctl list_users

Listing users

guest    [administrator]

ymq    [administrator]

清除权限信息

命令格式

rabbitmqctl clear_permissions [-p VHostPath] ymq

rabbitmqctl  clear_permissions  -p /  ymq

Clearing permissions for user "ymq" in vhost "/"

 

 

参考:

http://www.rabbitmq.com

https://segmentfault.com/a/1190000010693696#articleHeader4

http://chyufly.github.io/blog/2016/04/10/rabbitmq-cluster/

https://blog.51cto.com/linuxg/1967788


你可能感兴趣的:(linux,JAVA)