龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 杂货分享 > 个人随笔 > MongoDb 实现副本集

MongoDb 实现副本集

龙行    个人随笔    2019-1-11    379    0评论    本文已被百度收录点击查看详情

最近项目需求,需要用到mongodb的副本集,片儿什么的.先用window实现了一遍

安装mongodb就先不说了

安装地址: https://www.mongodb.com/download-center/community

mongodb

先了解了解什么是副本集

1.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。类似于MySQL的MMM架构。更多关于副本集的介绍请见官网。也可以在google、baidu上查阅

Primary:主节点

Secondary:从节点

2.副本集中数据同步过程Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败,则备份节点停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作执行多次,与执行一次的效果是一样的。简单的说就是:

当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步:
1:检查自己local库的oplog.rs集合找出最近的时间戳。
2:检查Primary节点local库oplog.rs集合,找出大于此时间戳的记录。
3:将找到的记录插入到自己的oplog.rs集合中,并执行这些操作。

       副本集的同步和主从同步一样,都是异步同步的过程,不同的是副本集有个自动故障转移的功能。其原理是:slave端从primary端获取日志,然后在自己身上完全顺序的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是local数据 库中的oplog.rs表,默认在64位机器上这个表是比较大的,占磁盘大小的5%,oplog.rs的大小可以在启动参数中设 定:--oplogSize 1000,单位是M。

      注意:在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。

开始操作

注:以下所有配置均是由环境变量,没有的加一个
1.在d:\data\primary  新建文件夹primary(主节点),seconday(从节点),arbiteronly(仲裁节点) 用于挂起mongodb服务器  一主一从一仲裁:模拟的就这样吧


2.如下格式cmd启动mongodb,replSet的集名称:

#port : 端口1111
#replSet: 副本集名称: rs-a
#dbpath: 数据库文件存放位置:这个目录要先建好,不然报错
#logpath: 日志文件地址,这个自动生成,路径写好就行
#bind_ip:绑定ip
mongod --port 1111 --bind_ip 192.168.4.109 --replSet rs-a --dbpath "D:\data\primary" --logpath "D:\data\log\primary.log"
mongod --port 2222 --bind_ip 192.168.4.109 --replSet rs-a --dbpath "D:\data\seconday" --logpath "D:\data\log\seconday.log"
mongod --port 2222 --bind_ip 192.168.4.109 --replSet rs-a --dbpath "D:\data\arbiteronly" --logpath "D:\data\log\arbiteronly.log"

如上cmd创建三个mongo数据库

我们把端口1111作为主服务器:

新开cmd连接主服务从服务仲裁服务:三个cmd窗口打开就别关了

mongo --host 192.168.4.109 --port 1111
mongo --host 192.168.4.109 --port 2222
mongo --host 192.168.4.109 --port 3333
 

 初始化: 1111端口黑框框   以下分割线以前操作都在 PRIMARY 主节点黑框框里面

#aibiterOnly:true   表示这台为仲裁服务器
config={"_id":"rs-a",members:[{_id:0,host:"192.168.4.109:1111"},{_id:1,host:"192.168.4.109:2222"},{_id:2,host:"192.168.4.109:3333",aibiterOnly:true}]}

然后再输入:rs.initiate(config)

查看状态:rs.status()     

health:1   //1表明状态是正常,0表明异常

state:1     // 1表明是primary,2表明是slave,即做备份的机器

如果端口3333 stateStr 显示 : ARBITER 标称3333端口成功变成成仲裁服务器

如果没有,输入rs.status(),查看状态 

rs.addArb("192.168.4.109:3333")  //这个也表示将3333添加为仲裁服务器

rs.add("192.168.4.109:4444")   //添加端口为4444的从节点

rs.remove('192.168.4.109:2222') //删除端口为2222的节点

下图:表示主节点

mongodb_primary

下图:表示从节点

mongodb_secondary

下图:表示仲裁节点

mongodb_arbiter

---------------分割线------------

默认情况下从节点是不能找到主节点上面的数据的,如果要看 ,需要在从节点上配置:

rs.slaveOk()
db.printSlaveReplicationInfo() #打印所有从节点
副本集就实现了
评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/154.html
  • 上篇文章:VMware Workstation 14.1.3 官方中文正式版 安装教程
  • 下篇文章:phpstudy安装mongodb php7
  • mongodb php7
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
快捷导航
联系博主
在线壁纸
给我留言
光羽影视
音乐欣赏
返回顶部