Xử lý tình huống đứt kết nối với MongoDB khi chạy trên máy ảo trên Microsoft Azure

Vấn đề

Khi sử dụng MongoDB trong máy ảo trên Azure, tình huống hay xảy ra là sau 1 thời gian ngắn thì các kết nối hay bị đứt: kết nối bằng Driver, dùng lệnh mongo, công cụ MongoChef, …

Nguyên nhân

Đó là vì mặc định khi VM của Azure được tạo ra, các kết nối từ bên ngoài đến máy ảo Azure sẽ thông tin public DNS và khi mọi request đến VM sẽ gặp 1 cổng Load Balancer với thời gian timeout là 1 phút.

Khi kết nối với MongoDB bằng TCP, thì tùy theo hệ điều hành mà co1 thời gian keepalive khác nhau. Thông thường Linux là 2 tiếng. Do vậy Load Balancer sẽ làm timeout trước khi được keepalive

Giải pháp

  1. Áp dụng Azure Virtual Network cho máy ảo đang chạy MongoDB và client để các kết nối xảy ra trong nội bộ datacenter của Azure. Cách này không thích hợp khi dự án đang phát triển và test
  2. Thiết lập tcp keepalive time lại. Sửa từ 2 tiếng xuống dưới 1 phút. Cách làm trên Linux: (vd là chỉnh xuống 40 giây)
    sudo sysctl -w net.ipv4.tcp_keepalive_time=40

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google photo

Bạn đang bình luận bằng tài khoản Google Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s