接下来就要面临双十一这场惊心动魄的处女秀考验,

我们项目中会有一个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“列表即可,核心代码如下:

 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         }

其中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。

 View Code

四:测试一下

1. 首先向mongodb中插入一条记录,dbname=mydb, tablename=test,插入后我们用mongodUVE看一下数据:

 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 }

2. 然后我把【27000】 这个primary关闭掉,通过rs.Status看看“主备情况”。

3. 接下来,我们继续用mongodbHelper执行一下search,看是否能捞取到数据,如果可以,说明一台机器挂了没关系,这个“主备集群”还是活的。

是不是很牛逼的感觉,虽然挂了一台,我的客户端程序还是可以继续从mognodb中获取到刚才插入的数据,好了,大概就说这么多,洗洗睡了,

最后祝顶着双十一压力的兄弟们,一路平安。

--文件下载--

分类: MongoDB
好文要顶 关注我 收藏该文  

一线码农
关注 - 56
粉丝 - 6487

荣誉:推荐博客
+加关注

52
0

关注我

« 上一篇:十五天精通WCF——终结篇 那些你需要注意的坑
» 下一篇:15天玩转redis —— 第一篇 开始入手

posted @ 2015-10-12 00:46 一线码农 阅读(8214) 评论(38) 编辑 收藏
评论列表
#1楼2015-10-12 02:17 Lumia1020 
牛逼 先顶一下
支持(0)反对(0)

#2楼2015-10-12 07:03 愤怒的TryCatch 
我这方面的知识是空白,楼主的信息量震惊了我。~
支持(0)反对(0)

#3楼2015-10-12 08:30 陆仁甲乙丙丁 
其实我最想问的是!VS中的背景图片是怎么加的?
支持(0)反对(0)

#4楼2015-10-12 08:47 博大无穷 
配置那一段的代码都是写在命令提示符里面的吗
支持(0)反对(0)

#5楼2015-10-12 08:55 wy123 
顶楼主,主服务器宕机之后,副本成为primary的时间要多久,中间有没有连的丢失,可就是这种集群在主节点提交的数据局多就可以提交到副本?
支持(1)反对(0)

#6楼2015-10-12 09:13 lichmama 
跟redis的哨兵机制(sentinel)有点像,而且redis的master如果从故障中恢复的话还能再次成为primary,不知道mongodb是不是这样。另外,还想问下已经挂掉的master如果重新启动了会自行同步数据吗?
支持(0)反对(0)

#7楼2015-10-12 09:49 Poiuyt_cyc 
这个是好东西。。

大概2年半以前就开始玩MONGODB了。那时资料太少,mongo c# driver还是1.8。update方法经常抽风,有时执行了会更新数据,有时抽风了就不更新数据,也不报错。看来现在都成熟多了。

这个正是我想要的。

支持(0)反对(0)

#8楼2015-10-12 10:13 DNMCM 
两年半,华为研发,可否应聘?
支持(0)反对(0)

#9楼[楼主] 2015-10-12 10:57 一线码农 
@ DNMCM
可以试一试
支持(0)反对(0)

#10楼[楼主] 2015-10-12 10:58 一线码农 
@ lichmama
重启了会同步数据的,并且会成为备服务器
支持(0)反对(0)

#11楼2015-10-12 11:39 杜少. 
楼主说的水果机可是黑莓???
支持(0)反对(0)

#12楼2015-10-12 11:47 leerh 
好文章,接地气的表达,通俗易懂
支持(0)反对(0)

#13楼2015-10-12 11:54 落幕残情 
如果是高并发的情况,MOGODB 主从备份 主机挂掉貌似 会有一段时间 
查询执行失败吧。。。
支持(0)反对(0)

#14楼[楼主] 2015-10-12 13:43 一线码农 
@ 杜少.
不是不是,统一apple。
支持(0)反对(0)

#15楼[楼主] 2015-10-12 13:48 一线码农 
@ 落幕残情
这个到不清楚,虽然某一台机器挂了,但是从属这台机器的集群是活的,应该会有一段时间的阻塞来选重新选出主服务器。
支持(0)反对(0)

#16楼[楼主] 2015-10-12 13:48 一线码农 
@ leerh
谢谢支持
支持(0)反对(0)

#17楼[楼主] 2015-10-12 13:49 一线码农 
@ Poiuyt_cyc
你想要的,那也说明我的没白写~~~
支持(0)反对(0)

#18楼2015-10-12 13:51 落幕残情 
@ 一线码农
引用 @落幕残情
这个到不清楚,虽然某一台机器挂了,但是从属这台机器的集群是活的,应该会有一段时间的阻塞来选重新选出主服务器。
"应该会有一段时间的阻塞来选重新选出主服务器" 就是在段时间 会发生N多错误。 以前做集群的时候遇见过。 尽量做到平滑过渡。而且“仲裁服务器”我没有记错的话是 投票选举。 建议平滑过渡。。
支持(0)反对(0)

#19楼[楼主] 2015-10-12 13:56 一线码农 
@ 落幕残情
感谢提醒
支持(0)反对(0)

#20楼2015-10-12 14:59 cncyber 
上次看了携程的一个技术分享,说的是你们自己封装了一个zookeeper在用
支持(0)反对(0)

#21楼2015-10-12 18:07 编程玩家 
不知道楼主有没有试过延迟备份,就是在config里设置一个延迟时间(1小时,1天,1周等),然后primary有变化,会延迟同步到secondary去。

如果程序员误操作删除了primary的数据,可以从secondary取回一定程度的数据。

那么问题来了,怎么从这个secondary恢复数据,或者升级为primary。这是我之前遇到的一个未解决的问题。

支持(0)反对(0)

#22楼2015-10-13 13:24 YunShi 
刚开始研究MongoDB,学习一下!
支持(0)反对(0)

#23楼2015-10-13 17:18 沧海一笑ONLINE 
说明文档还是写的很详细的
支持(0)反对(0)

#24楼2015-10-13 18:02 oct 
@ 陆仁甲乙丙丁
引用 其实我最想问的是!VS中的背景图片是怎么加的?
哈哈 其实我也想要知道
支持(0)反对(0)

#25楼2015-10-21 10:43 壹加壹等于二 
赞,教程很详细。。。
支持(0)反对(0)

#26楼2015-10-22 09:29 搭讪的法则 
楼主有没有关注官方C#驱动,2.0版本之后都是异步接口,对这方面不是很明白,希望楼主有空的时候出个文章或者helper类,感谢了
支持(0)反对(0)

#27楼2015-11-03 17:52 小小乐 
楼主,博大精深,现在有大概的了解了,努力ing
支持(0)反对(0)

#28楼2015-11-16 13:32 代码的味道 
@ 陆仁甲乙丙丁
引用 其实我最想问的是!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;">你说的是这种么
支持(0)反对(0)

#29楼2015-11-16 15:14 陆仁甲乙丙丁 
@ CodeRen
是的!求具体步骤。
支持(0)反对(0)

#30楼2015-11-16 18:13 代码的味道 
@ 陆仁甲乙丙丁
引用 @CodeRen
是的!求具体步骤。
我用的Kyunbackground插件
支持(0)反对(0)

#31楼2015-11-16 18:14 代码的味道 
@ 陆仁甲乙丙丁
引用 @CodeRen
是的!求具体步骤。
上面拼错了 KyuuBackground
支持(0)反对(0)

#32楼2015-11-16 21:42 陆仁甲乙丙丁 
@ CodeRen
好的!谢谢啦!!!
支持(0)反对(0)

#33楼2015-11-16 22:03 陆仁甲乙丙丁 
@ CodeRen
还有!您用的那张图能给我发一下吗?很带感啊!愤怒的程序员
支持(0)反对(0)

#34楼2015-11-18 17:35 悲惨的大爷 
这个和博主之前写的8天学通MongoDB里有篇差不多,说的都是副本集,都比较赞
支持(0)反对(0)

#35楼2015-12-28 11:56 jerryli_vip 
谢谢,学习了
支持(0)反对(0)

#36楼2016-04-29 22:48 五月℃夏到了 
厉害
支持(0)反对(0)

#37楼2016-06-13 16:42 无痕公子1314 
求楼主的mongo可视化工具名称
支持(0)反对(0)

#38楼2016-06-16 18:36 aXinNo1 
谢谢,学习了

别让你的mongodb宕机了相关推荐

  1. 【华为云技术分享】MongoDB经典故障系列四:调整oplog大小,引起从库宕机怎么办?

    一不小心调整了自建MongoDB数据库的oplog大小,从而引起从库宕机怎么办?别急,华为云数据库给您支招:一是取消延迟配置,先扩容延时从库的oplog大小,再扩容主库的oplog:二是对主库先降级再 ...

  2. mongodb自动宕机

    先找原因,无故宕机,第一个看mongod 启动mongo的时候,有没有带–fork 如果没带,那是因为没在后台启动,加上即可 第二个原因,从服务器上找mongo的日志,日志中如果没有任何提示,那很可能 ...

  3. Redis的KEYS命令引起宕机事件

    摘要: 使用 Redis 的开发者必看,吸取教训啊! 原文:Redis 的 KEYS 命令引起 RDS 数据库雪崩,RDS 发生两次宕机,造成几百万的资金损失 作者:陈浩翔 Fundebug经授权转载 ...

  4. Redis的KEYS命令引起RDS数据库雪崩,RDS发生两次宕机,造成几百万的资金损失

    文章目录 第一次宕机 事故影响 原因分析 改进方案 第二次宕机 原因分析 改进方案 总结 Redis开发建议 1.冷热数据分离,不要将所有数据全部都放到Redis中 2.不同的业务数据要分开存储 3. ...

  5. Mongodb本机部署副本集

    目录 知识储备 1.为什么我们需要搭建副本集模式呢? 2.副本集成员构架 应用目标 实践步骤 一.部署副本集 1. 创建数据目录 2. 启动副本集 3. 关闭MongoDB服务 4.登录mongod实 ...

  6. Redis Cluster节点服务器宕机后导致集群重启失败案例

    这里说下自己碰到的一种情况: redis cluster集群由三个节点服务器组成,一个6个redis实例,每个节点开启2个端口,三主三从. reids部署目录是/data/redis-4.0.1,集群 ...

  7. 阿里云香港云服务器不知道算P几事故的史诗级宕机事件复盘

    上个周日12月18号,阿里云香港服务器发生了都不知道算 P 几事故的史诗级宕机事件,整个事件导致香港地区 C 区 ECS.OSS.EBS.RDS 等云服务大范围不可用,故障时间从 早上 8 点多一直持 ...

  8. proxmox 宕机转义_Proxmox+Ceph的HCI环境搭建

    PVE支持Ceph,包括内置Ceph及外连Ceph.通过PVE内建Ceph集群,可以构建出超融合架构,并实现集中 统一管理.通过外连Ceph集群,无法实现集中管理,但是Ceph集群可以提供给其它平台使 ...

  9. mysql 小型机_小型机宕机问题 - Oracle数据库管理 - ITPUB论坛-中国专业的IT技术社区...

    最近客户主机每隔10天左右就会宕机,配置为P650+DS4300+3582,上面跑着oracle+webshere+tsm.宕机是,连接主机的显示器无反应,可以ping通主机,无法telnet及ftp ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第31期)
  2. 信用卡葵花宝典笔记(一)
  3. CodeForces509F Progress Monitoring
  4. 相交链表—leetcode160
  5. 论文浅尝 - EMNLP2020 | 跨媒体关键词预测: 多模态多头注意力和图像文本的统一框架...
  6. 华为鸿蒙os系统测试,华为鸿蒙OS系统测试结果相继出炉!果然没让花粉们久等:最好的体验...
  7. Spring揭秘 读书笔记
  8. 部分贴片电阻标准阻值表(印字阻值对照)
  9. c#_工大租车小系统
  10. linux查看当前账号权限,Linux账号权限管理
  11. netty编解码之jboss marshalling
  12. 怎样进行结构化思维思考?
  13. 『NLP打卡营』实践课5:文本情感分析
  14. 4.2 Pollard p-1算法
  15. Intel TBB 介绍
  16. 音视频开发(三十四):天空盒的实现原理
  17. 字符流何用, 字节流呢
  18. SpringBoot 自动配置原理(超级无敌详细)-2
  19. Eclipse的代码原封不动复制到word,WPS等文档中去
  20. 非金融上市企业数据,整理好的面板数据,excel或stata版本

热门文章

  1. 阿米洛蓝牙连接教程_游戏手柄还不会使用?来这教你,轻松搞定游戏手柄连接问题...
  2. 大学公众号题库API
  3. 关于BOS开发工具启动EAS客户端提示使用限期0天的问题
  4. 长治机电职业技术学院计算机系,山西机电职业技术学院
  5. FAT32文件删除与恢复
  6. ccs中c语言定义布尔常量,ccs库里面有变量的定义,我在添加了头文件后编译显示没有定义变量呢...
  7. win7用html做桌面,win7系统怎么制作主题桌面,win7系统制作主题桌面方法
  8. Pinia——Vue 的存储库
  9. 以太网采集欧姆龙PLC DM数据并存入ACCESS 使用C#编写上位机程序
  10. java电子配件公司仓库管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署