MongoDB的sharding功能mongodb的端口是否启动,默认是28017,在启动服务器时,可以通过--port来指定ShardServer:mongod实例,用于存储实际的数据块,实际生产环境中一个shardserver角色可由几台机器组个一个relicaset承担,防止主机单点故障ConfigSer
MongoDB的sharding功能
mongodb的端口是否启动,默认是28017,在启动服务器时,可以通过--port来指定
Shard Server: mongod实例,用于存储实际的数据块,实际生产环境中一个shard
server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod实例,存储了整个Cluster Metadata,其中包括chunk信息。
Route Server:
mongos实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
如里shard是单台服务器,用>db.runCommand( { addshard
:“[:]”} )这样的命令加入,如果shard是replica
sets,用replicaSetName/[:port][,serverhostname2[:port],…]这样的命令
常用命令:
Show dbs 显示数据库名
show collections 显示当前数据库中的集合集
show users 显示当前数据库的用户
show profile 显示最后系统用时大于1ms的系统概要
use 切换到数据库
测试环境:
server1 server2 server3分别运行下面两行命令来启动mongodb
./mongod --fork --shardsvr --port 10001
--dbpath=/var/data/shard1/ --logpath=/var/data/shard1/log.log
--replSet shard1 --rest
./mongod --fork --shardsvr --port 10002 --dbpath
/var/data/shard2/ --logpath /var/data/shard2/log.log --replSet
shard2 --rest
选三台中任何一台机器运行如下命令,设置主从:
./mongo --port=10001
cOnfig= {_id: 'shard1', members: [
{_id:
0, host: '10.10.10.219:10001'},
{_id:
1, host: '10.10.10.214:10001'},
{_id:
2, host: '10.10.10.213:10001', arbiterOnly: true}
]}
> rs.initiate(config);初始化
./mongod Cport=10002
cOnfig= {_id: 'shard2', members: [
{_id:
0, host: '10.10.10.214:10002'},
{_id:
1, host: '10.10.10.219:10002'},
{_id:
2, host: '10.10.10.213:10002', arbiterOnly: true}
]}
rs.initiate(config);初始化
rs.status() 查看状态。
配置config
三台机器上都配或者只配一台都可以:config需要单独的数据存储位置和日志
./mongod --fork --configsvr --port 20000 --dbpath
/var/data/config/ --logpath /var/data/config/log.log --rest
配置用于客户前端接入的路由:
注:第一次运行mongos指定多个config可能会有问题,第一次运行mongos连接一个config。kill掉后在运行多个就没有问题了
./mongos Cconfigdb
10.10.10.219:20000,10.10.10.214:20000,10.10.10.213:20000 Cport
30000 CchunkSize 50 Clogpath /home/mongodb/data/mongos.log
Clogappend Cfork
创建分片:
在mongos服务器上创建分片:
./mongo --port=40000 (mongos端口)
usr admin 必须切换到admin数据库下面,默认登录进去后是test数据库
db.runCommand( { addshard :
'shard1/10.10.10.219:10001,10.10.10.214:10001,10.10.10.213:10001',name:"s2",maxsize:20480}
);
db.runCommand( { addshard :
'shard2/10.10.10.219:10002,10.10.10.214:10002,10.10.10.213:10002',name:"s2",maxsize:20480}
);
db.runCommand( { enablesharding: "" }
);配置数据库允许分片
db.runCommand({ shardcollection:'test.data', key:{_id:1}
}) 配置collection的shard key
db.printSharingStatus(); 查看整个集群的分片情况
db.runCommand({listshards:1});查看节点列表,如果能看到其他节点则配置成功
查看mongodb中replica set的状态
查看Replica Set的状态,执行rs.status()即可
> rs.status()
"set" :
"shard1",
"date" : "Wed
Nov 17 2010 19:45:13 GMT+0800 (CST)",
"myState" :
1,
"members" :
[
{
"_id"
: 0,
"name"
: "localhost.localdomain:10001",
"health"
: 1,
"state"
: 1,
"self"
: true
},
{
"_id"
: 1,
"name"
: "10.10.10.214:10001",
"health"
: 0,
"state"
: 2,
"uptime"
: 0,
"lastHeartbeat"
: "Tue Nov 16 2010 02:36:41 GMT+0800 (CST)",
"errmsg"
: "connect/transport error"
},
{
"_id"
: 2,
"name"
: "10.10.10.213:10001",
"health"
: 1,
"state"
: 2,
"uptime"
: 150190,
"lastHeartbeat"
: "Wed Nov 17 2010 19:45:12 GMT+0800 (CST)"
}
],
"ok" : 1
其中,health为1表明服务器正常,0表明服务器down了
state为1表明是Primary,2表明是Secondary,3是Recovering,7是Arbiter,8是Down
如果想在Secondary上find数据,需要先执行以下命令:
db.getMongo().setSlaveOk();
db.suv.find().count()
修改mongodb中replica set的配置
#增加新的成员
rs.add("192.168.95.210:10000");
#增加新的选举成员
rs.addArb("192.168.95.216:10001");