一、读写分离
从库能进行查询,这样可以分担主库的大量的查询请求。
1、先向主库中插入一条测试数据
- [root@localhostbin]#./mongo--port28010
- MongoDBshellversion:1.8.1
- connectingto:127.0.0.1:28010/test
- rs1:PRIMARY>db.c1.insert({age:30})
- db.c2rs1:PRIMARY>db.c1.find()
- {"_id":ObjectId("4fc77f421137ea4fdb653b4a"),"age":30}
2、在从库中进行查询等操作
[root@localhostbin]#./mongo--port28011
- connectingto:127.0.0.1:28011/test
- rs1:SECONDARY>showcollections
- ThuMay3122:27:17uncaughtexception:error:{"$err":"notmasterandslaveok=false",
- "code":13435}
- rs1:SECONDARY>
查询报错,说明是个从库且不能执行查询的操作
3、让从库可以读,分担主库的压力
rs1:SECONDARY>db.getMongo().setSlaveOk()
- notmasterandslaveok=false
- rs1:SECONDARY>showcollections
- c1
- system.indexes
- rs1:SECONDARY>db.c1.find()
- {"_id":ObjectId("4fc77f421137ea4fdb653b4a"),"age":30}
- rs1:SECONDARY>
我们做到了。
二、故障转移
复制集比传统的Master-Slave 有改进的地方就是他可以进行故障的自动转移,如果我们停掉复制集中的一个成员,那么剩余成员会再自动选举出一个成员,做为主库,例如:我们将28010 这个主库停掉,然后再看一下复制集的状态
测试:
1、kill 28010端口的MongoDB
[root@localhostbin]#psaux|grepmongod
- root67061.66.94633046168Sl21:490:26
- /Apps/mongo/bin/mongod--replSetrs1--keyFile/data/key/r0--fork--port28010
- root67330.46.74305286044?Sl21:500:06
- /Apps/mongo/bin/mongod--replSetrs1--keyFile/data/key/r1--fork--port28011
- root67470.44.74315484260?Sl21:500:06
- /Apps/mongo/bin/mongod--replSetrs1--keyFile/data/key/r2--fork--port28012
- root70190.00.75064684pts/2S+22:160:00grepmongod
- [root@localhostbin]#kill-96706
2、再查看复制集状态
rs1:SECONDARY>rs.status()
- {
- "set":"rs1",
- "date":ISODate("2012-05-31T14:17:03Z"),248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "myState":2,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "members":[
- {
- "_id":0,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "name":"localhost:28010",108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "health":0,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "state":1,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "stateStr":"(notreachable/healthy)",248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "uptime":0,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "optime":{
- "t":1338472279000,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "i":1
- },108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "optimeDate":ISODate("2012-05-31T13:51:19Z"),248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "lastHeartbeat":ISODate("2012-05-31T14:16:42Z"),108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "errmsg":"socketexception"
- "_id":1,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "name":"localhost:28011",248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "health":1,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "state":2,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "stateStr":"SECONDARY",248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "self":true
- },108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "_id":2,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "name":"localhost:28012",108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "health":1,108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "stateStr":"PRIMARY",248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "uptime":1528,248); line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "lastHeartbeat":ISODate("2012-05-31T14:17:02Z")
- }
- ],108); list-style:decimal-leading-zero outside; color:inherit; line-height:21px; margin:0px!important; padding:0px 3px 0px 10px!important"> "ok":1
- }
- rs1:SECONDARY>
"stateStr":"(notreachable/healthy)",
可以看到28010 这个端口的MongoDB 出现了异常,而系统自动选举了28012 这个端口为主,所以这样的故障处理机制,能将系统的稳定性大大提高。
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|