[笔记]mongodb--副本集


    参考: http://docs.mongodb.org/manual/core/replica-set-elections/


节点属性
    arbiterOnly 是否为仲裁身份
    priority 投票选举时优先级,越高优先成功primary
    votes 投票数。默认为1; 0代表不参与投票; 不建议设为大于1的值,会导致死锁等问题
                注意:
                0虽然不参与投票,但可以成功primary,原文如下:不太能理解
                    Non-voting members do not vote in elections, but can veto an election and become primary
                副本集最多12个节点(standard、passive、arbiter),所以只需要配置7个节点的值为1即可

primary 降级为secondary
    收到降级命令 runCommand("replSetStepDown":N),N秒内在选举中不会被选为primary
    有secondary的priority比自己高
    不能与半数以上的member通信,自己降级,runCommand("replSetStepDown":N, force:true)
    

选举primary
    注意:选举过程中,集群对外停止写服务
    触发条件
        副本集初始化
        primary宕机或降级
        每2秒进行心跳检测,secondary 失去primary联系,priority大于0时,会发起primary选举           
    
    选举规则
        Priority       先根据每个节点的优先级priority(默认为1),优先级高的会优先选为primary
        Optime      同priority下optime最高的成为primary
        Connection 同optime,则比较与member(有投票权的,而不是set中所有)连接数,多的成为primary
        如果也相同,则arbiter发挥作用


    如何进行投票?
        配置1个仲裁(arbiter)节点,防止2个普通(standard)节点,否则无法进行故障切换。因为必须超过半数投票才能成为primary
        Only members in the following states can vote:PRIMARY, SECONDARY, RECOVERING, ARBITER, and ROLLBACK.
        
        实现细节?



请使用浏览器的分享功能分享到微信等