SRV trong MongoDB là gì?

Cho đến nay mọi thứ đều ổn, nhưng trình điều khiển mongodb buộc rằng khi sử dụng giao thức “mongodb+srv”, nó chỉ cho phép sử dụng tên máy chủ đã phân giải, nếu “miền mẹ” của dịch vụ giống với tên miền của dịch vụ

Trong trường hợp của chúng tôi, nơi
mongos-instance-appRouter. Dịch vụ. eu1. lãnh sự
giải quyết
mongodb16. eu1. phát triển. net. nút. eu1. lãnh sự

các miền mẹ khác nhau
"Dịch vụ. eu1. lãnh sự” vs. "nút. eu1. lãnh sự” và với điều này, trình điều khiển mongo không cho phép kết nối…

mongo mongodb+srv://dev:[email protected]/?ssl=false
FailedToParse: Hostname mongodb16.eu1.sprd.net.node.eu1.consul. is not within the domain service.eu1.consul

MongoDB cũng đã nêu điều này trong tài liệu

SRV trong MongoDB là gì?
mongodb. com

SRV trong MongoDB là gì?

(kiểm tra dưới ghi chú “Quan trọng” ở đó)

Có ai có Ý tưởng hoặc gợi ý nào không, nếu và bằng cách nào chúng tôi có thể thực hiện công việc này?
Cảm ơn trước …

Phân giải các URL mongodb+srv:// thành các URL mongodb:// như được chỉ định trong Đặc tả khám phá danh sách hạt giống DNS ban đầu

import resolveMongodbSrv from 'resolve-mongodb-srv';

await resolveMongodbSrv('mongodb+srv://user:[email protected]/db');
// Returns: mongodb://user:password@host1,host2,host3/db

Hàm resolveMongodbSrv nhận một đối số thứ hai tùy chọn, trong đó việc triển khai dns đã sử dụng có thể được chuyển vào

Phân giải các URL mongodb+srv:// thành các URL mongodb:// như được chỉ định trong Đặc tả khám phá danh sách hạt giống DNS ban đầu

import resolveMongodbSrv from 'resolve-mongodb-srv';

await resolveMongodbSrv('mongodb+srv://user:[email protected]/db');
// Returns: mongodb://user:password@host1,host2,host3/db

Hàm resolveMongodbSrv nhận một đối số thứ hai tùy chọn, trong đó việc triển khai dns đã sử dụng có thể được chuyển vào

Hiện tại, chức năng Khám phá danh sách hạt DNS ban đầu cung cấp một danh sách hạt tĩnh khi MongoClient được xây dựng. Thăm dò định kỳ các bản ghi DNS SRV sẽ cho phép cập nhật danh sách proxy mongos mà không phải thay đổi cấu hình máy khách

Đặc tả này được xây dựng dựa trên đặc tả Khám phá danh sách hạt DNS ban đầu ban đầu và sửa đổi định nghĩa của đặc tả Giám sát và Khám phá máy chủ về việc giám sát một tập hợp các máy chủ mongos trong Loại cấu trúc liên kết phân đoạn

Các từ khóa “PHẢI”, “KHÔNG PHẢI”, “BẮT BUỘC”, “SẼ”, “SẼ KHÔNG”, “NÊN”, “KHÔNG NÊN”, “KHUYẾN NGHỊ”, “CÓ THỂ” và “TÙY CHỌN” trong tài liệu này là để

Quét lại là quét định kỳ tất cả các bản ghi DNS SRV để khám phá một bộ máy chủ mongos mới

Một giá trị nội bộ thể hiện tần suất các bản ghi DNS SRV sẽ được truy vấn cho

Nếu cấu trúc liên kết ban đầu được tạo thông qua một URI mongodb+srv://, thì trình điều khiển PHẢI triển khai thông số kỹ thuật này bằng cách quét lại định kỳ các bản ghi DNS của SRV. KHÔNG PHẢI là một tùy chọn để tắt hành vi này

Trình điều khiển KHÔNG ĐƯỢC triển khai thông số kỹ thuật này nếu chúng không tuân thủ đầy đủ thông số kỹ thuật Khám phá danh sách hạt DNS ban đầu

Tính năng này chỉ khả dụng khi Server Discovery đã xác định rằng TopologyType là Sharded hoặc Unknown. Trình điều khiển KHÔNG ĐƯỢC quét lại bản ghi DNS SRV khi cấu trúc liên kết không được phân mảnh (i. e. Đơn, ReplicaSetNoPrimary hoặc ReplicaSetWithPrimary)

Việc phát hiện ra một tập hợp các máy chủ mongos được giải thích trong phần khám phá của thông số kỹ thuật ban đầu. Hành vi quét lại định kỳ tương tự, nhưng không giống với hành vi khám phá danh sách hạt giống ban đầu. Quét định kỳ PHẢI tuân theo các quy tắc này

  • Trình điều khiển sẽ truy vấn máy chủ DNS để biết các bản ghi SRV trên {hostname}.{domainname}, có tiền tố là tên dịch vụ SRV và giao thức. Tên dịch vụ SRV được cung cấp trong tùy chọn URI và mặc định là mongodb. Giao thức luôn là tcp. Sau khi thêm tiền tố, URI sẽ giống như. _{srvServiceName}._tcp.{hostname}.{domainname}
  • Trình điều khiển PHẢI xác minh rằng tên máy chủ được trả về thông qua bản ghi SRV có cùng cha mẹ {domainname}. Khi xác minh này không thành công, trình điều khiển
    • KHÔNG ĐƯỢC thêm tên máy chủ không tuân thủ như vậy vào cấu trúc liên kết
    • KHÔNG PHẢI đưa ra lỗi
    • NÊN ghi nhật ký việc không tuân thủ, bao gồm cả tên máy chủ lưu trữ
    • KHÔNG PHẢI bắt đầu kết nối với bất kỳ máy chủ nào như vậy
  • Nếu yêu cầu DNS trả về không có máy chủ được xác minh nào trong bản ghi SRV, hoàn toàn không có bản ghi SRV nào hoặc xảy ra lỗi DNS, thì trình điều khiển
    • KHÔNG PHẢI thay đổi cấu trúc liên kết
    • KHÔNG PHẢI đưa ra lỗi
    • NÊN ghi nhật ký tình huống này, bao gồm cả lý do tại sao không thể tìm thấy bản ghi DNS, nếu có thể
    • PHẢI tạm thời đặt rescanSRVIntervalMS thànhbeatFrequencyMS cho đến khi thu được ít nhất một bản ghi SRV đã xác minh
  • Đối với tất cả các tên máy chủ đã được xác minh, như được trả về thông qua truy vấn DNS SRV, trình điều khiển
    • PHẢI xóa tất cả các máy chủ là một phần của cấu trúc liên kết, nhưng không còn trong tập hợp các máy chủ hợp lệ được trả về
    • KHÔNG ĐƯỢC xóa tất cả các máy chủ, sau đó thêm lại những máy chủ đã được trả lại. Các máy chủ không thay đổi, PHẢI được để yên và không thay đổi
    • Nếu bằng 0 hoặc lớn hơn hoặc bằng số lượng máy chủ hợp lệ, thì mỗi máy chủ mới hợp lệ PHẢI được thêm vào cấu trúc liên kết dưới dạng Không xác định
    • Nếu lớn hơn 0 và nhỏ hơn số lượng máy chủ hợp lệ, thì các máy chủ mới hợp lệ PHẢI được chọn ngẫu nhiên và thêm vào cấu trúc liên kết dưới dạng Không xác định cho đến khi cấu trúc liên kết có srvMaxHosts máy chủ. Trình điều khiển PHẢI sử dụng thuật toán ngẫu nhiên giống như họ làm cho
  • Các ưu tiên và trọng số trong các bản ghi SRV PHẢI tiếp tục bị bỏ qua và KHÔNG ĐƯỢC chỉ định máy chủ mongos nào được sử dụng cho các kết nối mới

Quá trình quét lại cần diễn ra định kỳ. Vì các bản ghi SRV chứa một giá trị TTL, giá trị này có thể được sử dụng để cho biết khi nào cần quét lại. Các bản ghi SRV khác nhau có thể có các giá trị TTL khác nhau. Giá trị quét lạiSRVIntervalMS PHẢI được đặt ở mức thấp nhất trong số các giá trị TTL riêng lẻ được liên kết với các bản ghi SRV khác nhau trong lần quét lại gần đây nhất, nhưng KHÔNG ĐƯỢC thấp hơn 60 giây. Nếu trình điều khiển không thể truy cập các giá trị TTL của bản ghi SRV, nó PHẢI quét lại sau mỗi 60 giây

Trình điều khiển NÊN nỗ lực quét lại và lấy danh sách máy chủ mongos mới sau mỗi lần quét lại giá trịSRVIntervalMS. Khoảng thời gian quét lạiSRVIntervalMS NÊN được tính từ khi kết thúc lần quét lại trước đó (hoặc khi kết thúc quá trình quét phát hiện danh sách hạt giống DNS ban đầu)

Trình điều khiển theo luồng PHẢI sử dụng một luồng giám sát riêng để quét các bản ghi DNS để việc tra cứu DNS không chặn các hoạt động khác

Quá trình quét lại PHẢI xảy ra trước khi quét tất cả các máy chủ như một phần của chức năng thông thường, nhưng chỉ khi quét lạiSRVIntervalMS đã qua

Xem README. rst trong thư mục kiểm tra đi kèm

Thông số kỹ thuật Khám phá danh sách hạt giống DNS ban đầu ban đầu chỉ điều chỉnh danh sách ban đầu của các máy chủ mongos được sử dụng thay vì một tên máy chủ duy nhất từ ​​một URI kết nối. Mặc dù điều này làm cho cấu hình ban đầu của một nhóm máy chủ mongos dễ dàng hơn nhiều, nhưng nó không cung cấp phương pháp cập nhật danh sách máy chủ mongos trong cấu trúc liên kết

Kể từ khi giới thiệu lược đồ mongo+srv:// để cung cấp danh sách hạt giống ban đầu, một số người dùng đã yêu cầu chức năng bổ sung để có thể cập nhật danh sách được định cấu hình của các máy chủ mongos tạo nên cấu trúc liên kết hạt giống ban đầu

  • https. //jira. mongodb. org/duyệt/JAVA-2927

Chúng tôi đã chọn sử dụng TTL thấp nhất trong số tất cả các bản ghi DNS SRV, với lưu ý rằng tần suất quét lại không thấp hơn 60 giây

Chúng tôi đã không chọn có chế độ "bỏ phiếu nhanh", nhưng chúng tôi đã bao gồm một điều khoản rằng cần phải quét lại khi không có bản ghi DNS. Trong trường hợp đó, quá trình quét lại sẽ diễn ra theo nhịp timFrequencyMS. Lý do là việc bỏ phiếu DNS thực sự thường rất nhanh không có nhiều ý nghĩa do bộ nhớ đệm DNS, dù sao thì bộ đệm này thường sử dụng TTL rồi, nhưng khi chúng tôi không có bản ghi TTL để tham chiếu, chúng tôi vẫn cần tần suất dự phòng

Thiết kế không cho phép tùy chọn tắt quét lại định kỳ các bản ghi SRV trên cơ sở chúng tôi cố gắng có càng ít tùy chọn càng tốt. triết lý "không có núm"

Thông số kỹ thuật này thay đổi hành vi giám sát máy chủ bằng cách giới thiệu tra cứu DNS lặp lại các bản ghi SRV. Mặc dù đây là một cải tiến trong chương trình mongodb+srv:// nhưng nó vẫn có thể phá vỡ sự mong đợi của những người dùng đã quen với hành vi cũ. Chúng tôi không mong đợi điều này sẽ tác động tiêu cực đến người dùng

Việc triển khai tham chiếu được thực hiện cho các trình điều khiển sau

  • perl
  • C#

Thông số kỹ thuật này không có ý nghĩa bảo mật ngoài những gì được liên kết với thông số kỹ thuật Khám phá danh sách hạt DNS ban đầu ban đầu

Chuỗi kết nối SRV là gì?

Sử dụng công cụ sửa đổi chuỗi kết nối +srv tự động đặt tùy chọn tls (hoặc ssl tương đương) thành true cho kết nối . Bạn có thể ghi đè hành vi này bằng cách đặt rõ ràng tùy chọn tls (hoặc tương đương ssl ) thành false với tls=false (hoặc ssl=false ) trong chuỗi truy vấn.

Chuỗi kết nối MongoDB là gì?

Chuỗi kết nối MongoDB được định nghĩa là định dạng kết nối để tham gia máy chủ cơ sở dữ liệu MongoDB , chúng tôi sử dụng tên người dùng, tên máy chủ, mật khẩu và tham số cổng . Không có chuỗi kết nối thì không kết nối được với máy chủ cơ sở dữ liệu, chúng ta cần có chuỗi kết nối để kết nối máy chủ cơ sở dữ liệu.

Bản sao được đặt trong MongoDB là gì?

Bộ bản sao là một nhóm các phiên bản mongod duy trì cùng một bộ dữ liệu . Một bộ bản sao chứa một số nút mang dữ liệu và tùy chọn một nút trọng tài. Trong số các nút mang dữ liệu, một và chỉ một thành viên được coi là nút chính, trong khi các nút khác được coi là nút phụ.

Cụm trong MongoDB là gì?

Cụm phân mảnh trong MongoDB là tập hợp các bộ dữ liệu được phân phối trên nhiều phân đoạn (máy chủ) để đạt được khả năng mở rộng theo chiều ngang và hiệu suất tốt hơn trong các thao tác đọc và ghi.