一.MongoDB复制集搭建介绍
一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合。复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础。
保证数据在生产部署时的冗余和可靠性,通过在不同的机器上保存副本来保证数据的不会因为单点损坏而丢失。能够随时应对数据丢失、机器损坏带来的风险,牛逼到不行。换一句话来说,还能提高读取能力,用户的读取服务器和写入服务器在不同的地方,而且,由不同的服务器为不同的用户提供服务,提高整个系统的负载,简直就是云存储的翻版...一组复制集就是一组mongod实例掌管同一个数据集,实例可以在不同的机器上面。实例中包含一个主导,接受客户端所有的写入操作,其他都是副本实例,从主服务器上获得数据并保持同步。
主服务器很重要,包含了所有的改变操作(写)的日志。但是副本服务器集群包含有所有的主服务器数据,因此当主服务器挂掉了,就会在副本服务器上重新选取一个成为主服务器。每个复制集还有一个仲裁者,仲裁者不存储数据,只是负责通过心跳包来确
认集群中集合的数量,并在主服务器选举的时候作为仲裁决定结果。

主和从指间通过oplog日志同步,通过ismaster()函数确定哪个是主节点

注:mongodb只能主写,5种读策略:只读主,优先主,只读从,优先从,就近(网络延时)

二.复制集搭建
搭建环境:Centos 7
mongodb-linux-x86_64-3.2.12.tgz

1.解压安装mongodb到/usr/local/mongodb

2.在mongodb目录下创建conf目录,data目录和logs目录

[root@server1 data]# mkdir 28001
[root@server1 data]# mkdir 28002
[root@server1 data]# mkdir 28003

注:复制集成员


28001 主数据节点,只有主节点能写
28002 从数据节点
28003 选举节点arbiter,不存取数据

3.编辑conf配置文件
[root@server1 mongodb]# cd conf
[root@server1 conf]# vim 28001.conf

port=28001 #端口号,默认27017,为了安全设置成别的端口较好
bind_ip=127.0.0.1 #绑定端口,允许哪个地址访问,多个用逗号
logpath=/usr/local/mongodb/logs/28001.log #日志路径
dbpath=/usr/local/mongodb/data/28001/ #数据路径
logappend=true #追加方式写日志
pidfilepath=/usr/local/mongodb/data/28001/28001.pid #pid路径
fork=true #守护进程后台运行
oplogSize=2048 #2048 M大小写入硬盘,稍微大点好
replSet=westos #复制集名称

[root@server1 conf]# cp 28001.conf 28002.conf
[root@server1 conf]# vim 28002.conf

[root@server1 conf]# cp 28001.conf 28003.conf
[root@server1 conf]# vim 28003.conf

4.启动程序
[root@server1 mongodb]# mongod -f conf/28001.conf

三.复制集初始化
[root@server1 mongodb]# mongo 127.0.0.1:28001/admin

db
admin

config={_id:"westos",members:[{_id:0,host:"127.0.0.1:28001"},{_id:1,host:"127.0.0.1:28002"},{_id:1,host:"127.0.0.1:28003"}]}

给28003添加选举
config.members[2]
config.members[2]={_id:2,host:"127.0.0.1:28003","arbiterOnly":true}

通过rs.initiate()初始化,加上配置config

角标发生变化,初始化成功

查看复制集状态
westos:PRIMARY> rs.status()

主动切换比较简单,通过在主库上执行rs.stepDown()方法即可

rep-test:PRIMARY> rs.stepDown()

四.验证复制集同步
1.从其他节点登陆
第二个从节点

第三个选举节点

2.同步验证
在28001插入数据

在28002上查看数据

报错,为了保护数据一致性,没有开启同步,开启westos:SECONDARY> rs.slaveOk(true)后正常

选举节点也是一样

五.参数功能验证
1.priority参数介绍
将28001降为从节点,验证复制集参数priority参数,主节点优先级必须大于1,0是永久不能不能参与选举,通过rs.stepDown(10)函数,10s降为从节点

在28002上查看,点下回车,已经变成主节点

在新的28002主节点上,调整优先级

config 先定义一个对象

将28002的优先级设为0,永久不参与选举

rs.reconfig(config) 重新加载配置(这个命令生产环境就好不要用,会断开一下)
报错,不能重加载,因为28002优先级为0,重加载后不能再一个不能成为主的节点上运行

所以降级为从节点,在原先的28001上配置
westos:PRIMARY> rs.stepDown(10)

在28001上westos:PRIMARY> config = rs.conf()
将28002优先级将为0


保存报错,没有选举主节点,下面验证成功

注:查看配置文件版本号,每配置一次,版本号就加一
westos:PRIMARY> rs.conf()

2.隐藏节点
前端程序看不见,可以作为隐藏的一个备份节点
设置hidden为true

检查已经看不见28002的从节点了

查询状态还是可以的

3.延时节点
延长一定时间同步到从节点,应用场合,如果设置延时时间为15分钟,主上操作失误,还没有同步到从,可以恢复
要设置优先级为0,hidden为true,和延时时间三个要素
设置测试时间为15秒

提交配置
westos:PRIMARY> rs.reconfig(config)
{ "ok" : 1 }

验证,查看主和从test库里的数据一样


开始测试:主节点上插入数据

从节点15秒上数据已经传过来了,验证成功