Cách cấu hình các dịch vụ quan trọng trong một môi trường OpenStack để đảm bảo tính sẵn sàng cao (High Availability – HA).
- Database for high availability – Galera: Galera Cluster là một cụm cơ sở dữ liệu đa master đồng bộ, dựa trên MySQL và InnoDB. Nó cung cấp dịch vụ HA với thời gian hoạt động hệ thống cao, không mất dữ liệu và khả năng mở rộng. Có ba phiên bản của Galera Cluster: Galera Cluster for MySQL, MariaDB Galera Cluster và Percona XtraDB Cluster.
- Pacemaker active/passive with HAproxy: Pacemaker và HAproxy thường được sử dụng để cung cấp HA cho các dịch vụ không trạng thái (stateless) trong OpenStack.
- Replicated storage – DRBD: DRBD (Distributed Replicated Block Device) là một giải pháp lưu trữ được sao chép giữa các máy chủ để đảm bảo HA.
- Messaging service for high availability – RabbitMQ: RabbitMQ là một hệ thống AMQP (Advanced Message Queuing Protocol) được sử dụng rộng rãi trong OpenStack để điều phối việc thực hiện các công việc. RabbitMQ có khả năng chuyển đổi khi gặp sự cố ở cả lớp ứng dụng và hạ tầng.
Tại lớp ứng dụng, nếu một node AMQP gặp sự cố, ứng dụng sẽ kết nối lại với node tiếp theo được cấu hình trong khoảng thời gian kết nối lại được chỉ định.
Tại lớp hạ tầng, SLA là thời gian mà cụm RabbitMQ tái tổ chức. Có nhiều trường hợp có thể xảy ra, tùy thuộc vào việc node nào gặp sự cố.
Install RabbitMQ.
Các bước để cấu hình dịch vụ RabbitMQ để đảm bảo tính sẵn sàng cao (High Availability – HA) trong môi trường OpenStack:
- Cài đặt RabbitMQ: Các lệnh cài đặt RabbitMQ phụ thuộc vào bản phân phối Linux mà bạn đang sử dụng. Các bản phân phối được đề cập bao gồm Ubuntu, Debian, RHEL, Fedora, CentOS, openSUSE và SLES 12.
- Cấu hình RabbitMQ cho HA queues: Sau khi cài đặt RabbitMQ, bạn cần cấu hình nó để sử dụng HA queues.
- Cấu hình các dịch vụ OpenStack để sử dụng RabbitMQ HA queues: Các dịch vụ OpenStack cần được cấu hình để sử dụng HA queues từ RabbitMQ.
Lưu ý rằng việc truy cập vào RabbitMQ thường không được xử lý bởi HAProxy. Thay vào đó, các consumer cần được cung cấp danh sách đầy đủ các host chạy RabbitMQ thông qua rabbit_hosts
và bật tùy chọn rabbit_ha_queues
.
Đối với SLES 12, các gói được ký bởi khóa GPG 893A90DAD85F9316. Bạn nên xác minh fingerprint của khóa GPG đã nhập trước khi sử dụng nó.
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
Configure RabbitMQ for HA queues.
Các dịch vụ có thể làm việc với HA queues bao gồm OpenStack Compute, OpenStack Block Storage, OpenStack Networking và Telemetry.
Dừng RabbitMQ và sao chép cookie từ node đầu tiên đến mỗi node khác: Sử dụng lệnh scp
để sao chép file .erlang.cookie
từ node đầu tiên đến mỗi node khác.
scp /var/lib/rabbitmq/.erlang.cookie root@NODE:/var/lib/rabbitmq/.erlang.cookie
Xác minh chủ sở hữu, nhóm và quyền của file erlang.cookie
: Sử dụng lệnh chown
và chmod
để đặt chủ sở hữu, nhóm và quyền cho file .erlang.cookie
.
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
Khởi động dịch vụ RabbitMQ trên tất cả các node và cấu hình nó để khởi động khi hệ thống khởi động: Sử dụng lệnh systemctl
để bật và khởi động dịch vụ rabbitmq-server
.
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
Xác minh rằng các node đang chạy: Sử dụng lệnh rabbitmqctl cluster_status
để kiểm tra trạng thái của cụm.
shell> rabbitmqctl cluster_status
Cluster status of node rabbit@NODE...
[{nodes,[{disc,[rabbit@NODE]}]},
{running_nodes,[rabbit@NODE]},
{partitions,[]}]
...done.
Chạy các lệnh sau trên mỗi node ngoại trừ node đầu tiên: Sử dụng lệnh rabbitmqctl stop_app
, rabbitmqctl join_cluster --ram rabbit@rabbit1
và rabbitmqctl start_app
để tham gia cụm và khởi động lại ứng dụng.
shell> rabbitmqctl stop_app
Stopping node rabbit@NODE...
...done.
shell> rabbitmqctl join_cluster --ram rabbit@rabbit1
shell> rabbitmqctl start_app
Starting node rabbit@NODE ...
Xác minh trạng thái của cụm: Sử dụng lệnh rabbitmqctl cluster_status
để kiểm tra trạng thái của cụm.
shell> rabbitmqctl cluster_status
Cluster status of node rabbit@NODE...
[{nodes,[{disc,[rabbit@rabbit1]},{ram,[rabbit@NODE]}]}, \
{running_nodes,[rabbit@NODE,rabbit@rabbit1]}]
Đặt chính sách ha-mode
thành all
để đảm bảo rằng tất cả các hàng đợi ngoại trừ những cái có tên tự động tạo được sao chép trên tất cả các node đang chạy: Sử dụng lệnh rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'
để đặt chính sách này.
rabbitmqctl set_policy ha-all '^(?!amq\.).*' '{"ha-mode": "all"}'
Để biết thêm thông tin, bạn có thể tham khảo tài liệu của RabbitMQ về Highly Available Queues và Clustering Guide.
Một lựa chọn khác để tạo tính sẵn sàng cao cho RabbitMQ, đó là sử dụng các script OCF cho các agent tài nguyên cụm Pacemaker. Từ phiên bản 3.5.7, RabbitMQ đã bao gồm các script này. Chúng cung cấp cụm RabbitMQ active/active với các hàng đợi được sao chép. Để biết thêm thông tin, bạn có thể tham khảo tài liệu về việc tự cấu hình một cụm với Pacemaker.
Configure OpenStack services to use Rabbit HA queues.
Đoạn văn này mô tả cách cấu hình các dịch vụ OpenStack để sử dụng hàng đợi có tính sẵn sàng cao (HA queues) của RabbitMQ.
Các bước cần thực hiện như sau:
Cấu hình các cặp host:port của cụm RabbitMQ HA: Đặt rabbit_hosts
thành danh sách các cặp host:port của các nút RabbitMQ, ví dụ:
rabbit_hosts=rabbit1:5672,rabbit2:5672,rabbit3:5672
Cấu hình thời gian chờ khi kết nối lại với RabbitMQ: Đặt rabbit_retry_interval
thành số giây chờ trước khi thử kết nối lại, ví dụ:
rabbit_retry_interval=1
Cấu hình thời gian chờ giữa các lần thử kết nối lại với RabbitMQ: Đặt rabbit_retry_backoff
thành số lần tăng thời gian chờ giữa các lần thử kết nối lại, ví dụ:
rabbit_retry_backoff=2
Cấu hình số lần thử kết nối tối đa với RabbitMQ: Đặt rabbit_max_retries
thành số lần thử kết nối tối đa (mặc định là vô hạn), ví dụ:
rabbit_max_retries=0
Sử dụng hàng đợi bền vững trong RabbitMQ: Đặt rabbit_durable_queues
thành true
để sử dụng durable queues.
rabbit_durable_queues=true
Sử dụng hàng đợi HA trong RabbitMQ: Đặt rabbit_ha_queues
thành true
để sử dụng HA queues.
rabbit_ha_queues=true
Nếu bạn thay đổi cấu hình từ một cài đặt cũ không sử dụng HA queues, hãy khởi động lại dịch vụ bằng cách sử dụng các lệnh rabbitmqctl stop_app
, rabbitmqctl reset
và rabbitmqctl start_app
.
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
Tài liệu tham khảo https://docs.openstack.org/ha-guide/control-plane-stateful.html.