[原]MongoDB 学习笔记(七):主从复制与副本集
2013-10-15阅读922 评论0
一、主从复制
1、主从复制是一个简单的数据库同步备份的集群技术,如下图:要明确的知道主服务器与从服务器,且从服务器要明确的知道主服务器的存在。
2、在MongoDB中在启动数据库服务时,可以用master参数来指定主服务器,如下图:bind_ip是主数据库所在服务器IP
而用slave参数可以指定从服务器,如下图:source参数用于指定主服务器
以上两个数据库的关系如下图:这样过后,在主数据库中的操作就会立马在从数据库中进行复制。
3、常用配置参数
- --only:用于配置从服务器,指定复制某个数据库。默认是复制全部数据库。
- --slavedelay:用于配置从服务器,指定从主服务器同步数据的延迟(单位是秒)。
- --fastsync:用于配置从服务器,把内存中的数据马上写回主服务器数据库,然后从服务器进行复制。
- --autoresync:用于配置从服务器,如果从服务器是在主服务器运行一端时间之后才挂上来的,那么指定了此项参数后,从服务器会同步挂接上来之前那段时间主服务器中的数据;如果没有此参数,那么只会从当前挂接时间进行主从复制。
- --oplogSize:用于配置主服务器,配置主服务器的日志大小。日志会把主服务器的操作都记录下来,从服务器从主服务器的日志中读取数据,然后在自己的数据库中操作一次来完成主从复制。主服务器数据库操作记录存储在local数据库的oplog.$main集合中,它的每一个文档都会保存一个服务器的操作。
4、利用shell动态添加和删除从服务器
如下图所示,这是在上面那台从服务器中shell界面的操作结果,可以得知从服务器关于主服务器的信息全部保存在从服务器的local数据库的sources集合中。所以只要对该集合进行操作就可以动态的配置从服务器。
删除这台从服务器配置的主服务器,如下图:
为从服务器挂接主服务器,如下图:
二、副本集
1、如下图所示有一个数据库集群,集群中有三台数据库服务器,一台活跃服务器和两台备份服务器。当活跃服务器A发生故障时,会根据权重算法从备份服务器B和C中选出B作为新的活跃服务器,而当A恢复时当成备份服务器,继续加入到整个数据库集群中工作,这就是MongoDB的副本集。
2、配置一个副本集
首先采用如下图的三个配置配置启动三台数据库服务器,三台服务器相互指向下一个服务器形成一个环。
然后就需要初始化副本集。进入到这三台数据库服务器中任何一个的admin数据库,执行如下图的操作来初始化副本集:这里没有设置这三台服务器的权重,MonggoDB推选活跃服务器的策略是随机的。
分别进入到这三台服务器的shell界面,如下:可以发现端口号为3333的服务器被推选成了活跃服务器,而其它两台就是备份服务器
在活跃服务器shell中可以使用“rs.status()”来查看副本集的状态。
此时如果把端口3333的活跃服务器关掉后,如下图所示:端口为2222的服务器就成为了活跃服务器。如果又把端口为3333的服务器启动,可以发现端口3333的服务器就成为了备份服务器。
3、节点
- standard:常规节点,参与投票,有可能成为活跃节点。如上的三台服务器都没有设置此参数,默认就是常规节点。
- passive:副本节点,参与投票,但不能成为活跃节点。
- arbiter:仲裁节点,只是参与投票,不复制节点,也不能成为活跃节点。
4、高级参数
- priority:设置权重。可设置0到1000之间,0代表的是副本节点,1到1000是常规节点。
- arbiterOnly:true表示设置仲裁节点。
- 用法:在前面的初始化副本集中,只设置了_id和host两个key,此时就可以加上priority与arbiterOnly等key来初始化副本集。
5、优先级
如下图所示,本来A是活跃节点,B和C为副本集,B节点是在1秒之前进行复制更新的,C节点是在5秒之前进行复制更新的,A宕机之后会自动选择B为活跃节点(复制更新时间离宕机时间最近)。这种优先级优先于权重,会先考虑时间的优先级。
6、读写分离操作
注意:默认情况下非活跃服务器(副本节点)是不能进行数据库读操作的。如下图:
如果要设置副本节点也可以进行读操作,那么可以设置slaveOkay参数为true。但是此属性在shell中无法完成,这个特性是被写到MongoDB的高级驱动程序中的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器