且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

【MongoDB训练营】第三课:复制集使用及原理介绍 答疑汇总

更新时间:2021-10-16 17:28:51

1.MongoDB副本集模式下,如果复制其中一个 节点的DB目录文件到其他新的3台机器上,是否可以使用这3台机器组建一个副本集,而且不需要这3台机器间再去重新同步数据呢?
阿里云帮助文档:
https://help.aliyun.com/document_detail/58329.html
里面是只把数据复制到一台机器上,然后以单节点模式恢复MongoDB物理备份的数据,然后再删除单节点上local库中原有副本集配置信息,然后再准备两个空节点,跟这个单节点模式的节点initiate成一个新的集群。这样的话,需要在2个空节点间传送数据,现在想避免这种数据传送,请问老师该如何操作。

答:可以以拷贝数据文件的方式重新组建新的副本级节点,但是要注意数据的一致性。
***实践:以三节点副本集为例,可以把一个节点shutdown,拷贝数据到新节点,最后在主节点执行rs.add把新节点加入;fsynclock写锁定,保证数据是最新且一致的。

2.作为之前没有接触过mongodb的人感觉课程内容听不太懂怎么办?另外能不能介绍些mongodb severless的内容,官网介绍说它完美解决了MongoDB使用门槛高的问题,帮助中小客户轻松上云,那么它解决了哪些运维的门槛啊?

答:大家可以去mongodb大学进行自我学习,mongodb serverless 可以更加透明的提供mongodb服务,提供弹性的扩容;不需要关注太多的参数配置,最后就是性价比了,哈哈。

3.ops manager是可以单独购买的还是必须购买企业版?有没有可以备份oplog的第三方工具?如果没有现成的 工具如何在oplog写满时备份oplog

答:ops manager 可以在官网下载,可以做到实例部署、监控、慢日志分析,op log备份等;mongodb dump可以备份op log 另外阿里云也提供这个功能。

4.我在分片副本集上采用writeConcern=majority, readConcern=majority设置进行数据读写时,某个写操作由于返回writeConcernException而失败,但是随后的读操作却依旧能读到该写写入的值,请问老师这是因为问题出在哪?这样的写操作应该认为它写入成功了吗?

答:要关注这个writetimeout参数,比如5s,但是复制延迟比较高,还没有及时复制到备库,但是再有一会时间,就满足了majority,那么再等一会是都可以都读到的,还有就是readConcern 比如是local的话是本地就是可以读到的。

5.Q1. 副本集 和 复制集 是两个概念 还是一个?
Q2. linux 环境下 安装的 MongoDB 的日志默认存放位置在哪儿?
Q3. 同步时在什么时候判定同步完成?

答:副本集和复制集是一个概念,replication set
op log 存放的位置是可以通过参数配置的。
system log:

path

storage:

dbpath:

使用下面的命令可以检查集群同步的状态及一致性:
rs.status
rs.PrintSlaveReplicationInfo
rs.PrintReplicationInfo

6.可以讲解一下因果一致性吗?

答:因果一致性,个人感觉这块不清楚的可以了解下事务隔离级别,参考老师的链接。

7.数据量 特别大,比如超过1T 的副本集有什么比较好的备份方案么?

答:阿里云 云盘提供快照功能实现备份,建议配置hidden节点专门进行备份运维操作。

8.请问采用三节点副本集的mongo时,会有可能出现由于副本集同步时间差的问题,造成数据从副本读取缺失?这种情况可以通过什么办法避免呢?

答:异步复制,要避免这种情况,还是要减少大批量事务,
如果对一致性要求有一定要求,可以设置合适的readconcern,writeconcern,比如都是majority可以兼顾性能和数据的一致性要求。

9.云数据库平台开发,问题1的扩充,如果是使用物理备份的话,三个节点都用的其他节点的物理备份。新建副本集时,rs.init好像会清除掉oplog,secondary和hidden节点认为自己无法进行部分同步,最后导致全量同步,这个问题请问怎么解决?

答:问题1 的回答是针对新建实例加入现有副本集的情况

10.增加了事务处理的三节点mongo,事务提交的延迟时间,节点同步的延迟时间是怎么处理的呢?

答:表示一样不太明白,节点同步延迟时间,主要看primary、secondary的负载,
事务的提交延迟如果硬要和节点的同步延迟扯上关系 我感觉就是那个writeconcern 你是majority还是其他。

11.请问夏老师从ops监控里面看到cursor timeout会经常出现,如何能定位到具体的timeout语句?

答:还是要开发人员及时关闭cursor,另外监控的话 我觉得可以从应用或者中间层测打一些标记。

12.刚刚视频;里的选举投票是什么意思,成员心跳又是什么意思?

答:高可用机制, raft这个在很多数据库如redis cluster 中都有应用,不了解的同学自学下,一劳永逸的事情

感谢@任旭龙 对答疑整理的支持。