目录
摘要
副本集,与从主复制的区别,投票机制,偶数节点
副本集
副本集和主从复制
- 副本集是具有故障恢复功能的主从集群
- 而主从复制的目的是提高读写效率
- 副本集不像主从复制没有固定主节点
- 本质上是具有 HA 功能的主从集群
创建副本集
多次使用同一个副本集名执行下列语句,就会生成一个包含多个节点的副本集
--port yourport --dbpath yourdbPath --replSet 副本集名
创建完副本集后控制台会显示如下语句,标示副本集还未进行初始化
replSet can't get local.system.replset config from self or any seed (EMPTYCONFIG)
初始化副本集
config_test = {
"_id": "node",
"members": [
{
"_id": 0,
"host": "localhost: 27017"
},
{
"_id": 1,
"host": "localhost: 27018"
},
{
"_id": 2,
"host": "localhost: 27019"
}
]
}
rs.initiate(config_test)
成功初始化后,重新执行 mongo
后命令行控制符会由 >
变为 node:PRIMARY>
,此为活动节点,或 node:SECONDARY>
,此为非活动节点
查看副本集状态
rs.status()
查看当前节点是否为活动节点
db.isMaster()
副本集特点
- 备份节点不对外提供服务,所以无法插入也无法查询。
- 活动节点 insert 数据后,备份节点无法查到,但数据已经备份了,只是因为备份节点不对外提供服务。
- 当活动节点宕机后,备份节点会自动切换到活动节点,此时查看副本集状态时,原活动节点不会消失,而是 health 由
1
变为0
- 当原来的活动节点恢复后,其不会抢现在活动节点,而是变为备份节点
- 副本集任何时间只有一个活跃节点
- 副本集使用投票机制决定谁成为活跃节点,优先级最高、数据最新的节点获胜
节点类型
standard 常规节点
存储完整的数据副本,参与投票,有可能成为活跃节点passive
存储完整的数据副本,参与投票arbiter 仲裁者
只参与投票
偶数节点的问题
服务器不可用除了服务器崩溃还可能是节点之间的网络连接断开了,这种时候如果大部分节点依然能够通信,则 Mongo 认为网络还有效。
因此,如果是奇数节点,如 “5” 个节点,遇到网络故障时分裂成 “2” 个节点和 “3” 个节点的片段。由于后者占多数,所以 Mongo 会从后者选出活跃节点继续响应请求。
如果是偶数节点,如 “4” 个节点,则可能分裂成 “2” 个节点和 “2” 个节点,由于 Mongo 无法找到大部分节点,所以停止了服务。
因此,总是应该使用奇数节点而不是偶数节点。