Nhảy tới nội dung

Lỗi gặp phải khi migrate Rabbitmq của Openstack Nova

· 4 phút để đọc
Sang, Nguyen Nhat
Infrastructure Engineer at VNG

Lần trước bên team Sang đã migrate dịch vụ Nova sang một cụm Rabbitmq mới. Ban đầu, mọi thứ dường như khá đơn giản, nhưng lại có một vấn đề.

Lời giới thiệu

Nếu các bạn đã từng làm việc với OpenStack, các bạn bạn có thể biết rằng message queue mặc định cho OpenStack là Rabbitmq. Ngoài ra, nhiều dịch vụ OpenStack khác cũng sử dụng hàng đợi đó như Cinder, Octavia, Trove...

Mô hình

Vai trò của Rabbitmq trong Nova có thể được tóm tắt như sau:

Giả sử bạn có một cụm Rabbitmq đang chạy với 3 nodes: 10.237.5.11, 10.237.5.12 và 10.237.5.13.

Để đơn giản, bên team mình sẽ mở rộng cụm Rabbitmq bằng node mới với ip 10.237.5.14, và thay đổi config của Nova gọi đến node mới đó.

Áp config mới

Thử lần đầu

Chúng ta có thể dễ dàng nghĩ đến việc thay đổi điểm cuối của Nova bằng cách áp dụng một giá trị mới cho transport_url:

/etc/nova/nova.conf
[DEFAULT]
transport_url = rabbit://rabbitmq_user:rabbit_password@10.237.5.14:5672
...

[oslo_messaging_notifications]
transport_url = rabbit://rabbitmq_user:rabbit_password@10.237.5.14:5672

Áp dụng những thay đổi này và khởi động lại tất cả các dịch vụ Nova, ngạc nhiên thay, những config trên không được áp dụng hoàn toàn! Một số process bên trong nova_api chạy nhưng không phải tất cả. Sang kiểm tra thử kết nối mạng trên một node Rabbitmq, Sang có thể thấy vẫn còn một số process chưa sử dụng endpoint mới:

$ ss -npt dst :5672 | grep "10.237.5.11:5672"
ESTAB 0 0 10.237.5.11:36378 10.237.5.11:5672 users:(("nova-scheduler",pid=23458,fd=14))
ESTAB 0 0 10.237.5.11:45110 10.237.5.11:5672 users:(("nova-scheduler",pid=23412,fd=14))
ESTAB 0 0 10.237.5.11:57906 10.237.5.11:5672 users:(("nova-scheduler",pid=23475,fd=14))
ESTAB 0 0 10.237.5.11:45406 10.237.5.11:5672 users:(("nova-scheduler",pid=23430,fd=14))
ESTAB 0 0 10.237.5.11:59714 10.237.5.11:5672 users:(("nova-scheduler",pid=23404,fd=14))
ESTAB 0 0 10.237.5.11:44712 10.237.5.11:5672 users:(("nova-api",pid=23466,fd=15))
ESTAB 0 0 10.237.5.11:36434 10.237.5.11:5672 users:(("nova-api",pid=23419,fd=15))

Và nếu các bạn giả định rằng cấu hình message queue của Nova đã "ăn", tắt Rabbitmq ở các node cũ (10.237.5.11-13), thì có khả năng mọi người sẽ gặp phải lỗi này:

2024-03-26 14:00:42.315 26 INFO oslo.messaging._drivers.impl_rabbit [-] A recoverable connection/channel error occurred, trying to reconnect: [Errno 104] Connection reset by peer

2024-03-26 14:00:42.321 26 ERROR oslo.messaging._drivers.impl_rabbit [-] Connection failed: [Errno 111] ECONNREFUSED (retrying in 0 seconds): error: [Errno 111] ECONNREFUSED

cảnh báo

Hãy cẩn thận, khi bạn dừng các nút Rabbitmq cũ, nova_apinova_scheduler sẽ không hoạt động đúng cách mặc dù cấu hình mới đã được thay đổi

Cách fix sau cùng

Sau một hồi tìm kiếm, team Sang phát hiện rằng nova_api không chỉ sử dụng cấu hình trong file config mà cả trong Cơ sở dữ liệu.

SELECT transport_url FROM `nova_api`.`cell_mappings`

Không ngạc nhiên khi nó vẫn ghi nhận giá trị cũ. Các bạn chỉ cần đổi nó và mọi thứ sẽ bình thường.