Windows-部署分片集群

建议查阅官方文档来操作  https://docs.mongodb.com/manual/tutorial/deploy-shard-cluster/

参考文档 https://blog.csdn.net/zlp1992/article/details/77053462

参考文档 https://www.runoob.com/mongodb/mongodb-sharding.html

前提 关闭防火墙

本教程涉及创建一个新的分片集群

它由

  a mongos、路由服务器

  the config server replica set(配置服务器副本集)

  shard replica sets(分片服务器副本集)

组成。

一:创建配置服务器副本集a config server replica set 

  对于生产部署,部署至少包含三个成员的配置服务器副本集。出于测试目的,您可以创建一个单成员副本集。

  这里只部署了一个分片(rs-a),分片包含三个复制集,2个配置服务器复制集、一个路由服务器,因此对应的数据目录如下

 包含三个复制集的分片 : 3000 ,3001 ,3002

配置服务器  包含2个实例的复制集  27019,27020

配置路由服务器  27018

一:配置分片复制集  包含三个复制集的分片

step1:

  Firstmember: 新打开一个dos窗口

mkdir c:softwareMongoDBdata
s-a-0
mongod --port 3000 --shardsvr --replSet rs-a --dbpath "c:softwareMongoDBdata
s-a-0"

  Secondmember:新打开一个dos窗口

mkdir c:softwareMongoDBdata
s-a-1
mongod --port 3001 --shardsvr --replSet rs-a --dbpath "c:softwareMongoDBdata
s-a-1"

  Thirdmember:新打开一个dos窗口

mkdir c:softwareMongoDBdata
s-a-2
mongod --port 3002 --shardsvr --replSet rs-a --dbpath "c:softwareMongoDBdata
s-a-2"

这里 --shardsvr要求使用分片,--replSet要是使用复制集,复制集名称为 rs-a,这时我们便创建了包含三个复制集的一个分片,注意复制集名字要一致

 上面只是创建了三个可以分片和使用复制集的服务器,我们需要对其初始化设置复制集中的primary和secondary

step2 :

  初始化,配置Primary和Secondary复制集
  接着再开一个窗口,连接其中的一个服务器,使用命令:mongo --port 3000

C:Users78204>mongo --port 3000
MongoDB shell version v4.0.9
connecting to: mongodb://127.0.0.1:3000/?gssapiServiceName=mongodb
View Code

  连接后使用命令 rs.initiate() 初始化,过一会儿,此实例便成为了Primary

> rsconf = {
... ...   _id: "rs-a",
... ...   members: [
... ...     {
... ...      _id: 0,
... ...      host: "localhost:3000"
... ...     },
... ...     {
... ...      _id: 1,
... ...      host: "localhost:3001"
... ...     },
... ...     {
... ...      _id: 2,
... ...      host: "localhost:3002"
... ...     }
... ...    ]
... ... }
{
        "_id" : "rs-a",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:3000"
                },
                {
                        "_id" : 1,
                        "host" : "localhost:3001"
                },
                {
                        "_id" : 2,
                        "host" : "localhost:3002"
                }
        ]
}
> rs.initiate(rsconf)
{
        "ok" : 1,
        "operationTime" : Timestamp(1562314329, 1),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1562314329, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
View Code

  可以使用 rs.isMaster()和rs.status()查看对应情况

二:配置 配置服务器  包含2个实例的复制集

step1: 

  Firstmember:

mkdir c:softwareMongoDBdataconfig0
mongod --port 27019 --configsvr --replSet rs-conf --dbpath "c:softwareMongoDBdataconfig0"

  Secondmember:

mkdir c:softwareMongoDBdataconfig1
mongod --port 27020 --configsvr --replSet rs-conf --dbpath "c:softwareMongoDBdataconfig1"

step2 :

  这里,复制集名称为rs-conf,同样我们需要按照前述配置分片复制集那样使用 rs.initiate()等命令进行配置  登录其中一个服务器mongo --port 27019

C:Users78204>mongo --port 27019
...省略日志信息
> rsconf = {
... ...   _id: "rs-conf",
... ...   members: [
... ...     {
... ...      _id: 0,
... ...      host: "localhost:27019"
... ...     },
... ...     {
... ...      _id: 1,
... ...      host: "localhost:27020"
... ...     }
... ...    ]
... ... }
{
        "_id" : "rs-conf",
        "members" : [
                {
                        "_id" : 0,
                        "host" : "localhost:27019"
                },
                {
                        "_id" : 1,
                        "host" : "localhost:27020"
                }
        ]
}
>
>
>
> rs.initiate(rsconf)
{
        "ok" : 1,
        "operationTime" : Timestamp(1562314606, 1),
        "$gleStats" : {
                "lastOpTime" : Timestamp(1562314606, 1),
                "electionId" : ObjectId("000000000000000000000000")
        },
        "lastCommittedOpTime" : Timestamp(0, 0),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1562314606, 1),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
View Code

三 :配置路由服务器 router server 

step1: 

  新打开一个dos窗口

C:Users78204>mongos --configdb rs-conf/localhost:27019,localhost:27020 --port 27018

四:添加创建的分片 

step1:

  新打开一个窗口登录路由服务器

C:Users78204>mongo --port 27018

  接着执行添加分片命令  sh.addShard("rs-a/localhost:3000,localhost:3001,localhost:3002")

mongos> sh.addShard("rs-a/localhost:3000,localhost:3001,localhost:3002")
{
        "shardAdded" : "rs-a",
        "ok" : 1,
        "operationTime" : Timestamp(1562314727, 8),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1562314727, 8),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos>

  使用sh.status()查看分片信息

mongos> sh.status()
--- Sharding Status ---
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5d1f077a36b300e597084a56")
  }
  shards:
        {  "_id" : "rs-a",  "host" : "rs-a/localhost:3000,localhost:3001,localhost:3002",  "state" : 1 }
  active mongoses:
        "4.0.9" : 1
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }

mongos>

五:为数据库启用分片

step1:

  在对集合进行切分之前,必须为集合的数据库启用切分。为数据库启用分片不会重新分发数据,但是可以对数据库中的集合进行分片。

  为数据库启用分片之后,MongoDB为数据库分配一个主分片,MongoDB将所有数据存储在这个数据库中

  sh.enableSharding("<database>")

mongos> sh.enableSharding("zt_power")
{
        "ok" : 1,
        "operationTime" : Timestamp(1562315445, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1562315445, 5),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos>

六:对集合进行分片

step1:

  要分割一个集合,使用sh.shardCollection()方法。必须指定集合的完整名称空间和包含切分键的文档。前提是数据库必须启用分片。

  您选择的切分键会影响切分的效率,以及您利用某些切分特性(如区域)的能力

  如果集合已经包含数据,在使用shardCollection()之前,必须使用db.collection.createIndex()方法在切分键上创建索引

  如果集合为空,MongoDB将创建索引作为sh.shardCollection()的一部分。

  以下操作对目标集合进行切分:

  sh.shardCollection("<database>.<collection>", { <key> : <direction> } )

  如下是对zt_power库的otherData集合进行分片  分片键是terminalTime  1表示肯定

mongos> sh.shardCollection("zt_power.otherData", { terminalTime : 1 } )
{
        "collectionsharded" : "zt_power.otherData",
        "collectionUUID" : UUID("6ce80157-fe4b-472b-878a-7bc191b91e21"),
        "ok" : 1,
        "operationTime" : Timestamp(1562315964, 14),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1562315964, 14),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}
mongos>

七:登录客户端的配置服务器查看分片信息

八:由于只有一个分片  这个分片由三个复制集组成 现在查看复制集的一致性

登录主节点 3000 在主节点插入数据

C:Users78204>mongo --port 3000
rs-a:PRIMARY> for(var i=0;i<15010;i++){ db.otherData.insert({"rulerCode" : "04000103","terminalTime" : "2019-06-20 19:19:39"})}
WriteResult({ "nInserted" : 1 })
rs-a:PRIMARY> db.otherData.count()
15011
rs-a:PRIMARY>
View Code

登录俩个辅助节点 3001和3001 查看数据个数

rs-a:SECONDARY>mongo --port 3001
rs-a:SECONDARY> db.getMongo().setSlaveOk()
rs-a:SECONDARY> db.otherData.count()
15011
View Code
rs-a:SECONDARY>mongo --port 3002
rs-a:SECONDARY> db.getMongo().setSlaveOk()
rs-a:SECONDARY> db.otherData.count()
15011
View Code

结论:这个分片的三个副本集  其中一个主节点增加数据 来个辅助节点同步数据 保持了数据的一致性

原文地址:https://www.cnblogs.com/s6-b/p/11134192.html