Mongodb中的副本集成员

在先前的文章中,我们讨论了mongodb中副本集的许多方面。 在这些文章中,我们讨论了有关成员的许多事情。 那么,这些成员是什么? 他们的目的是什么? 让我们在本文中讨论这些事情。

mongodb中的成员是什么?

简而言之,mongodb中的成员是mongod进程,需要在副本集中执行。 现在,通常只有2个成员:

主:

根据mongodb.org,主要成员接受所有写操作。

次要:

辅助数据库从主数据库复制操作以维护相同的数据集。 辅助服务器可能具有用于特殊用途配置文件的其他配置。 一个副本集中最多可以使用12个成员。 只有7人可以投票。 所以现在出现了一个问题:为什么会员需要投票?

主要成员的选择:

每当启动副本集或主成员不可达时。 或者简单地说,如果不存在主要成员,则开始选举以从次要成员中选择主要成员。 尽管成员的类型比以前2种少,但我们稍后会讨论。

主要成员:

主成员是副本集中接收写操作的唯一成员。 Mongodb在主数据库上应用写操作,然后在主数据库的操作日志中记录该操作。 副本集的所有成员都可以接受读取操作。 但是,默认情况下,应用程序会将其读取操作定向到主要成员。 副本集最多可以有一个主副本。
在下面的三成员副本集中,主数据库接受所有写操作。 然后,辅助服务器复制操作日志以应用于其数据集。

primare_mem.jpg

次要成员:

次要成员维护主要成员的数据集的副本。 为了复制数据,辅助服务器在异步过程中将主服务器的操作日志中的操作应用于其自己的数据集。 副本集可以具有一个或多个辅助成员。 数据无法写入辅助节点,但可以从辅助成员读取数据。 在主要成员缺席的情况下,次要成员可以通过选举成为主要成员。
在以下三成员副本集中,辅助成员将复制主要成员。

secondary_mem.jpg

隐藏的成员:

除前两个成员外,其他成员也包含在副本集中。 其中之一是隐藏成员。 隐藏的成员不能成为主要成员,并且对客户端应用程序不可见。 隐藏的成员会在选举中投票。 隐藏成员非常适合具有与副本集中其他成员不同的使用模式的工作负载。 另外,它们必须始终是优先级为0的成员,因此它们不能成为主要成员。 隐藏节点最常见的用途是支持延迟成员。 要将辅助成员配置为隐藏,请在其成员配置中将其优先级值设置为0并将其隐藏值设置为true。
要配置隐藏成员,请在连接到主要对象的mongo shell中使用以下顺序,并通过members数组中的数组索引指定要配置的成员:

c.members[0].priority = 0
c.members[0].hidden = true
延迟成员:

另一个成员是延迟成员。 延迟成员还从数据集中复制数据。 但是顾名思义,复制的数据集比实际时间延迟。 例如,我们可以说如果我们有一个确定当前时间的应用程序。 然后,如果当前时间是09:00并且成员有一个小时的延迟,则延迟的成员没有比08:00更新的操作。
由于延迟成员是数据集的“滚动备份”或运行中的“历史”快照,因此它们可能有助于从各种人为错误中恢复。 延迟的成员会延迟应用oplog中的操作。 必须等于或大于维护窗口。 必须小于oplog的容量。 有关oplog大小的更多信息。 要配置延迟的辅助成员,请将其优先级值设置为0,将其隐藏值设置为true,将其slaveDelay值设置为要延迟的秒数。

c.members[0].priority = 0
c.members[0].hidden = true
c.members[0].slaveDelay = 1200
非投票成员:

关于复制集中的选举有很多讨论。 因此,在选举中,很少有成员参与并投票决定主要成员。 但是也有一些成员不参加投票。 这些成员称为非投票成员。 非投票成员允许您添加最多七个投票成员之外的其他成员以进行阅读分发。
要将成员配置为不投票,请将其投票值设置为0。

c.members[5].votes = 0
c.members[4].votes = 0

会员优先:

这些是副本集必须牢记的基本几个成员。 为了到达这里,我们已经将许多操作视为优先事项。 优先级确实是讨论的非常重要的事情。 副本集成员的优先级设置会影响初选的结果。 成员优先级设置的值确定选举中成员的优先级。 数字越高,优先级越高。

配置成员优先级:

要修改优先级,我们必须更新副本配置对象中的members数组。 优先级的值可以是0到1000之间的任何浮点数。优先级字段的默认值是1。在计划的维护时段内调整优先级。 重新配置优先级可能会迫使当前的主数据库降级,从而导致选举。 要阻止某个成员以选举为主,请将该成员的优先级分配为0。
我们可以通过3个简单的步骤完成优先级的配置。 让我们看看它们:

  • 将副本集配置复制到变量。

在mongo shell中,使用rs.conf()检索副本集配置并将其分配给变量。 例如:

c = rs.conf()
  • 更改每个成员的优先级值。

按照members数组中的配置更改每个成员的优先级值。

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

此操作序列修改c的值,以为members数组中定义的前两个成员设置优先级。

  • 为副本集分配新配置。

使用rs.reconfig()应用新配置。

rs.reconfig(c)

在本文中,我们讨论了副本集中的成员。 现在我们可以说成员是副本集的基础。 我们将对成员了解得更多,我们的控件将在处理mongodb中的数据时更快。

翻译自: https://www.javacodegeeks.com/2014/07/replica-set-members-in-mongodb.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值