zoukankan      html  css  js  c++  java
  • MongoDB分片搭建

    环境

    $ cat /etc/redhat-release 
    CentOS Linux release 7.0.1406 (Core) 
    $ uname -a
    Linux zhaopin-2-201 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
    $ mongo --version
    MongoDB shell version: 3.0.6
    
    node1: 172.30.2.201
    node2: 172.30.2.202
    node3: 172.30.2.203
    

    配置Shard Server

    • 在3个节点分别执行: *

    创建目录

    $ sudo mkdir -p /data/mongodb/{data/{sh0,sh1},backup/{sh0,sh1},log/{sh0,sh1},conf/{sh0,sh1}}
    

    准备配置文件

    • 第一个分片: *
    $ sudo vim /data/mongodb/conf/sh0/mongodb.conf
    # base
    port = 27010
    maxConns = 800 
    filePermissions = 0700
    fork = true
    noauth = true
    directoryperdb = true
    dbpath = /data/mongodb/data/sh0
    pidfilepath = /data/mongodb/data/sh0/mongodb.pid
    oplogSize = 10
    journal = true
    # security
    nohttpinterface = true
    rest = false
    # log 
    logpath = /data/mongodb/log/sh0/mongodb.log
    logRotate = rename
    logappend = true
    slowms = 50
    replSet = sh0 
    shardsvr = true
    
    • 第二个分片: *
    $ sudo vim /data/mongodb/conf/sh1/mongodb.conf
    # base
    port = 27011
    maxConns = 800 
    filePermissions = 0700
    fork = true
    noauth = true
    directoryperdb = true
    dbpath = /data/mongodb/data/sh1
    pidfilepath = /data/mongodb/data/sh1/mongodb.pid
    oplogSize = 10
    journal = true
    # security
    nohttpinterface = true
    rest = false
    # log
    logpath = /data/mongodb/log/sh1/mongodb.log
    logRotate = rename
    logappend = true
    slowms = 50
    replSet = sh1
    shardsvr = true
    

    启动Shard Server

    $ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 41492
    child process started successfully, parent exiting
    $ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 41509
    child process started successfully, parent exiting
    $ ps aux | grep mongo | grep -v grep
    root     41492  0.5  0.0 518016 54604 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
    root     41509  0.5  0.0 516988 51824 ?        Sl   10:09   0:00 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
    $ mongo --port 27010
    MongoDB shell version: 3.0.6
    connecting to: 127.0.0.1:27010/test
    >
    bye
    $ mongo --port 27011
    MongoDB shell version: 3.0.6
    connecting to: 127.0.0.1:27011/test
    >
    bye
    

    配置Config Server

    • 在3个节点分别执行: *

    创建目录

    $ sudo mkdir -p /data/mongodb/{data/cf0,backup/cf0,log/cf0,conf/cf0}
    

    准备配置文件

    $ sudo vim /data/mongodb/conf/cf0/config.conf
    # base
    port = 27000
    maxConns = 800
    filePermissions = 0700
    fork = true
    noauth = true
    directoryperdb = true
    dbpath = /data/mongodb/data/cf0
    pidfilepath = /data/mongodb/data/cf0/config.pid
    oplogSize = 10
    journal = true
    # security
    nohttpinterface = true
    rest = false
    # log
    logpath = /data/mongodb/log/cf0/config.log
    logRotate = rename
    logappend = true
    slowms = 50
    configsvr = true
    

    启动

    $ sudo /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 41759
    child process started successfully, parent exiting
    $ ps aux | grep mongo | grep -v grep
    root     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
    root     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
    root     41855  0.4  0.0 467828 51684 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
    

    配置Query Routers

    • 在3个节点分别执行: *

    创建目录

    $ sudo mkdir -p /data/mongodb/{data/ms0,backup/ms0,log/ms0,conf/ms0}
    

    准备配置文件

    $ sudo vim /data/mongodb/conf/ms0/mongos.conf
    # base
    port = 30000
    maxConns = 800
    filePermissions = 0700
    fork = true
    pidfilepath = /data/mongodb/data/ms0/mongos.pid
    # log
    logpath = /data/mongodb/log/ms0/mongos.log
    logRotate = rename
    logappend = true
    configdb = 172.30.2.201:27000,172.30.2.202:27000,172.30.2.203:27000
    

    启动

    $ sudo /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
    about to fork child process, waiting until server is ready for connections.
    forked process: 42233
    child process started successfully, parent exiting
    $ ps aux | grep mongo | grep -v grep
    root     41492  0.3  0.0 518016 54728 ?        Sl   10:09   0:06 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
    root     41509  0.3  0.0 518016 54760 ?        Sl   10:09   0:07 /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
    root     41855  0.4  0.0 546724 37812 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
    root     41870  0.4  0.0 546724 38188 ?        Sl   10:25   0:03 /opt/mongodb/bin/mongod --conf
    root     42233  0.5  0.0 233536 10188 ?        Sl   10:38   0:00 /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
    

    初始化副本集

    配置副本集的好处是为了高可用,配置单节点是我自己为了节省时间,后续添加节点和副本集的操作一样,分片的配置不需要修改,在任何一个节点执行,这里在node1上执行

    • 分片一: *
    $ mongo --port 27010
    MongoDB shell version: 3.0.6
    connecting to: 127.0.0.1:27010/test
    > use admin
    switched to db admin
    > cfg={_id:"sh0", members:[ {_id:0,host:"172.30.2.201:27010"}, {_id:1,host:"172.30.2.202:27010"}, {_id:2,host:"172.30.2.203:27010"} ] }
    {
            "_id" : "sh0",
            "members" : [
                    {
                            "_id" : 0,
                            "host" : "172.30.2.201:27010"
                    },
                    {
                            "_id" : 1,
                            "host" : "172.30.2.202:27010"
                    },
                    {
                            "_id" : 2,
                            "host" : "172.30.2.203:27010"
                    }
            ]
    }
    > rs.initiate( cfg );
    { "ok" : 1 }
    sh0:OTHER> rs.status()
    {
            "set" : "sh0",
            "date" : ISODate("2015-10-23T05:33:31.920Z"),
            "myState" : 1,
            "members" : [
                    {
                            "_id" : 0,
                            "name" : "172.30.2.201:27010",
                            "health" : 1,
                            "state" : 1,
                            "stateStr" : "PRIMARY",
                            "uptime" : 270,
                            "optime" : Timestamp(1445578404, 1),
                            "optimeDate" : ISODate("2015-10-23T05:33:24Z"),
                            "electionTime" : Timestamp(1445578408, 1),
                            "electionDate" : ISODate("2015-10-23T05:33:28Z"),
                            "configVersion" : 1,
                            "self" : true
                    },
                    {
                            "_id" : 1,
                            "name" : "172.30.2.202:27010",
                            "health" : 1,
                            "state" : 5,
                            "stateStr" : "STARTUP2",
                            "uptime" : 7,
                            "optime" : Timestamp(0, 0),
                            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                            "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"),
                            "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.295Z"),
                            "pingMs" : 1,
                            "configVersion" : 1
                    },
                    {
                            "_id" : 2,
                            "name" : "172.30.2.203:27010",
                            "health" : 1,
                            "state" : 5,
                            "stateStr" : "STARTUP2",
                            "uptime" : 7,
                            "optime" : Timestamp(0, 0),
                            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                            "lastHeartbeat" : ISODate("2015-10-23T05:33:30.289Z"),
                            "lastHeartbeatRecv" : ISODate("2015-10-23T05:33:30.293Z"),
                            "pingMs" : 1,
                            "configVersion" : 1
                    }
            ],
            "ok" : 1
    }
    sh0:PRIMARY>
    bye
    
    • 分片二: *
    $ mongo --port 27011
    MongoDB shell version: 3.0.6
    connecting to: 127.0.0.1:27011/test
    > use admin
    switched to db admin
    > cfg={_id:"sh1", members:[ {_id:0,host:"172.30.2.201:27011"}, {_id:1,host:"172.30.2.202:27011"}, {_id:2,host:"172.30.2.203:27011"} ] }
    {
            "_id" : "sh1",
            "members" : [
                    {
                            "_id" : 0,
                            "host" : "172.30.2.201:27011"
                    },
                    {
                            "_id" : 1,
                            "host" : "172.30.2.202:27011"
                    },
                    {
                            "_id" : 2,
                            "host" : "172.30.2.203:27011"
                    }
            ]
    }
    > rs.initiate( cfg );
    { "ok" : 1 }
    sh1:OTHER> rs.status();
    {
            "set" : "sh1",
            "date" : ISODate("2015-10-23T05:36:02.365Z"),
            "myState" : 1,
            "members" : [
                    {
                            "_id" : 0,
                            "name" : "172.30.2.201:27011",
                            "health" : 1,
                            "state" : 1,
                            "stateStr" : "PRIMARY",
                            "uptime" : 406,
                            "optime" : Timestamp(1445578557, 1),
                            "optimeDate" : ISODate("2015-10-23T05:35:57Z"),
                            "electionTime" : Timestamp(1445578561, 1),
                            "electionDate" : ISODate("2015-10-23T05:36:01Z"),
                            "configVersion" : 1,
                            "self" : true
                    },
                    {
                            "_id" : 1,
                            "name" : "172.30.2.202:27011",
                            "health" : 1,
                            "state" : 5,
                            "stateStr" : "STARTUP2",
                            "uptime" : 5,
                            "optime" : Timestamp(0, 0),
                            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                            "lastHeartbeat" : ISODate("2015-10-23T05:36:01.168Z"),
                            "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.175Z"),
                            "pingMs" : 0,
                            "configVersion" : 1
                    },
                    {
                            "_id" : 2,
                            "name" : "172.30.2.203:27011",
                            "health" : 1,
                            "state" : 5,
                            "stateStr" : "STARTUP2",
                            "uptime" : 5,
                            "optime" : Timestamp(0, 0),
                            "optimeDate" : ISODate("1970-01-01T00:00:00Z"),
                            "lastHeartbeat" : ISODate("2015-10-23T05:36:01.167Z"),
                            "lastHeartbeatRecv" : ISODate("2015-10-23T05:36:01.172Z"),
                            "pingMs" : 0,
                            "configVersion" : 1
                    }
            ],
            "ok" : 1
    }
    sh1:PRIMARY>
    bye
    

    配置分片

    $ mongo --port 30000
    MongoDB shell version: 3.0.6
    connecting to: 127.0.0.1:30000/test
    mongos> use admin;
    switched to db admin
    mongos> sh.addShard("sh0/172.30.2.201:27010,172.30.2.202:27010,172.30.2.203:27010");
    { "shardAdded" : "sh0", "ok" : 1 }
    mongos> sh.addShard("sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203:27011");
    { "shardAdded" : "sh1", "ok" : 1 }
    mongos> use mydb;
    switched to db mydb
    mongos> db.createCollection("test");
    {
            "ok" : 1,
            "$gleStats" : {
                    "lastOpTime" : Timestamp(1444358911, 1),
                    "electionId" : ObjectId("56172a4bc03d9b1667f8e928")
            }
    }
    mongos> sh.enableSharding("mydb");
    { "ok" : 1 }
    mongos> sh.shardCollection("mydb.test", {"_id":1});
    { "collectionsharded" : "mydb.test", "ok" : 1 }
    mongos> sh.status();
    --- Sharding Status ---
      sharding version: {
            "_id" : 1,
            "minCompatibleVersion" : 5,
            "currentVersion" : 6,
            "clusterId" : ObjectId("561728b4030ea038bcb57fa0")
    }
      shards:
            {  "_id" : "sh0",  "host" : "sh0/172.30.2.201:27010,172.30.2.202:27010,172.30.2.203:27010" }
            {  "_id" : "sh1",  "host" : "sh1/172.30.2.201:27011,172.30.2.202:27011,172.30.2.203:27011" }
      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" : "admin",  "partitioned" : false,  "primary" : "config" }
            {  "_id" : "mydb",  "partitioned" : true,  "primary" : "sh0" }
                    mydb.test
                            shard key: { "_id" : 1 }
                            chunks:
                                    sh0     1
                            { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : sh0 Timestamp(1, 0)
    

    可见分片已经配置完成了

    添加开机启动项

    $ sudo vim /etc/rc.local
    ulimit -SHn 65535
    /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh0/mongodb.conf
    /opt/mongodb/bin/mongod --config /data/mongodb/conf/sh1/mongodb.conf
    /opt/mongodb/bin/mongod --config /data/mongodb/conf/cf0/config.conf
    /opt/mongodb/bin/mongos --config /data/mongodb/conf/ms0/mongos.conf
    

    备注

    虽然也是3台机器,使用分片的好处是可以把两个分片的primary设置在不同的节点,这个可以分摊单节点的压力,当然有更多机器就可以把分片放到不同机器上。
    

    按照mongodb官网的要求, 需要多余多处理器需要关闭muna,以及其他参数 参加mongodb check list

    mongodb check list
    
  • 相关阅读:
    扩充Visual Studio 功能
    如何分层啊?
    DirectXInput
    关于分享
    消息机制
    C# 开启一个新进程,IE,打开一个URL,第一次总失败,刷新一下就好了
    远程调试IIS服务器的ASP.NET2.0网站
    IIS 用户 NT AUTHORITY\NETWORK SERVICE 登录失败解决方法
    SharePoint 2010微软Technet讲座第一讲笔记(2011年3月9日发布)
    IIS 未能加载文件或程序集 system.web.extensions解决方法
  • 原文地址:https://www.cnblogs.com/mikeguan/p/7297432.html
Copyright © 2011-2022 走看看