Mongo | 高可用部署及应急处理
首先Mongo集群的安装和部署参考以前的文章:/2021/02/07101629-001-install.html
高可用方案
Mongodb一共有三种集群搭建的方式
|
|
其中,Sharding集群也是三种集群中最复杂的。副本集比起主从可以实现故障转移!而主从不能故障转移,需要手工切换。目前已不推荐使用主从模式,取而代之的是副本集模式。副本集其实一种互为主从的关系,可理解为主主。
副本集指将数据复制,多份保存,不同服务器保存同一份数据,在出现故障时自动切换。对应的是数据冗余、备份、镜像、读写分离、高可用性等关键词;
而分片则指为处理大量数据,将数据分开存储,不同服务器保存不同的数据,它们的数据总和即为整个数据集。追求的是高性能。在生产环境中,通常是这两种技术结合使用,分片+副本集。
判断数据是否一致
可以用比较笨的办法,依次在主从数据中查询每个db的状态。
|
|
主从热切换
有时候需要手动切换Mongo的主从服务器;对于高可用方案部署的mongo来说,这个操作很容易。
前面我们已经学习过动态调整Mongo集群中的节点。可以灵活的添加或者删除副本集节点和仲裁节点。集群中有两个以上副本集之后就可以随意切换主从了。
|
|
备份还原数据
由于我们在三台实例的配置过程中,没有人为指定主从的服务器,因此一旦主不通之后,从和仲裁服务器很快会选举现在的从变成主。而以前的主在启动以后自动会变成从。其实这个过程中存在数据没有完全同步而丢失数据的可能。
分享一些操作技巧:
|
|
版本升级变化过大的情况下,稳妥的办法还是导出数据在新实例上还原。
详细可以参考:https://www.cnblogs.com/operationhome/p/10724374.html
|
|
几组导出导入工具
- mongoexport/mongoimport :导入/导出的是JSON格式或者CSV格式
- mongodump/mongorestore :导入/导出的是BSON格式
- bsondump:将 bson 格式的文件转储为 json 格式的数据
两组命令的区别
- JSON可读性强但体积较大,BSON则是二进制文件,体积小但几乎没有可读性。
- 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用
mongodump/mongorestore
可能不会成功,具体要看版本之间的兼容性。 - 当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即
mongoexport/mongoimport
是一个可选项。JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。 mongodump/mongorestore
支持库和集合级别的操作,mongoexport/mongoimport
只支持集合级别操作。mongodump
导出文件包含索引页。mongoexport
导出文件不包含索引页。
更多备份还原参考:
https://blog.51cto.com/wujianwei/2464417
https://www.cndba.cn/dave/article/107972
错误1:打开文件数太多
[conn136921] cannot open /dev/urandom Too many open files
[conn136921] Fatal Assertion 28839
[conn136920] cannot open /dev/urandom Too many open files
[conn136920] Fatal Assertion 28839
遇到这种情况可以用下面的命令查看:
|
|
MongoDB的工作原理是一个集合一个文件,一个索引一个文件。所以一共有多少集合,至少就会有集合数量x2个打开文件(以1集合文件+1索引文件计算)被占用。再考虑到网络连接数量,要保证足够大的open files值。
安装 Mongo的时候要保证下面的参数设置:
|
|
以上设置都是需要重启服务器的,下面这种方法可以热设置,但是重启服务器会失效,建议两种设置同时做。
|
|
更多参考:
https://www.pianshen.com/article/14371909869/
(完)
- 原文作者: 闪电侠
- 原文链接:https://chende.ren/2021/11/16153737-002-ha-qa.html
- 版权声明:本作品采用 开放的「署名 4.0 国际 (CC BY 4.0)」创作共享协议 进行许可