频道栏目
首页 > 资讯 > 其他综合 > 正文

MongoDB复制集

19-01-26        来源:[db:作者]  
收藏   我要投稿
一、关于 MongoDB复制集

1、什么是复制集

复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复。

复制集的优势如下:

让数据更安全

搞数据可用性(7 * 24)

灾难恢复

无停机维护(如备份、索引重建、故障转移)

读缩放(额外的副本读取)

副本集对应用程序是透明的

2、复制集的工作原理

MongoDB的复制集至少需要两个节点。其中一个是主节点(primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据。

MongoDB各个节点常见的搭配方式为:一主一从或一主多从。主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

主从复制结构图如下:

MongoDB复制集

复制集特点如下:

N个节点的集群

任何节点可作为主节点

所有写入操作都在主节点上

自动故障转移

自动恢复

二、MongoDB复制集部署

1、配置yum源

vi /etc/yum.repos.d/CentOS-Base.repo //末行增加>

[mongodb-org]

name=MongoDB Repository

baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/

gpgcheck=1

enabled=1

gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

2、安装配置mongodb

vi /etc/mongod.conf //修改监听地址和端口

MongoDB复制集

打开复制模块

MongoDB复制集

3、创建多实列

mkdir -p /data/mongodb/mongodb{2,3,4} //创建数据目录

cd /data

mkdir logs

touch logs/mongodb{2,3,4}.log //创建日志文件

cd logs/

chmod 777 *.log //赋予权限

cp -p /etc/mongod.conf /etc/mongod2.conf //复制主配置文件

cp -p /etc/mongod.conf /etc/mongod3.conf

cp -p /etc/mongod.conf /etc/mongod4.conf

vi /etc/mongod2.conf //依次修改主配置文件(注意文件的名称不一样)>

MongoDB复制集 MongoDB复制集

mongod -f /etc/mongod.conf //进入对应的实列

mongod -f /etc/mongod2.conf

mongod -f /etc/mongod3.conf

mongod -f /etc/mongod4.conf>

4、配置三个节点的复制集

mongo //进库

cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.80.100:27017"},{"_id":1,"host":"192.168.80.100:27018"},{"_id":2,"host":"192.168.80.100:27019"},{"_id":3,"host":"192.168.80.100:27020"}]} //将另外三个节点添加到复制集

rs.initiate(cfg) //初始化复制集配置

rs.status() //查看复制集的状态>

MongoDB复制集 MongoDB复制集 MongoDB复制集 MongoDB复制集

rs.remove("192.168.80.183:27020") //删除节点

rs.add("192.168.80.183:27020") //添加节点>

5、验证复制集

use test

db.a.insert({"id":1,"name":"jack"})

db.a.find()>

去其他节点依次查看验证

mongo -port 27018

show dbs>

MongoDB复制集

三、MongoDB复制切换

1、故障自动切换

mongod -f /etc/mongo.conf --shutdown //模拟了模拟故障点

mongdo -port 27018 //进入新的主节点

rs.status() //查看复制集状态>

MongoDB复制集 MongoDB复制集

2、手动切换

mongdo -port 27018 //进入主节点

rs.stepDown(60,30) //交出主节点位置

rs.status() //查看状态>

MongoDB复制集

rs.freeze(30) //暂停30s不参与选举,必须要有仲裁节点,在下面的复制选举中验证>

四、MongoDB复制选举

1、虚拟机还原重复上述安装mongoDB并添加多实例

2、配置三个复制节点

mongo //进库

cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.80.100:27017","priority":100},{"_id":1,"host":"192.168.80.100:27018","priority":100},{"_id":2,"host":"192.168.80.100:27019","priority":0},{"_id":3,"host":"192.168.80.100:27020","arbiterOnly":true}]} //指定复制节点给的属性(priority为100:标准节点,priority为0:被动节点,arbiterOnly:仲裁节点)

rs.initiate(cfg) //初始化配置

rs.isMaster() //查看个点节点属性>

MongoDB复制集

use local

show collections //查看集合>

MongoDB复制集

db.oplog.rs.find() //查看日志记录所有操作>

3、模拟便准节点故障

mongod -f /etc/mongod.conf --shutdown //模拟标准节点1故障

mongo --port 27018 //进入第二个准备节点验证是否被选举为主节点>

MongoDB复制集 MongoDB复制集

mongod -f /etc/mongod2.conf --shutdown //模拟标准节点2故障

mongo --port 27019 //进入被动节点验证,此时被动节点不能成为主节点>

4、允许从节点读取数据

在从节点无法查看数据

MongoDB复制集

rs.slaveOk() //允许从节点读取数据

show dbs; //允许默认从节点读取数据>

MongoDB复制集

5、查看复制状态信息

rs.help() //查看

rs.printReplicationInfo() //查看复制集信息>

MongoDB复制集

rs.printSlaveReplicationInfo() //查看从节点的状态>

MongoDB复制集

注:其中没有仲裁节点,说明仲裁节点不具备数据复制能力

6、更改oplog大小

use local

db.oplog.rs.stats() //查看操作复制操作的状态>

MongoDB复制集

方法一:

use admin //进入管理库

db.shutdownServer() //关闭注销复制集相关启动参数

vi /etc/mongod.conf //修改端口为27028并注释复制集参数

mongod -f /etc/mongod.conf //单实例启动

mongodump --port 27028 --db local --collection 'oplog.rs' //备份操作日志

mongo --port 27028

> use local

> db.oplog.rs.drop() //删除日志文件

> db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } ) //重新创建日志文件并且指定大小

> use admin

> db.shutdownServer() //关闭节点服务>

方法二:

vi /etc/mongod.conf //修改端口回27018打开复制集参数指定复制集的大小>

MongoDB复制集

mongod -f /etc/mongod.conf //重新启动

mongo //进入实例验证>

MongoDB复制集

7、放弃被选举产生新的有效选举

mongo --port 27018 //进入主节点

rs.stepDown() //放弃选举权>

MongoDB复制集

rs.status() //另外一个标准节点有效选举为主节点>

MongoDB复制集

五、部署认证复制

vi /etc/mongod.conf

vi /etc/mongod2.conf

vi /etc/mongod3.conf

vi /etc/mongod4.conf //依次打开安全认证模块>

MongoDB复制集

cd /usr/bin/ //进入bin目录

echo "kgcrs key"> kgcrskey1 //创建认证文件

echo "kgcrs key"> kgcrskey2

echo "kgcrs key"> kgcrskey3

echo "kgcrs key"> kgcrskey4

chmod 600 kgcrskey{1..4} //更改权限>

四个实例依次进行重启

进入主节点

kgcrs:PRIMARY> show dbs #无法查看数据库

kgcrs:PRIMARY> rs.status() #无法查看复制集

kgcrs:PRIMARY> use admin #身份登录验证

kgcrs:PRIMARY> db.auth("root","123")

kgcrs:PRIMARY> rs.status() #可以查看数据库

kgcrs:PRIMARY> show dbs #可以查看复制集

相关TAG标签
上一篇:gpg 加密解密
下一篇:redis创建sentinel参考
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站