一、读写分离

从库能进行查询,这样可以分担主库的大量的查询请求。

  1、先向主库中插入一条测试数据

[root@localhost bin]# ./mongo --port 28010
MongoDB shell version: 1.8.1
connecting to: 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@localhost bin]# ./mongo --port 28011
MongoDB shell version: 1.8.1
connecting to: 127.0.0.1:28011/test
rs1:SECONDARY> show collections
Thu May 31 22:27:17 uncaught exception: error: { "$err" : "not master and slaveok=false",
"code" : 13435 }
rs1:SECONDARY>

查询报错,说明是个从库且不能执行查询的操作

    3、让从库可以读,分担主库的压力  

rs1:SECONDARY> db.getMongo().setSlaveOk()
not master and slaveok=false
rs1:SECONDARY> show collections
c1
system.indexes
rs1:SECONDARY> db.c1.find()
{ "_id" : ObjectId("4fc77f421137ea4fdb653b4a"), "age" : 30 }
rs1:SECONDARY>

我们做到了。

二、故障转移

复制集比传统的Master-Slave 有改进的地方就是他可以进行故障的自动转移,如果我们停掉复制集中的一个成员,那么剩余成员会再自动选举出一个成员,做为主库,例如:我们将28010 这个主库停掉,然后再看一下复制集的状态

测试:

1、kill 28010端口的MongoDB

[root@localhost bin]# ps aux|grep mongod
root 6706 1.6 6.9 463304 6168 Sl 21:49 0:26
/Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r0 --fork --port 28010
root 6733 0.4 6.7 430528 6044 ? Sl 21:50 0:06
/Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r1 --fork --port 28011
root 6747 0.4 4.7 431548 4260 ? Sl 21:50 0:06
/Apps/mongo/bin/mongod --replSet rs1 --keyFile /data/key/r2 --fork --port 28012
root 7019 0.0 0.7 5064 684 pts/2 S+ 22:16 0:00 grep mongod
[root@localhost bin]# kill -9 6706

2、再查看复制集状态

[root@localhost bin]# ./mongo --port 28011
MongoDB shell version: 1.8.1
connecting to: 127.0.0.1:28011/test
rs1:SECONDARY> rs.status()
{
"set" : "rs1",
"date" : ISODate("2012-05-31T14:17:03Z"),
"myState" : 2,
"members" : [
{
"_id" : 0,
"name" : "localhost:28010",
"health" : 0,
"state" : 1,
"stateStr" : "(not reachable/healthy)",
"uptime" : 0,
"optime" : {
"t" : 1338472279000,
"i" : 1
},
"optimeDate" : ISODate("2012-05-31T13:51:19Z"),
"lastHeartbeat" : ISODate("2012-05-31T14:16:42Z"),
"errmsg" : "socket exception"
},
{
"_id" : 1,
"name" : "localhost:28011",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"optime" : {
"t" : 1338472279000,
"i" : 1
},
"optimeDate" : ISODate("2012-05-31T13:51:19Z"),
"self" : true
},
{
"_id" : 2,
"name" : "localhost:28012",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1528,
"optime" : {
"t" : 1338472279000,
"i" : 1
},
"optimeDate" : ISODate("2012-05-31T13:51:19Z"),
"lastHeartbeat" : ISODate("2012-05-31T14:17:02Z")
}
],
"ok" : 1
}
rs1:SECONDARY>
"stateStr" : "(not reachable/healthy)",

可以看到28010 这个端口的MongoDB 出现了异常,而系统自动选举了28012 这个端口为主,所以这样的故障处理机制,能将系统的稳定性大大提高。

最新文章

  1. memcache的内存管理探微
  2. linux菜鸟日记(3)
  3. 100 个 Linux 常用命令大全
  4. 部署私有的Nuget服务器
  5. 01-C#入门(函数一)
  6. Jenkins_多项目构建(二):使用Maven聚集关系
  7. MySQL修改root密码的各种方法整理
  8. IP地址在数据库里面的存储方式
  9. 包括post,get请求(http,https)的HttpClientUtils
  10. 【EntityFramwork--处理数据并发问题】
  11. asp:保留两位小数:
  12. unix的发展
  13. CSS 背景图像 填充部分元素示例
  14. 潭州课堂25班:Ph201805201 第十五课 迭代器,生成器 (课堂笔记)
  15. 【Python】多线程-1
  16. RSA加密工具类(非对称加密算法)
  17. JavaScript学习总结(七)——JavaScript函数(function)
  18. 很详细的curl命令使用大全
  19. TensorFlow人脸识别
  20. 封装ajax方法

热门文章

  1. python学习之logging
  2. python 数据库查询结果转对象
  3. python 安装相关命令-汇总
  4. 安装Visual C ++进行跨平台移动开发
  5. java里监听相关ActionListene的理解。========此代码是错误的,
  6. <转>CentOS 7 安装配置 NFS
  7. zabbix 在linux上安装以及一些配置
  8. C#使用自定义字体
  9. Angular2快速入门-3.多个组件(分离新闻列表页和详细页)
  10. List去重与排序