`副本集replSet`
mongo副本集/复制集是mongo高可用性特征之一,是有自动故障恢复功能的主要集群。由一个Primary节点和一个或多个Secondary节点组成。
Mongodb客户端的所有数据都写入Primary,Secondary从Primary同步写入的数据,来保持复制集内所有成员存储相同的数据集,提供数据的高可用。
`副本集的原理`
主节点记录所有的变更到oplog日志。
辅助节点(Secondary)复制主节点的oplog日志并且将这些日志在辅助节点进行重放
各个节点之间会定期发送心跳信息,一旦主节点宕机,则触发选举一个新的主节点,剩余的辅助节点指向新的主。
10s内各辅助节点无法感知主节点的存在,则开始触发选举。
通常1分钟内完成主辅助节点切换,10-30s内感知主节点故障,10-30s内完成选举及切换。
1、启动容器
bs create mongodb
bs ps
说明:分别启动三个mongodb容器,分别为node1,node2,node3。
2、进入容器
docker exec -it mongodb_node1_1 bash
docker exec -it mongodb_node2_1 bash
docker exec -it mongodb_node3_1 bash
3、分别在三个容器安装mongodb
apt update
apt upgrade
apt install mongodb -y
4、修改配置文件,配置副本集
node1
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
bind_ip = 0.0.0.0
port = 27017
replSet = mycluster/172.18.62.38:27017
journal=true
node2
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
bind_ip = 0.0.0.0
port = 27017
replSet = mycluster/172.18.62.39:27017
journal=true
node3
dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
bind_ip = 0.0.0.0
port = 27017
replSet = mycluster/172.18.62.23:27017
journal=true
5、启动服务
/etc/init.d/mongodb start
6、初始化副本集
>config =
{
_id: 'mycluster',
members:
[
{
"_id":1,
"host":"172.18.62.23:27017",
priority: 3
},
{
"_id":2,
"host":"172.18.62.38:27017",
priority: 2
},
{
"_id":3,
"host":"172.18.62.39:27017",
priority: 1
}
]
}
node1选为主
node2为从
node3为从
7、测试
数据验证
use market
show dbs
db.createCollection("tb1")
show collections
主从切换验证
停掉主库
/etc/init.d/mongodb stop
查看从库状态
启动主库
/etc/init.d/mongodb start
查看从库状态
到此,主从副本集replSet搭建完成!