千家信息网

MongoDB复制集

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一、关于 MongoDB复制集1、什么是复制集复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复。复制集的优势如下:
千家信息网最后更新 2026年11月01日MongoDB复制集

一、关于 MongoDB复制集

1、什么是复制集
复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复。
复制集的优势如下:
让数据更安全
搞数据可用性(7 * 24)
灾难恢复
无停机维护(如备份、索引重建、故障转移)
读缩放(额外的副本读取)
副本集对应用程序是透明的
2、复制集的工作原理
MongoDB的复制集至少需要两个节点。其中一个是主节点(primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据。
MongoDB各个节点常见的搭配方式为:一主一从或一主多从。主节点记录其上的所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
主从复制结构图如下:

复制集特点如下:
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

yum install -y mongodb-org  //安装vi /etc/mongod.conf //修改监听地址和端口


打开复制模块

3、创建多实列

mkdir -p /data/mongodb/mongodb{2,3,4}   //创建数据目录cd /datamkdir 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.confcp -p /etc/mongod.conf /etc/mongod4.confvi /etc/mongod2.conf    //依次修改主配置文件(注意文件的名称不一样)


mongod -f /etc/mongod.conf     //进入对应的实列mongod -f /etc/mongod2.confmongod -f /etc/mongod3.confmongod -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() //查看复制集的状态




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

5、验证复制集

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

去其他节点依次查看验证

mongo -port 27018show dbs

三、MongoDB复制切换

1、故障自动切换

mongod -f /etc/mongo.conf --shutdown    //模拟了模拟故障点mongdo -port 27018  //进入新的主节点rs.status() //查看复制集状态



2、手动切换

mongdo -port 27018  //进入主节点rs.stepDown(60,30)      //交出主节点位置rs.status() //查看状态


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()   //查看个点节点属性

use localshow collections   //查看集合


db.oplog.rs.find() //查看日志记录所有操作
3、模拟便准节点故障

mongod -f /etc/mongod.conf --shutdown   //模拟标准节点1故障mongo --port 27018  //进入第二个准备节点验证是否被选举为主节点


mongod -f /etc/mongod2.conf --shutdown      //模拟标准节点2故障mongo --port 27019  //进入被动节点验证,此时被动节点不能成为主节点

4、允许从节点读取数据
在从节点无法查看数据

rs.slaveOk()    //允许从节点读取数据show dbs;   //允许默认从节点读取数据


5、查看复制状态信息

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


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

注:其中没有仲裁节点,说明仲裁节点不具备数据复制能力
6、更改oplog大小

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


方法一:

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打开复制集参数指定复制集的大小

mongod -f /etc/mongod.conf      //重新启动mongo   //进入实例验证


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

mongo --port  27018 //进入主节点rs.stepDown()   //放弃选举权


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

五、部署认证复制

vi /etc/mongod.confvi /etc/mongod2.confvi /etc/mongod3.confvi /etc/mongod4.conf        //依次打开安全认证模块

cd /usr/bin/    //进入bin目录echo "kgcrs key"> kgcrskey1 //创建认证文件echo "kgcrs key"> kgcrskey2echo "kgcrs key"> kgcrskey3echo "kgcrs key"> kgcrskey4chmod 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 #可以查看复制集

节点 数据 故障 选举 配置 文件 验证 状态 日志 副本 实例 标准 仲裁 三个 参数 大小 端口 切换 服务 认证 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 上海卓越科技互联网 云信互联网科技有限公司 新华互联网科技学校 互联网和科技技术 互联网科技官网 深圳互联网科技公司 北京互联网络科技有限公司 上海致骋互联网科技 武汉健翔互联网络科技有限公司 昊天互联网科技有限公司 晓花互联网科技有限公司网址 国大互联网教育科技有限公司工作 乌苏新华互联网科技做什么的 内蒙古九一互联网科技 中和天地互联网科技有限公司 工业互联网山东科技大学 怎样加入科技互联网 科技和互联网行业的特点 唐山双旺合互联网科技产业园 互联网最新的科技 恒生科技互联网指数分析 科技互联网大厂 辽宁互联网新科技 互联网科技大奖都有哪些公司 烟台灵鸽互联网科技有限公司 互联网科技圈年度人物 互联网科技包装股 互联网科技企业商标注意事项 互联网领先科技成果宣传视频
0