MongDB集群搭建

原创
2016/12/28 12:47
阅读数 8

MongoDB集群搭建,首先决定有几台Linux服务器完成,然后分配好端口,以防后面修改时忘记,而且还要在之前进行相关配置完成这些修改。我现在是在VM上安装了三台RatHat5.0后进行搭建。
本次搭建mongodb集群,预计有一个mongos,三个config,三个副本集名称分别为Shard1,Shard2,Shard3.每个复制集里有三个节点,一个primary(主节点),一个second(从节点),一个arbiter(仲裁节点)。一共要启动一个mongos进程和12个mongod实例;

一、规划进程数,文件日志及数据存放位置,设置ip并调通(/home/mongodb)。

本机 VM
1.Mongodb 1号 IP:192.168.1.153
2.Mongodb 2号 IP:192.168.1.154
3.Mongodb 3号 IP:192.168.1.155

1号 端口 :

21000—-》配置服务器
22001—-》shard1 文件存储位置: 数据:mongodb/shard1/data 日志:mongodb/shard1/logs/shard1.log
22002—-》shard2 文件存储位置: 数据:mongodb/shard2/data 日志:mongodb/shard2/logs/shard2.log
22003—-》shard3 文件存储位置: 数据:mongodb/shard3/data 日志:mongodb/shard3/logs/shard3.log

2号 端口 :

21000—-》配置服务器
22001—-》shard1 文件存储位置: 数据:mongodb/shard1/data 日志:mongodb/shard1/logs/shard1.log
22002—-》shard2 文件存储位置: 数据:mongodb/shard2/data 日志:mongodb/shard2/logs/shard2.log
22003—-》shard3 文件存储位置: 数据:mongodb/shard3/data 日志:mongodb/shard3/logs/shard3.log

3号 端口 :

21000—-》配置服务器
22001—-》shard1 文件存储位置: 数据:mongodb/shard1/data 日志:mongodb/shard1/logs/shard1.log
22002—-》shard2 文件存储位置: 数据:mongodb/shard2/data 日志:mongodb/shard2/logs/shard2.log
22003—-》shard3 文件存储位置: 数据:mongodb/shard3/data 日志:mongodb/shard3/logs/shard3.log
20000 端口 mongos 路由

二、为每台Linux上通过预设的端口启动实例

启动配置服务器: (由于现实问题 下面的横杠均为两个横杠!!!!!)

./bin/mongod –configsvr –dbpath config/data –port 21000 –logpath config/log/config.log –fork

启动Shard1:

./bin/mongod –shardsvr –replSet shard1 –port 22001 –dbpath shard1/data –logpath shard1/log/shard1.log –fork –nojournal –oplogSize 10

启动Shard2:

./bin/mongod –shardsvr –replSet shard2 –port 22002 –dbpath shard2/data –logpath shard2/log/shard2.log –fork –nojournal –oplogSize 10

启动Shard3:

./bin/mongod –shardsvr –replSet shard3 –port 22003 –dbpath shard3/data –logpath shard3/log/shard3.log –fork –nojournal –oplogSize 10

启动mongos:

./bin/mongos –configdb 192.168.153:21000,192.168.1.154:21000,192.168.1.155:21000 –port 20000 –logpath /data/mongodbtest/mongos/log/mongos.log –fork

三、配置复制集

首先配置第一个复制集:

./bin/mongo 127.0.0.1:22001

use admin
config = { _id:”shard1”, members:[
{_id:0,host:”192.168.1.153:22001”},
{_id:1,host:”192.168.1.154:22001”},
{_id:2,host:”192.168.1.155:22001”,arbiterOnly:true}
]
}
rs.initiate(config);

配置第二个复制集:

./bin/mongo 127.0.0.1:22002

use admin
config = { _id:”shard2”, members:[
{_id:0,host:”192.168.1.153:22002”},
{_id:1,host:”192.168.1.154:22002”},
{_id:2,host:”192.168.1.155:22002”,arbiterOnly:true}
]
}
rs.initiate(config);

配置第三个复制集:

./bin/mongo 127.0.0.1:22003

use admin
config = { _id:”shard3”, members:[
{_id:0,host:”192.168.1.153:22003”},
{_id:1,host:”192.168.1.154:22003”},
{_id:2,host:”192.168.1.155:22003”,arbiterOnly:true}
]
}
rs.initiate(config);

四、配置mongos

./bin/mongo  127.0.0.1:20000

use admin
db.runCommand( { addshard : “shard1/192.168.1.153:22001,192.168.1.154:22001,192.168.1.155:22001”});
db.runCommand( { addshard : “shard2/192.168.1.153:22002,192.168.1.154:22002,192.168.1.155:22002”});
db.runCommand( { addshard : “shard3/192.168.1.153:22003,192.168.1.154:22003,192.168.1.155:22003”});
db.runCommand( { listshards : 1 } );

这里写图片描述

五、数据自动分片

db.runCommand( { enablesharding :”testdb”});

让指定的数据库打开分片功能

db.runCommand( { shardcollection : “testdb.table1”,key : {id: 1} } )

指定数据库里需要分片的集合和片键(指定id作为分片依据)

六、测试数据分片结果

for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,”test1”:”testval1”});
db.table1.stats();
{
“sharded” : true,
“paddingFactorNote” : “paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.”,
“userFlags” : 1,
“capped” : false,
“ns” : “testdb.table1”,
“count” : 100000,
“numExtents” : 9,
“size” : 11200000,
“storageSize” : 22523904,
“totalIndexSize” : 6107472,
“indexSizes” : {
id” : 3278576,
“id_1” : 2828896
},
“avgObjSize” : 112,
“nindexes” : 2,
“nchunks” : 3,
“shards” : {
“shard1” : {
“ns” : “testdb.table1”,
“count” : 99991,
“size” : 11198992,
“avgObjSize” : 112,
“numExtents” : 7,
“storageSize” : 22507520,
“lastExtentSize” : 11325440,
“paddingFactor” : 1,
“paddingFactorNote” : “paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.”,
“userFlags” : 1,
“capped” : false,
“nindexes” : 2,
“totalIndexSize” : 6074768,
“indexSizes” : {
id” : 3262224,
“id_1” : 2812544
},
“ok” : 1,
“$gleStats” : {
“lastOpTime” : Timestamp(0, 0),
“electionId” : ObjectId(“56387ddcf2c57c13bbac20ab”)
}
},
“shard2” : {
“ns” : “testdb.table1”,
“count” : 1,
“size” : 112,
“avgObjSize” : 112,
“numExtents” : 1,
“storageSize” : 8192,
“lastExtentSize” : 8192,
“paddingFactor” : 1,
“paddingFactorNote” : “paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.”,
“userFlags” : 1,
“capped” : false,
“nindexes” : 2,
“totalIndexSize” : 16352,
“indexSizes” : {
id” : 8176,
“id_1” : 8176
},
“ok” : 1
},
“shard3” : {
“ns” : “testdb.table1”,
“count” : 8,
“size” : 896,
“avgObjSize” : 112,
“numExtents” : 1,
“storageSize” : 8192,
“lastExtentSize” : 8192,
“paddingFactor” : 1,
“paddingFactorNote” : “paddingFactor is unused and unmaintained in 3.0. It remains hard coded to 1.0 for compatibility only.”,
“userFlags” : 1,
“capped” : false,
“nindexes” : 2,
“totalIndexSize” : 16352,
“indexSizes” : {
id” : 8176,
“id_1” : 8176
},
“ok” : 1
}
},
“ok” : 1
}

七、总结

通过以上结果可以看出,我的分片结果:一共写入100000条数据,第一个shard1上写入了99991条数据,在第二个shard2上写入8条数据,在第三个shard3上写入了一条。分片结果不是很理想。我个人认为是因为由于片键选择的标准问题。以后分片的标准要选择一个分片均匀的片键。好了,剩余问题以后再说,今天先说到这里。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部