MongoDB副本集成员
复本集是MongoDB提供的一组冗余和高可用性的进程。
主服务器
主服务器接收所有写操作。
备份服务器
备份服务器的操作来自于主服务器,维护一个相同的数据集。
备份服务器可以被指定为特殊的用途,例如备份服务器可以指定为 non-voting或者priority 0.
在副本集成员中你还可以额外指定一个 arbiter,这个副本集不会保存数据。
然而, arbiter充当的角色是当主服务器挂掉后参与从备份服务器中选择一个新的主服务器。
在一个副本集中推荐最少指定三个成员:一个主服务器两个备份服务器.你也可以指定其中两个为数据载体,一个 arbiter,一个主服务器,一个备份服务器。
为了更好的冗余性能,最好指定三个成员。
在3.0.0后,一个副本集中最多有50个成员但是只有7个有投票权,在之前的版本中,一个副本集最多只有12个成员。
主服务器
主服务器是唯一一个可以接受读操作的成员,MongoDB接受在主服务器上写入然后把操作记录在 oplog。备份服务器利用这份记录里面的信息来自我更新。
在一个拥有三个成员的副本集中,主服务器接收所有的写操作,然后备份服务器复制这些操作在自己身上。
副本集上的所有成员都可以接受读操作,然而,默认情况下,应用程序默认将读操作都指向主服务器。查看 Read Preference获取改变默认行为的详细信息。
副本集中最多只能有一个主服务器。如果当前的主服务器不可用,选举机制会指定一个新的主服务器。详细信息看 Replica Set Elections。
备份服务器
备份服务器主要的职责是保存主服务器的副本。要复制一份数据,备份服务器会在主服务器的oplog中找到相关的操作更新自己并且该过程运行在异步线程中。一个副本集中可以拥有一个或多个备份服务器。
虽然客户端方面不能直接将数据写入到备份服务器,但是可以从备份服务器中读取数据。查看Read Preference来获取客户端直接从备份服务器读取的详细信息。
如果当前主服务器宕机了的话,一个备份服务器可以升级为一个主服务器,副本集持有将哪个备份服务器升级为主服务器的选举算法。
查看 Replica Set Elections获取相关详细信息。
你可以将一个备份服务器指定为一个特殊的用法,备份服务器可以指定为以下用法:
- 避免升级为主服务器,该备份服务器可以作为永远备用。
- 避免应用程序读取它,也就是说运行在正常的分流模式下。
- 持有"历史"快照以便在某些错误下恢复,例如无意中删除了数据库。
Arbiter
一个Arbiter不会持有数据备份,且不可能成为主数据库。数据集中Arbiter持有可以为哪个备份服务器成为主服务器而投票的权利。
Arbiter肯定会有投票权,并因此允许副本集具有不均匀数量的投票成员,而没有复制数据的额外成员的开销。
在3.6版本开始,Arbiter持有priority 0,当你将MongoDB升级为3.6并且该数据库的副本集中持有Arbiter priority 1,3.6版本会将它配置为priority 0.
重要
不要在一个持有主服务器或者备份服务器的系统上额外持有Arbiter。