zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    Java 8 ThreadLocal 源码解析
    RabbitMQ 消息中间件
    MySQL 索引与查询优化
    MySQL EXPLAIN 命令: 查看查询执行计划
    迎来送往,开启新篇章
    mockito的用法
    推荐一个计算机的科普视频
    Golang查缺补漏(一)
    2019定个小目标
    golang 中的指针
  • 原文地址:https://www.cnblogs.com/s6-b/p/11134192.html
Copyright © 2011-2022 走看看