Nếu tất cả các phiên bản đều nằm sau một Input
cân bằng tải duy nhất endpoint (ví dụ:27017), sau đó mỗi khi máy khách của bạn kết nối với điểm cuối, nó sẽ được kết nối với các nút có khả năng khác nhau trong cụm bản sao (và bạn không có quyền kiểm soát phiên bản nào bạn đã truy cập). Điều này có thể giải thích tại sao đôi khi bạn cố gắng ghi vào không phải chính và gặp lỗi, nhưng tất cả các lần đọc của bạn đều hoạt động (vì bạn có thể đã thiết lập cụm MongoDB để cho phép đọc trên các nút phụ).
Vai trò công nhân cũng hỗ trợ InstanceInput
điểm cuối, cho phép bạn đặt phạm vi cổng hướng ra bên ngoài (ví dụ, 27017-27019), ánh xạ tới một cổng duy nhất trên chính các phiên bản worker (ví dụ:27017). Nếu bạn làm điều này, ứng dụng khách của bạn hiện có thể kết nối trực tiếp với cả ba phiên bản (27017, 27018, 27019). Nhiều trình điều khiển hỗ trợ các kết nối tập hợp bản sao, vì vậy nó sẽ có thể tìm ra nút nào là nút chính, hướng tất cả các lần ghi vào nó. Tôi không biết liệu trình điều khiển bạn đang sử dụng trên Android có hỗ trợ bản sao hay không. Nếu trình điều khiển không hỗ trợ các tập bản sao, thì bạn có thể muốn xem xét việc thiết lập một cấp API mà sau đó thực hiện tất cả các giao tiếp với cơ sở dữ liệu (dù sao thì một phương pháp hay để làm theo và bạn có thể xem Dịch vụ Di động của Azure để biết một cách nhanh chóng để thực hiện điều này).
Vì vậy, ... nếu điểm cuối của cụm bản sao của bạn được định cấu hình là Input
, điều này có thể giải thích sự cố bạn đang gặp phải, vấn đề này có thể giải quyết được bằng cách chuyển loại điểm cuối thành InstanceInput
.