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个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行。

 Mongodb集群之副本集_第1张图片

 

 

Mongodb集群之副本集_第2张图片

 

从图中可以发现,客户端连接到整个副本集,不关系具体哪一台服务器是否宕机。主服务器负责整个副本集的读写。副本集定期同步数据,一旦主节点挂了,副本节点就会选举一个新主机作为主节点。坏掉的节点修好后会自动扩充为副本节点。


如何配置副本集

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

 

配置启动参数

Mongodb集群之副本集_第3张图片


启动配置文件

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

}

整个部分创建成功

 

副本集数据库测试

 

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

 Mongodb集群之副本集_第4张图片

 

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

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

 

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

Mongodb集群之副本集_第5张图片

 

再将9002数据库开启

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

Mongodb集群之副本集_第6张图片

 

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

 

小结:


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

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

 

你可能感兴趣的:(mongodb,数据库集群)