2011-12-16 37 views
8

Tôi có Celeryd/RabbitMQ chạy trên một hộp Fedora, liên lạc với cơ sở dữ liệu MySQL trên một hộp riêng biệt. Tôi đã nhận thấy rằng, vào những dịp hiếm hoi, nếu có ngay cả những vấn đề nhỏ kết nối với cơ sở dữ liệu MySQL (ngay cả đối với một vài giây), celeryd sẽ sụp đổ với lỗi:Khôi phục cần tây từ một cúp cơ sở dữ liệu

OperationalError: (2003, "Can't connect to MySQL server on 
'mydatabasedomain' (111)") 

và thất bại trong việc kết nối lại thậm chí khi cơ sở dữ liệu trở nên khả dụng trở lại.

Hiện tại, tôi bắt buộc phải khởi động lại dịch vụ cần tây theo cách thủ công để có được cần tây chạy trở lại. Có cách nào duyên dáng và tự động hơn để khôi phục từ các loại sự kiện này không? Có bất kỳ tính năng nào của cần tây để chỉ lặng lẽ chờ đợi, đăng nhập OperationalError, và kết nối lại thay vì thoát ra hoàn toàn?

+1

Điều gì đang sử dụng MySQL? Có phải bạn đang sử dụng nhà môi giới SQLAlchemy, kết nối với MySQL DB không? – brechin

Trả lời

0

Tôi không biết cách nào để sửa lỗi này bằng cách sử dụng cờ cấu hình, nhưng bạn có thể xem xét chạy công nhân của mình bằng cách sử dụng người giám sát (s. http://supervisord.org).

Điều này thậm chí còn được đề cập trong tài liệu cần tây (http://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#supervisord) bao gồm liên kết đến một số tệp cấu hình mẫu.

+0

Cùng một vấn đề ở đây. Cần tây không cung cấp một giải pháp? Một daemon bên ngoài là lựa chọn duy nhất được biết đến? Trong trường hợp của tôi, tôi có hai hộp chạy một ứng dụng Python + Celery + RabbitMQ, kết nối với cùng một cơ sở dữ liệu Google Cloud SQL bằng SQLAlchemy. Cuối cùng tôi nhận được một trong các máy SQL OperationalError '(2013, 'Mất kết nối với máy chủ MySQL trong khi truy vấn')'. Mặc dù xử lý ngoại lệ, các quy trình công nhân của Celery bị tắt trong cả hai máy, mà không cần phải đăng nhập Celery. Chỉ RabbitMQ đăng nhập các kết nối đóng đột ngột – alecdotico

+0

Tôi nghĩ rằng đây là một vấn đề khác nhau mặc dù (mặc dù cả hai cần được xử lý bởi một cần tây mạnh mẽ hơn). Thông báo lỗi bạn trích dẫn được biết là xảy ra nếu kết nối db mở quá lâu (bạn có thể sửa lỗi bằng cách tăng thời gian chờ trong cấu hình mysql) – Jann

Các vấn đề liên quan