使用配置分片启动分片集群
从 MongoDB 8.0 开始,您可以将配置服务器配置为存储除了通常的分片集群元数据以外的应用程序数据。mongod
提供配置服务器和分片服务器功能的节点称为配置分片。运行 mongod
作为独立服务器,且不带分片服务器功能的 --configsvr
的节点称为专用 配置服务器。
关于此任务
如果你的集群有3个或更少的分片,你可以考虑使用配置分片。
有关详细信息,请参阅 配置分片使用案例。
兼容性
你可以在以下环境中执行此任务
MongoDB Atlas:云中MongoDB部署的完全托管服务
注意
此任务在Atlas共享层或Atlas无服务器上不可用。
MongoDB Enterprise:基于订阅的自托管MongoDB版本
MongoDB Community:源代码可用的、免费使用且自托管的MongoDB版本
步骤
创建配置服务器副本集。
对于生产部署,部署至少包含三个成员的配置服务器副本集。
注意
配置服务器副本集不得使用与任何分片副本集相同的名称。
对于本教程,配置服务器副本集成员与以下主机关联
配置服务器副本集成员 | 主机名 |
---|---|
成员 0 | cfg1.example.net |
成员 1 | cfg2.example.net |
成员 2 | cfg3.example.net |
启动配置服务器副本集的每个成员。
在启动 每个
mongod
时,使用配置文件或命令行指定mongod
设置。如果使用配置文件,设置
sharding: clusterRole: configsvr replication: replSetName: <replica set name> net: bindIp: localhost,<hostname(s)|ip address(es)> sharding.clusterRole
为configsvr
。replication.replSetName
为配置服务器副本集的期望名称。net.bindIp
选项为以下之一主机名/IP 地址。
远程客户端可以使用的主机名或 IP 地址的逗号分隔列表,以连接到实例(包括配置服务器副本集的其他成员以及分片集群的其他成员)。
注意
在将您的实例绑定到公共可访问 IP 地址之前,您必须确保集群不受未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少,请考虑启用身份验证和强化网络基础设施。
根据您的部署情况适当设置附加配置,例如
storage.dbPath
和net.port
。有关配置文件的更多信息,请参阅配置选项。
使用
--config
选项将配置文件路径设置为启动mongod
。mongod --config <path-to-config-file> 如果使用命令行选项,请使用
--configsvr
、--replSet
、--bind_ip
以及其他适合您部署的选项启动mongod
。例如mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)> 注意
在将您的实例绑定到公共可访问 IP 地址之前,您必须确保集群不受未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少,请考虑启用身份验证和强化网络基础设施。
有关启动参数的更多信息,请参阅
mongod
参考页面。将 mongosh 连接到配置服务器的一个成员。
mongosh --host <hostname> --port <port> 初始化副本集。
在
mongosh
中运行rs.initiate()
方法。rs.initiate()
可以接受可选的 副本集配置文档。在副本集配置文档中,包括将
_id
设置为在replication.replSetName
或--replSet
选项中指定的副本集名称。对于配置服务器副本集,将
configsvr
字段设置为true
。包含每个副本集成员的文档的
members
数组。
重要
对于副本集,仅在 一个
mongod
实例上运行rs.initiate()
。rs.initiate( { _id: "myReplSet", configsvr: true, members: [ { _id : 0, host : "cfg1.example.net:27019" }, { _id : 1, host : "cfg2.example.net:27019" }, { _id : 2, host : "cfg3.example.net:27019" } ] } ) 有关副本集配置文档的更多信息,请参阅自管理副本集配置。
为分片集群启动一个 mongos。
使用配置文件或命令行参数来指定配置服务器以启动 mongos
。
如果使用配置文件,请将 sharding.configDB
设置为配置服务器副本集名称,并至少包含一个副本集成员,格式为 <replSetName>/<host:port>
。
注意
在将您的实例绑定到公共可访问 IP 地址之前,您必须确保集群不受未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少,请考虑启用身份验证和强化网络基础设施。
sharding: configDB: <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019 net: bindIp: localhost,<hostname(s)|ip address(es)>
启动 mongos
并指定 --config
选项和配置文件的路径。
mongos --config <path-to-config>
有关配置文件的更多信息,请参阅 配置选项。
如果使用命令行参数,请以适当的部署方式启动 mongos
并指定 --configdb
、--bind_ip
以及其他选项。例如
注意
在将您的实例绑定到公共可访问 IP 地址之前,您必须确保集群不受未经授权的访问。有关安全建议的完整列表,请参阅自管理部署的安全清单。至少,请考虑启用身份验证和强化网络基础设施。
mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019,cfg3.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>
根据您的部署情况包括其他任何选项。
此时,您的分片集群包括 mongos
和配置服务器。您现在可以使用 mongosh
连接到分片集群。
确认集群使用配置分片
为了确认分片集群现在使用配置分片,运行 serverStatus
命令来检查 configServerInShardCache
状态返回 true
db.adminCommand( { serverStatus: 1, } ).shardingStatistics.configServerInShardCache
true