您的位置:首页 > 编程语言 > Go语言

Mongo的Replica Sets (复制集)的配置全过程和心得体会

2012-02-19 14:42 381 查看
一、MongoDB Replica Sets(副本集)简单的说就是有自动故障恢复功能的主从集群,主从集群和副本集的最为明显的区别是副本集没有固定的"主节点":整个集群会选举出来一个"主节点"当其不能正常工作时则变更到其他的节点,提高了系统的稳定性。

MongoDB Replica Sets的架构如图所示:



如上图所示,MongoDB Replica Sets的结构类似于以集群,完全可以把他当成一个集群,因为他确实与集群实现的作用是一样的:如果其中一个节点出现故障,其他的节点会马上将业务接管过来。而无需停机操作

二、MongoDB Replica Sets的配置步骤:

1:首先要做是启动三个节点

介绍一下涉及到的参数

--oplogSize 日志操作文件的大

--dbpath 数据文件路径

--logpath 日志文件路径

--port 端口号,默认是27017.我这里使用的也是这个端口号.

--replSet 复制集的名字,一个replica sets中的每个节点的这个参数都要用一个复制集名字,这里是test.

--replSet test/ 这个后面跟的是其他standard节点的ip和端口

--maxConns 最大连接数

--fork 后台运行

--logappend 日志文件循环使用,如果日志文件已满,那么新日志覆盖最久日志。

--keyFile 标识同一集群的认证私钥

其中在启动节点时一定要加上oplogSize 的参数 为其设置大小,不然在64位操作系统上的mongodb,oplogs都相当大-可能是5%的磁盘空间,要根据情况设置个合理的值。

2:启动三个节点

启动第一个节点:/usr/local/mongodb/bin/mongod --port 28010 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r0/ --logpath=/sdb1/liujijun/data/log/r0.log --replSet rs1/127.0.0.1:28011,127.0.0.1:28012 --maxConns 800 --fork --logappend

启动第二个节点: /usr/local/mongodb/bin/mongod --port 28012 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r2/ --logpath=/sdb1/liujijun/data/log/r2.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28011 --maxConns 800 --fork --logappend

启动第三个节点:/usr/local/mongodb/bin/mongod --port 28011 --oplogSize 10 --dbpath=/sdb1/liujijun/data/data/r1/ --logpath=/sdb1/liujijun/data/log/r1.log --replSet rs1/127.0.0.1:28010,127.0.0.1:28012 --maxConns 800 --fork --logappend

3:链接任选一个节点

# /usr/local/mongodb/bin/mongo --port 28010

> config={_id : 'rs1',members : [{_id : 0, host : 'localhost:28010'},{_id : 1, host : 'localhost:28011'},{_id : 2, host : 'localhost:28012'}]}//配置节点信息

{

"_id" : "rs1",

"members" : [

{

"_id" : 0,

"host" : "localhost:28010"

},

{

"_id" : 1,

"host" : "localhost:28011"

},

{

"_id" : 2,

"host" : "localhost:28012"

}

]

}

> rs.initiate(config)//这个过程可能要等个一到两分钟的时间。

{

"info" : "Config now saved locally. Should come online in about a minute.",

"ok" : 1

}

> rs.status()

{

"set" : "rs1",

"date" : ISODate("2012-02-19T06:01:34Z"),

"myState" : 1,

"members" : [

{

"_id" : 0,

"name" : "localhost:28010",

"health" : 1,

"state" : 1,

"stateStr" : "PRIMARY",

"optime" : {

"t" : 1329630925000,

"i" : 1

},

"optimeDate" : ISODate("2012-02-19T05:55:25Z"),

"self" : true

},

{

"_id" : 1,

"name" : "localhost:28011",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 367,

"optime" : {

"t" : 1329630925000,

"i" : 1

},

"optimeDate" : ISODate("2012-02-19T05:55:25Z"),

"lastHeartbeat" : ISODate("2012-02-19T06:01:33Z"),

"pingMs" : 0

},

{

"_id" : 2,

"name" : "localhost:28012",

"health" : 1,

"state" : 2,

"stateStr" : "SECONDARY",

"uptime" : 367,

"optime" : {

"t" : 1329630925000,

"i" : 1

},

"optimeDate" : ISODate("2012-02-19T05:55:25Z"),

"lastHeartbeat" : ISODate("2012-02-19T06:01:33Z"),

"pingMs" : 0

}

],

"ok" : 1

}

PRIMARY>

配置到此结束。

备注:

如果要读写分离的话:db.getMongo().setSlaveOk()命令实现从库的可以查询的目的。在利用副本集时最好不要设置用户名和密码,因为这样会影响效率的,权限系统,非常耗资源,需要大量的运算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: