Mongodb3.3.6 CentOS7分片实验环境搭建

Mongodb3.3.6 CentOS7分片实验环境搭建

一、拓扑图


二、部署

1.Mongodb安装

3台服务器都安装mongodb,安装包拷到/usr/local/下,为了清晰展示,每个节点创建一个mongodb,共创建了4个,其中,masterslavearbiter搭建副本级。

2、创建单个分片副本级

1)在每个目录创建日志目录logs、数据目录data/db、配置目录conf

2)在每个conf目录编写配置文件mongd.conf

192.168.1.82

Master

port=10002

dbpath=/usr/local/mongodb-3.3.6_master/data/db

logpath=/usr/local/mongodb-3.3.6_master/logs/mongod.log

fork=true 

logappend=true

nohttpinterface=true

replSet=test1 #副本集名称

pidfilepath=/var/run/mongo_master.pid

bind_ip=192.168.1.82

 

 

Slave

port=10001

dbpath=/usr/local/mongodb-3.3.6_slave/data/db

logpath=/usr/local/mongodb-3.3.6_slave/logs/mongod.log

fork=true

logappend=true

nohttpinterface=true

replSet=test1

pidfilepath=/var/run/mongo_slave.pid

bind_ip=192.168.1.82

 

Arbiter

port=10000

dbpath=/usr/local/mongodb-3.3.6_arbiter/data/db

logpath=/usr/local/mongodb-3.3.6_arbiter/logs/mongod.log

fork=true

logappend=true

replSet=test1

nohttpinterface=true

pidfilepath=/var/run/mongo_arbiter.pid

bind_ip=192.168.1.82

 

3)分别启动mongodb

/usr/local/mongodb-3.3.6_master/bin/mongod-f ../conf/mongod.conf

/usr/local/mongodb-3.3.6_slave/bin/mongod-f ../conf/mongod.conf

/usr/local/mongodb-3.3.6_arbiter/bin/mongod-f ../conf/mongod.conf

4)配置副本级

进入mastermongo shell

#cd /usrl/local/mongodb-3.3.6_master/bin

#./mongo192.168.1.82:10002

切换到admin

>useadmin

>config={‘_id’:’test1’,‘members’:[ {‘_id’:0,’host’:'192.168.1.82:10002',’priority’:2},{‘_id’:1,’host’:'192.168.1.82:10001',’priority’:1},{‘_id’:2,’host’:'192.168.1.82:10000',’arbiterOnly’:true}]};

初始化副本

>rs.initiate(config)

查看集群状态

>rs.status()

test1:PRIMARY>rs.status()

{

 "set" : "test1",

 "date" :ISODate("2017-01-04T06:36:07.732Z"),

 "myState" : 1,

 "term" : NumberLong(9),

 "heartbeatIntervalMillis" :NumberLong(2000),

 "optimes" : {

        "lastCommittedOpTime" : {

               "ts" :Timestamp(1483511762, 1),

               "t" : NumberLong(9)

        },

        "appliedOpTime" : {

               "ts" :Timestamp(1483511762, 1),

               "t" : NumberLong(9)

        },

        "durableOpTime" : {

               "ts" :Timestamp(1483511762, 1),

               "t" : NumberLong(9)

        }

 },

 "members" : [

        {

               "_id" : 0,

               "name" :"192.168.1.82:10002",

               "health" : 1,

               "state" : 1,

               "stateStr" :"PRIMARY",

               "uptime" : 448,

               "optime" : {

                      "ts" :Timestamp(1483511762, 1),

                      "t" :NumberLong(9)

               },

               "optimeDate" :ISODate("2017-01-04T06:36:02Z"),

               "electionTime" :Timestamp(1483511352, 1),

               "electionDate" :ISODate("2017-01-04T06:29:12Z"),

               "configVersion" : 3,

               "self" : true

        },

        {

               "_id" : 1,

               "name" :"192.168.1.82:10001",

               "health": 1,

               "state" : 2,

               "stateStr" :"SECONDARY",

               "uptime" : 422,

               "optime" : {

                      "ts" :Timestamp(1483511762, 1),

                      "t" :NumberLong(9)

               },

               "optimeDurable" : {

                      "ts" :Timestamp(1483511762, 1),

                      "t" :NumberLong(9)

               },

               "optimeDate" :ISODate("2017-01-04T06:36:02Z"),

               "optimeDurableDate" :ISODate("2017-01-04T06:36:02Z"),

               "lastHeartbeat" :ISODate("2017-01-04T06:36:06.320Z"),

               "lastHeartbeatRecv" :ISODate("2017-01-04T06:36:06.331Z"),

               "pingMs" :NumberLong(0),

               "syncingTo": "192.168.1.82:10002",

               "configVersion" : 3

        },

        {

               "_id" : 2,

               "name" :"192.168.1.82:10000",

               "health" : 1,

               "state" : 7,

               "stateStr" :"ARBITER",

               "uptime" : 5,

               "lastHeartbeat" :ISODate("2017-01-04T06:36:06.328Z"),

               "lastHeartbeatRecv" :ISODate("2017-01-04T06:36:07.465Z"),

               "pingMs" :NumberLong(1),

               "configVersion" : 3

        }

 ],

 "ok" : 1

}

192.168.1.83192.168.1.167操作相同,注意修改副本级名称和IP

 

3.创建configdb副本集

确认好3台服务器都创建好configmongodb,这也是新版本分片和老版本区别。

编辑配置文件,3台服务器要保证一样

 

port=10003

dbpath=/usr/local/mongodb-3.3.6_config/data/db

logpath=/usr/local/mongodb-3.3.6_config/logs/mongod.log

fork=true

logappend=true

nohttpinterface=true

pidfilepath=/var/run/mongo_config.pid

configsvr=true

replSet=configsvr

 

同理,进入mongo shell,启动configdb的副本集配置,配置同上,记得修改副本名称和ip

 

4.创建配置mongos和开启分片

因在实验环境且mongos不存数据,就使用192.168.1.8210004mongodb没有创建,和master使用同一个了。

 

1)在conf目录创建配置文件,mongos.confmongod.confmaster的配置文件

配置信息如下:

port=10004

logpath=/usr/local/mongodb-3.3.6_master/logs/mongos.log

fork=true

logappend=true

pidfilepath=/var/run/mongo_mongos.pid

configdb=configsvr/192.168.1.82:10003,192.168.1.83:10003,192.168.1.167:10003

2)启动mongos

/usr/local/mongodb-3.3.6_master/bin/mongos –f  ../conf/mongos.conf

3)进入mongos shell,使用admin

#/usr/local/mongodb-3.3.6_master/bin/mongo 192.168.1.8210004

>user admin

4)串联mongos和分片副本级

>db.runCommand({addshard:’test1/192.168.1.82:10002,192.168.1.82:10000,192.168.1.82:10000’});

>db.runCommand({addshard:’test2/192.168.1.83:10002,192.168.1.83:10001,192.168.1.83:10000’});

>db.runCommand({addshard:’test1/192.168.1.167:10002,192.168.1.167:10001,192.168.1.167:10000’});

5)查看分配服务器配置

>db.runCommand({‘listshards’:1});

{

      "shards": [

             {

                    "_id": "test1",

                    "host": "test1/192.168.1.82:10001,192.168.1.82:10002"

             },

             {

                    "_id": "test2",

                    "host": "test2/192.168.1.83:10001,192.168.1.83:10002"

             },

             {

                    "_id": "test3",

                    "host": "test3/192.168.1.167:10001,192.168.1.167:10002"

             }

      ],

      "ok": 1

}

 

因为3台服务器的10000接口是仲裁节点,因此不显示。

 

5.指定数据库、集合分片生效

目前,配置服务器configdb,分片副本级服务,mongos服务都已经串联起来了,下面在mongos shell测试生效

  1. 指定数据库分片生效,以名称为testdb的库为例

    >db.runCommand({enablesharding:’testdb’})

2)指定数据库里需要分片的集合和片键,集合以table1为例,片键以id为例

  >db.runCommand({shardcollection:’testdb.table1’,key:{‘id’:1}})

 

6.测试分配配置结果,在mongos shell里继续执行

1)切换testdb

>use testdb

2)插入100000条数据,内容随便写

>for(i=1;i<10000;i++)db.table1.insert({'id':i,'value':'hahaha'+i})

3)等待完成后,查看分片情况

>db.table1.stats()

显示内容太多,就不展示了

4)查看分配集状态

>db.printShardingStatus()

--- Sharding Status ---

 sharding version: {

      "_id": 1,

      "minCompatibleVersion": 5,

      "currentVersion": 6,

      "clusterId": ObjectId("5865d37aa57c58e11d7f2f50")

}

 shards:

      {  "_id" : "test1",  "host" : "test1/192.168.1.82:10001,192.168.1.82:10002"}

      {  "_id" : "test2",  "host" :"test2/192.168.1.83:10001,192.168.1.83:10002" }

      {  "_id" : "test3",  "host" :"test3/192.168.1.167:10001,192.168.1.167:10002" }

 active mongoses:

      "3.3.6": 1

 balancer:

      Currentlyenabled:  yes

      Currentlyrunning:  no

      Failedbalancer rounds in last 5 attempts:  0

      MigrationResults for the last 24 hours:

             Norecent migrations

 databases:

      {  "_id" : "testdb",  "primary" : "test2", "partitioned" : true }

             testdb.table1

                    shard key: { "id" : 1 }

                    unique:false

                    balancing:true

                    chunks:

                           test1       1

                           test2       1

                           test3       1

                    {"id" : { "$minKey" : 1 } } -->> { "id" : 2} on : test1 Timestamp(2, 0)

                    {"id" : 2 } -->> { "id" : 20 } on : test3 Timestamp(3,0)

                    {"id" : 20 } -->> { "id" : { "$maxKey" : 1 }} on : test2 Timestamp(3, 1)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值