一文了解MongoDB复制集

一、mongo复制集简介

近年来,随着大数据越来越火,非关系型数据库的重要性被越来越多的人所认知,越来越多的开发者逐渐加入到NoSQL的阵营中。我们知道NoSQL是Not Only SQL的意思,既然如此,很多关系型数据库所支持的特性在非关系型数据中也是同样适用,比如复制集。

7508debe190c08029a50e87a6bc5537.png

MongoDB是支持数据复制的,它在复制集方面的优势与其他数据复制集一样,它通过将数据部署在多个不同的服务器上,防止因单机故障而造成数据的丢失,借助数据冗余来提高数据的可靠性和安全性。而且还可以通过复制技术构建分布式数据库,提高系统的访问性能和安全性。

MongoDB的复制集模式是主从复制。在所有的数据库服务的机器中,只有一台机器担当Primary角色,其余的机器均是Secondaries。担当Primary角色的机器接收所有来自客户端的写(Write)操作请求,并完成该操作,从而保证了数据的一致性。担当Primary角色的机器还能够把来自客户端的读(Read)操作分配给其他机器(Secondaries),减轻主数据库服务器的压力。

二、复制集创建和配置

1.如果之前开了mongo的服务,那么首先要结束掉mongo的服务

cmd:pkill -9 mongo

2.删除掉之前的dbs和log

cmd:rm -rf /home/m*

3.在三台机器上分别配置dbs和log(这里使用一台设备模拟三台设备做复制集,所以在一台设备上创建了三个数据库地址以及日志存放路径。)

mkdir -p /home/m17 /home/m18 /home/m19 /home/mlog

07cad9c0310984708892c74193e23ed.png

4.启动三个实例,并且申明属于同一个复制集

①、首先要切换到mongodb目录下,在执行下面的命令。

②、启动三个实例

./bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port 27017 --replSet fmong --journal 
--smallfiles -storageEngine=mmapv1

–dbpath:指定数据库路径

–logpath:指定日志存放路径

–fork:后台运行

–port:设置启动的端口

–replSet:设置同一个复制集,复制集的名称自定义

–journal:32linux需要这个参数才能启动,64位不需要这个参数

–smallfiles:启动时占用较小的空间,如果空间不是很缺少,一般不需要这个参数

-storageEngine:设置数据库的引擎,由于不支持wiredTiger引擎,需要切换支持的引擎,64位系统不需要切换引擎。

b6386ca5836ffd28b91b9456cc35c62.png

三个数据实例启动成功截图:

8791f0d1af581d82e5f76d45fedf155.png

③、查看三个实例启动成功。

3e004ee39e232c14dd217d7dae603b1.png

5、配置复制集文件,并初始化复制集

①、首先进入任意一个实例的mongo客户端命令模式

./bin/mongo

②、切换到admin

deb9a1d0b5d5d5f5b0df7379de9ab26.png

③、定义变量

var rsconf ={
_id:'fmong',
members:[
{
_id:0,
host:'192.168.135.1:27017'
},
{
_id:1,
host:'192.168.135.1:27018'
},
{
_id:2,
host:'192.168.135.1:27019'
}
]
}

查看变量是否生成打印变量名称: printjson(rsconf)

27d6ecc79e791c3eb4e746928a6238a.png

④、根据上面的配置做初始化:rs.initiate(rsconf)

⑤、查看初始化成功后,各个节点的状态:rs.status()

518aed740398e543eacedab945e1eb2.png

6、节点的增加与删除操作

①、删除节点:rs.remove('子节点的host:port')

②、查看删除节点后的复制集节点状态:rs.status()

③、增加节点:rs.add('子节点的host:port')(注意:使用增加节点命令添加的host必须是上面配置复制集变量包含的host在内的才可以添加,如果没有包含的host是添加不进去的。如果想添加没有包含的host需要修改复制集变量,才可以添加。)

7、修改复制集的节点变量和初始化

①、修改之前的复制集变量,只需要修改里面的host子节点即可。例如:将三台设备修改为两台设备。

b0752fae115257dcce58fa83ba358b0.png

②、修改完的变量,初始化要使用reconfig方法。

78d9583c94e819ac0b2f65e2ceb295b.png

三、复制集添加数据

①、在主节点上添加一条数据。

a3d72e35a2161f34c0109bba6ce9f94.png

②、退出主节点,进入子节点

3f6edc686133bfbcf79e29cfea7e4f6.png

③、查看子节点数据,如果发现报错为

b933b382afa2e1688486b91d9e8ca28.png

原因:子节点只能和主节点通信,别人不能操作,需要将slaveOK改为可操作。需要执行如下命令:

rs.slaveOk()

e47a2923e2e0497f0f49b0ed3a5c78e.png

查看数据,已经同步到27018子节点上。

b405b932a0b9f703066cdaa1e8414e0.png

四、模拟主节点宕机,启动子节点为主节点

①、首先在主节点命令下,切换到admin数据库,然后执行关闭主节点。

99fbf0427a1ed7ccca9e0e52ed0db93.png

②、登录子节点

2f97829b8a4e53ea173bcb6f8fea6a0.png

五、复制集常用方法

1、检查哪台设备是主节点:db.isMaster()

云海天教程网,大量的免费MongoDB入门教程,欢迎在线学习!

本文转自:https://blog.csdn.net/m0_38039437/article/details/80221206

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 一文了解MongoDB复制集