Mongodb3.3.6 CentOS7分片实验环境搭建
Mongodb3.3.6 CentOS7分片实验环境搭建
一、拓扑图
二、部署
1.Mongodb安装
3台服务器都安装mongodb,安装包拷到/usr/local/下,为了清晰展示,每个节点创建一个mongodb,共创建了4个,其中,master、slave、arbiter搭建副本级。
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)配置副本级
进入master的mongo 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.83和192.168.1.167操作相同,注意修改副本级名称和IP。
3.创建configdb副本集
确认好3台服务器都创建好config的mongodb,这也是新版本分片和老版本区别。
编辑配置文件,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.82:10004,mongodb没有创建,和master使用同一个了。
1)在conf目录创建配置文件,mongos.conf,mongod.conf是master的配置文件
配置信息如下:
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.82:10004
>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测试生效
-
指定数据库分片生效,以名称为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)