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.
![](https://wiki.hoanghd.com/wp-content/uploads/2025/02/image-10.png)
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-server
Dừ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_app
Lư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_app
Kiểm tra trạng thái cluster RabbitMQ trên disk node:
rabbitmqctl cluster_status
Kế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 openstack
Thiế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.cookie
Thê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_app
Kiểm tra trạng thái cluster:
sudo rabbitmqctl cluster_status
Kế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_management
Tạ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 administrator
Truy cập management web interface tại:
http://server-name:15672
Tà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=True
Sau 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/