No menu items!
No menu items!
More

    Cấu hình Cluster RabbitMQ HA trong OpenStack

    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-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 node2node3:

    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/

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email