复制集是一组提供信息沉余和高可用的nongo进程
复制集成员包括:
primary(主节点):
主节点负责接收所有的写操作.
secondaries(副节点):
副节点从主节点复制数据, 以维护它们有相同的数据. 副节点可以没有投票权,或者优先级是0
在复制集中可以添加Arbiter(仲裁者), Arbiter不进行数据的复制, 但是当primary不可用时, arbiter会参与新primary的选举.
复制集的最小推荐配置是三个数据服务成员(一主两副), 你也可以配置成一主一副一仲裁 ,但是最少三个数据服务才能提供更好的信息沉余
一个复制集最多有50个成员, 但是参与投票的只有7个
Primary
主节点是复制集里唯一一个可以接收写操作的成员. MongoDB在主节点上进行写操作, 然后记录主节点的操作记录. 副节点复制这些记录, 然后在自己的数据集上执行这些操作
下图是三个成员的副本集, 主节点负责写操作, 副节点复制主节点的oplog, 然后应用到他们的数据集上.
所有的复制集成员都可以进行读操作. 但是默认情况下程序会在主节点上进行读操作.
复制集最多只能有一个主节点, 如果这个主节点变得不可用了, 会通过选举机制推举出一个新的主节点.
Secondaries
副节点在自己的异步线程去操作来自主节点的oplog, 应用到自己的数据集, 从而实现复制数据.
下图是三个成员的副本集, 主节点负责写操作, 副节点复制主节点的oplog, 然后应用到他们的数据集上.
尽管不能在副节点上执行写操作, 但是可以执行读操作.
副节点可以变成主节点. 当主节点不可用时, 复制集通过选举从副节点里选取一个作为新的主节点.
可以通过一些配置使副节点实现一些特定功能:
1.阻止它成为主节点, 这样它就可以成为一个数据备份库
2. Prevent applications from reading from it, which allows it to run applications that require separation from normal traffic.(不理解...)
3.作为镜像, 可以从一些错误恢复数据,比如误删了表.
Arbiter
仲裁者不会复制数据,并且不会成为主节点. 仲裁者会参与主节点的投票. 它通常只有一票, 所有当数据服务是偶数时, 不想添加服务增大开销, 可以增加一个仲裁者.
重要提示:
不要在主节点或者副节点的服务器上运行仲裁服务!