• MongoDB分布式集群搭建(分片加副本集)


    环境准备


    服务器

    环境搭建


    文件配置和目录添加

    新建目录的操作要在三台机器中进行,为配置服务器新建数据目录和日志目录

    mkdir -p $MONGODB_HOME/config/data
    mkdir -p $MONGODB_HOME/config/log
    

    为分片服务器新建数据目录和日志目录

    mkdir -p $MONGODB_HOME/shared1/data
    mkdir -p $MONGODB_HOME/shared1/log
    mkdir -p $MONGODB_HOME/shared2/data
    mkdir -p $MONGODB_HOME/shared2/log
    mkdir -p $MONGODB_HOME/shared3/data
    mkdir -p $MONGODB_HOME/shared3/log
    

    为路由服务器新建数据目录和日志目录(路由服务器只用到日志目录)

    mkdir -p $MONGODB_HOME/mongos/log
    
    

    配置服务器搭建

    在三台机器上做相同的配置

    #vim $MONGODB_HOME/conf/config.cfg

    ## 配置文件内容
    pidfilepath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/log/configsrv.pid
    dbpath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/data
    logpath=/root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/config/log/congigsrv.log
    logappend = true
    bind_ip = 0.0.0.0
    port = 21000
    fork = true
    
    #declare this is a config db of a cluster;
    configsvr = true
    
    #副本集名称
    replSet=configs
    
    #设置最大连接数
    maxConns=20000
    

    启动三台机器上的mongo实例,
    mongod -f $MONGODB_HOME/conf/config.cfg

    登录任意一台config服务器,进行初始化

    #mongo --port 21000
    
    config = {
      "_id": "configs",
      "members": [
        {
          "_id": 0,
          "host": "192.168.102.3:21000"
        },
        {
          "_id": 1,
          "host": "192.168.102.4:21000"
        },
        {
          "_id": 2,
          "host": "192.168.102.5:21000"
        }
      ]
    }
    

    分片服务器搭建

    每个分片服务都是有3台机器上的复制集组成,所以以下每个分片服务的配置要在三台机器上进行相同的操作

    第一个分片服务器的搭建

    新建配置文件

    #vim $MONGODB_HOME/conf/shared1.cfg

    #配置文件内容
    
    pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/log/shared1.pid
    dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/data
    logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared1/log/shared1.log
    logappend = true
    
    bind_ip = 0.0.0.0
    port = 27001
    fork = true
    
    #打开web监控
    httpinterface=true
    rest=true
    
    #副本集名称
    replSet=shared1
    
    #declare this is a shard db of a cluster;
    shardsvr = true
    
    #设置最大连接数
    maxConns=20000
    

    然后启动每个机器上的分片服务,
    mongod -f $MONGODB_HOME/conf/shared1.cfg

    登录任意分片服务器,进行初始化

    #mongo --port 27001
    config={
      "_id": "shared1",
      "members": [
        {
          "_id": 0,
          "host": "192.168.102.3:27001"
        },
        {
          "_id": 1,
          "host": "192.168.102.4:27001"
        },
        {
          "_id": 2,
          "host": "192.168.102.5:27001",
          "arbiterOnly": true
        }
      ]
    }
    
    

    第二个分片服务器的搭建

    新建配置文件

    #vim $MONGODB_HOME/conf/shared2.cfg
    pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/log/shared2.pid
    dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/data
    logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared2/log/shared2.log
    logappend = true
    
    bind_ip = 0.0.0.0
    port = 27002
    fork = true
    
    #打开web监控
    httpinterface=true
    rest=true
    
    #副本集名称
    replSet=shared2
    
    #declare this is a shard db of a cluster;
    shardsvr = true
    
    #设置最大连接数
    maxConns=20000
    

    然后启动每个机器上的分片服务,
    mongod -f $MONGODB_HOME/conf/shared2.cfg

    登录任意分片服务器,进行初始化

    #mongo --port 27002
    config={
      "_id": "shared2",
      "members": [
        {
          "_id": 0,
          "host": "192.168.102.3:27002"
        },
        {
          "_id": 1,
          "host": "192.168.102.4:27002",
          "arbiterOnly": true
        },
        {
          "_id": 2,
          "host": "192.168.102.5:27002"
        }
      ]
    }
    
    
    

    第三个分片服务器的搭建

    新建配置文件

    #vim $MONGODB_HOME/conf/shared3.cfg
    pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/log/shared3.pid
    dbpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/data
    logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/shared3/log/shared3.log
    logappend = true
    
    bind_ip = 0.0.0.0
    port = 27003
    fork = true
    
    #打开web监控
    httpinterface=true
    rest=true
    
    #副本集名称
    replSet=shared3
    
    #declare this is a shard db of a cluster;
    shardsvr = true
    
    #设置最大连接数
    maxConns=20000
    

    然后启动每个机器上的分片服务,
    mongod -f $MONGODB_HOME/conf/shared3.cfg

    登录任意分片服务器,进行初始化

    #mongo --port 27003
    config={
      "_id": "shared3",
      "members": [
        {
          "_id": 0,
          "host": "192.168.102.3:27003"
        },
        {
          "_id": 1,
          "host": "192.168.102.4:27003",
          "arbiterOnly": true
        },
        {
          "_id": 2,
          "host": "192.168.102.5:27003"
        }
      ]
    }
    
    
    

    路由服务器搭建

    路由服务器同样也是要在三台机器上做相同的配置和操作

    pidfilepath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/mongos/log/mongos.pid
    logpath = /root/softWare/mongodb3.4.7/mongodb-linux-x86_64-debian71-3.4.7/mongos/log/mongos.log
    logappend = true
    
    bind_ip = 0.0.0.0
    port = 20000
    fork = true
    
    #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
    configdb = configs/192.168.102.3:21000,192.168.102.4:21000,192.168.102.5:21000
    
    #设置最大连接数
    maxConns=20000
    
    

    登录mongos服务,在程序里面进行设置让分片生效

    #mongo --port 20000
    use admin
    sh.addShard("shared1/192.168.102.3:27001,192.168.102.4:27001,192.168.102.5:27001")
    sh.addShard("shared2/192.168.102.3:27002,192.168.102.4:27002,192.168.102.5:27002")
    sh.addShard("shared3/192.168.102.3:27003,192.168.102.4:27003,192.168.102.5:27003")
    
    

    指定相应的数据库与表的分片生效

    #指定testdb分片生效
    db.runCommand( { enablesharding :"testdb"});
    #指定数据库里需要分片的集合和片键
    db.runCommand( { shardcollection : "testdb.table1",key : {id: 1} } )
    
    

    分片测试


    登录mongos进行数据的插入。具体过程如下:

    mongo  192.168.102.3:20000
    #使用testdb
    use  testdb;
    #插入测试数据
    for (var i = 1; i <= 100000; i++)
    db.table1.save({id:i,"test1":"testval1"});
    #查看分片情况如下,部分无关信息省掉了
    db.table1.stats();
    
    {
            "sharded" : true,
            "ns" : "testdb.table1",
            "count" : 100000,
            "numExtents" : 13,
            "size" : 5600000,
            "storageSize" : 22372352,
            "totalIndexSize" : 6213760,
            "indexSizes" : {
                    "_id_" : 3335808,
                    "id_1" : 2877952
            },
            "avgObjSize" : 56,
            "nindexes" : 2,
            "nchunks" : 3,
            "shards" : {
                    "shard1" : {
                            "ns" : "testdb.table1",
                            "count" : 42183,
                            "size" : 0,
                            ...
                            "ok" : 1
                    },
                    "shard2" : {
                            "ns" : "testdb.table1",
                            "count" : 38937,
                            "size" : 2180472,
                            ...
                            "ok" : 1
                    },
                    "shard3" : {
                            "ns" : "testdb.table1",
                            "count" :18880,
                            "size" : 3419528,
                            ...
                            "ok" : 1
                    }
            },
            "ok" : 1
    }
    

    分片的key的设置会影响每个分片的数据量。

    集群维护


    启动集群

    启动集群的顺序是:
    1,启动配置服务。
    2,启动分片服务。
    3,启动路由服务。

    JackerWang 于2017年8月29日上午的广州


    个人技术站点

  • 相关阅读:
    YbtOJ:NOIP2020 模拟赛B组 Day10
    洛谷11月月赛Ⅱ-div.2
    P1494 [国家集训队]小Z的袜子
    [模板]莫队/P3901 数列找不同
    P4145 上帝造题的七分钟2 / 花神游历各国
    P4109 [HEOI2015]定价
    P4168 [Violet]蒲公英
    分块
    P3378 【模板】堆(code)
    网络基础——网络层
  • 原文地址:https://www.cnblogs.com/pin-wang/p/7470020.html
Copyright © 2020-2023  润新知