设为首页 收藏本站
查看: 1264|回复: 0

[经验分享] MongoDB配置复制集

[复制链接]

尚未签到

发表于 2018-10-24 11:36:03 | 显示全部楼层 |阅读模式
简介
  MongoDB复制是将数据同步在多个服务器的过程。
  复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
  复制集还允许从硬件故障和服务中断中恢复数据。

复制集的优势


  • 保障数据的安全性
  • 数据高可用性 (24*7)
  • 灾难恢复
  • 无需停机维护(如备份,重建索引,压缩)
  • 分布式读取数据
MongoDB复制原理


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

  •   mongodb各个节点常见的搭配方式为:一主一从、一主多从。

  • 主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
  MongoDB复制结构图如下所示:
DSC0000.jpg

  以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。
  副本集特征:


  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复
一、部署MongoDB复制集

1. 创建多实例配置文件,并开启服务。

(1)创建数据文件和日志文件存储路径
  

[root@localhost ~]# mkdir -p /data/mongodb/mongodb{2,3,4}   //创建数据目录  
[root@localhost ~]# mkdir -p /data/logs/mongodb
  
[root@localhost ~]# touch /data/logs/mongodb/mongodb{2,3,4}.log  //创建日志文件
  
[root@localhost ~]# chmod -R 777 /data/logs/mongodb/*.log    //赋予权限
  

(2)编辑4个MongoDB实例的配置文件
  先编辑Mongodb实例1的配置文件,配置replication选项,并复制3份。
  

vim /etc/mongod.conf  replication:
  replSetName: kgcrs  //配置replSetName参数为kgcrs
  

  重新启动Mongodb实例1
  

[root@localhost ~]# mongod -f /etc/mongod.conf  --shutdown  
killing process with pid: 1074
  
[root@localhost ~]# mongod -f /etc/mongod.conf
  
about to fork child process, waiting until server is ready for connections.
  
forked process: 17130
  
child process started successfully, parent exiting
  

  复制3份,并修改配置文件中的port参数配置,dbpath参数配置,logpath参数配置。
  

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

  修改mongod2.conf 的配置文件参数。
  

vim /etc/mongod2.conf  

  path: /data/logs/mongodb/mongodb2.log   //日志文件存储路径
  

  dbPath: /data/mongodb/mongodb2  //数据文件路径
  

  port: 27018     //监听端口
  

  

  修改mongod3.conf 的配置文件参数。
  

vim /etc/mongod3.conf  

  path: /data/logs/mongodb/mongodb3.log   //日志文件存储路径
  

  dbPath: /data/mongodb/mongodb3  //数据文件路径
  

  port: 27019     //监听端口
  

  

  修改mongod4.conf 的配置文件参数。
  

vim /etc/mongod4.conf  

  path: /data/logs/mongodb/mongodb4.log   //日志文件存储路径
  

  dbPath: /data/mongodb/mongodb4  //数据文件路径
  

  port: 27020     //监听端口
  

  

(3)启动多实例服务
  

mongod -f /etc/mongod2.conf  
mongod -f /etc/mongod3.conf
  
mongod -f /etc/mongod4.conf
  

  可以看到四个实例全部启动。
DSC0001.jpg


2.配置3个节点的复制集
  

[root@localhost ~]# mongo   //进入MongoDB27017实例  
MongoDB shell version v3.6.6
  
connecting to: mongodb://127.0.0.1:27017
  
MongoDB server version: 3.6.6
  

(1)先通过rs.status()命令查看复制集的状态信息,提示复制集还未配置。
DSC0002.jpg


(2)定义cfg初始化参数。
  初始化配置时保证从节点没有数据,不然数据会丢失。
  

> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.113.176:27017"},{"_id":1,"host":"192.168.113.176:27018"},{"_id":2,"host":"192.168.113.176:27019"}]}  

DSC0003.jpg


(3)通过rs.initiate(cfg)命令启动复制集。
  

> rs.initiate(cfg)  

DSC0004.jpg


(4)查看复制集状态。
  启动复制集后,再次通过rs.status()命令查看复制集的完整状态信息。
  其中,health为1代表健康,0代表宕机。state为1代表主节点,为2代表从节点。
DSC0005.jpg

DSC0006.jpg


二、增加和删除节点
  配置启动复制集后,可以通过rs.add()和rs.remove()命令方便的添加或删除节点。
  

#添加节点  
kgcrs:PRIMARY> rs.add("192.168.113.176:27020")
  
kgcrs:PRIMARY> rs.status() //查看节点是否添加成功
  

DSC0007.jpg

  

#删除节点  
kgcrs:PRIMARY> rs.remove("192.168.113.176:27020")
  
kgcrs:PRIMARY> rs.status()
  

  可以看到27020的节点没有了。

三、MongoDB复制集切换
  MongoDB复制集可以实现群集的高可用,当其中的主节点出现故障时会自动切换到其他节点。管理员也可以手动进行复制集的主从切换。

1.模拟故障自动转移
  通过kill命令可以停止复制集的当前主节点,然后查看主节点会自动切换到其他节点上。

(1)先查看MongoDB的进程,停止当前的主节点27017
  

[root@localhost ~]# ps aux | grep mongod  
root      17130  1.0  6.2 1582772 62064 ?       Sl   09:33   1:06 mongod -f /etc/mongod.conf
  
root      17830  0.8  5.7 1462576 57628 ?       Sl   09:58   0:45 mongod -f /etc/mongod2.conf
  
root      17880  0.8  5.8 1522504 58324 ?       Sl   09:58   0:45 mongod -f /etc/mongod3.conf
  
root      17927  0.7  5.3 1441856 53356 ?       Sl   09:58   0:37 mongod -f /etc/mongod4.conf
  
root      20678  0.0  0.0 112676   984 pts/1    S+   11:23   0:00 grep --color=auto mongod
  
[root@localhost ~]# kill -9 17130
  

(2)查看主节点切换
  

[root@localhost ~]# mongo -port 27018  
kgcrs:SECONDARY> rs.status()
  

DSC0008.jpg

DSC0009.jpg


2.手动也可以进行主从切换

(1)先进入主节点27019,暂停选举
  

[root@localhost ~]# mongo -port 27019  

  
kgcrs:PRIMARY> rs.freeze(30)      //暂停30s不参与选举
  

  
kgcrs:PRIMARY> rs.stepDown(60,30)   //交出主节点位置,维持从节点状态不少于60秒,等待30秒使主节点和从节点日志同步
  

(2)查看主节点切换
  

kgcrs:SECONDARY> rs.status()  

DSC00010.jpg




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625880-1-1.html 上篇帖子: MongoDB复制集(实现选举复制、故障切换、升级oplog大小、认证复制) 下篇帖子: 部署MongoDB分片群集
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表