MongoDB副本集的搭建和管理(高可用)
使得mongodb具备自动故障转移、高可用、读写分离。
副本集默认情况下读写都只是通过主库,副节点只是备份数据而已,但是可以设置副节点允许读操作,这样就可以做成读写分离。
使用pymongo的时候也可以设置,还可以动态设置库、集合的readPreference。详细的后面再写。。。
如果主节点不可用,副本集会选择一个辅助节点作为主节点并继续正常运行。旧的主节点在可用时会重新加入集合。
副本集搭建可以参考官方教程:
https://www.mongodb.com/docs/manual/administration/replica-set-deployment/
如果是需要将现有的mongodb实例转换为副本集,看这里:
副本集中的节点角色可以有下面几种:
- 主节点
- 副节点
- 仲裁器节点(仲裁者参与选举,但不保存数据,即不提供数据冗余)
- 仲裁节点的使用场景:你有一个主、副节点,但是你的服务器又不够硬件支撑你再添加一个副节点(因为副节点也是池不少硬件的),此时你可以添加一个仲裁器。仲裁器参与主节点的选举,但仲裁器没有数据集的副本,因此无法成为主节点。
需要注意的是:
- 仲裁节点不要和主节点和副节点运行在统一个系统上!!!
- 仲裁器节点不要添加多个,容易出现数据一致性问题。降低写入时的可靠使用性。
- 副本集建议使用单数,3、5、7这样的.....
副本集的搭建至少要有3个节点,可以是:1主2从(官方推荐),或者:1主1从1仲裁
副本集搭建实例(1主2从)
- 创建3个实例的数据存储目录,因为我都放在同一台机器上了,所以要区分一下目录。生成环境不可能将成员实例都放在同一台机器上的。
mkdir data-master
mkdir data-slave01
mkdir data-slave02
-
修改3个实例的配置文件
这里测试用,所以都放在同一台机器上了,注意修改端口为不一样的。
主节点master:
# Where and how to store data.
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
# 副本集配置
replication:
#副本集的名称
replSetName: "myrs"
**副节点1:**
# mongod-salve01.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave01
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave01.log
# network interfaces
net:
port: 27018
bindIp: 127.0.0.1
# 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
**副节点2:**
# mongod-salve02.conf
storage:
dbPath: D:\Program Files\MongoDB\Server\5.0\data-slave02
journal:
enabled: true
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: D:\Program Files\MongoDB\Server\5.0\log\mongod-slave02.log
# network interfaces
net:
port: 27019
bindIp: 127.0.0.1
# 副本集配置
replication:
# 副本集的名称 ,统一个副本集中的mongodb实例都要用同一个名称!!!
replSetName: "myrs"
- 启动3个实例
mongod.exe -f mongod.cfg
mongod.exe -f mongod-slave01.cfg
mongod.exe -f mongod-slave02.cfg
REM windows可以将其安装为服务,以服务的方式启动
mongod.exe -f mongod-slave01.cfg --install --serviceName MongoDB-slave01-27018
mongod.exe -f mongod-slave02.cfg --install --serviceName MongoDB-slave01-27019
-
初始化副本集
需要先连接到你想要其成为主节点的实例上,然后执行
rs.initiate({config配置})
命令通过传递副本集配置参数来初始化。副本集的配置参数请参考:https://www.mongodb.com/docs/manual/reference/replica-configuration/
mongo.exe --port 27017
/*
// 生产环境,用hostname比较好。
rs.initiate( {
_id : "rs0",
members: [
{ _id: 0, host: "mongodb0.example.net:27017" },
{ _id: 1, host: "mongodb1.example.net:27017" },
{ _id: 2, host: "mongodb2.example.net:27017" }
]
})
*/
//这里因为式测试,所以就用ip地址了
rs.initiate({
_id : "myrs", // 副本集的名称,这个在配置文件中指定了。
members: [
{ _id: 0, host: "127.0.0.1:27017" },
{ _id: 1, host: "127.0.0.1:27018" },
{ _id: 2, host: "127.0.0.1:27018" }
]
})
// 第一次初始化后副本集后,一开始显示的还是PRIMARY节点(副节点),过一会再按回车后才会变成主节点
// 这是因为,初始化还未完成,需要稍等一会。
myrs:SECONDARY>
myrs:PRIMARY>
副本集管理
https://www.mongodb.com/docs/manual/administration/replica-set-member-configuration/
https://www.mongodb.com/docs/manual/administration/replica-set-maintenance/
比较常用:
rs.help() // 查看帮助信息
rs.isMaster() // 查看当前节点是否为主节点等信息
rs.hello() // 查看副本集信息
rs.status() // 查看副本集状态
rs.conf() // 返回当前副本集的配置文件
**rs.secondaryOk(true|false) //将所有的副节点设置是否允许读操作(在同一个副本集中的任意节点中都可以执行该命令)**
// https://www.mongodb.com/docs/manual/reference/method/rs.add/#mongodb-method-rs.add
rs.add() // 将成员添加到副本集。使用该命令必须实在主节点上操作!
本文来自博客园,作者:运维爱背锅,转载请注明原文链接:https://www.cnblogs.com/juelian/p/17559723.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?