本教程将单个三成员副本集转换为具有两个分片的分片集群。每个分片都是一个独立的三元副本集。本教程特定于MongoDB 4.2。对于其他版本的MongoDB,请参阅相应版本的《 MongoDB手册》。
步骤如下:
mongos
。请参阅
部署配置服务器副本集和mongos。本教程总共使用十台服务器:一台服务器用于
mongos
,三台服务器分别用于第一个副本集,第二个副本集和config服务器副本集。
每个服务器在系统内必须具有可解析的域,主机名或IP地址。
本教程使用默认的数据目录(例如/data/db
和
/data/configdb
)。创建具有适当权限的适当目录。要使用其他路径,请参阅“
配置文件选项”。
此过程将创建初始的三元副本集rs0
。副本集成员以下的主机:
mongodb0.example.net
,mongodb1.example.net
,和
mongodb2.example.net
。
对于每个成员,mongod
使用以下设置启动实例:
设置replication.replSetName
选项为副本集名称,
如果您的应用程序连接到多个副本集,则每个副本集应具有不同的名称。某些驱动程序通过副本集名称对副本集连接进行分组。
将net.bindIp
选项设置为主机名/ ip或以逗号分隔的主机名/ ips列表,以及
根据您的部署设置任何其他设置。
在本教程中,这三个mongod
实例与以下主机相关联:
副本集成员 | 主机名 |
---|---|
会员0 | mongodb0.example.net |
成员1 | mongodb1.example.net |
成员2 | mongodb2.example.net |
以下示例通过--replSet
和--bind_ip
命令行选项指定副本集名称和ip绑定:
对于,请指定实例的主机名和/或ip地址,远程客户端(包括副本集的其他成员)可以使用该主机名和/或ip地址连接到该实例。<hostname(s)|ip address(es)>
mongod
或者,您也可以在配置文件中指定和:replica set name
ip addresses
要从mongod
配置文件开始,请使用以下--config
选项指定配置文件的路径:
在生产部署中,您可以配置一个初始化脚本 来管理此过程。初始化脚本超出了本文档的范围。
在mongo
外壳上,rs.initiate()
在副本集成员0上运行。
重要
仅在副本集的一个实例rs.initiate()
上运行。
mongod
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
MongoDB使用默认副本集配置启动副本集。
下一步将一百万个文档添加到集合中,
test_collection
并且可能需要几分钟的时间,具体取决于您的系统。
要确定主要对象,请使用rs.status()
。
在副本集的主数据库上发出以下操作:
有关部署副本集的更多信息,请参见 部署副本集。
在版本3.4中进行了更改:对于MongoDB 3.4 mongod
分片群集,分片实例必须shardsvr
通过配置文件设置
sharding.clusterRole
或通过命令行选项
明确将其角色指定为a --shardsvr
。
将mongo
外壳连接到成员之一,然后运行
rs.status()
以确定主要成员和次要成员。
mongos
¶mongodb7.example.net
,
mongodb8.example.net
,和mongodb9.example.net
。mongos
用途mongodb6.example.net
。开始在配置服务器mongodb7.example.net
,
mongodb8.example.net
和mongodb9.example.net
。指定相同的副本集名称。配置服务器使用默认数据目录/data/configdb
和默认端口27019
。
要修改默认设置或包括特定于您的部署的其他选项,请参阅mongod或“ 配置文件选项”。
将mongo
外壳连接到其中一台配置服务器,然后运行rs.initiate()
以启动副本集。
重要
仅在副本集的一个实例rs.initiate()
上运行。
mongod
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
以下过程rs1
为第二个分片部署了一个新的副本集,并将其添加到集群中。副本集成员以下的主机:mongodb3.example.net
,
mongodb4.example.net
,和mongodb5.example.net
。
在版本3.4中进行了更改:对于MongoDB 3.4 mongod
分片群集,分片实例必须shardsvr
通过配置文件设置
sharding.clusterRole
或通过命令行选项
明确将其角色指定为a --shardsvr
。
从mongo
外壳程序运行rs.initiate()
以启动一个包含当前成员的副本集。
重要
仅在副本集的一个实例rs.initiate()
上运行。
mongod
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
mongo
外壳连接到mongos
。¶在mongo
连接到的shell中mongos
,使用以下sh.addShard()
方法将分片添加到集群中:
mongo
外壳连接到mongos
。¶在分片集合之前,必须首先为集合的数据库启用分片。对数据库启用分片并不会重新分发数据,但可以在该数据库中分片集合。
以下操作启用了对test
数据库的分片:
mongos
使用
"majority"
的
enableSharding
命令及其助手
sh.enableSharding()
。
该操作返回操作状态:
在test
数据库中,将shard test_collection
指定number
为分片键。
mongos
使用"majority"
了
写关注的的
shardCollection
命令及其助手
sh.shardCollection()
。
该方法返回操作状态: