Mongodb集群之副本集

上篇咱们遗留了几个问题

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数据库为备份点

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

小结:

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

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

时间: 2024-10-11 02:05:39

Mongodb集群之副本集的相关文章

搭建mongodb集群(副本集+分片)

完整的搭建mongodb集群(副本集+分片)的例子... 准备四台机器,分别是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定如下: 将创建3个副本集,命名为shard1,shard2,shard3: 以上3个副本集作为3个分片: 每个副本集包含2个副本(主.辅): 副本分开存储,即shard1存在bluejoe1和bluejoe2上各一份...以此类推 将创建3个配置库实例,一台机器一个 bluejoe0上配置一个mongos(mongos一般可

MongoDB集群搭建-副本集

MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: http://www.cnblogs.com/zlp520/p/8088169.html 一.Replica Set方案(副本集或复制集): 1.搭建副本集有两种办法: 其一:在一台服务器上,通过文件的方式及端口号的方式来区分: 其二:找最少三台服务器,每台服务器都通过如下的配置: ip规划每台服务器担任的工作: 192.168.0.100:27017 主机 192.168.0.101:27017 副本集 192.168.0.

MongoDB健壮集群——用副本集做分片

1.    MongoDB分片+副本集 健壮的集群方案 多个配置服务器 多个mongos服务器  每个片都是副本集 正确设置w 架构图 说明: 1.   此实验环境在一台机器上通过不同port和dbpath实现启动不同的mongod实例 2.   总的9个mongod实例,分别做成shard1.shard2.shard3三组副本集,每组1主2从 3.   Mongos进程的数量不限,建议把mongos配置在每个应用服务器本机上,这样每个应用服务器就与自身的mongos进行通信,如果服务器不工作了

MongoDB学习笔记~Mongo集群和副本集

一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器Arbiter,当N>1时不需要Arbiter),它们之前是通过内部机制实现同步的,并且当Primary挂了后,它会通过内部的心跳机制,选举别一台Secondary成为一个Primary,与外界(Route)进行通讯. 工业标准 在标准上,我们的副本集推荐使用奇数个服务器(3,5,7,9),但经过我的测试,只要大

MongoDB之分片集群与复制集

分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据,只是缓存在内存中. ●分片用来存储数据块.数据集根据分片键将集合分割为数据块,存储在不同的分片上.在生产环境下,通常一个分片由一个复制集组成. ●配置服务器存储集群的元数据,包括数据与分片的映射关系,配置服务器一旦挂掉,集群将无法工作. 注意: ●当mongos重启时,会从配置服务器读取元数据更新自

MongoDB 2.6配置副本集,支持端口号修改和用户登录认证

mongoDB系列之(二):mongoDB 副本集 Mongodb2.6副本集验证部署和认证 副本集有以下特点: 1. 最小构成是:primary,secondary,arbiter,一般部署是:primary,2 secondary. 2. 成员数应该为奇数,如果为偶数的情况下添加arbiter,arbiter不保存数据,只投票. 3. 最大50 members,但是只能有 7 voting members,其他是non-voting members. 注意:配置mongo副本集的时候,不能先

Mongodb集群部署以及集群维护命令

Mongodb集群部署以及集群维护命令 http://lipeng200819861126-126-com.iteye.com/blog/1919271 mongodb分布式集群架构及监控配置 http://freeze.blog.51cto.com/1846439/884925/ 见文中: 七.监控配置:      早在去年已经出现MongoDB和Redis的Cacti模板,使用它,你可以对你的MongoDB和Redis服务进行流量监控.cacti的模板一直在更新,若企业已经用到nosql这种

分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用(主从.事务与锁.持久化)> 本文我们继续学习redis的高级特性--集群.本文主要内容包括集群搭建.集群分区原理和集群操作的学习. Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨兵(sentinel)机制(本文将不做介绍,大家可另行查阅)来监控各个节点之间的状态.Redi

CAS服务器集群和客户端集群环境下的单点登录和单点注销解决方案

CAS的集群环境,包括CAS的客户应用是集群环境,以及CAS服务本身是集群环境这两种情况.在集群环境下使用CAS,要解决两个问题,一是单点退出(注销)时,CAS如何将退出请求正确转发到用户session所在的具体客户应用服务器,而不是转发到其他集群服务器上,二是解决CAS服务端集群环境下各种Ticket信息的共享. CAS集群部署 由于CAS Server是一个Web应用,因此可部署在Tomcat等容器中.直接部署CAS集群并使用负载均衡配置后,由于每次访问的CAS Server不固定,会发生通