Mongodb的cluster搭建细则

简介: 此生产环境的Cluster模式,采用3台Server搭建完成。 Cluster中包括3种服务,最前端的mongos服务,提供router服务和负载均衡;然后是config服务,只要是保存数据服务的片信息和副本集信息;最后是每一个副本集服务。 应用访问的mongodb流程: 应用程序调用mongos服务 -> mongos服务去调用config服务(一个mongos服务可以绑定多个congfig服务)-> config服务查询自身已经存储的片信息,然后返回可以使用的数据副本集服务的IP及端口 -> 获取到信息
Cluster搭建细则 OS: ubuntu 11.04 Server 64bit MongodbVer: 2.20 Server:hy0603, hy0701, hy0702 注:Cluster中采用最低3台独立Server设计完成。为保证数据的安全和负载均衡,Mongodb完整数据采用切割3份(3片Mongod服务),每片数据采用2份副本集构成,且2份副本集分布在不同独立Server中。前端mongos访问接口并行开放3个,如有应用程序调用,可以一一对应,如应用程序只能是唯一绑定,可在中间加入负载均衡中间层,进行轮询访问mongos接口。 Mongodb Cluster逻辑架构图 搭建步骤: 1. 安装mongodb,直接下载二进制的文件,解压直接可以使用,本例是安装在/usr/local/mongodb 2. 创建数据存储文件(登陆到相应的服务器执行如下指令)
hy0603: mkdir -p /data/mongodb/{config,node01,node12}
hy0701: mkdir -p /data/mongodb/{config,node02,node13}
hy0702: mkdir -p /data/mongodb/{config,node03,node11}
3. 数据安装分片3份,每个片由2个副本集完成 hy0603
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node01 --port 10001 --replSet xserver01/hy0702:10002 --syslog --fork
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node12 --port 10002 --replSet xserver02/hy0701:10001 --syslog --fork
hy0701
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node02 --port 10001 --replSet xserver02/hy0603:10002 --syslog --fork
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node13 --port 10002 --replSet xserver03/hy0702:10001 --syslog --fork
hy0702
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node03 --port 10001 --replSet xserver03/hy0701:10002 --syslog --fork
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/node11 --port 10002 --replSet xserver01/hy0603:10001 --syslog --fork
注:启动之后会报错,因为没有进行初始化定义,最好按照副本集一个一个进行启动,启动完成一个副本集就进行一次初始化操作。 4. 初始化操作 登陆到每一个副本集的服务端,初始化只能做一次,只需要登陆到一个副本集的一台server里面,进行配置,他会自动同步到所有的本副本集的所有服务器。 hy0603
/usr/local/mongodb/bin/mongo hy0603:10001/admin config = { _id:"xserver01",members:[ { _id:1, host:"hy0603:10001"}, {_id:2,host:"hy0702:10002"} ] } rs.initiate(config);
hy0701
/usr/local/mongodb/bin/mongo hy0701:10001/admin
config = { _id:"xserver02",members:[ { _id:1, host:"hy0701:10001"}, {_id:2,host:"hy0603:10002"} ] }
rs.initiate(config);
hy0702
/usr/local/mongodb/bin/mongo hy0702:10001/admin
config = { _id:"xserver03",members:[ { _id:1, host:"hy0702:10001"}, {_id:2,host:"hy0701:10002"} ] }
rs.initiate(config);
检查成功:
Rs.status();
成功会有如下显示:
xserver03:PRIMARY> rs.status();
{
"set" : "xserver03",
"date" : ISODate("2012-10-09T08:40:57Z"),
"myState" : 1,
"members" : [
{
"_id" : 1,
"name" : "hy0702:10001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 9324,
"optime" : Timestamp(1349763004000, 1),
"optimeDate" : ISODate("2012-10-09T06:10:04Z"),
"self" : true
},
{
"_id" : 2,
"name" : "hy0701:10002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 9044,
"optime" : Timestamp(1349763004000, 1),
"optimeDate" : ISODate("2012-10-09T06:10:04Z"),
"lastHeartbeat" : ISODate("2012-10-09T08:40:56Z"),
"pingMs" : 1
}
],
"ok" : 1
}
5. 启动config服务 登陆到每一个服务器上,执行如下指令:
/usr/local/mongodb/bin/mongod --dbpath /data/mongodb/config --port 20000
6. 启动前端mongos服务 登陆到每一个服务器上,执行如下指令:
/usr/local/mongodb/bin/mongos --configdb hy0603:20000,hy0701:20000,hy0702:20000
7. 配置config服务 mongodb服务的配置和其他服务不一样,他的config配置也是以数据库的形式保存起来的,所有修改config服务的配置,就和执行数据库操作一样,一条一条添加。 而且不能登陆到config服务的服务器端进行配置,需要登录到mongos服务端,所以需要先把mongos服务启动起来之后再配置,而且这样陪着好处就是只需要新增一次,在mongos绑定的所有config服务端都会同步更新此操作。
db.runCommand({"addshard":"xserver01/hy0702:10002"});
db.runCommand({"addshard":"xserver02/hy0701:10001"});
db.runCommand({"addshard":"xserver03/hy0702:10001"});
新增片,如有副本集的情况,只需添加一次,不需要把每一个副本集节点都添加进去。 检查是否已经将所有片进入config服务:
use config
db.shards.find();
如果成功,会显示如下:
{ "_id" : "xserver01", "host" : "xserver01/hy0603:10001,hy0702:10002" }
{ "_id" : "xserver02", "host" : "xserver02/hy0603:10002,hy0701:10001" }
{ "_id" : "xserver03", "host" : "xserver03/hy0701:10002,hy0702:10001" }
以上显示已经完成3个片(副本集)的搭建,每个片有2个副本集。 启动分片服务:
db.runCommand({"enablesharding":"dataname"})
#dataname就是你需要分片的数据库的名字 以上的操作必须在admin的用户下才能执行,而且成功之后可以通过db.printShardingStatus()来进行查询,如果出现partitioned的值是true,表示切片是成功的。

你可能感兴趣的:(Mongodb的cluster搭建细则)