上篇咱们遗留了几个问题

1主节点是否能自己主动切换连接?

眼下须要手动切换

2主节点读写压力过大怎样解决

3从节点每一个上面的数据都是对数据库全量拷贝,从节点压力会不会过大

4数据压力达到机器支撑不了时候是否能自己主动扩展?

Nosql的产生是为了解决大数据量。高扩展,高性能,灵活数据模型。高可用性。可是光通过主从模型的架构是远远达不到上面几点的。因此。mongodb设计了副本集和分片的功能。咱们以下就来说说副本集

mongodb官方已经不建议使用主从模式,而是副本集进行取代。

IMPORTANT

Replica sets replace master-slave replication
for most use cases. If possible, use replicasets rather than master-slave replication for all new production deployments.This documentation remains to support legacy deployments and for archivalpurposes only.

来自 <http://docs.mongodb.org/master/core/master-slave/>

什么是副本集

副本集合(ReplicaSets)。是一个基于主/从复制机制的复制功能。但添加了自己主动故障转移和恢复特性。一个集群最多能够支持7个server。而且随意节点都能够是主节点。

全部的写操作都被分发到主节点。而读操作能够在不论什么节点上进行。

从图中能够发现,client连接到整个副本集,不关系详细哪一台server是否宕机。主server负责整个副本集的读写。

副本集定期同步数据。一旦主节点挂了。副本节点就会选举一个新主机作为主节点。

坏掉的节点修好后会自己主动扩充为副本节点。

怎样配置副本集

在一台机器上创建三个文件用户存放三台数据库,之后分别配置三台数据库,使他们的replset(复制集分别形成闭环)配置启动数据库。

配置启动參数

启动配置文件

mongoA.bat
mongod --configa.conf
mongoB.bat
mongod --configb.conf
mongodbC.bat
Mongod--config c.conf

登录数据库

ashell.bat
mongo 127.0.0.1:9000
b.shell.bat
mongo 127.0.0.1:9001
c.shell.bat
mongo 127.0.0.1:9002

初始化副本集

在三台机器上随意登陆一台机器输入例如以下命名回车

use admin
db.runCommand({"replSetInitiate":{
"_id":'child',
"members":[
{"_id":1,"host":"127.0.0.1:9000"},
{"_id":2,"host":"127.0.0.1:9001"},
{"_id":3,"host":"127.0.0.1:9002",},
]
}
})

查看集群状态

child:SECONDARY> rs.status()
{
"set" : "child",
"date" : ISODate("2015-08-16T07:43:36Z"),
"myState" : 2,
"syncingTo" : "127.0.0.1:9002",
"members" : [
{
"_id" : 1,
"name" : "127.0.0.1:9000",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 182,
"optime" : Timestamp(1439170908, 1),
"optimeDate" : ISODate("2015-08-10T01:41:48Z"),
"infoMessage" : "syncing to: 127.0.0.1:9002",
"self" : true
},
{
"_id" : 2,
"name" : "127.0.0.1:9001",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 7,
"optime" : Timestamp(1439170908, 1),
"optimeDate" : ISODate("2015-08-10T01:41:48Z"),
"lastHeartbeat" : ISODate("2015-08-16T07:43:36Z"),
"lastHeartbeatRecv" : ISODate("2015-08-16T07:43:35Z"),
"pingMs" : 2,
"lastHeartbeatMessage" : "syncing to: 127.0.0.1:9002",
"syncingTo" : "127.0.0.1:9002"
},
{
"_id" : 3,
"name" : "127.0.0.1:9002",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 8,
"optime" : Timestamp(1439170908, 1),
"optimeDate" : ISODate("2015-08-10T01:41:48Z"),
"lastHeartbeat" : ISODate("2015-08-16T07:43:35Z"),
"lastHeartbeatRecv" : ISODate("2015-08-16T07:43:36Z"),
"pingMs" : 772,
"electionTime" : Timestamp(1439711010, 1),
"electionDate" : ISODate("2015-08-16T07:43:30Z")
}
],
"ok" : 1 }

整个部分创建成功

副本集数据库測试

启动三个数据库查看仅仅有一个活跃节点其它为副本节点

停掉活跃点,我们查看活跃点

child:PRIMARY>show dbs

2015-08-16T15:51:21.667+0800Socket recv() errno:10053你的主机中的软件中止了一

个已建立的连接。127.0.0.1:9002

2015-08-16T15:51:21.669+0800SocketException: remote: 127.0.0.1:9002 error: 9001

再次连接数据库发现 活跃点已转移到
9000port

再将9002数据库开启

查看状态 9002数据库为备份点

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

以上说明我们的副本集已经搭建完毕

小结:

副本集解攻克了我们的故障转义功能。可是我们还是有一些问题 。从节点每一个上面的数据都是对数据库全量拷贝。从节点压力会不会过大?

数据压力大到机器支撑不了的时候是否能做到自己主动扩展?

最新文章

  1. bgp多线
  2. sql 日期格式汇总
  3. 忘记mysql root密码的解决方法
  4. iOS9 HTTP 不能正常使用的解决办法
  5. 【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型
  6. 不同版本mysql语句不兼容原因
  7. Overview Of Portal Registry And Content References
  8. Memcached使用
  9. 几本关于PHP安全的书
  10. HTML5区域范围文本框实例页面
  11. COMPACT 行记录格式
  12. sql server Convert 的函数的用法 转换成浮点数
  13. Mongodb基础知识----Mongodb权威指南阅读
  14. JS的单例模式
  15. golang的并发不等于并行
  16. js接收html传值
  17. 一个轻量级iOS安全框架:SSKeyChain
  18. JS的arguments
  19. Java【第八篇】面向对象之高级类特性
  20. 2018-2019-2 网络对抗技术 20165308 Exp1 PC平台逆向破解

热门文章

  1. java application指的是什么
  2. Java代码实现MySQL数据库的备份与还原
  3. Java基础学习总结(59)——30 个java编程技巧
  4. sql查询语句中on和where的区别
  5. myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
  6. error: could not install *smartsocket* listener: Address already in use 下午8:49 ADB server didn&#39;t ACK 下午8:49 * failed to start daemon * 下午8:49 error: cannot connect to daemon
  7. 设计模式实例(Lua)笔记之七(Decorator模式)
  8. intellij idea 打开两个 terminal
  9. lua简单类的实现
  10. jsp的凝视可能会影响页面载入速度