前言:此系列根据作者在《NoSQL》数据库技术与应用一书校园课堂上,对于老师的提问地收集与回答,“(P1)”为此书书页。部分为开放性问题,若有错误,欢迎提出与指正;若有疑问与补充,欢迎在评论区探讨。望各位理性发言、友好交流、互相进步。
问1:为什么有些副本集成员要配置为没有投票权?(P134)
答:在官方网站上有一句话“一个副本集最多可以有50名成员,但仅有7名有投票权成员。如果副本集已经有7个投票成员,其他成员必须是无表决权成员”。副本集成员有优先级priority的概念,书中“在资源不均衡的副本集环境中,可以指定资源较差的服务器中的成员不能成为primary(主结点)”(P132)。故判断,拥有投票权的成员也因为一定原因投出的票更有效。7名成员之外的不具备投票权,可以防止投票时扰乱主结点的选出,也可以使整体结构更加简化。
【补充】:副本集成员有投票权结点总数为奇数(7个)的原因:参考网页(mongodb副本集数量为一定要为奇数? - SegmentFault 思否)的回答,为了防止出现平分,7个结点最多会成为4:3,不会有3:3这样的平票导致无法选出。
【补充】:主结点确定后,新的操作需要在主结点上进行,这样保证副本结点更新,以及主结点资源最优,有确认操作的权限。
【补充】:优先级高的成员并不一定就拥有投票权,优先级高≠拥有投票权。同理,拥有投票权的成员也不一定优先级高。
问2:4.5.2选举机制中“在选举出主结点之前,整个集群服务是只读的,不能执行写入操作”怎样去验证?(P141)
答:设置实验情况为正在选举主结点,在主结点未被选出的前提下,输入读写操作进行验证,此时,读可以成功,而写入不可以成功。则可以验证读写分离。
4.7课后习题答案(标注页数为书中对应答案出处)
一、填空题
1.主结点 仲裁结点(P116) 2.奇数(P117) 3.数据的冗余 自动故障转移(P115) 4.600(P125) 5.priority(P132)
二、判断题
1.×(P115) 2.×(P115) 3.√(P115、117 注意:异步只时间上的延迟,P117提到“每个副本结点的oplog都会保持与主结点的oplog完全一致的状态(可能会有一些延迟)”,而P140的完整同步和变化同步是数据上的同步,故此项正确。) 4.√(P116) 5.√(P122)
三、选择题
1.A(P124) 2.B(P115) 3.A(有争议,P116“定期轮询”,个人认为是A,老师讲解为C)
以上为《NoSQL》数据库技术与应用(版次:2020年10月第1版,印次:2023年8月第8次印刷) 第四章MongoDB副本集 衍生问题与回答。