您的位置:首页 > 其它

副本集指南(二)

2015-09-16 19:59 204 查看

二、副本集成员配置

1、调整成员的优先级

成员的优先级设置可以影响primary选举的结果,使用这个设置可以保证一些成员更容易被选举为primary,或者永远不能成为primary。
你可以通过更新副本集配置中的成员数组来修改优先级。数组以0开始,不要和成员的_id混淆。
为了阻止一个成员成为primary,你可以设置它的优先级为0。隐藏成员、延迟成员、仲裁者的优先级,都是0。
调整优先级,会使当前的primary下台,导致一次选举。

step1 复制副本集的参数到一个变量中

cfg=rs.conf()

step2 修改每个成员的优先级数值。

cfg.members[0].priority=0.5
cfg.members[1].priority = 2
cfg.members[2].priority = 2

step3 应用新的副本集参数

rs.reconfig(cfg)

2、阻止一个成员变为primary

副本集中,默认时,每一个成员都可以被选举为primary。你可以使用优先级为0来避免。无法被选举为primary的成员无法触发选举。其他方面,这些成员和所有非primary成员一致。

step1 复制副本集的参数到一个变量中

cfg=rs.conf()

step2 修改每个成员的优先级数值。

cfg.members[3].priority=0

step3 应用新的副本集参数

rs.reconfig(cfg)

3、配置一个隐藏副本集成员

隐藏成员作为副本集的一部分,不能够成为primary,并且对其他应用端不可见。隐藏成员可以投票。
隐藏成员可以用于支持延迟成员,如果你仅仅只想阻止一个成员变为primary,可以配置其优先级为0。如果chainingAllowed设置允许secondary成员从其他secondary成员复制,MongoDB默认优先挑选非隐藏成员作为复制目标。MongoDB仅仅将隐藏成员作为最后的手段。如果你想让secondary成员从隐藏成员处复制,需要replSetSyncFrom指令来覆盖默认的复制目标。
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
rs.reconfig(cfg)

4、配置一个延迟成员

延迟成员,能够延迟读取primary的oplog。
延迟成员一般是优先级为0,防止被选举为primary;一般被隐藏,防止成为其他primary的复制目标。
cfg = rs.conf()
cfg.members[0].priority = 0
cfg.members[0].hidden = true
cfg.members[0].slaveDelay = 3600
rs.reconfig(cfg)

5、配置一个无投票权的成员

可以禁止成员的投票权,这并不会影响其他成员对其投票选举为primary。通过此方法,可以达到选举的大多数效果。
cfg = rs.conf()
cfg.members[3].votes = 0
cfg.members[4].votes = 0
cfg.members[5].votes = 0
rs.reconfig(cfg)

6、将一个secondary成员转变为仲裁者

如果你有一个成员不再被需要了,你可以将其转变为仲裁者,来选举primary。

step1 关闭此secondary成员
step2 在primary上,使用mongo shell从副本集中移除该secondary成员

rs.remove("<hostname><:port>")

step3 检查副本集设置,是否已经移除成功

rs.conf()

step4 清空或转移目标secondary的数据

mv /data/db /data/db-old

step5 创建一个新目录,来启动该secondary的mongod实例

mkdir /data/db
mongod --port 27021 --dbpath /data/db --replSet rs

step6 在primary上,使用mongo shell添加该secondary为仲裁者

rs.addArb("<hostname><:port>")

step7 检查

rs.conf()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: