• MongoDB分片集群配置实例


    环境:

    windows操作系统

    mongodb 3.4社区版

    目标:

    配置包含两个分片一个配置服务器的分片集群。其中每一个分片和一个配置服务器都被配置为一个单独的副本集。如下图所示:

    注:每一个分片都应该被配置在一个单独的服务器设备上。方便起见,本文在同一台机器通过不同端口模拟不同服务器上的组件,实现分片集群的配置。(生产环境的配置与此相同,只需使用自己的主机名、端口、路径等即可)。

    下图为本文配置的分片集群架构,其中的任意节点(副本集节点和分片节点)都是可扩展的。

    1、分别为config server、shard-1、shard-2创建数据目录

    每一个分片成员配置为一个副本集,因此每个组件下都包含自己的复制集数据目录。

    config server、shard-1、shard-2的复制集分别为rs1 、rs2、 rs3 。

    每个复制集各包含三个节点 rsx-0(主节点)、rsx-1、rsx-2 。

    其中config server 复制集数据目录如下:shard-1、shard-2分片的复制集目录与此类似、以此类推。

     

    每个成员的端口分配及启动配置如下:

    2、创建config server 复制集

    mongod --configsvr --replSet <setname> --dbpath <path>
    --configsvr 声明该实例是分片集群的配置服务数据库
    --replSet 指定复制集名称
    --dbpath 指定数据存放目录

    分别使用以下命令,启动并初始化config server副本集的三个成员:

    mongod --configsvr --port 27020 --dbpath E:devInstallMongoDBshardconsrv s1-0 --replSet rs1 --smallfiles --oplogSize 128

    mongod --configsvr --port 27021 --dbpath E:devInstallMongoDBshardconsrv s1-1 --replSet rs1 --smallfiles --oplogSize 128

    mongod --configsvr --port 27022 --dbpath E:devInstallMongoDBshardconsrv s1-2 --replSet rs1 --smallfiles --oplogSize 128

    初始化成功之后,使用mongo shell 连接到3个配置服务器之一:

    mongo --host <hostname> --port <port>

    连接成功之后,设置复制集及其节点:

    rs.initiate(
      {
        _id: "<replSetName>",
        configsvr: true,
        members: [
          { _id : 0, host : "127.0.0.1:27020" },
          { _id : 1, host : "127.0.0.1:27021" },
          { _id : 2, host : "127.0.0.1:27022" }
        ]
      }
    )

    复制集设置成功之后,使用rs.conf()即可查看相关状态:

    2、创建shard 复制集(以shard-1为例)

    mongod --shardsvr --replSet <replSetname>
    --shardsvr 声明此实例为集群的分片数据库实例
    --replSet 指定复制集名称

    分别使用以下命令,启动并初始化shard-1复制集的三个成员:

    shard-1:

    mongod --shardsvr --port 27023 --dbpath E:devInstallMongoDBshardshard-1 s2-0 --replSet rs2 --smallfiles --oplogSize 128

    mongod --shardsvr --port 27024 --dbpath E:devInstallMongoDBshardshard-1 s2-1 --replSet rs2 --smallfiles --oplogSize 128

    mongod --shardsvr --port 27025 --dbpath E:devInstallMongoDBshardshard-1 s2-2 --replSet rs2 --smallfiles --oplogSize 128

    初始化成功之后,,使用mongo shell 连接到3个分片服务器之一:

    mongo --host <hostname> --port <port>

    连接成功之后,设置复制集及其节点:

    rs.initiate(
      {
        _id : <replicaSetName>,
        members: [
          { _id : 0, host : "127.0.0.1:27023" },
          { _id : 1, host : "127.0.0.1:27024"},
          { _id : 2, host : "127.0.0.1:27025" }
        ]
      }
    )

    设置成功后,使用rs.status()查看复制集及各个节点状态:

    shard-2复制集配置同上。


    3、mongos配置
    启动连接到当前分片集群的mongos(路由)。需要使用 --configdb 选项来指定config server复制集。
    格式:<configReplSetName>/cfg1.example.net:27017,cfg2.example.net:27017,...
    在此,我们使用config server 复制集的第一个节点在27030端口上启动mongos路由服务:
    mongos --configdb "rs1/127.0.0.1:27020" --port 27030

    使用mongo shell连接到mongos实例:
    使用db.isMster()判断是否到mongos实例,如果存在 "msg":"isdbgrid",表明成功连接。


    4、将分片添加到集群中
    依然在连接到mongos的mongo shell窗口。
    使用sh.addShard("<replSetName>/s1-mongo1.example.net:27017")方法添加shard-1和shard-2两个分片到集群中。

              


    5、使用哈希分片对collection进行分区
       开启数据库分片功能:
            sh.enableSharding("<database>")

    指定数据库表中的字段key为分片键,并对其使用哈希分片策略。
             sh.shardCollection("<database>.<collection>", { <key> : "hashed" } )  

    到此即结束了分片集群的设置。

    例:开启shard数据的分片功能。指定student表的stuNum为哈希索引分片键。向student表插入7条数据记录。如下:

                  

        通过mongo 进入1分片shard-1,发现student表中包含5条数据。

                 

        通过mongo 进入2分片shard-2,发现student表中包含2条数据。

                 

    此分片集群中的student表中有7条数据。有5条在shard-1服务器上,2条在shard-2服务器上。(mongodb 通过计算stuNum字段的哈希值决定将其存储在哪一个分片上)
    使用mongos的用户不关心数据存储在哪里,用户只知道这个集群的数据库中有7条student数据记录。

  • 相关阅读:
    PHP一维数组转二维数组正则表达式
    PHP IDE选择标准
    PHP导出MySQL数据字典 Summer-Mysql-Dic
    PHP导入导出csv文件 Summer-CSV
    laravel学习
    php markdown 接口文档生成工具 SummerDoc
    AIX系统日志
    inotify+rsync实现实时同步
    shell数组应用
    Nginx缓存功能、防盗链、URL重写
  • 原文地址:https://www.cnblogs.com/ahguSH/p/7487394.html
Copyright © 2020-2023  润新知