部署Mongo主从仲裁
MongoDB的主从仲裁模式是一种复制架构,用于提高数据的可用性和容错能力。在主从仲裁模式中,数据在多个MongoDB实例之间复制和同步,其中包括一个主节点(Primary)、多个从节点(Secondary)和一个仲裁节点(Arbiter)。
主节点(Primary):主节点是负责处理所有写操作的节点,它接收来自客户端的写请求,并将这些写操作复制到所有从节点。主节点还负责处理读操作,可以直接响应客户端的读请求。
从节点(Secondary):从节点是主节点的备份,它们复制主节点的数据并提供读操作的能力。从节点通常用于读操作,不处理写操作。如果主节点发生故障,从节点可以被提升为新的主节点来继续提供服务。
仲裁节点(Arbiter):仲裁节点不存储数据,它的主要作用是在主节点和从节点之间进行投票选举,帮助系统做出决策。仲裁节点不参与数据复制,仅用于解决选举过程中的投票冲突。
在MongoDB的主从仲裁模式中,主节点负责处理写操作,从节点用于读操作和故障恢复,而仲裁节点则帮助系统进行选举和故障处理。这种架构提高了系统的可用性和容错能力,确保即使某个节点发生故障,系统仍然能够继续正常运行。
注解
:自动化部署docker mongo
主备仲裁集群环境。
前置条件:
部署Docker底层环境
参考此篇文章
:自动化安装docker底层环境
部署Mongo集群
创建数据目录
mkdir -p /data/docker/mongo
Docker命令行启动Mongo容器
主节点
docker run -itd --name mongo-primary --restart=always --privileged=true -v /data/docker/mongo/config:/data/configdb -v /data/docker/mongo/db:/data/db --network=host mongo:4.0.5 --bind_ip 0.0.0.0 --replSet mongo-rep
从节点
docker run -itd --name mongo-secondary1 --restart=always --privileged=true -v /data/docker/mongo/config:/data/configdb -v /data/docker/mongo/db:/data/db --network=host mongo:4.0.5 --bind_ip 0.0.0.0 --replSet mongo-rep
仲裁节点
docker run -itd --name mongo-secondary2 --restart=always --privileged=true -v /data/docker/mongo/config:/data/configdb -v /data/docker/mongo/db:/data/db --network=host mongo:4.0.5 --bind_ip 0.0.0.0 --replSet mongo-rep
说明:
docker run
: 运行 Docker 容器的命令。-itd
: 交互式操作、分配伪终端、后台运行容器的参数组合。--name mongo-primary
: 为容器指定名称为 "mongo-primary"。--restart=always
: 容器退出时始终重新启动容器。--privileged=true
: 赋予容器特权,允许执行特殊操作。-v /data/docker/mongo/config:/data/configdb
: 挂载本地主机的/data/docker/mongo/config
目录到容器内的/data/configdb
目录,用于存储配置文件。-v /data/docker/mongo/db:/data/db
: 挂载本地主机的/data/docker/mongo/db
目录到容器内的/data/db
目录,用于存储数据库文件。--network=host
: 使用主机网络模式,容器使用主机的网络命名空间。mongo:4.0.5
: 使用 MongoDB 镜像版本为 4.0.5。--bind_ip 0.0.0.0
: 设置 MongoDB 监听所有网络接口上的连接。--replSet mongo-rep
: 配置 MongoDB 实例作为名为 "mongo-rep" 的复制集的一部分。
初始化高可用集群环境 - 主节点
docker exec mongo-primary mongo --eval 'printjson(rs.initiate({_id:"mongo-rep", version:1, members:[{_id:0, host:"192.168.1.100:27017", priority:6}, {_id:1, host:"192.168.1.200:27017", priority:3}, {_id:2, host:"192.168.1.300:27017", arbiterOnly:true}]}))
说明:
在这个命令中,
rs.initiate()
函数用于初始化一个新的复制集,设置了复制集的名称、版本和成员列表,包括主节点、从节点和仲裁节点。
插入测试数据 - 主节点
docker exec mongo-primary mongo xiaopalu --eval 'printjson(db.comment.insert({"articleid":"10000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null}))'
说明:
这个命令向名为 "xiaopalu" 的数据库中的 "comment" 集合插入一条信息,包含内容、用户ID、昵称、创建时间、状态信息。
查看测试数据 - 从节点
docker exec mongo-primary mongo xiaopalu --eval 'printjson(db.comment.findOne())'
说明:
这个命令用于在 "comment" 集合中查找主节点创建的信息内容。
完成!
- 感谢你赐予我前进的力量