生产环境中至少运行3个rabbitmq服务器,测试环境中我们可以只运行两个,我们配置了两个节点,分别为controller1和controller2。
为HA队列配置RabbitMQ
- 在controller1上启动使用以下命令启动rabbitmq
1
|
# systemctl start rabbitmq
|
- 从controller1上复制cookie到其他的节点
1
|
# scp root@NODE:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
|
需要修改NODE为controller1或者对应
- 在每个目标节点上确认 erlang.cookie 文件的用户,组和权限
1
2
|
# chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# chmod 400 /var/lib/rabbitmq/.erlang.cookie
|
- 设置rabbitmq开机自启并启动其他节点的rabbitmq-server
1
2
|
# systemctl enable rabbitmq-server
# systemctl start rabbitmq-server
|
- 使用以下命令确认rabbitmq-server在每个节点正确运行
1
2
3
4
5
6
|
# rabbitmqctl cluster_status
Cluster status of node rabbit@controller1...
[{nodes,[{disc,[rabbit@ controller1]}]},
{running_nodes,[rabbit@ controller1]},
{partitions,[]}]
...done.
|
- 除第一个节点(controller1)外,其他节点执行以下命令加入集群
1
2
3
4
5
6
7
|
# rabbitmqctl stop_app
Stopping node rabbit@controller2...
...done.
# rabbitmqctl join_cluster --ram rabbit@ controller1
# rabbitmqctl start_app
Starting node rabbit@ controller2...
...done.</pre>
|
- 确认集群状态
1
2
3
4
|
# rabbitmqctl cluster_status
Cluster status of node rabbit@controller1...
[{nodes,[{disc,[rabbit@ controller1]},{ram,[rabbit@ controller2]}]}, \
{running_nodes,[rabbit@NODE,rabbit@ controller1]}]
|
- 为了确保所有队列除了名字自动生成的可以在所有运行的节点上镜像,设置 ha-mode 策略,在任意节点上执行
1
|
# rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}
|
配置openstack服务使用rabbitmq ha queues
- 使用方法
1
|
rabbit_hosts=controller1:5672,controller2:5672
|
- RabbitMQ尝试重连的时间(这里的单位是?秒?)
1
|
rabbit_retry_interval=1
|
- How long to back-off for between retries when connecting to RabbitMQ
- 最小尝试重连RabbitMQ的次数(默认是无限)
- 在RabbitMQ中使用durable queues
1
|
rabbit_durable_queues=true</pre>
|
- 在RabbitMQ中使用HA queues
NOTE:如果想更改从没有使用HA queues的旧配置到HA queues,你需要重启服务
1
2
3
|
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl start_app
|