Ubuntu RabbitMQ如何进行集群搭建
Ubuntu环境下RabbitMQ集群搭建详细步骤
一、前置准备
-
环境要求
- 至少3台Ubuntu服务器(推荐生产环境使用3节点及以上,确保高可用);
- 所有节点安装相同版本的Erlang(RabbitMQ依赖,版本需匹配,如RabbitMQ 3.11.x需Erlang 25.x)和RabbitMQ(建议从官方仓库安装最新稳定版);
- 节点间网络互通(能通过主机名互相ping通,可通过
/etc/hosts文件配置主机名解析)。
-
安装Erlang与RabbitMQ
在所有节点执行以下命令安装:# 更新软件源 sudo apt update # 安装Erlang(通过Erlang Solutions仓库安装,确保版本兼容) wget https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb & & sudo dpkg -i erlang-solutions_2.0_all.deb sudo apt update sudo apt install -y erlang # 安装RabbitMQ sudo apt install -y rabbitmq-server # 启动RabbitMQ服务并设置开机自启 sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server -
配置主机名与hosts文件
- 在每台节点上设置主机名(如
node1、node2、node3):sudo hostnamectl set-hostname node1 # 替换为对应主机名 - 编辑
/etc/hosts文件,添加所有节点的IP与主机名映射(所有节点需一致):sudo vim /etc/hosts # 示例(替换为实际IP): 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3
- 在每台节点上设置主机名(如
-
同步Erlang Cookie
Erlang Cookie是RabbitMQ节点间认证的关键(位于/var/lib/rabbitmq/.erlang.cookie),所有节点的Cookie文件内容必须完全一致:- 在
node1上复制Cookie文件到其他节点(如node2、node3):# 在node1执行: scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/ scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/ - 在所有节点上修改Cookie权限(确保RabbitMQ进程可读):
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
- 在
二、搭建集群
-
启动RabbitMQ服务
在所有节点执行以下命令,确保服务处于运行状态:sudo systemctl start rabbitmq-server sudo systemctl status rabbitmq-server # 检查状态(应为"active (running)") -
启用管理插件(可选但推荐)
为方便远程管理,启用RabbitMQ Web管理界面:sudo rabbitmq-plugins enable rabbitmq_management # 默认访问地址:http://< 节点IP> :15672(初始用户:guest/guest,仅限本地访问) -
将节点加入集群
- 步骤1:停止目标节点的RabbitMQ应用
在node2、node3上执行(主节点node1无需停止):sudo rabbitmqctl stop_app - 步骤2:重置目标节点(首次加入集群时执行)
重置会清除节点的本地数据(如队列、交换机),仅首次加入集群时需要:sudo rabbitmqctl reset - 步骤3:加入主节点集群
在node2、node3上执行(以node1为主节点):sudo rabbitmqctl join_cluster rabbit@node1 # node1为主节点主机名注:若需将节点设置为内存节点(仅缓存元数据,提升性能但不持久化),可使用
--ram参数:
sudo rabbitmqctl join_cluster --ram rabbit@node1(推荐至少保留1个磁盘节点,确保元数据不丢失)。 - 步骤4:启动目标节点应用
sudo rabbitmqctl start_app
- 步骤1:停止目标节点的RabbitMQ应用
-
验证集群状态
在任意节点(如node1)上执行以下命令,查看集群节点列表:sudo rabbitmqctl cluster_status输出示例(表示集群搭建成功):
Cluster status of node rabbit@node1 [{ nodes,[{ disc,[rabbit@node1,rabbit@node2,rabbit@node3]} ]} ]
三、配置镜像队列(可选,提升高可用)
镜像队列会将队列数据复制到集群中的多个节点,避免单点故障。配置所有队列镜像到所有节点的策略:
# 在任意节点执行(如node1):
sudo rabbitmqctl set_policy ha-all "^" '{
"ha-mode":"all"}
'
ha-all:策略名称(可自定义);"^":匹配所有队列(正则表达式);"ha-mode":"all":表示队列数据同步到所有节点。
四、访问管理界面
- 任意节点的管理界面地址:
http://< 节点IP> :15672; - 初始用户:
guest(密码:guest),默认仅限本地访问; - 若需远程访问,可创建新用户并授权:
# 创建用户(如admin) sudo rabbitmqctl add_user admin your_password # 设置用户标签(administrator为管理员权限) sudo rabbitmqctl set_user_tags admin administrator # 授权用户管理所有虚拟主机 sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
五、关键注意事项
-
节点类型
- 磁盘节点(disc):元数据存储在磁盘,重启后数据不丢失(推荐至少2个,确保集群元数据安全);
- 内存节点(ram):元数据存储在内存,读写速度快,但重启后数据丢失(适合提升性能,但不建议作为唯一节点类型)。
-
网络分区处理
配置集群的分区处理策略,避免网络分区导致脑裂(集群分裂为多个独立部分):echo 'cluster_partition_handling = pause_minority' > > /etc/rabbitmq/rabbitmq.conf sudo systemctl restart rabbitmq-serverpause_minority:当网络分区发生时,暂停少数派节点的服务,待网络恢复后同步数据。 -
数据持久化
镜像队列仅保证元数据同步,若需队列中的消息持久化,需在声明队列时设置durable=true(生产者端配置):# Python示例(使用pika库) channel.queue_declare(queue='my_queue', durable=True) -
扩容与缩容
- 扩容:将新节点加入集群(步骤同“将节点加入集群”);
- 缩容:从集群中移除节点(需先停止节点应用,再执行
forget_cluster_node命令)。
按照以上步骤操作,即可完成Ubuntu环境下RabbitMQ集群的搭建。集群搭建后,可通过管理界面或命令行验证节点状态、队列镜像情况,确保高可用性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu RabbitMQ如何进行集群搭建
本文地址: https://pptw.com/jishu/742799.html
