千家信息网

MongoDB 复制集

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,MongoDB 复制集概述复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了沉余添加了数据可用性,通过个复制集可以对硬件故障中断的服务进行恢复复制集的优势如下:让数据更安全。高数据可用
千家信息网最后更新 2025年01月20日MongoDB 复制集

MongoDB 复制集概述

  • 复制集是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了沉余添加了数据可用性,通过个复制集可以对硬件故障中断的服务进行恢复
    复制集的优势如下:
    1. 让数据更安全。
    2. 高数据可用性(24*7)
    3. 灾难恢复
    4. 无停机维护(如备份、索引重建、故障转移)
    5. 读缩放(额外的副本读取)
    6. 副本集对应用程序是透明的。
      复制集工作原理
  • MongoDB 的复制集至少需要两个节点,其中一个主节点(primary),负责处理客户端的请求,其余的都是从节点(secondary),负责复制主节点上的数据。
  • MongoDB 各节点常见的搭配方式为:一主一从或者一主多从。主节点记录其所有操作到oplog中,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点译者。
    复制集特点如下:
    1. N个节点群阶
    2. 任何节点客作为主节点
    3. 所有写入操作都在主节点
    4. 自动故障转移
    5. 自动恢复 开始部署
创建多实例 //创建多实例关闭防火墙 setenforce  //一些阻挡项目mkdir -p /data/mongodb/mongodb{2,3,4}     //创建数据目录mkdir logs  //到/data/mongodb/创建日志文件目录touch logs/mongodb{2,3,4}.log    //创建日志文件cd logs/到目录下chmod 777 *.log     //赋予权限//创建多实例配置文件,并开启服务mongod -f /etc/mongod.conf --shutdown  //修改完主配置文件并且进行关闭在开启mongod -f /etc/mongod.conf  //挨个开启所有服务进入默认的端口 开启复制集cp -p /etc/mongod.conf /etc/mongod2.conf  //地二个实例配置文件vim /etc/mongod2.conf   path: /data/mongodb/logs/mongod2.log               //系统日志存放路径   dbPath: /data/mongodb/mongo                   //数据存放日志   port: 27018                  //端端口mkdir -p  /data/mongodb/            //为其创建系统日志和数据存放日志没有目录cd /data/mongodb/                         mkdir mongo  touch mongod2.log                              //为其创建系统日志文件chmod 777 mongod2.log               //并且给与权限mongod -f /etc/mongod2.conf         //开启多实例服务mongo --port 27018              //进入mongodb 27018netstat -ntap                   //查看进程cfg={"_id":"abc","members":[{"_id":0,"host":"192.168.10.5:27017","priority":100},{"_id":1,"host":"192.168.10.5:27018","priority":100},{"_id":2,"host":"192.168.10.5:27019","priority":0},{"_id":3,"host":"192.168.10.5:27020","arbiterOnly":true}]} //注意IP优先级来判断priority":100  //高的做为表准节点priority":0 //低的就作为被动节点arbiterOnly":true  //仲裁节点rs.initiate(cfg)  //初始化刷新 之后就可以看到自己的身份了rs.isMaster()  //查看节点状态基本的增删改查db.t1.insert({"id":1,"name":"tom"})  //创建集合db.t1.find()   //查看当前数据db.t1.update({"id":2},{$set:{"name":"jack"}})  //修改指定内容db.t1.remove({"id":1})     //删除指定数据






模拟故障节点实验是否能自动抢占
show dbs  //显示所有数据库use local  //进入存放日志文件的数据库show collections  //显示数据中的所有的集合db.oplog.rs.find()   #查看日志记录所有操作模拟表准节点1故障mongod -f /etc/mongod.conf --shutdown #关闭一主节点服务看看是否别的mongoDB有没有抢占mongo --port 27018   #此时会选举第二个标准节点为主节点模拟标注节点2故障mongod -f /etc/mongod2.conf --shutdown  #关闭第二主节点mongo --port 27019 #此时被动节点不能成为主节点
  • 允许从节点读取数据
    rs.slaveOk() #允许默认从节点读取数据
  • 查看复制状态信息
    仲裁节点是不会复制信息rs.help() #帮助信息rs.printReplicationInfo()  #查看日志文件大小信息configured oplog size:   990MB  #这个日志文件大小是可以修改的rs.printSlaveReplicationInfo()  #产看是和那个节点继进行同步#你会发现仲裁节点并不具备数据复制
  • 更改oplog大小 零时修改
    1. 要去调整日志文件大小,从节点会去找主节点进行同步对方的文件从而自己也进行了扩容,对于主节点来说自己的日志文件大小宽裕为最佳,若不够则可以零时进行调整 默认情况下990M,调整从节点1) 关闭节点服务,因为从节点是主节点复制集成员2)只能单独的进行修改,先关闭服务在从复制集中退出来,推出来后就成了一个单实例 ,3)use admin #先关闭服务4)db.shutdownServer()  #退出复制集 离线升级5)修改从节点配置文件 6)mongod -f /etc/mongod2.conf  //启动服务7)mongo --port 27028  //登陆8)mongodump --port 27028 --db local --collection 'oplog.rs' //oplog进行完整性备份9)mongo --port 27028  //进端口10)use local> db.oplog.rs.drop()  //删掉原来的文件11)db.runCommand( { create: "oplog.rs", capped: true, size: (2 * 1024 * 1024 * 1024) } )  //进行原型创建 改为204812)use admin> db.shutdownServer()  //再次关闭服务13)再次修改回来原先的数据 在replication:replSetName: abcoplogSizeMB: 2048  //添加14)mongod -f /etc/mongod2.conf //重新开启服务   mongo --port 27018 进入端口 15)rs.printReplicationInfo()  //此时就成了2048 支对但对修改有效16)rs.stepDown()   #有效产生选举 在主的里面让出主的身份 
部署认证复制
1. 在主服务器上长创建用户为rootuse admin  db.createUser({"user":"root","pwd":"123","roles":["root"]}) #创建用户密码vim /etc/mongod.conf  //修改主配置文件同步并且中间有一个认证  修改所有配置文件security:   keyFile: /usr/bin/kgcrskey1  //验证文件路径   clusterAuthMode: keyFile    //验证密钥重启服务mongod -f /etc/mongod.conf --shutdownmongod -f /etc/mongod.conf              /其他几台的重启方式都相同,重复操作即可身份验证登陆(先验证主,再验证从)当你直接使用登陆命令登陆系统时,使用show dbs 是不能够查看数据的,此时就需要使用身份验证mongo --port 27018use admindb.auth("root","123123")





0