生产环境中至少运行3个rabbitmq服务器,测试环境中我们可以只运行两个,我们配置了两个节点,分别为controller1和controller2。

 

为HA队列配置RabbitMQ

  1. 在controller1上启动使用以下命令启动rabbitmq
    # systemctl start rabbitmq
  2. 从controller1上复制cookie到其他的节点
    # scp root@NODE:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie

    需要修改NODE为controller1或者对应ip
  3. 在每个目标节点上确认 erlang.cookie 文件的用户,组和权限
    # chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
    # chmod 400 /var/lib/rabbitmq/.erlang.cookie
  4. 设置rabbitmq开机自启并启动其他节点的rabbitmq-server
    # systemctl enable rabbitmq-server
    # systemctl start rabbitmq-server
  5. 使用以下命令确认rabbitmq-server在每个节点正确运行
    # rabbitmqctl cluster_status
    Cluster status of node rabbit@controller1...
    [{nodes,[{disc,[rabbit@ controller1]}]},
    {running_nodes,[rabbit@ controller1]},
    {partitions,[]}]
    ...done.
  6. 除第一个节点(controller1)外,其他节点执行以下命令加入集群
    # rabbitmqctl stop_app
    Stopping node rabbit@controller2...
    ...done.
    # rabbitmqctl join_cluster --ram rabbit@ controller1
    # rabbitmqctl start_app
    Starting node rabbit@ controller2...
    ...done.
  7. 确认集群状态
    # rabbitmqctl cluster_status
    Cluster status of node rabbit@controller1...
    [{nodes,[{disc,[rabbit@ controller1]},{ram,[rabbit@ controller2]}]}, \
        {running_nodes,[rabbit@NODE,rabbit@ controller1]}]
  8. 为了确保所有队列除了名字自动生成的可以在所有运行的节点上镜像,设置 ha-mode 策略,在任意节点上执行
    # rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}

 

配置openstack服务使用rabbitmq ha queues

  1. 使用方法
    rabbit_hosts=controller1:5672,controller2:5672
  2. RabbitMQ尝试重连的时间(这里的单位是?秒?)
    rabbit_retry_interval=1
  3. How long to back-off for between retries when connecting to RabbitMQ (问题同上)
    rabbit_retry_backoff=2
  4. 最小尝试重连RabbitMQ的次数(默认是无限)
    rabbit_max_retries=0
  5. 在RabbitMQ中使用durable queues
    rabbit_durable_queues=true
  6. 在RabbitMQ中使用HA queues
    rabbit_ha_queues=true
NOTE:如果想更改从没有使用HA queues的旧配置到HA queues,你需要重启服务

# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl start_app