台州市建设工程质量检测中心网站,青岛建站,免费双语网站模板,wordpress 伪静态 403开头还是介绍一下群#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis #xff0c;Oracle ,Oceanbase 等有问题#xff0c;有需求都可以加群群内有各大数据库行业大咖#xff0c;CTO#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 #xff08;… 开头还是介绍一下群如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis Oracle ,Oceanbase 等有问题有需求都可以加群群内有各大数据库行业大咖CTO可以解决你的问题。加群请加微信号 liuaustin3 共1200人左右 1 2 3新人会进入3群 如果没有法律我可能真想做了这个事情群里最近有人问MongoDB 双机热备我非常愤怒的告诉他们不可以不应该不要NO NO NO 。 这个底气我是有的为什么官方 official 问答解释了这个问题我还真好笑还真有人提出这个问题。哎使用MongoDB 7年了从3.2 到了现在的4.4 (惭愧我们准备5.0) , 没有想到MongoDB 的知识普及率还那么低还有人问出 MongoDB 双机热备还有人写出这样的文章。 先看完官方的回复 MongoDB Developer Community 这里普及一个基本的概念MongoDB 本身在生产环境中从来不存在单机使用方式不抬杠如果你的业务随时可以DOWN机那你不在讨论的范围同时必须要注意MongoDB 本身是一款历史和传统相比很新的数据库他本身在设计之初就融入了分布式的概念网络数据传输的概念自动切换的概念以及服务程序和程序员至上的方式最终是不能用传统数据库的理念去使用MongoDB 的。 在MongoDB 的生产环境中有最小化成本投入和标准成本投入以及特殊成本投入。 举例如果你的项目需要成本较低那么你在搭建MongoDB 的时候可以加入 Arbiter节点 但在标准的应用里面官方也不建议你使用Arbiter ,而是标准的三节点的MongoDB Replicaset. MongoDB 具有完善的复制集的协议也就是我们知道的 protocol version1 简称 PV1 这个协议是从MongoDB 3.2后开始的他详细的定义了如下的一些概念 1 写入数据的概念在写入数据的时候 w:1 是MongoDB 特有的概念其中可以标定到底需要几个节点写入后才可以算是数据写入比如你有3个节点你在一条插入数据的语句执行后MongoDB 会根据你语句中的数字来判断你的写入的操作是否完成给与数据安全写和性能之间的平衡的权利交给你来抉择。当然你可以使用默认的设置 majority 大多数写的概念完全能Hold 95%以上的应用场景。 2 在早期的PV0中版本为 MongoDB 3.4.1 之前的版本与PV1 版本的不同在于PV1 在4.0 后不会在支持具有副本集W:1 回滚的可能性。 3 投票权和否决权在MongoDB 中为什么必须是三个节点我想在MySQL 使用MHA 的那些同学也深知这个道理脑裂也就是如果你是两个节点的情况下你网络出现问题如何判断你当时那个节点应该是主那个节点应该从两个节点自说自话各自为政导致数据不一致这点MySQL 的同学应该是深知的那么为什么到了 MongoDB 这样一个使用 raft like 协议的数据库提出双机热备这样上世纪早期数据库提出的一个算不算高可用的理念。请别把Oracle 的 DG 放到这里。 这里在MongoDB PV1 协议中明确指出各个成员可以在特性选举的情况下对候选人投赞成或不赞成但单方面不能停止选举这在两个节点是无法实现这个功能的因为因为因为 在两个节点的情况下瞬间两个节点都认为他们是主节点需要有第三个节点来进行仲裁到底谁是真正的主节点。PV1 中使用了 term的概念允许快速检测到同时存在主节点并在短时间进行多次的成功的选举这更是在两个节点的情况下无法完成。 在MongoDB 中4.0以上的版本PV1防止一个成员对于选举重复发起投票通过term修改副本集协议中的版本在MongoDB 副本集中每个成员都会维护一个term计数器计数器会递增标识每次选举中状态是否进行了切换这里在任意一个member接受到选票时他会检查当前自己的term和选票上的term 谁大谁小如果自己小则更新自己并接受该选票同时也会验证选票中候选人的信息来确保自己有没有重复投票通过这样的方式每个成员对每个 Term 发送一次选票避免重复投票和选择冲突而这一切都建议在至少3个节点的基础上。 所以我不知道提出MongoDB 双机热备的文章的作者是否了解MongoDB的基本原理。 同时这里也建议不在使用MongoDB 3.x ,目前在用MongoDB 应该在4.X 起步也是基于3.x 在使用PV0 协议时的一些可能的问题的基础上。 如果你还在使用3.x 的Mongodb 3.2 3.4 可以通过如下的命令来修改你当前的使用的版本信息 cfg rs.conf();
cfg.protocolVersion1;
rs.reconfig(cfg); 看似简单的MongoDB ,一点都不简单如果你觉得他简单那是你还没有深入。 参考文章链接 https://www.mongodb.com/community/forums/t/setup-a-2-node-mongodb-replica-set/3323