按功能区分复制集成员
- 主节点(PRIMARY):默认提供读写服务的节点。
- 从节点(SECONDARY):提供读服务的节点,但可以提供多样性服务,如可以转为“隐藏节点”对程序不可见、转为“延时节点”延时复制节点、转为“投票节点”具有投票权(默认所有节点都有投票权)但不是arbiter。
- 投票节点(ARBITER):ARBITER节点,无数据副本,仅作选举和充当复制集节点、也称它为选举节点。ARBITER跟所有节点都有投票权不同的是,ARBITER节点的投票权无法取消,而其他节点可以取消。
初始化复制集的配置文档样例
下列文档提供了一个复制集配置文档的表示,你的复制集的配置可能只包括这些设置的一个子集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
config = { _id: <string>, version: <int>, protocolVersion: <number>, members: [ { _id: <int>, host: <string>, arbiterOnly: <boolean>, buildIndexes: <boolean>, hidden: <boolean>, priority: <number>, tags: <document>, slaveDelay: <int>, votes: <number> }, ... ], settings: { chainingAllowed : <boolean>, heartbeatIntervalMillis : <int>, heartbeatTimeoutSecs: <int>, electionTimeoutMillis : <int>, getLastErrorModes : <document>, getLastErrorDefaults : <document> } } |
初始化复制集的配置文档参数
_id
值类型:字符串
默认值:无
说明:复制集名称,一旦设置了就不能更改复制集名称.
示例:id:”ywnds”
version
值类型:整数
默认值:无
说明:用递增的数字来区分复制集的配置文档应用的次数,执行一次rs.reconfig,版本就会加1.
示例:version:1
configsvr
值类型:布尔值
默认值:false
说明:3.2版本新添加,指定复制集用于分片集群服务器的配置,如果复制集是一个分散的集群配置服务器,那么设置此值为“true”,这个参数时.
示例:configsvr:false
protocolVersion
值类型:整数
默认值:1
说明:3.2版本新添加,MongoDB版本1的复制协议减少复制集切换时间和加速同时初选的检测。新的复制集默认情况下使用版本1。以前MongoDB使用0版本协议并不能运行一个复制集指定配置protocolVersion:1.
示例:protocolVersion:1
members
值类型:数组
默认值:无
说明:一个数组的成员配置文档,包括复制集的每一个成员,在更新复制配置对象时,访问该成员数组中的复制集成员数组索引,数组索引以0开头.
示例:members[{_id:0,host:192.168.60.60}]
members[N]._id
值类型:整数
默认值:无
说明:赋值集中每个成员的数字唯一标识符,一旦设置不能改变members[N]._id的成员.
示例:_id:0
members[N].host
值类型:字符串
默认值:无
说明:用于添加复制集主机,指定主机名或IP,指定端口.
示例:host:”192.168.60.60.27017″
members[N].arbiterOnly
值类型:布尔值
默认值:false
说明:用于设置当前复制集某成员为仲裁成员(投票节点).
示例:host:”192.168.60.60.27017″,arbiterOnly:true
members[N].priority
值类型:整数[0-1000]
默认值:1
说明:用于设置当前复制集某成员的优先级,当priority为0时表示永远没有资格成为主节点,且priority的值为0也是设置隐藏节点及延迟节点的前提条件。如果在复制集中主节点的优先级大于默认值1,那么当主节点宕机重新恢复后成为从节点但由于优先级大于现有的主节点从而会重新取得主节点状态.
示例:host:”192.168.60.60.27017″,priority:1
members[N].hidden
值类型:布尔值
默认值:false
说明:用于设置当前复制集某成员为隐藏节点,一但设置为隐藏节点后对应用程序来说是不可见的,但是priority必须为0时设置隐藏节点才会生效.
示例:host:”192.168.60.60.27017″,hidden:true
members[N].votes
值类型:整数
默认值:1
说明:用于设置当前复制集某成员是否为投票节点(一个节点投1票,2.6之前可以设置投票数),当值为1时表示有投票权利,当值为0时没有投票权利。注意votes只能对ARIBTER之外的节点设置,而对于ARIBTER确无法生效。目前副本集节点最多可以有12个,其中只有7个可以投票,也就是说当你的投票节点大于7个时,其余节点就需要把votes的值设为0不允许投票.
示例:host:”192.168.60.60.27017″,votes:1
members[N].slaveDelay
值类型:整数
默认值:0
作用:用于延迟复制主节点的数据,默认值0表示不延迟,可以设置3600秒延迟1小时.
示例:host:”192.168.60.60.27017″,slaveDelay:0
members[N].buildIndexes
值类型:布尔值
默认值:true
作用:当前这个节点是否将主库索引也在此节点上建立,但是对于_id无效,_id都会复制。但是如果设置此节点为false的话,那么priority的值也必须为0.
示例:host:”192.168.60.60.27017″,buildIndexes:true
实例配置
1)初始配置
生成配置文档并复制给config变量
1 2 3 4 5 6 7 |
> config = { _id:"ywnds", members:[ {_id:0,host:"192.168.60.60:27017"}, {_id:1,host:"192.168.60.60:27018"}, {_id:2,host:"192.168.60.60:27019"} ]} |
更新配置文档参数,设置27019为arbiterOnly(投票节点)
1 |
> config.members[2] = {"_id":2,"host":"192.168.60.60:27019","arbiterOnly":true} |
应用配置文档
1 |
> rs.config(config) |
2)再次配置
把配置文档返回的信息赋值给config变量
1 |
> config = rs.conf() |
重新应用配置文档,但需要在主节点上执行
1 |
> rs.reconfig(config) |
配置实例参考:MongoDB复制集部分讲解
配置文档参考:https://docs.mongodb.org/manual/reference/replica-configuration/