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


 

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

 

小结:


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

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

 

原文地址:https://www.cnblogs.com/blfbuaa/p/6927122.html