一、副本集(一个主,多个从,而且高可用)
1. 读操作可指定从主节点读取还是从从节点读取;写操作只写主节点,由主节点同步操作到从节点,可指节写多少个节点成功后才认为成功。
2. 主从复制和选主
(1)如果主挂了,mongodb保证只有操作序列为最大的从才能成为新的主,这只保证了数据尽可能地少丢,如果写操作是写1个节点以上成功才认为成功,可保证不丢数据
(2)如果新的主丢了老的主的部分操作,而且老的主又重新加入副本集,这时老的主会回滚操作以保证与新的主状态一致。回滚日志会被记录到文件里,通过工具可手动将回滚操作来新的主上执行,以恢复数据。另外,如果需要的回滚数据超过300M,老的主不会进行回滚,并log异常;如果要强制回滚到300M之前,可采用重新同步数据的方法来保证与新主状态一致,但不能恢复这300M数据了。
(3)mongodb可保证优先级最高的从节点变为主;
(4)优先级为0的从节点不进行选主,即不能成为主;
(5)除了主从节点,还有仲裁者节点,不保存副本数据,只用于选主投票
1.副本集支持手动变更主从关系吗?支持的话,变更会不会出现数据丢失呢?可对比下redis cluster
(1)You can force a replica set member to become primary by giving it a higher priority value than any other member in the set.(所以是支持的)
(2)变更不会出现数据丢失,因为mongodb会停止原主的更新操作,直到新主追上最新的plog后并成功变为主,才恢复更新操作(跟redis cluster的no force变更策略一样)。
2.shard 的config server
(1) 数据一致性保证?
Config servers are special mongod instances that store the metadata for a sharded cluster. All config servers must be available to deploy a sharded cluster or to make any changes to cluster metadata. Config servers do not run as replica sets. Each sharded cluster must have its own config servers.
When writing to the three config servers, a coor