mongo副本集搭建

c04f4d3221c420cb7cfd69aa7b8f5215603.jpg

一、环境说明

ip:10.0.0.2 standard(master)

ip:10.0.0.3 standard(slave)

ip:10.0.0.4 standard(slave)

ip:10.0.0.5 arbiter

 

副本集名字:fuben

 

二、启动群集

1、创建数据目录:

# mkdir /usr/local/mongodb/server1 
# mkdir /usr/local/mongodb/server2
# mkdir /usr/local/mongodb/server3
# mkdir /usr/local/mongodb/server4

2、开启standard

1)方法一

● 为10.0.0.2开启:

 

# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/server1 --logpath=/usr/local/mongodb/dblog1 --replSet fuben:10.0.0.2 --fork

● 为10.0.0.3开启:

 

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/server2 --logpath=/usr/local/mongodb/dblog2 --replSet fuben:10.0.0.3 --fork

说明::

--fork为创建守护进程,--logpath与--fork必须并存。

在其中指定的单台服务器后,mongodb就会自动搜索并连接其余的节点

 

2、【方法二】用配置文件创建:

1)自己写配置文件,里边添加副本名

# vim  /usr/local/mongodb/mong.conf
replSet=副本集名字

2)启动指定配置文件

# /usr/local/mongodb/bin/mongod -f  /usr/local/mongodb/mong.conf

 

2、初始化节点

目的:副本集成员首先通过一次初始化同步来复制数据

 

【方法一】

>db.runCommand({"replSetInitiate":{	
'_id':'fuben','members':[
{"_id" : 0,"host" : "10.0.0.2"},
{"_id" : 1,"host" : "10.0.0.3"}]
}})

【方法二】

> config = {_id:"fuben",members:[
{_id:0,host:’10.0.0.2‘;},
 {_id:1,host:’10.0.0.3‘},]
 }

>rs.initiate(config);
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

 

说明:

在此期间,其中一个节点将当选为主节点。

这样我们就创建了副本集,我们在主数据库中写入数据,那么从就会同步了,但是从服务器不能查看里面的数据,我们可以通过设置将从服务器改为可读

通过日志我们可以查看,从服务器是每十秒钟去读取主服务器下面的local.oplog.rs进行同步

我们可以通过:rs.status()来查看副本集里面的详细信息 ,也可以通过rs.isMaster()来查看该服务器是否为master

 

 

3、后期添加从服务器

1)为10.0.0.4开启

# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/server3 --logpath=/usr/local/mongodb/dblog3 --replSet fuben:10.0.0.4 --fork

2)在主服务器上添加

> rs.add("10.0.0.4:27017")

4、添加仲裁节点

该节点不参与数据的复制,只是参与投票选择主节点而已

1)为10.0.0.5开启

# /usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/server4 --logpath=/usr/local/mongodb/dblog4 --replSet fuben:10.0.0.5 --fork

2)在主服务器上添加仲裁节点

 

> rs.addArb("10.0.0.4:27017")

 

5、查看同步状态

1)同步时间能信息

 

> db.printSlaveReplicationInfo()
source: 127.0.0.1:10000
syncedTo: Tue Jul 16 2013 15:18:52 GMT+0800 (CST)
= 5337 secs ago (1.48hrs)
source: 127.0.0.1:10003
syncedTo: Tue Jul 16 2013 16:05:22 GMT+0800 (CST)
= 2547 secs ago (0.71hrs)
source: 127.0.0.1:10002
no replication info, yet. State: ARBITER

说明

source:从库的ip和端口

syncedTo:目前的同步情况,以及最后一次同步的时间

 

2)查看oplog的大小和oplog中操作的时间范围

> db.printReplicationInfo()  
configured oplog size: 50MB
log length start to end: 9071secs (2.52hrs)
oplog first event time: Tue Jul 16 2013 14:20:40 GMT+0800 (CST)
oplog last event time: Tue Jul 16 2013 16:51:51 GMT+0800 (CST)
now: Tue Jul 16 2013 17:10:35 GMT+0800 (CST)

6、删除节点

> rs.remove('10.0.0.3:27017')

 

四、副本集的同步:

1、mongodb数据库的副本集的同步机制

Mongodb的副本集在同一时刻只有一台服务器是可以写的,副本集的主从复制也是一个异步同步的过程,是slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是local数据库中的oplog.rs表,默认在64位机器上这个表是比较大的,占磁盘大小的5%,oplog.rs的大小可以在启动参数中设定:--oplogSize 1000,单位是M。在生产环境中建议此值设置的大一些,以防止无法同步的情况发生。

 

2、同步文件

主节点的操作记录在oplog里 (operation logs) ,oplog存储在一个特殊的数据库中,叫:local,而oplog就在oplog.rs里面

我们可以通过:db.oplog.rs.find()查看操作日志记录

oplog中每个文档记录了主节点的一个操作:文档中的键:

ts:操作的时间戳,由4个字节的时间戳和4个字节的计数器组成

op:操作类型,只有一个字节的代码(如:u--update,i-insert n--null)

ns:执行操作的命名空间,就是集合名

o:指定了执行的文档,就是要插入的数据,更新的数据等等

 

3、从节点的同步问题

从节点第一次启动,会对主节点数据进行完整的同步,这样花费大量的时间,如果从节点的操作已经被主节点落下太远了,从节点就会跟不上,因为主节点数据太新了,这里可能是从节点出现故障或者宕机,或者是从节点分担了主节点作为读服务器,这样资源被消耗,疲于应付读取而无法同步,这样从节点的数据就更不上了

我们可以通过:{‘resync’:1}命令来手动执行重新同步,也可以在启动从节点的时候加入参数:--autoresync来重新同步。重新同步代价很高,应尽量避免,方法就是配置足够大的oplog

 

 

转载于:https://my.oschina.net/weige1840/blog/2885974

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值