Làm cách nào để giới hạn các kết nối trên mỗi máy chủ trong MongoDB?


8

Tôi đang chạy một máy chủ mongo chấp nhận kết nối từ các máy khách khác thông qua trình điều khiển java. Điều tôi nhận thấy là sau một thời gian, một số người dùng mở quá nhiều cổng và điều này ngăn người dùng khác kết nối với mongo. Họ chỉ tạo 1 mongoClientđối tượng, mặc dù kiểm tra kết quả IP của họ khi xem hàng trăm cổng.

Tôi đã bắt gặp một ví dụ để giới hạn kết nối trên mỗi máy chủ trong trình điều khiển java, nhưng tôi không muốn máy khách gặp rắc rối với nó. Làm thế nào tôi có thể giới hạn máy khách từ ví dụ mongod của tôi?

Ví dụ là 1 mongod chạy trên máy chủ từ xa Linux.

Câu trả lời:


11

Tôi đã liệt kê một số lựa chọn thay thế để quản lý kết nối bên dưới, theo thứ tự hầu hết được khuyến nghị.

Tăng các kết nối được phép trên máy chủ

Tổng giới hạn kết nối đến trên máy chủ được xác định bằng mức thấp hơn các giới hạn được áp đặt bởi hệ điều hành hoặc maxIncomingConnections(còn gọi là maxConnstrong MongoDB 2.4 trở về trước).

Thông thường, các bản phân phối Linux giới hạn các bộ mô tả tệp cho mỗi quy trình ở mức 1024, trong đó MongoDB sẽ sử dụng 80% cho các kết nối đến (để lại khoảng 819 kết nối khả dụng).

Bạn có thể kiểm tra các kết nối hiện tại và có sẵn trong mongoshell thông qua:

db.serverStatus().connections

Đối với các hệ thống sản xuất, điều chỉnh các ulimitcài đặt trên Linux là cho phép các kết nối đồng thời hơn. Để có nhiều cách thực hành tốt nhất, tôi khuyên bạn nên xem lại Ghi chú sản xuất trong hướng dẫn sử dụng MongoDB.

Cung cấp API

Nếu bạn đang quản lý một máy chủ dùng chung có giới hạn tài nguyên, việc cung cấp API của riêng bạn thay vì truy cập cơ sở dữ liệu trực tiếp là điều phổ biến. Cách tiếp cận này cung cấp cho bạn một lớp trừu tượng bổ sung để bạn có thể quản lý việc sử dụng tài nguyên và triển khai máy chủ độc lập với cấu hình máy khách. Ví dụ: bạn có thể di chuyển máy chủ cơ sở dữ liệu của mình hoặc cấu hình lại từ bộ độc lập sang bộ bản sao và khách hàng sẽ không phải biết điều này. Bạn cũng có thể quản lý các giới hạn tài nguyên tùy chỉnh (như kết nối cho mỗi khách hàng) thông qua API của bạn, dựa trên thông tin đăng nhập mà khách hàng sử dụng để kết nối.

Giảm kích thước nhóm kết nối trong máy khách

MongoDB (tại 2.6) không có tùy chọn giới hạn các kết nối trên mỗi máy khách. Thông thường giới hạn máy khách sẽ được áp đặt thông qua trình điều khiển (nghĩa là đặt kích thước nhóm kết nối). Ví dụ, trong các tài xế Java các MongoClienthồ bơi kích thước tối đa mặc định là 100.

Bạn đã từng đề xuất đây không phải là một lựa chọn mong muốn vì bạn không muốn khách hàng gặp rắc rối với các giới hạn kết nối, nhưng nếu bạn định áp đặt giới hạn phía máy chủ thì vẫn hợp lý khi họ đặt kích thước nhóm thích hợp. Nếu không, các ứng dụng của họ sẽ có ngoại lệ thường xuyên khi bạn tắt các kết nối dư thừa.

Giám sát hoạt động của khách hàng

Nếu việc điều chỉnh giới hạn trên máy khách hoặc máy chủ không phải là một tùy chọn, một giải pháp thay thế cần xem xét là triển khai tập lệnh để đếm các kết nối máy khách đồng thời (bằng IP) thông qua db.currentOp()và tiêu diệt các kết nối dư thừa thông qua db.killOp(). Bạn phải rất cẩn thận để chỉ giết các yêu cầu của khách hàng. Các killOp()lệnh là một lệnh superuser mà sẽ cho phép bạn giết chủ đề cơ sở dữ liệu nội bộ cũng (có thể dẫn đến kết quả không thể đoán trước).

LƯU Ý: Cách tiếp cận này sẽ không thành công nếu các máy khách của bạn đang kết nối thông qua một cổng chia sẻ (nghĩa là IP nguồn không xác định duy nhất một máy khách).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.