* 参考博客
- 1、安装:https://blog.csdn.net/lixiang987654321/article/details/81233843
- 2、rabbitmq用户管理:https://www.cnblogs.com/mingaixin/p/4134920.html
- 3、单机启动多个服务:https://fansinzhao.github.io/page/linux-rabbitmq-cluster.html
- 4、命令详解:https://blog.csdn.net/fgf00/article/details/79558498
准备:
配置每台服务器的 hosts 文件:
192.168.10.133 rabbit1
192.168.10.136 rabbit2
一、erlang安装
- 1、首先安装erlang语言环境,需要安装C++编译:
$ yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC unixODBC-devel httpd python-simplejson
- 2、下载erlang
$ wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3.8.6-1.el7.centos.x86_64.rpm/download.rpm
- 3、将rpm包放在/opt目录下,安装erlang
$ rpm -ivh erlang-20.3.8.6-1.el7.centos.x86_64.rpm
二、rabbitMq安装
- 1、下载rabbitMq
$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
- 2、安装rabbitMq
$ rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm
- [x] 2.1、安装过程报错如下:
[root@localhost ~]# rpm -ivh rabbitmq-server-3.7.7-1.el7.noarch.rpm
warning: rabbitmq-server-3.7.7-1.el7.noarch.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
socat is needed by rabbitmq-server-3.7.7-1.el7.noarch
- 3、安装依赖包:socat
$ yum -y install socat
- 4、生成配置文件
cp /usr/share/doc/rabbitmq-server-3.7.7/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
- 5、启动rabbitMq
$ systemctl start rabbitmq-server
# 查看启动状态
$ systemctl status rabbitmq-server
- 6、管理插件安装
# 查看插件:
$ rabbitmq-plugins list
# web插件安装:
$ rabbitmq-plugins enable rabbitmq_management
- 7、常用命令:
# 停止服务
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z stop_app
# 加入集群 --ram 类型为内存节点;不加此参数默认为磁盘节点
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z join_cluster --ram rabbit@izuf6ghdadtcqh6fnjs6zgz
# 启动服务
rabbitmqctl -n rabbit@izuf6e78y3y0pi1watmli4z start_app
# 查看节点的集群状态
rabbitmqctl -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz cluster_status
# 启动界面管理服务插件
rabbitmq-plugins -n rabbit_2@izuf6ghdadtcqh6fnjs6zgz enable rabbitmq_management
# 将节点移除集群
rabbitmqctl -n rabbit_2@izuf6e78y3y0pi1watmli4z reset
# 更改节点类型 disc:磁盘节点;ram:内存节点
rabbitmqctl -n rabbit@izuf6ghdadtcqh6fnjs6zgz change_cluster_node_type disc
查看rabbitMq进程:ps -ef | grep rabbitmq
默认监听端口15672/5672:netstat -anplt | grep LISTEN rabbitmq
- 8、用户管理:
# 新增一个用户
rabbitmqctl add_user Username Password
# 删除一个用户
rabbitmqctl delete_user Username
# 修改用户的密码
rabbitmqctl change_password Username Newpassword
# 查看当前用户列表
rabbitmqctl list_users
# 用户角色:
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
与administrator的对比,administrator能看到这些内容
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
# 设置用户角色的命令为:
rabbitmqctl set_user_tags User Tag
# User为用户名, Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。
# 也可以给同一用户设置多个角色,例如
rabbitmqctl set_user_tags hncscwc monitoring policymaker
# 允许用户远程访问
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
三、集群服务配置
-
一、普通集群:
- 1、说明:
Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群镜像。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在 {home}目录下。 - 2、复制cookie内容
# .erlang.cookie 路径
cd /var/lib/rabbitmq
# 修改其他节点服务器的的.erlang.cookie 保证所有服务器的 .erlang.cookie文件保持一致
# 修改文件权限(可编辑):
chmod 777 /var/lib/rabbitmq/.erlang.cookie
# 修改完 .erlang.cookie 后必须改回文件权限(启动前必须设置400,只有owner拥有权限即可,否则启动rabbitmq服务失败)
chmod 400 /var/lib/rabbitmq/.erlang.cookie
- 3、设置好cookie后先将每个节点的rabbitmq重启
# 停止服务
service rabbitmq-server stop
# 开启服务
service rabbitmq-server start
# 查看服务状态,检查是否启动成功
service rabbitmq-server status
# 查看每个节点集群状态:
rabbitmqctl cluster_status
可以看到节点情况:
Cluster status of node rabbit@rabbit1
[{nodes,[{disc,[rabbit@rabbit1]}]},
{running_nodes,[rabbit@rabbit1]},
{cluster_name,<<"rabbit@rabbit1">>},
{partitions,[]},
{alarms,[{rabbit@rabbit1,[]}]}]
- 4、添加集群节点
说明:
++rabbitmq-server启动时,会一起启动节点和应用,它预先设置RabbitMQ应用为standalone模式。要将一个节点加入到现有的集群中,你需要停止这个应用,并将节点设置为原始状态。如果使用rabbitmqctl stop,应用和节点都将被关闭。所以使用rabbitmqctl stop_app仅仅关闭应用。++
# 初始化主节点执行队列
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
将rabbit1作为集群主节点,rabbit2和rabbit3加入集群,所以在rabbit2和rabbit3节点上执行如下命令,加入集群节点:
# rabbit2节点执行命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
其中–-ram指的是作为内存节点,要是想做为磁盘节点的话,就不用加–-ram这个参数了。
PS:只要在节点列表里包含了本身,它就成为一个磁盘节点。在RabbitMQ集群里,必须至少有一个磁盘节点存在。
# 查看集群节点状态:
rabbitmqctl cluster_status
出现如下信息即表示集群完成:
[root@rabbit1 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...
[{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@rabbit2]}]},
{running_nodes,[rabbit@rabbit2,rabbit@rabbit1]},
{cluster_name,<<"rabbit@rabbit2">>},
{partitions,[]},
{alarms,[{rabbit@rabbit2,[]},{rabbit@rabbit1,[]}]}]
- 5、单服务器启动多实例
# 启动多个实例
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detatched &
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}] -rabbitmq_stomp tcp_listeners [61614] -rabbitmq_mqtt tcp_listeners [1884]" RABBITMQ_NODENAME=rabbit_2 rabbitmq-server -detached
# 查看节点状态信息
rabbitmqctl -n rabbit_2@rabbit2 cluster_status
# 加入集群
rabbitmqctl -n rabbit_2@rabbit2 stop_app
rabbitmqctl -n rabbit_2@rabbit2 join_cluster rabbit@rabbit1
# rabbitmqctl -n rabbit_1@rabbit1 reset #将节点移除集群
rabbitmqctl -n rabbit_2@rabbit2 start_app
# 开启节点监控
rabbitmq-plugins -n rabbit_2 enable rabbitmq_management
- 6、其他运维
# 退出集群节点:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
# 移除节点:
rabbitmqctl stop_app
rabbitmqctl forget_cluster_node rabbit@rabbit2
# 加入集群时指定节点类型:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit2
rabbitmqctl start_app
其中,--ram 指定内存节点类型,--disc指定磁盘节点类型
# 修改节点类型:
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
7、普通集群需注意:
这种模式更适合非持久化队列,只有该队列是非持久的,客户端才能重新连接到集群里的其他-
二、镜像集群:
1、设置镜像队列策略
# 在任意一个节点上执行:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
# 查看策略
rabbitmqctl list_policies
- 2、语法讲解:
在cluster中任意节点启用策略,策略会自动同步到集群节点
rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
这行命令在vhost名称为hrsystem创建了一个策略,策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'
注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,我们配置时使用的应用于所有队列,所以表达式为"^"
官方set_policy说明参见
set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
(http://www.rabbitmq.com/man/rabbitmqctl.1.man.html)
四、安装插件
# 插件存放路径
/usr/lib/rabbitmq/lib/rabbitmq_server-3.7.7/plugins
# 查看插件列表
rabbitmq-plugins list
# 启动插件
rabbitmq-plugins enable plugin-name
# 关闭插件
rabbitmq-plugins disable plugin-name