别让你的mongodb宕机了
2016-06-24 09:01
423 查看
接下来就要面临双十一这场惊心动魄的处女秀考验,
我们项目中会有一个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“列表即可,核心代码如下:
其中ips的信息是配置在app.config中。
然后我简单的封装了下mongodb。
View
Code
四:测试一下
1. 首先向mongodb中插入一条记录,dbname=mydb, tablename=test,插入后我们用mongodUVE看一下数据:
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
谢谢,学习了
我们项目中会有一个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
谢谢,学习了
相关文章推荐
- 8天学通MongoDB——第八天 驱动实践
- 8天学通MongoDB——第七天 运维技术
- 8天学通MongoDB——第六天 分片技术
- 8天学通MongoDB——第五天 主从复制
- 8天学通MongoDB——第四天 索引操作
- 8天学通MongoDB——第三天 细说高级操作
- 8天学通MongoDB——第二天 细说增删查改
- 8天学通MongoDB——第一天 基础入门
- mongodb sharding config数据库集合介绍
- mongodb sharding Tag控制数据分片
- mongodb子文档查询
- mongodb与mysql相比的优缺点
- mongodb 安装(windows mongodb 安装)
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
- windows 安装MongoDB(64位)
- MongoDB的Master-Slave主从模式配置及主从复制要点解析
- Mongodb高级进阶 MapReduce
- 详解清除MongoDB所占用的多余的磁盘空间的方法
- MongoDB使用自带的命令行工具进行备份和恢复的教程
- MongoDb基本操作