是否可以对集合进行复制集和分片?
Is it possible to replicaset and shard a collection?
我已经看到,为了进行数据分发,我可以在 ReplicaSet 或 Sharding 之间进行选择。
使用带有这些参数的 mongodb 代码 --shardsvr --replSet
.
mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost
我正在做的是制作一个分片服务器,它也是一个副本集,或者我只是在做一个分片?
如果我两者都不做,我应该写什么?
编辑
mongod --shardsvr --port 27020 --replSet rs1 --dbpath C:\data\data4 --bind_ip localhost
mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost
mongod --shardsvr --port 27022 --replSet rs1 --dbpath C:\data\data6 --bind_ip localhost
mongos --port 40000 --configdb rs0/localhost:27017
mongo --port 40000
rs.initiate( { _id : "rs1", members: [ { _id: 0, host: "localhost:27020" }, { _id: 1, host: "localhost:27021" }, { _id: 2, host: "localhost:27022" } ] })
sh.addShard( "rs1/localhost:27020,localhost:27021,localhost:27022")
sh.enableSharding("db")
sh.shardCollection("db.collection", { "_id" : 1 } )
当我执行这种代码时,我得到的是由 3 个正在分片和 repliceSet 的“服务器”分片的集合?
在 40'000 端口上使用 mongos,我可以进行接口和查询吗?
您创建了一个分片,它是一个三成员副本集和一个配置服务器作为一个单成员副本集。每个分片和每个配置服务器都必须是一个副本集。
如果您想获得多个分片,则必须为 --replSet
使用不同的名称,例如rs1, rs2, rs3.
在生产中,除非您不关心可用性,否则不应创建单成员副本集。通常你会创建另外 3 个分片节点,然后每个分片也被复制。
也许可以按照本教程进行操作 Deploy a Sharded Cluster
副本集和分片有不同的用途:
- 副本集提供冗余(如果一个节点发生故障,数据也在其他节点上)
- 分片提供可扩展性(如果一台服务器的数据太多,可以将其分散到多台服务器上)
设置分片集群时,每个分片(理论上)可以由单个节点或副本集支持。 MongoDB 目前要求分片由副本集支持,在旧版本中也允许单节点。
因此:
- 单节点分片集群 = 无冗余。每个文档都存储一次,如果任何单个节点发生故障,您将丢失数据。但是您可以根据部署的分片数量获得可扩展性。
- 具有支持副本集的分片集群 = 可扩展性和冗余性。
我已经看到,为了进行数据分发,我可以在 ReplicaSet 或 Sharding 之间进行选择。
使用带有这些参数的 mongodb 代码 --shardsvr --replSet
.
mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost
我正在做的是制作一个分片服务器,它也是一个副本集,或者我只是在做一个分片? 如果我两者都不做,我应该写什么?
编辑
mongod --shardsvr --port 27020 --replSet rs1 --dbpath C:\data\data4 --bind_ip localhost
mongod --shardsvr --port 27021 --replSet rs1 --dbpath C:\data\data5 --bind_ip localhost
mongod --shardsvr --port 27022 --replSet rs1 --dbpath C:\data\data6 --bind_ip localhost
mongos --port 40000 --configdb rs0/localhost:27017
mongo --port 40000
rs.initiate( { _id : "rs1", members: [ { _id: 0, host: "localhost:27020" }, { _id: 1, host: "localhost:27021" }, { _id: 2, host: "localhost:27022" } ] })
sh.addShard( "rs1/localhost:27020,localhost:27021,localhost:27022")
sh.enableSharding("db")
sh.shardCollection("db.collection", { "_id" : 1 } )
当我执行这种代码时,我得到的是由 3 个正在分片和 repliceSet 的“服务器”分片的集合? 在 40'000 端口上使用 mongos,我可以进行接口和查询吗?
您创建了一个分片,它是一个三成员副本集和一个配置服务器作为一个单成员副本集。每个分片和每个配置服务器都必须是一个副本集。
如果您想获得多个分片,则必须为 --replSet
使用不同的名称,例如rs1, rs2, rs3.
在生产中,除非您不关心可用性,否则不应创建单成员副本集。通常你会创建另外 3 个分片节点,然后每个分片也被复制。
也许可以按照本教程进行操作 Deploy a Sharded Cluster
副本集和分片有不同的用途:
- 副本集提供冗余(如果一个节点发生故障,数据也在其他节点上)
- 分片提供可扩展性(如果一台服务器的数据太多,可以将其分散到多台服务器上)
设置分片集群时,每个分片(理论上)可以由单个节点或副本集支持。 MongoDB 目前要求分片由副本集支持,在旧版本中也允许单节点。
因此:
- 单节点分片集群 = 无冗余。每个文档都存储一次,如果任何单个节点发生故障,您将丢失数据。但是您可以根据部署的分片数量获得可扩展性。
- 具有支持副本集的分片集群 = 可扩展性和冗余性。