千家信息网

MongoDB复制集部署和基本管理

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,MongoDB复制集部署和基本管理MongoDB复制集概述复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据的可用性,通过复制集可以对硬件故
千家信息网最后更新 2024年09月22日MongoDB复制集部署和基本管理

MongoDB复制集部署和基本管理

MongoDB复制集概述

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

复制集由下列优点:

  • 让数据更安全
  • 高数据可用性(7*24)
  • 灾难恢复
  • 无停机维护(如备份、索引重建、故障转移)
  • 读缩放(额外的副本读取)
  • 副本集对应用程序是透明的

    复制集工作原理

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

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

客户端在主节点写入数据,在主节点写入数据,主节点与从节点进行数据交互保证数据的一致性。如果其中一个节点出现故障,其他节点马上会将业务接过来,无需停机操作。

MongoDB复制集部署

配置多个实例

在上一篇的博客中已经讲解了MongoDB开启多实例的方法,这里就不多赘述,我们用相同的方法创建了四个MongoDB实例。在启动四个实例前,先要修改每个实例的配置文件,配置replSet参数值都为同一个值,这个值作为复制集的名称,具体操作如下:

[root@localhost ~]# vim /usr/local/mongodb/bin/mongodb1.conf port=27017dbpath=/data/mongodb1logpath=/data/logs/mongodb/mongodb1.loglogappend=truefork=truemaxConns=5000replSet=kgcrs                     #配置复制集的名称

在其他的三个实例的配置文件中最后一行,加上相同的一句代码就行。开启四个实例进程。

[root@localhost ~]# export PATH=$PATH:/usr/local/mongodb/bin/#由于之前重启过,重新设置环境变量[root@localhost ~]# mongod -f /usr/local/mongodb/bin/mongodb1.conf#开启端口号为27017的实例进程2018-07-17T10:33:29.835+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'about to fork child process, waiting until server is ready for connections.forked process: 3751child process started successfully, parent exiting
初始化配置并启动复制集

启动完4个MongoDB实例后,下面介绍如何配置并启动MongoDB复制集。这里先配置包含3个节点的复制集(后面会再进行添加最后一个实例),Primary代表主节点。Secondary代表从节点

[root@localhost bin]# mongod -f /usr/local/mongodb/bin/mongodb2.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20207child process started successfully, parent exiting[root@localhost bin]# mongod -f /usr/local/mongodb/bin/mongodb3.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20230child process started successfully, parent exiting[root@localhost bin]# mongod -f /usr/local/mongodb/bin/mongodb4.conf --smallfilesabout to fork child process, waiting until server is ready for connections.forked process: 20253child process started successfully, parent exiting

可以看到四个实例都已经启动成功,对应的端口号都已经打开。然后进入到端口号为27017端口号的实例中。

[root@localhost bin]# mongo   #默认就是端口号为27017的实例> cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.100.201:27017"},{"_id":1,"host":"192.168.100.201:27018"},{"_id":2,"host":"192.168.100.201:27019"}]}#这句代码的意思就是向kgcrs的复制集中添加三个成员> rs.initiate(cfg){ "ok" : 1 }#对复制集进行初始化启动复制集,启动复制集后,可以通过rs.status()查看复制集的完整信息。




增加和删除节点

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

kgcrs:PRIMARY> rs.add("192.168.100.201:27020"){ "ok" : 1 }#可以看到27020端口的实例添加成功kgcrs:PRIMARY> rs.remove("192.168.100.201:27019"){ "ok" : 1 }#可以看到27019端口的实例被删除了
MongoDB复制集切换

1、模拟故障自动切换

通过kill命令可以停止复制集的当前节点,然后查看主节点会自动切换到其他节点上,可以看到当前端口为27017的实例为主节点。

[root@localhost bin]# netstat -ntap| grep mongotcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      20230/mongod        tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      20253/mongod        tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      20055/mongod        tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      20207/mongod [root@localhost bin]# kill -9 20055 #kill掉27017端口的进程kgcrs:SECONDARY> rs.status()#可以看到现在的主节点是端口为27019的实例


2、手动进行主从切换

首先要先进入到主节点的实例中,只有主节点才有权限进行主从节点切换。

[root@localhost bin]# mongo --port 27019kgcrs:PRIMARY> rs.freeze(30)   #暂停30s不参加选举{ "ok" : 1 }kgcrs:PRIMARY> rs.stepDown(60,30)  #告诉主节点交出主节点位置,然后维持从节点状态不少于60s,同时等待30s以使主节点和从节点日志同步,再次查看状态,发现主节点已经切换到另外一个实例中。2018-07-18T15:52:53.254+0800 I NETWORK  [thread1] trying reconnect to 127.0.0.1:27019 (127.0.0.1) failed2018-07-18T15:52:53.256+0800 I NETWORK  [thread1] reconnect 127.0.0.1:27019 (127.0.0.1) okkgcrs:SECONDARY> rs.status()

复制集的选举原理

复制的原理

复制是基于操作日志oplog,相当于MySQL中的二进制日志,只记录发生改变的记录。复制是将主机点的oplog日志同步并应用到其他从节点的过程

选举的原理

节点类型分为标准(host)节点,被动(passive)节点和仲裁(abriter)节点。

(1)只有标准节点可能被选举为活跃(primary)节点,由选举权。被动节点有完整副本,不可能成为活跃节点,有选举权。仲裁节点不复制数据,不可能成为活跃节点,只有选举权。

(2)标准节点与被动节点的区别:priority值高者是标准节点,低者则成为被动节点。

(3)选举规则是票数高者获胜,priority是优先权为0到1000的值,相当于额外增加0到1000的票数。选举结果:票数高者获胜;若票数相同,数据新者获胜。

配置复制集的优先级

重新配置4个节点的MongoDB复制集,设置两个标准节点,哟个被动节点和一个仲裁节点。这个设置要在主节点上配置。

kgcrs:PRIMARY> > cfg={"_id":"kgcrs","members":[{"_id":0,"host":"192.168.58.131:27017","priority":100},{"_id":1,"host":"192.168.58.131:27018","priority":100},{"_id":2,"host":"192.168.58.131:27019","priority":0},{"_id":3,"host":"192.168.58.131:27020","arbiterOnly":true}]}#这句代码分别设置了四个实例的属性,优先级kgcrs:PRIMARY> rs.reconfig(cfg){ "ok":1 }

可以看到现在端口27018的实例,现在是主节点。

模拟主节点故障

如果主节点出现故障,另外一个标准节点将会被选举为新的主节点。

[root@promote ~]# mongod -f /usr/local/mongodb/bin/mongodb2.conf --shutdown2018-07-22T09:20:02.706+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'killing process with pid: 9639kgcrs:PRIMARY> rs.isMaster()


可以看到27017端口的实例已经成为主节点。

模拟所有标准节点都出现故障

如果所有标准节点出现故障,被动节点和仲裁节点都不能成为主节点。

[root@promote ~]# mongod -f /usr/local/mongodb/bin/mongodb1.conf --shutdown2018-07-22T09:24:08.290+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'killing process with pid: 9740kgcrs:SECONDARY> rs.isMaster()

节点 实例 数据 配置 选举 故障 标准 端口 切换 副本 口号 原理 日志 票数 仲裁 相同 代码 只有 进程 选举权 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 丹东市网络安全指挥中心在哪 安康市系统软件开发 海淀区网络技术信息需求 有单引号的数据库怎么写 在哪里查看商业数据库 这两年发生的网络安全事件 新加坡网络安全研究 广电网络安全隐患自查报告 临沂软件开发报价 软件开发员发多少月工资 网络安全事件举报电话 在线教育青少年网络安全宣传 怀旧服工程可以在服务器刷吗 邹平oa管理软件开发公司 计算机网络安全规则 倩女幽魂手游魅族服务器 饥荒服务器怎么安全关闭 如何查询有那些数据库用户 安徽交通软件开发公司 世界癌症报告数据库 全国报刊全文数据库 科达奇软件开发公司 sql数据库安全角色管理 虚拟机安装中兴新支点服务器系统 腾讯用的网络安全是哪家公司 二手服务器电源 计算机网络安全最为重要的内容是 网络安全小卫士教学设计 低级别联赛数据库 我的世界服务器莫名其妙被毁
0