目录
概念
RabbitMQ产品本身是基于Erlang编写的,Erlang语言天生具备分布式特性(通过同步Erlang集群各个节点的magic cookie来实现的)。因此RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kagka那样通过Zookeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展达到增加消息吞吐量能力的目的
在实际使用过程中,多采用多机多实例部署方式,为了便于学习,我们在一台机器去搭建一个RabbitMQ集群,本次学习采取单机多实例的方式来进行开展。
配置(本次采取一主二从的方式)
① 配置第一个节点
sudo RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit-1 rabbitmq-server start &
②配置第二个节点
sudo RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit-2 rabbitmq-server start &
③配置第三个节点
sudo RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit-3 rabbitmq-server start &
④查看三个节点的运行状态
ps aux|grep rabbitmq
④ 将rabbit-1 作为主节点
# 停止应用
sudo rabbitmqctl -n rabbit-1 stop_app
# 目的是清除节点上的历史数据(如果不清除,无法将节点加入到集群)
sudo rabbitmqctl -n rabbit-1 reset
# 启动应用
sudo rabbitmqctl -n rabbit-1 start_app
⑤ 将rabbit-2 作为从节点
# 停止应用
sudo rabbitmqctl -n rabbit-2 stop_app
# 目的是清除节点上的历史数据(如果不清除,无法将节点加入到集群)
sudo rabbitmqctl -n rabbit-2 reset
# 将rabbit2节点加入到rabbit1(主节点) 集群当中【server-node 是主节点的ip】
sudo rabbitmqctl -n rabbit-2 join_cluster rabbit-1@'server-node'
# 启动应用
sudo rabbitmqctl -n rabbit-2 start_app
⑥将rabbit-3 作为从节点
# 停止应用
sudo rabbitmqctl -n rabbit-3 stop_app
# 目的是清除节点上的历史数据(如果不清除,无法将节点加入到集群)
sudo rabbitmqctl -n rabbit-3 reset
# 将rabbit2节点加入到rabbit1(主节点) 集群当中【server-node 是主节点的ip】
sudo rabbitmqctl -n rabbit-3 join_cluster rabbit-1@'server-node'
# 启动应用
sudo rabbitmqctl -n rabbit-3 start_app
⑦验证集群状态
# 查询集群的状态
sudo rabbitmqctl cluster_status -n rabbit-1
⑧ Web界面管理
- 添加用户
-- 1、添加用户
rabbitmqctl -n rabbit-1 add_user Username Password
-- 2、设置用户分配操作权限
- administrator 可以登录控制台、查看所有信息,可以对rabbitmq 进行管理
- monitoring 监控者 登录控制台、查看所有信息
- policymaker 策略制定者 登录控制台、指定策略
- managment 普通管理员 登录控制台
rabbitmqctl -n rabbit-1 set_user_tags Username administrator
-- 3、赋予权限
rabbitmqctl -n rabbit-1 set_permissions -p "/" Username ".*" ".*" ".*"
-- 3、修改密码
rabbitmqctl -n rabbit-1 change_password Username NewPassword
-- 4、查看用户清单
rabbitmqctl -n rabbit-1 list_users
- 登录web界面
小结
如果采用多机部署方式,需读取其中一个节点的cookie,并复制到其他节点(节点之间通过cookie确定相互是否可通信)。cookie 存放在/var/lib/rabbitmq/.erlang.cookie
例如:主机名分别为 rabbit-1、rabbit-2
1、逐个启动各节点
2、配置各节点的hosts文件( vim /etc/hosts )
ip1:rabbit-1
ip2:rabbit-2
其它步骤雷同单机部署方式