我是实践派之mongo的一主多从
mongo一主多从
为什么要做一主多从?
mongodb天生就是为了分布式而生的,为了保证数据读写分离和数据安全,把数据放在不同的机子上,可以减少主节点的读压力,而让从节点去承受读请求压力。
主节点用于写,然后同步到从节点去。同样当主节点挂掉之后,由于还有从节点,可以进行自动选举,重新生成一个主节点。我之前使用的单个主从,一旦主节点挂了,从节点无法自动根据选举机制成为主节点,这样会造成一直等待的结果。根据实验和经验,奇数个实例或者说节点利用率更高,也更有容灾性。
我在自己的项目中也开始决定这么做,不过由于我没有太多闲置的云服务器,所以我运行三个不同端口的实例来做这个一主二从。
分别写三个配置文件:
master:
port=27017
fork=true
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
dbpath=/usr/local/mongodb/data
maxConns=1024
master=true
oplogSize=2048
slave1:
port=27018
fork=true
logpath=/usr/local/mongodb/logs/slave1.log
logappend=true
dbpath=/usr/local/mongodb/data/slave1
maxConns=1024
slave=true
oplogSize=2048
source=127.0.0.1:27017
autoresync=true
slave2:
port=27019
fork=true
logpath=/usr/local/mongodb/logs/slave2.log
logappend=true
dbpath=/usr/local/mongodb/data/slave2
maxConns=1024
slave=true
oplogSize=2048
source=127.0.0.1:27017
autoresync=true
然后连续起三个实例:
mongod -f /usr/local/mongodb/conf/mongod.conf & mongod -f /usr/local/mongodb/conf/slave1.conf & mongod -f /usr/local/mongodb/conf/slave2.conf
当然如果之前有数据,还需要导出历史数据,命令如下:
mongodump -h dbhost -d dataname [-c collectioName] -o /out/path
导出的bson的格式数据,非常的省内存。
导入数据命令如下:
mongorestore -h dbhost -d databaseName /out/path
引入单个collection:
mongorestore --collection people --db accounts dump/accounts/people.bson
感谢mongo,让主从架构变得如此简单。
更多关于mongorestore的命令参数和使用,见这个链接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通