Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual
Trên trang này
- Tổng quan
- Giả định
- Thay đổi tên máy chủ trong khi duy trì tính khả dụng của bộ bản sao
- Thay đổi tất cả các tên máy chủ cùng một lúc
Đối với hầu hết các bộ bản sao, tên máy chủ trong trường
cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
5 không bao giờ thay đổi. Tuy nhiên, nếu nhu cầu tổ chức thay đổi, bạn có thể cần di chuyển một số hoặc tất cả các tên máy chủ.Ghi chú
Luôn luôn sử dụng tên máy chủ có thể giải quyết được cho giá trị của trường
cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
5 trong cấu hình bộ bản sao để tránh sự nhầm lẫn và phức tạp.Quan trọng
Để tránh các bản cập nhật cấu hình do thay đổi địa chỉ IP, hãy sử dụng tên máy chủ DNS thay vì địa chỉ IP. Điều đặc biệt quan trọng là sử dụng tên máy chủ DNS thay vì địa chỉ IP khi định cấu hình các thành viên đặt bản sao hoặc các thành viên cụm bị chia cắt.
Sử dụng tên máy chủ thay vì địa chỉ IP để định cấu hình các cụm trên đường chân trời mạng chia. Bắt đầu từ MongoDB 5.0, các nút chỉ được cấu hình với địa chỉ IP sẽ không xác thực khởi động và sẽ không bắt đầu.
Tài liệu này cung cấp hai quy trình riêng biệt để thay đổi tên máy chủ trong trường
cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
5. Sử dụng một trong các phương pháp sau:Thay đổi tên máy chủ mà không làm gián đoạn tính khả dụng. Cách tiếp cận này đảm bảo các ứng dụng của bạn sẽ luôn có thể đọc và ghi dữ liệu vào bộ bản sao, nhưng cách tiếp cận có thể mất nhiều thời gian và có thể phát sinh thời gian chết ở lớp ứng dụng.. This approach ensures your applications will always be able to read and write data to the replica set, but the approach can take a long time and may incur downtime at the application layer.
Nếu bạn sử dụng quy trình đầu tiên, bạn phải định cấu hình các ứng dụng của mình để kết nối với bản sao được đặt ở cả hai vị trí cũ và mới, thường yêu cầu khởi động lại và cấu hình lại ở lớp ứng dụng và có thể ảnh hưởng đến tính khả dụng của các ứng dụng của bạn. Các ứng dụng cấu hình lại nằm ngoài phạm vi của tài liệu này.
Dừng tất cả các thành viên chạy trên tên máy chủ cũ cùng một lúc. Cách tiếp cận này có một cửa sổ bảo trì ngắn hơn, nhưng bộ bản sao sẽ không có sẵn trong quá trình hoạt động.. This approach has a shorter maintenance window, but the replica set will be unavailable during the operation.
Mẹo
Cho một bộ bản sao với ba thành viên:
8 [chính]cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
9cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
0cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
Và với đầu ra
cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
1 sau:{ "_id" : "rs", "version" : 3, "members" : [ { "_id" : 0, "host" : "database0.example.com:27017" }, { "_id" : 1, "host" : "database1.example.com:27017" }, { "_id" : 2, "host" : "database2.example.com:27017" } ] }
Các quy trình sau thay đổi tên máy chủ của thành viên như sau:
2 [chính]cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
3cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
4cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
Sử dụng thủ tục thích hợp nhất để triển khai của bạn.
Quy trình này sử dụng các giả định trên.assumptions.
Đối với mỗi thứ cấp trong bộ bản sao, hãy thực hiện chuỗi hoạt động sau:
Dừng thứ cấp.
Khởi động lại thứ cấp tại vị trí mới.
Kết nối
5 với chính bộ bản sao. Trong ví dụ của chúng tôi, bản chính chạy trên cổngcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
6 vì vậy bạn sẽ ban hành lệnh sau:cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
5 to the replica set's primary. In our example, the primary runs on portcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
6 so you would issue the following command:cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Sử dụng
7 để cập nhật tài liệu cấu hình đặt bản sao với tên máy chủ mới.cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Ví dụ: chuỗi các lệnh sau đây cập nhật tên máy chủ cho phần phụ tại chỉ mục mảng
8 của mảngcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
9 [tức làcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
0] trong tài liệu cấu hình SET SET:{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] } cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg] Để biết thêm thông tin về việc cập nhật tài liệu cấu hình, xem ví dụ.
Đảm bảo các ứng dụng khách của bạn có thể truy cập bộ tại vị trí mới và thứ cấp có cơ hội bắt kịp các thành viên khác của bộ.
Lặp lại các bước trên cho mỗi thành viên không chính của tập hợp.
Kết nối
5 với chính và bước xuống chính bằng phương phápcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
2:{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
5 to the primary and step down the primary using thecfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
2 method:{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] } Bộ bản sao bầu một thành viên khác để trở thành chính.
Khi bước xuống thành công, hãy tắt cái sơ cấp cũ.
Bắt đầu thể hiện
3 sẽ trở thành chính mới ở vị trí mới.{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] } Kết nối với chính hiện tại, vừa được bầu và cập nhật tài liệu cấu hình SET bản sao với tên máy chủ của nút sẽ trở thành chính mới.
Ví dụ: nếu sơ cấp cũ ở vị trí
4 và tên máy chủ chính của mới là{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
2, bạn sẽ chạy:cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Kết nối
5 với chính mới.cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
5 to the new primary.cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Để xác nhận cấu hình mới, hãy gọi
1 trongcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
5cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
5cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Đầu ra của bạn sẽ giống với:
{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
Quy trình này sử dụng các giả định trên.assumptions.
Đối với mỗi thứ cấp trong bộ bản sao, hãy thực hiện chuỗi hoạt động sau:
Dừng thứ cấp.
Khởi động lại thứ cấp tại vị trí mới.
Kết nối
5 với chính bộ bản sao. Trong ví dụ của chúng tôi, bản chính chạy trên cổngcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
6 vì vậy bạn sẽ ban hành lệnh sau:cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] mongosh --port 27017 -u myUserAdmin --authenticationDatabase 'admin' -p
Sử dụng
7 để cập nhật tài liệu cấu hình đặt bản sao với tên máy chủ mới.cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ]; Ví dụ: chuỗi các lệnh sau đây cập nhật tên máy chủ cho phần phụ tại chỉ mục mảng
8 của mảngcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
9 [tức làcfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
0] trong tài liệu cấu hình SET SET:{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] } use admin db.grantRolesToUser[ "userPerformingRename", [ { role: "systemreplsetRole", db: "admin" } ] ];
Dừng tất cả các thành viên trong bộ bản sao.
Khởi động lại mỗi thành viên trên một cổng khác nhau và không sử dụng tùy chọn thời gian chạy
0. Thay đổi số cổng trong quá trình bảo trì ngăn khách hàng kết nối với máy chủ này trong khi bạn thực hiện bảo trì. Sử dụngdb.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ];
1 thông thường của thành viên, trong ví dụ này làdb.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ];
2. Sử dụng lệnh giống như sau:db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ]; Cảnh báo
mongod --dbpath /data/db1/ --port 37017 --bind_ip localhost,
Quan trọng
Để tránh các bản cập nhật cấu hình do thay đổi địa chỉ IP, hãy sử dụng tên máy chủ DNS thay vì địa chỉ IP. Điều đặc biệt quan trọng là sử dụng tên máy chủ DNS thay vì địa chỉ IP khi định cấu hình các thành viên đặt bản sao hoặc các thành viên cụm bị chia cắt.
Sử dụng tên máy chủ thay vì địa chỉ IP để định cấu hình các cụm trên đường chân trời mạng chia. Bắt đầu từ MongoDB 5.0, các nút chỉ được cấu hình với địa chỉ IP sẽ không xác thực khởi động và sẽ không bắt đầu.
Đối với mỗi thành viên của bộ bản sao, hãy thực hiện chuỗi hoạt động sau:
Kết nối
5 vớicfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
3 đang chạy trên cổng mới, tạm thời. Ví dụ: đối với một thành viên chạy trên cổng tạm thời của{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
5, bạn sẽ ban hành lệnh này:db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ];
5 to thecfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg]
3 running on the new, temporary port. For example, for a member running on a temporary port of{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
5, you would issue this command:db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ]; Nếu chạy với Điều khiển truy cập, hãy kết nối với tư cách là người dùng với các đặc quyền phù hợp. Xem điều kiện tiên quyết.Prerequisites.
mongosh --port 37017 -u userPerformingRename --authenticationDatabase=admin -p
Chỉnh sửa cấu hình đặt bản sao theo cách thủ công. Cấu hình bộ bản sao là tài liệu duy nhất trong bộ sưu tập
9 trong cơ sở dữ liệu{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
0.mongosh --port 27017 -u myUserAdmin --authenticationDatabase 'admin' -p
Để thay đổi tên máy chủ, chỉnh sửa cấu hình bộ bản sao để cung cấp tên máy chủ và cổng mới cho tất cả các thành viên của bộ bản sao.
Chuyển sang cơ sở dữ liệu
0.mongosh --port 27017 -u myUserAdmin --authenticationDatabase 'admin' -p
Tạo một biến JavaScript cho tài liệu cấu hình. Sửa đổi giá trị của trường
9 để phù hợp với bộ bản sao của bạn.db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ]; cfg = db.system.replset.findOne[ { "_id": "rs0" } ]
Cung cấp tên máy chủ và cổng mới cho mỗi thành viên của bộ bản sao. Sửa đổi tên máy chủ và cổng để phù hợp với bộ bản sao của bạn.
0cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg] Cập nhật tên máy chủ và cổng trong bộ sưu tập
9:{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
1cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg] Xác minh các thay đổi:
2cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]
Dừng quy trình
3 trên thành viên.{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
Sau khi cấu hình lại tất cả các thành viên của tập hợp, hãy bắt đầu từng phiên bản
3 theo cách thông thường: Sử dụng số cổng thông thường và sử dụng tùy chọn{ "_id" : "rs", "version" : 4, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017" }, { "_id" : 1, "host" : "mongodb1.example.net:27017" }, { "_id" : 2, "host" : "mongodb2.example.net:27017" } ] }
0. Ví dụ:db.adminCommand[ { createRole: "systemreplsetRole", privileges: [ { resource: { db: "local", collection: "system.replset" }, actions: ["find","update"] } ], roles: [] } ]; Cảnh báo
3cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg] Quan trọng
5. For example:cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Để tránh các bản cập nhật cấu hình do thay đổi địa chỉ IP, hãy sử dụng tên máy chủ DNS thay vì địa chỉ IP. Điều đặc biệt quan trọng là sử dụng tên máy chủ DNS thay vì địa chỉ IP khi định cấu hình các thành viên đặt bản sao hoặc các thành viên cụm bị chia cắt.
5cfg = rs.conf[] cfg.members[0].host = "mongodb0.example.net:27017" rs.reconfig[cfg] Sử dụng tên máy chủ thay vì địa chỉ IP để định cấu hình các cụm trên đường chân trời mạng chia. Bắt đầu từ MongoDB 5.0, các nút chỉ được cấu hình với địa chỉ IP sẽ không xác thực khởi động và sẽ không bắt đầu.
4cfg = rs.conf[] cfg.members[1].host = "mongodb1.example.net:27017" rs.reconfig[cfg]