复制集
- 主从节点,主节点负责读和写,从节点只有读取功能。
- 从节点备份数据,主节点故障后,从节点替换主节点。
- 每个节点都会向其他节点发送心跳,默认每隔2秒一次,超过10秒超时(默认)。
- 复制集中最多50个节点。
选举
- 候选节点发起选举,每个节点投票比自己更同步的节点
- 得到超过半数选票的节点会当选为主节点
- 复制集中最多可以有7个投票节点
- 触发条件:心跳超时、复制集初始化、新节点加入复制集
- 没有数据的节点可以投票,不能成为主节点
同一台服务器,使用docker创建复制集
# 创建network docker内部使用,是应为在同一天服务器上才用的,不同服务器可用不设置
docker network create mynetwork
# 查询使用的应用
docker network ls
# 运行三个节点
docker run --net mynetwork --name mongol -v /mymongo/data1:/data/db -p 27017:27017 -d mongo:4 --replSet myset --port 27017
docker run --net mynetwork --name mongo2 -v /mymongo/data1:/data/db -p 27018:27018 -d mongo:4 --replSet myset --port 27018
docker run --net mynetwork --name mongo3 -v /mymongo/data1:/data/db -p 27019:27019 -d mongo:4 --replSet myset --port 27019
# 创建复制集
docker exec -it mongo1 mongo
> rs.initiate(
{
_id: "myset",
members: [
{_id: 0,host : "mongo1: 27017"},
{_id: 1,host : "mongo2: 27018"},
{_id: 2,host : "mongo3: 27019"}
]
}
)
# 查看状态
> rs.status()
非docker添加方式
- 使用下面配置启动 3个mongodb数据库(port使用27001,27002,27003