注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

解决线上副本集中一台机器宕机问题 原创  

2014-07-25 14:27:07|  分类: SQL/Oracle/Mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
现象:机房副本集一台主库宕机后,整个副本集访问不了,主库可以切换。首先排除php-mongo版本问题。安装最新php-mongo版本测试问题一样。
[root@mongo1 ~]# mongo -port 27021        
MongoDB shell version: 2.4.9
connecting to: 127.0.0.1:27021/test
> use admin
switched to db admin
> db.auth('xxxx','xxxx')
1
rep1:PRIMARY> rs.status()
{
        "set" : "rep1",
        "date" : ISODate("2014-05-25T12:47:53Z"),
        "myState" : 1,
        "members" : [
                {
                        "_id" : 2,
                        "name" : "10.10.86.240:27021",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 299,
                        "optime" : Timestamp(1401021968, 2),
                        "optimeDate" : ISODate("2014-05-25T12:46:08Z"),
                        "self" : true
                },
                {
                        "_id" : 3,
                        "name" : "10.10.86.242:27021",
                        "health" : 1,
                        "state" : 2,
                        "stateStr" : "SECONDARY",
                        "uptime" : 298,
                        "optime" : Timestamp(1401021968, 2),
                        "optimeDate" : ISODate("2014-05-25T12:46:08Z"),
                        "lastHeartbeat" : ISODate("2014-05-25T12:47:53Z"),
                        "lastHeartbeatRecv" : ISODate("2014-05-25T12:47:52Z"),
                        "pingMs" : 0,
                        "syncingTo" : "10.10.86.240:27021"
                },
                {
                        "_id" : 4,
                        "name" : "10.10.86.241:27021",
                        "health" : 0,
                        "state" : 8,
                        "stateStr" : "(not reachable/healthy)",
                        "uptime" : 0,
                        "optime" : Timestamp(1401020723, 10),
                        "optimeDate" : ISODate("2014-05-25T12:25:23Z"),
                        "lastHeartbeat" : ISODate("2014-05-25T12:47:36Z"),
                        "lastHeartbeatRecv" : ISODate("2014-05-25T12:44:30Z"),
                        "pingMs" : 0
                }
        ],
        "ok" : 1
}
rep1:PRIMARY> 
这个时候客户端连接到副本集中很慢,甚至超时,主要原因是客户端的脚本会一直去尝试连接之前宕机的那台机器,导致连接慢或超时发生。所以问题的解决办法就是修改脚本,增加"connectTimeoutMS"这个参数:表示打开连接超时的时间。
正确的测试脚本如下:
[root@www ~]## cat test.php 
<?php
$connStr = "mongodb://xxxx:xxxx@10.10.86.240:27021,10.10.86.241:27021,10.10.86.242:27021";
$connOpt = array(
                "replicaSet" => "rep1", 
                "connectTimeoutMS"=> 10        或用"timeout" => 10
);
$db = 'test55555555555';
$collection = 'test2';
$insertData = array('test'=>time());

$mongo =  new MongoClient($connStr,$connOpt);
$collection = $mongo -> selectDB($db) -> selectCollection($collection);
$result = $collection -> insert($insertData);
var_dump($result);
$result = $collection -> find();
$result = iterator_to_array($result);
var_dump($result);
You have mail in /var/spool/mail/root
[root@www ~]#
  评论这张
 
阅读(369)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018