windows2008做网站,站酷网素材图库海报设计,中文域名注册费用标准,上海工程咨询行业协会部署RabbitMQ集群详细教程
下面是一份在 Ubuntu 环境下部署 RabbitMQ 集群的详细步骤说明#xff0c;涉及主机名设置、Erlang RabbitMQ 安装、管理插件启用、集群通信 Cookie 配置、节点加入集群、镜像队列策略设置以及集群验证等。为了演示方便#xff0c;以下示例假…部署RabbitMQ集群详细教程
下面是一份在 Ubuntu 环境下部署 RabbitMQ 集群的详细步骤说明涉及主机名设置、Erlang RabbitMQ 安装、管理插件启用、集群通信 Cookie 配置、节点加入集群、镜像队列策略设置以及集群验证等。为了演示方便以下示例假设有三台主机分别命名为 rabbit1, rabbit2, rabbit3IP 地址分别为 192.168.1.101, 192.168.1.102, 192.168.1.103。请根据自己的实际环境进行修改。
环境准备
操作系统确保所有节点运行相同版本的操作系统Linux 是最常见的选择。主机名为每个节点配置唯一的主机名确保可以通过 DNS 或 /etc/hosts 文件解析到 IP 地址。时间同步使用 ntp 或 chrony 服务同步时间。ErlangRabbitMQ 依赖 Erlang。确保所有节点安装相同版本的 Erlang。 一、环境准备及主机名设置
RabbitMQ 使用主机名和 Erlang 的 nodename 区分节点因此每个节点的主机名必须唯一。 修改主机名 在每一台主机上执行以下命令以设置相应的主机名 # 以 rabbit1 为例
sudo hostnamectl set-hostname rabbit1修改 /etc/hosts 文件 在每台机器的 /etc/hosts 中添加集群中所有节点的主机名与 IP 对应关系示例如下所有机器需要保持一致 192.168.1.101 rabbit1
192.168.1.102 rabbit2
192.168.1.103 rabbit3修改完成后可以使用 ping rabbit2、ping rabbit3 等来测试是否能正常通过主机名访问。 更新系统软件包索引 在每台机器上执行 sudo apt-get update二、安装 Erlang 和 RabbitMQ
RabbitMQ 依赖 Erlang 环境所以我们需要先安装 Erlang然后再安装 RabbitMQ。这里演示使用 Ubuntu 自带源或 RabbitMQ 官方源均可。
2.1 使用 Ubuntu 源版本可能不是最新
sudo apt-get install -y erlang
sudo apt-get install -y rabbitmq-server2.2 启动并查看状态
安装完成后RabbitMQ 会被自动启动并开机自启动。可以执行以下命令查看状态
sudo systemctl status rabbitmq-server如正常启动会显示 active (running)后续操作建议在每台节点上都保持服务处于启动状态。 三、启用管理插件并创建管理员账号
RabbitMQ 集群部署完成后我们通常需要启用管理插件Management Plugin来访问可视化管理界面并创建管理员账号。 启用管理插件 在每台 RabbitMQ 节点上执行 sudo rabbitmq-plugins enable rabbitmq_management启用之后RabbitMQ 通常会在本地 15672 端口提供 HTTP 管理界面。例如通过 http://192.168.1.101:15672 可以访问 rabbit1 的管理页面。 创建管理员账号 在每台节点上都可以执行若已存在相同名称则会提示 sudo rabbitmqctl add_user admin StrongPassword
sudo rabbitmqctl set_user_tags admin administrator
# 设置该用户在 / 虚拟主机下的权限授予全部读写权限
sudo rabbitmqctl set_permissions -p / admin .* .* .*注意请使用更强的密码进行生产环境部署并按照需分配合适的权限或虚拟主机。 不需要每台机器都创建用户节点接入主节点后用户可以同步使用。 四、集群通信 Cookie 同步
RabbitMQ 集群依赖 Erlang Cookie 来进行节点间的验证与通信。在同一个集群中的所有节点必须使用相同的 Cookie。该 Cookie 默认保存在 /var/lib/rabbitmq/.erlang.cookie 文件中。 选择一台节点作为 Cookie 源 通常以 rabbit1 为源。 复制 Cookie 到其他节点 在 rabbit1 上查看 Cookie sudo cat /var/lib/rabbitmq/.erlang.cookie将内容复制然后分别在 rabbit2、rabbit3 上执行 sudo systemctl stop rabbitmq-server
echo 上一步复制的Cookie字符串 | sudo tee /var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo systemctl start rabbitmq-server确保三台节点的 Cookie 完全一致并且权限和拥有者正确才能保证后续正常组建集群。 五、节点加入集群
下面以 rabbit1 作为主节点先将 rabbit2、rabbit3 加入到 rabbit1 的集群中。 在 rabbit2 上执行 sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbitrabbit1
sudo rabbitmqctl start_apprabbitrabbit1 表示主机名是 rabbit1Erlang 内部节点名称是 rabbit。成功后会输出一串信息表明已成功加入 rabbit1 所在的集群。 在 rabbit3 上执行 sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbitrabbit1
sudo rabbitmqctl start_app查看集群状态 可以在任意节点上运行以下命令查看集群状态 sudo rabbitmqctl cluster_status若一切顺利会看到类似如下输出其中 running_nodes 中包含 rabbitrabbit1、rabbitrabbit2、rabbitrabbit3 Cluster status of node rabbitrabbit1 ...
Basics
Cluster name: rabbitrabbit1
...Running nodes are:
rabbitrabbit1
rabbitrabbit2
rabbitrabbit3
...六、设置镜像队列HA策略
为保证队列数据在集群节点之间进行复制我们需要设置 镜像队列策略。这里示例设置所有队列自动镜像到所有节点上并自动同步。 sudo rabbitmqctl set_policy ha-all ^.* {ha-mode:all,ha-sync-mode:automatic} --priority 0 --apply-to queuesha-mode: all 表示所有队列将镜像到集群中的所有节点。ha-sync-mode: automatic 表示当新的节点加入时会自动同步队列数据。^.* 是正则表达式表示对名称匹配任意队列生效如需针对特定队列或前缀可自行修改。--apply-to queues 表示将策略应用到队列。 七、验证集群 使用 rabbitmqctl cluster_status 命令查看集群健康状态 sudo rabbitmqctl cluster_status确认三个节点都在 running_nodes 列表里。 访问管理界面进行验证 在浏览器中分别访问三台机器的 http://节点IP或主机名:15672使用前面创建的账号如 admin进行登录查看集群信息、节点信息、队列信息等。 测试队列高可用 连接到其中一个节点创建一个队列并发送消息。关闭该节点的 RabbitMQ 服务或者网络使用另一个节点进行消费验证消息是否正常可消费、数据是否依旧存在。
若一切无误则说明 RabbitMQ 集群部署成功并具备了高可用能力。 八、安装过程中遇到的问题
1. 用户访问被拒绝
以下日志行表明用户 guest 无法从远程登录管理界面
HTTP access denied: user guest - User can only log in via localhost原因RabbitMQ 默认配置限制 guest 用户只能从 localhost 登录。
解决方法
创建新用户 为远程登录创建一个新的管理员用户sudo rabbitmqctl add_user myadmin mypassword
sudo rabbitmqctl set_user_tags myadmin administrator
sudo rabbitmqctl set_permissions -p / myadmin .* .* .*替换 myadmin 和 mypassword 为你自己的用户名和密码。
2. 安装日志查看
查看 RabbitMQ 日志文件定位配置文件未加载的原因
sudo tail -f /var/log/rabbitmq/rabbit$(hostname).log3. 检查监听端口
使用以下命令确认 RabbitMQ 是否在配置的端口上运行
sudo netstat -tlnp | grep beam4. 如何创建 RabbitMQ 配置文件
rabbitmq.conf 位于 /etc/rabbitmq/rabbitmq.conf这是 RabbitMQ 的主配置文件采用 INI 格式用来定义更高级别的功能如集群、插件、TLS、虚拟主机等。
advanced.config 位于 /etc/rabbitmq/advanced.config这是 RabbitMQ 的高级配置文件采用 Erlang 的 term 语法主要用于复杂的配置需求例如队列策略、插件配置等。
默认配置文件可能不存在可以手动创建
创建配置文件sudo nano /etc/rabbitmq/rabbitmq.conf添加基础配置 示例内容## Basic configuration
listeners.tcp.default 5672
management.listener.port 15672
management.listener.ip 0.0.0.0保存文件并重启服务sudo systemctl restart rabbitmq-server5. Erlang 安装可能会失败另一种安装方式
这种安装方式会安装最新版本的Erlang需要注意RabbitMQ版本和Erlang版本的适配
检查 Erlang 版本
打开终端并运行以下命令
erl -version或者
erl如果 Erlang 已安装命令会返回版本号或进入交互式 Erlang shell
Erlang/OTP 25 [erts-13.1.5] ...按下 CtrlC 后再按 a 退出 shell。
*使用 ppa 仓库安装
添加一个兼容的 PPAsudo add-apt-repository ppa:rabbitmq/rabbitmq-erlang更新包列表并安装 Erlangsudo apt-get update
sudo apt-get install -y erlang6. 配置RabbitMQ 节点名
RabbitMQ 的节点名通常以 rabbit主机名 的形式表示。你可以通过配置 rabbitmq-env.conf 文件来设置节点名和监听地址。
编辑环境配置文件
在每个节点上编辑 /etc/rabbitmq/rabbitmq-env.conf 文件
sudo nano /etc/rabbitmq/rabbitmq-env.conf内容如下
NODENAMErabbitnode1 # 当前节点名称需唯一
NODE_IP_ADDRESS0.0.0.0 # 监听所有网络接口
NODE_PORT5672 # AMQP 默认端口根据节点分别设置
node1 的 NODENAME 为 rabbitnode1node2 的 NODENAME 为 rabbitnode2node3 的 NODENAME 为 rabbitnode3
7. 安装指定版本的RabbitMQ
sudo apt-get install -y rabbitmq-server 这个命令安装的rabbitmq版本可能不是最新的可能会和Erlang版本不适配。
关于RabbitMQ和Erlang的版本适配详情需要参考 https://www.rabbitmq.com/docs/which-erlang
这里介绍另一种指定版本的安装方式。官方文档参考 https://www.rabbitmq.com/docs/install-debian#manual-installation
执行脚本
# sync package metadata
sudo apt-get update
# install dependencies manually
sudo apt-get -y install logrotate init-system-helpers adduser# download the package
sudo apt-get -y install wget
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v4.0.5/rabbitmq-server_4.0.5-1_all.deb# install the package with dpkg
sudo dpkg -i rabbitmq-server_4.0.5-1_all.debrm rabbitmq-server_4.0.5-1_all.deb 总结
在实际生产环境中建议配合负载均衡如 HAProxy、Nginx或 Kubernetes 等容器化编排方案以实现更灵活的集群管理与更高的可用性。同时也可根据业务需求针对镜像队列策略进行更细化的调优与分配。