对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

将独立运行的自管理 mongod 转换为副本集

独立运行的实例 mongod 用于测试和开发。独立运行的实例不是生产部署的好选择,因为它可能会出现单点故障。副本集 提供冗余和可用性。请始终在生产中使用副本集。

如果您有一台独立服务器,并且其中包含要在生产中使用的数据,请先将该独立服务器转换为副本集。

重要

如果将开发服务器转换为副本集以供生产使用,请先查阅安全检查清单。在向互联网公开集群之前执行此操作。

您可以从独立运行的服务器迁移到 MongoDB Atlas 集群。MongoDB Atlas 是用于云中 MongoDB 部署的完全托管服务。要了解更多信息,请参阅 MongoDB Atlas 文档中的迁移或导入数据

本教程使用以下服务器:

主机名
端口
说明

mongodb0.example.net

27017

运行的独立运行MongoDB Server,其中包含数据。

mongodb1.example.net

27017

用于加入副本集的新MongoDB Server 。

mongodb2.example.net

27017

用于加入副本集的新MongoDB Server 。

在转换独立实例之前,请考虑是副本集还是分片集群更适合于您的工作负载。

分片集群通过在分片之间分发数据来提供冗余性和可用性,分片通常托管在多个服务器上,以实现水平扩展。

要对副本集使用授权,您还必须将副本集节点配置为使用 X.509 证书或密钥文件来执行内部身份验证。

有关更多信息,请参阅:

1

使用mongosh 连接到现有的 mongod实例:

mongosh "mongodb://mongodb0.example.net:27017"

切换到 admin 数据库并运行 shutdown

use admin
db.adminCommand(
{
shutdown: 1,
comment: "Convert to replica set"
}
)

当您运行shutdown 命令时,服务器会使用类似于以下示例的消息进行响应:

MongoNetworkError: connection <connection number> to <host>:<port> closed

2

更新每台服务器上的配置文件以设置 replSetName 设置。

replication:
replSetName: "rs0"
3

为副本集中的每个服务器配置节点身份验证。

配置副本集以使用 X.509 证书进行内部节点身份验证。

设置
选项
说明

设置要在身份验证中使用的 TLS模式。要将服务器配置为要求 X.509 证书身份验证,请将此选项设置为 requireTLS

设置包含客户端连接 TLS 证书的 .pem 文件路径。

设置包含证书颁发机构 (CA) 根证书链的文件路径。

设置包含集群节点连接的 TLS 证书的 .pem 文件的路径。

设置用于验证集群节点的模式。要使用 X.509 身份验证,请将此选项设置为 x509

例如:

replication:
replSetName: "rs0"
security:
clusterAuthMode: x509
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/mongodb/client.pem
CAFile: /etc/mongodb/ca.pem
clusterFile: /etc/mongodb/member.pem

配置副本集以使用密钥文件进行内部节点身份验证。要进行身份验证,每个节点都必须拥有相同密钥文件的副本。

设置
选项
说明

设置副本集密钥文件的路径。

例如:

replication:
replSetName: "rs0"
security:
keyFile: /etc/mongodb/keyfile

在未经授权的情况下配置副本集。

警告

此配置只能用于无法通过网络访问的内部副本集。

设置
选项
说明

设置 MongoDB 侦听客户端连接的主机名或IP地址。要阻止对服务器的网络访问,请将此选项设置为 localhost

例如:

replication:
replSetName: "rs0"
net:
bindIp: localhost
4

为每个节点启动mongod

5

要初始化副本集,请使用 mongosh 重新连接到服务器实例。

mongosh "mongodb://mongodb0.example.net:27017"

然后,运行rs.initiate() 方法:

rs.initiate()

您只需启动副本集一次。

要查看副本集配置,请使用rs.conf()

要查看副本集的状态,请使用 rs.status()

6

新副本集有一个主节点。在添加其他节点之前,请查看有关集群的文档:

要添加节点,运行rs.add() 方法:

rs.add("mongodb1.example.net:27017")
rs.add("mongodb2.example.net:27017")
7

要检查副本集是否已正确配置,运行rs.status() 方法并检查新成员是否列在 members字段中:

rs.status()
8

将独立运行服务器转换为副本集后,将应用程序使用的连接字符串更新为副本集的连接字符串:

  • mongodb0.example.net:27017

  • mongodb1.example.net:27017

  • mongodb2.example.net:27017

mongodb://mongodb0.example.net:27017,mongodb1.example.net:27017,mongodb2.example.net:27017

然后,重新启动您的应用程序。