个人名片:
因为云计算成为了监控工程师👨🏻💻
个人博客🏆:念舒_C.ying
CSDN主页✏️:念舒_C.ying
RabbitMQ快速入门
1.1 安装 RabbitMQ
对于 Ubuntu 和 Debian 发行版
RabbitMQ 已经有可用的软件安装包:
apt-getinstall rabbitmq-server rabbitmq-plugins
注意
在 Ubuntu 和 Debian 发行版上安装 RabbitMQ 的官方文档
对于 Fedora 和 RHEL 发行版
RabbitMQ 已经有可用的软件安装包:
yum install rabbitmq-server
注意
在 Fedora 和 RHEL 发行版上安装 RabbitMQ 的官方文档
对 openSUSE 和 SLES 发行版.
在 openSUSE 系统中:
zypperinstall rabbitmq-server
注意
在 openSUSE 发行版上安装 RabbitMQ 的官方文档
在 SLES 系统中:
zypper addrepo -f obs://Cloud:OpenStack:Juno/SLE_11_SP3 Juno
注意
这些软件包都使用 GPG 密钥 893A90DAD85F9316 进行了签名,在安装之前可以先验证签名。
Key ID: 893A90DAD85F9316
Key Name: Cloud:OpenStack OBS Project Cloud:OpenStack@build.opensuse.org
Key Fingerprint: 35B34E18ABC1076D66D5A86B893A90DAD85F9316
Key Created: Tue Oct 8 13:34:21 2013
Key Expires: Thu Dec 17 13:34:21 2015
zypperinstall rabbitmq-server
1.2 配置 RabbitMQ
将多个 RabbitMQ 节点组织成一个集群,构建一个 RabbitMQ broker 服务,即一个 Erlang 节点的逻辑集合。
单个节点服务器的故障不会导致消息的交换和绑定完全不可用,但是具体一个消息队列及其中的内容则相反。原因是消息队列和其中的内容只在其中一台节点上,该节点出现故障无法
工作时,整个消息队列就丢失了。
RabbitMQ 实现队列镜像更能提高整个集群的高可用性。
示例中会布署 2 台 RabbitMQ 服务器,rabbit1 和 rabbit2。要构建一个 RabbitMQ broker 服务,必须保证所有节点服务器的 Erlang cookie 文件完全相同。
因此,首先在所有节点服务器停止 RabbitMQ 服务,然后将第一台节点服务上的 cookis 文件复制到其它节点:
scp /var/lib/rabbitmq/.erlang.cookie \
root@NODE:/var/lib/rabbitmq/.erlang.cookie
复制时注意确认 .erlang.cookie 文件的属主、属组以及文件权限。
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod400 /var/lib/rabbitmq/.erlang.cookie
在所有节点上重新启动 RabbitMQ 服务,确保在所有节点上都能正常启动。
rabbitmqctl cluster_status
Cluster status of node rabbit@NODE...
[{nodes,[{disc,[rabbit@NODE]}]},
{running_nodes,[rabbit@NODE]},
{partitions,[]}]...done.
在除第一台节点之外的其它节点服务器上运行下面的命令。
rabbitmqctl stop_app
Stopping node rabbit@NODE...
...done.
rabbitmqctl join_cluster rabbit@rabbit1
# rabbitmqctl start_app
Starting node rabbit@NODE ...
...done.
检查集群状态:
rabbitmqctl cluster_status
Cluster status of node rabbit@NODE...
[{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@NODE]}]},{running_nodes,[rabbit@NODE,rabbit@rabbit1]}]
如果集群运行正常,就可以开始为消息队列创建用户和密码。
为了保证除了自动生动的队列之外的其它队列能在所有节点上实现镜像,必须将 RabbitMQ策略配置项 ha-mode 设置为 all。在集群中任何一台节点服务器上执行下面的命令。
rabbitmqctl set_policy ha-all '^(?!amq\.).*''{"ha-mode": "all"}'
1.3 配置 OpenStack 各服务使用高可用的 RabbitMQ 服务
现在可以配置 OpenStack 其它组件使用高可用 RabbitMQ 集群(最少使用其中 2 台节点服务器)。
对所有使用 RabbitMQ 的组件进行配置:
- RabbitMQ HA 集群服务地址及端口:
rabbit_hosts=rabbit1:5672,rabbit2:5672
- 重新尝试连接 RabbitMQ 服务的时间间隔:
rabbit_retry_interval=1
- 每次重新尝试连接 RabbitMQ 服务应后延多长时间:
rabbit_retry_backoff=2
- 连接 RabbitMQ 服务时最大的重试次数(默认没有限制):
rabbit_max_retries=0
是否使用持久的消息队列:
rabbit_durable_queues=false
否使用 RabbitMMQ 的队列镜像特性( x-ha-policy: all ):
rabbit_ha_queues=true
注意
如果是直接#改没有启用队列镜像特性的 RabbitMQ 服务的配置,那么对服务作一次重置:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
注意
目前支持高可用 RabbitMQ 服务的 OpenStack 组件有:
- OpenStack 计算服务
- OpenStack 块设备存储服务
- OpenStack 网络服务
- Telemetry
期待下次的分享,别忘了三连支持博主呀~
我是 念舒_C.ying ,期待你的关注~💪💪💪
附专栏链接
【云原生 · Kubernetes】部署 kube-proxy 组件
【云原生 · Kubernetes】部署高可用kube-scheduler集群
【云原生 · Kubernetes】部署高可用 kube-controller-manager 集群
【云原生 · Kubernetes】runtime组件
【云原生 · Kubernetes】apiserver高可用
版权归原作者 念舒_C.ying 所有, 如有侵权,请联系我们删除。