1. Giới thiệu
RabbitMQ là thành phần cốt lõi trong việc giao tiếp giữa các dịch vụ của OpenStack. Trong môi trường production (PROD), việc cấu hình một cluster (cluster) RabbitMQ giúp đảm bảo high availability (HA) cho hệ thống message queue.

Có hai loại node trong RabbitMQ:
- Disk node: Lưu trữ thông tin trên disk, cần thiết để duy trì trạng thái của cluster.
- RAM node: Sử dụng bộ nhớ RAM để lưu trữ, giảm tải IOPS nhưng cần ít nhất một disk node trong cluster.
Trong bài viết này, chúng ta sẽ cấu hình một cluster RabbitMQ gồm 3 node: 1 disk node và 2 RAM node.
2. Cài đặt RabbitMQ trên các node.
Thực hiện các lệnh sau trên tất cả các node để cài đặt RabbitMQ:
sudo echo "deb http://www.rabbitmq.com/debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list
sudo wget -O - https://www.rabbitmq.com/rabbitmq-signing-key-public.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install rabbitmq-serverDừng RabbitMQ trên tất cả các node và đặt lại cấu hình:
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_appLưu ý:
- Sau khi tạo cluster, các RAM node có thể đặt lại mà không ảnh hưởng.
- Disk node không thể reset trực tiếp mà cần xóa dữ liệu thủ công:
rabbitmqctl stop_app
/etc/init.d/rabbitmq-server stop
rm -rf /var/lib/rabbitmq/mnesia/rabbit@node1*
/etc/init.d/rabbitmq-server start
rabbitmqctl start_appKiểm tra trạng thái cluster RabbitMQ trên disk node:
rabbitmqctl cluster_statusKết quả mong đợi:
[{nodes,[{disc,['rabbit@node1']},
{ram,[]}]},
{running_nodes,['rabbit@node1']},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]}]3. Cấu hình người dùng cho OpenStack
Trên disk node, tạo tài khoản và đặt quyền cho OpenStack:
sudo rabbitmqctl add_user openstack openstack_pass
sudo rabbitmqctl set_permissions -p / openstack ".*" ".*" "."
sudo rabbitmqctl set_cluster_name openstackThiết lập chính sách HA cho queue.
rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'Tất cả các node RabbitMQ trong cluster cần có chung Erlang cookie. Sao chép cookie từ node chính. Sao chép giá trị này sang tất cả các node khác tại đường dẫn /var/lib/rabbitmq/.erlang.cookie.
cat /var/lib/rabbitmq/.erlang.cookieThêm RAM node vào cluster trên node2 và node3:
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster --ram rabbit@node1
sudo rabbitmqctl start_appKiểm tra trạng thái cluster:
sudo rabbitmqctl cluster_statusKết quả mong đợi:
[{nodes,[{disc,['rabbit@node1']},
{ram,['rabbit@node2','rabbit@node3']}]},
{running_nodes,['rabbit@node1','rabbit@node2','rabbit@node3']},
{cluster_name,<<"openstack">>},
{partitions,[]}]== Kích hoạt management web interface RabbitMQ ==
sudo rabbitmq-plugins enable rabbitmq_managementTạo tài khoản quản trị:
sudo rabbitmqctl add_user admin admin_pass
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags admin administratorTruy cập management web interface tại:
http://server-name:15672Tài khoản:
- User: admin
- Pass: admin_pass
4. Cấu hình OpenStack sử dụng RabbitMQ Cluster.
Cấu hình trong file nova.conf, neutron.conf, v.v.:
[oslo_messaging_rabbit]
rabbit_hosts=node1:5672,node2:5672,node3:5672
rabbit_retry_interval=1
rabbit_retry_backoff=2
rabbit_max_retries=0
rabbit_ha_queues=true
rabbit_userid = openstack
rabbit_password = openstack_pass
amqp_auto_delete = true
amqp_durable_queues=TrueSau khi hoàn tất, OpenStack sẽ sử dụng cluster RabbitMQ với queue được đồng bộ trên tất cả các node, đảm bảo high availability.
Tham khảo https://elkano.org/blog/high-availability-rabbitmq-cluster-openstack/
