别让你的mongodb宕机了
接下来就要面临双十一这场惊心动魄的处女秀考验,
我们项目中会有一个wcf集群,而集群地址则放在mongodb中,所以mongodb的核心地位可想而知,如果mongodb挂掉,整个项目也就陷入
瘫痪,想让mongodb不宕机,最简单的方法就是要做双机热备,跟传统的关系型数据库的双机热备模式一样,一个主服务器,一个备份服务器,
一个仲裁服务器。如果热备集群中的主服务器宕掉,会有仲裁服务器参与投票来选出一台作为主服务器,我想这个大家都比较清楚,下面我们来
实战一下,最后会奉献源代码。
一:搭建mongodb热备集群
1. 准备工作
为了做到最简化搭建,我就做一个主,一个备,一个仲裁就好了,然后最简化配置信息都放在mongodb.conf文件中,如下图:
从上图中可以看到,三个mongodb,我建立了对应的三个文件夹来存放对应的三个db,其中“主服务器”的端口为27000,“备服务器“的端口为
27001,”仲裁服务器“端口为27002。 具体mongodb.conf内容如下:
2. 开启 “主服务器” 【27000】
3. 开启 “备服务器” 【27001】
4. 开启 “仲裁服务器” 【27002】
现在三台服务器都开启起来了,细心的你会发现,三个控制台都有这么一段英文单词” replSet info you may need to run replSetInitiate“。。。
既然都这么说了,我现在就去run这个func。
配置完了之后,然后我们把“仲裁服务器【27002】”加入到“datamip”这个双机热备分集群中。
好了,现在大致配置好了,接下来我们用rs.Status()来查看下当前“主,备,仲裁”的分布情况。
从图中你应该看到了【27000】成为了主服务器,【27001】成为了备服务器,【27002】成为了仲裁服务器,到目前为止,搭建完成,是不是有
一个很爽的感觉呢???
三:使用驱动
既然mongodb的双机热备已经做好了,我们驱动也必须支持,这样我们才能够嗨,对伐???其实在配置中使用也很简单,里面有一个
MongoClientSettings,你需要配置一下”ReplicaSetName“和”Servers“列表即可,核心代码如下:
![](/assets/blank.gif)
1 static MongoDBHelper() 2 { 3 var ips = connectionString.Split(';'); 4 5 var servicesList = new List<MongoServerAddress>(); 6 7 foreach (var ip in ips) 8 { 9 var host = ip.Split(':')[0]; 10 var port = Convert.ToInt32(ip.Split(':')[1]); 11 12 servicesList.Add(new MongoServerAddress(host, port)); 13 } 14 15 setting = new MongoClientSettings(); 16 setting.ReplicaSetName = "datamip"; 17 18 //集群中的服务器列表 19 setting.Servers = servicesList; 20 }
![](/assets/blank.gif)
其中ips的信息是配置在app.config中。
<appSettings><add key="mongodbServerList" value="127.0.0.1:27000;127.0.0.1:27001;127.0.0.1:27002"/></appSettings>
然后我简单的封装了下mongodb。
![](/assets/blank.gif)
四:测试一下
1. 首先向mongodb中插入一条记录,dbname=mydb, tablename=test,插入后我们用mongodUVE看一下数据:
![](/assets/blank.gif)
1 namespace ConsoleApplication2 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 MongoDBHelper<MongodbCustomerModel> helper = new MongoDBHelper<MongodbCustomerModel>("mydb", "test"); 8 9 helper.Save(new MongodbCustomerModel() 10 { 11 SendLastTime = DateTime.Now, 12 ShopID = 1 13 }); 14 } 15 } 16 17 public class MongodbCustomerModel 18 { 19 public ObjectId _id { get; set; } 20 21 public int ShopID { get; set; } 22 23 public DateTime SendLastTime { get; set; } 24 } 25 }
![](/assets/blank.gif)
2. 然后我把【27000】 这个primary关闭掉,通过rs.Status看看“主备情况”。
3. 接下来,我们继续用mongodbHelper执行一下search,看是否能捞取到数据,如果可以,说明一台机器挂了没关系,这个“主备集群”还是活的。
是不是很牛逼的感觉,虽然挂了一台,我的客户端程序还是可以继续从mognodb中获取到刚才插入的数据,好了,大概就说这么多,洗洗睡了,
最后祝顶着双十一压力的兄弟们,一路平安。
--文件下载--
![](/assets/blank.gif)
![](/assets/blank.gif)
![](/assets/blank.gif)
关注 - 56
粉丝 - 6487
关注我
» 下一篇:15天玩转redis —— 第一篇 开始入手
大概2年半以前就开始玩MONGODB了。那时资料太少,mongo c# driver还是1.8。update方法经常抽风,有时执行了会更新数据,有时抽风了就不更新数据,也不报错。看来现在都成熟多了。
这个正是我想要的。
可以试一试
重启了会同步数据的,并且会成为备服务器
查询执行失败吧。。。
不是不是,统一apple。
这个到不清楚,虽然某一台机器挂了,但是从属这台机器的集群是活的,应该会有一段时间的阻塞来选重新选出主服务器。
谢谢支持
你想要的,那也说明我的没白写~~~
引用 @落幕残情
这个到不清楚,虽然某一台机器挂了,但是从属这台机器的集群是活的,应该会有一段时间的阻塞来选重新选出主服务器。
"应该会有一段时间的阻塞来选重新选出主服务器" 就是在段时间 会发生N多错误。 以前做集群的时候遇见过。 尽量做到平滑过渡。而且“仲裁服务器”我没有记错的话是 投票选举。 建议平滑过渡。。
感谢提醒
如果程序员误操作删除了primary的数据,可以从secondary取回一定程度的数据。
那么问题来了,怎么从这个secondary恢复数据,或者升级为primary。这是我之前遇到的一个未解决的问题。
引用 其实我最想问的是!VS中的背景图片是怎么加的?
哈哈 其实我也想要知道
引用 其实我最想问的是!VS中的背景图片是怎么加的?
<img src="http://images2015.cnblogs.com/blog/319395/201511/319395-20151116133148780-1915452994.png" alt="" border="0" "="" style="margin: 0px; padding: 0px; border: 0px; max-width: 400px;">你说的是这种么
是的!求具体步骤。
引用 @CodeRen
是的!求具体步骤。
我用的Kyunbackground插件
引用 @CodeRen
是的!求具体步骤。
上面拼错了 KyuuBackground
好的!谢谢啦!!!
还有!您用的那张图能给我发一下吗?很带感啊!愤怒的程序员
别让你的mongodb宕机了相关推荐
- 【华为云技术分享】MongoDB经典故障系列四:调整oplog大小,引起从库宕机怎么办?
一不小心调整了自建MongoDB数据库的oplog大小,从而引起从库宕机怎么办?别急,华为云数据库给您支招:一是取消延迟配置,先扩容延时从库的oplog大小,再扩容主库的oplog:二是对主库先降级再 ...
- mongodb自动宕机
先找原因,无故宕机,第一个看mongod 启动mongo的时候,有没有带–fork 如果没带,那是因为没在后台启动,加上即可 第二个原因,从服务器上找mongo的日志,日志中如果没有任何提示,那很可能 ...
- Redis的KEYS命令引起宕机事件
摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...
- Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失
文章目录 第一次宕机 事故影响 原因分析 改进方案 第二次宕机 原因分析 改进方案 总结 Redis开发建议 1.冷热数据分离,不要将所有数据全部都放到Redis中 2.不同的业务数据要分开存储 3. ...
- Mongodb本机部署副本集
目录 知识储备 1.为什么我们需要搭建副本集模式呢? 2.副本集成员构架 应用目标 实践步骤 一.部署副本集 1. 创建数据目录 2. 启动副本集 3. 关闭MongoDB服务 4.登录mongod实 ...
- Redis Cluster节点服务器宕机后导致集群重启失败案例
这里说下自己碰到的一种情况: redis cluster集群由三个节点服务器组成,一个6个redis实例,每个节点开启2个端口,三主三从. reids部署目录是/data/redis-4.0.1,集群 ...
- 阿里云香港云服务器不知道算P几事故的史诗级宕机事件复盘
上个周日12月18号,阿里云香港服务器发生了都不知道算 P 几事故的史诗级宕机事件,整个事件导致香港地区 C 区 ECS.OSS.EBS.RDS 等云服务大范围不可用,故障时间从 早上 8 点多一直持 ...
- proxmox 宕机转义_Proxmox+Ceph的HCI环境搭建
PVE支持Ceph,包括内置Ceph及外连Ceph.通过PVE内建Ceph集群,可以构建出超融合架构,并实现集中 统一管理.通过外连Ceph集群,无法实现集中管理,但是Ceph集群可以提供给其它平台使 ...
- mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...
最近客户主机每隔10天左右就会宕机,配置为P650+DS4300+3582,上面跑着oracle+webshere+tsm.宕机是,连接主机的显示器无反应,可以ping通主机,无法telnet及ftp ...
最新文章
- 力扣(LeetCode)刷题,简单+中等题(第31期)
- 信用卡葵花宝典笔记(一)
- CodeForces509F Progress Monitoring
- 相交链表—leetcode160
- 论文浅尝 - EMNLP2020 | 跨媒体关键词预测: 多模态多头注意力和图像文本的统一框架...
- 华为鸿蒙os系统测试,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
- Spring揭秘 读书笔记
- 部分贴片电阻标准阻值表(印字阻值对照)
- c#_工大租车小系统
- linux查看当前账号权限,Linux账号权限管理
- netty编解码之jboss marshalling
- 怎样进行结构化思维思考?
- 『NLP打卡营』实践课5:文本情感分析
- 4.2 Pollard p-1算法
- Intel TBB 介绍
- 音视频开发(三十四):天空盒的实现原理
- 字符流何用, 字节流呢
- SpringBoot 自动配置原理(超级无敌详细)-2
- Eclipse的代码原封不动复制到word,WPS等文档中去
- 非金融上市企业数据,整理好的面板数据,excel或stata版本
热门文章
- 阿米洛蓝牙连接教程_游戏手柄还不会使用?来这教你,轻松搞定游戏手柄连接问题...
- 大学公众号题库API
- 关于BOS开发工具启动EAS客户端提示使用限期0天的问题
- 长治机电职业技术学院计算机系,山西机电职业技术学院
- FAT32文件删除与恢复
- ccs中c语言定义布尔常量,ccs库里面有变量的定义,我在添加了头文件后编译显示没有定义变量呢...
- win7用html做桌面,win7系统怎么制作主题桌面,win7系统制作主题桌面方法
- Pinia——Vue 的存储库
- 以太网采集欧姆龙PLC DM数据并存入ACCESS 使用C#编写上位机程序
- java电子配件公司仓库管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署