Thursday, November 21, 2024

[Openstack HA] Phần 4 – Cấu hình High Availability dịch vụ có trạng thái RabbitMQ

-

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_apprabbitmqctl 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_apprabbitmqctl 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.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories