elasticsearch status red问题解决

业务自己搭建了一套elasticsearch服务,最近几天查询开始变的越来越不稳定。

查看健康度发现status已经变成了red。

[root@localhost ~]# curl 'http://xxx.xxx.xxx.xxx:9200/_cluster/health?pretty'           
{
  "cluster_name" : "imageIndex",
  "status" : "red",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 4,
  "active_primary_shards" : 4,
  "active_shards" : 6,
  "relocating_shards" : 1,
  "initializing_shards" : 0,
  "unassigned_shards" : 4,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 10
}
[root@localhost ~]#

问了下朋友,说是重启所有节点看看。

  1. 停止所有节点服务

    curl -XPOST 'http://xxx.xxx.xxx.xxx:9200/_cluster/nodes/_shutdown'
  2. 分别启动每一个节点

    ./bin/elasticsearch -d
  3. 查看健康度

    [user_00@localhost ~]$ curl 'http://xxx.xxx.xxx.xxx:9200/_cluster/health?pretty'
    {
      "cluster_name" : "imageIndex",
      "status" : "yellow",
      "timed_out" : false,
      "number_of_nodes" : 4,
      "number_of_data_nodes" : 4,
      "active_primary_shards" : 5,
      "active_shards" : 5,
      "relocating_shards" : 0,
      "initializing_shards" : 5,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0
    }

参考资料:
集群健康
elasticsearch如何安全重启节点(续)

file_get_contents返回为false的问题排查

今天业务新上线两台机器,功能测试中发现file_get_contents返回为false。

用curl的方式请求了下,返回了数据。
比较奇怪,查看php错误日志,发现有类似这样的错误。

PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0 

编辑php.ini,打开allow_url_fopen选项,问题解决。

PHP如何获取mongoDB查询的条数

有业务代码如下:

$conn = new MongoClient('mongodb://127.0.0.1:27017');
$db = $conn->database->table;

$start = 0;
$limit = 200;
while (1) {
    $conditions = array(
        'id' => array(
            '$gt' => $start,
        ),
    );
    $dataList = $db->find($conditions)->limit($limit);

    // 这里需要知道查询到最后,跳出while循环

    foreach ($dataList as $data) {
        // 业务处理代码
    }
}

- 阅读剩余部分 -

一个PHP查询dns记录的问题

今天遇到客户反馈自定义域名不能添加,提示未找到记录。
客户说这个域名解析已经配置了超过1天了。

通过nslookup命令,看到已经解析到对应的域名上了。

var_dump(dns_get_record('res.yankeke.com', DNS_CNAME));
// 输出空数组
array(0) {
}
var_dump(dns_get_record('res.yankeke.com'));
// 输出数组,可以看到有type=CNAME的记录
array(1) {
  [0]=>
  array(5) {
    ["host"]=>
    string(15) "res.yankeke.com"
    ["type"]=>
    string(5) "CNAME"
    ["target"]=>
    string(35) "yankeke-10009029.image.myqcloud.com"
    ["class"]=>
    string(2) "IN"
    ["ttl"]=>
    int(300)
  }
}

但是其他域名通过上面第一种代码是可以查到CNAME记录的,唯一的不同在于res.yankeke.com这个域名的ns记录是云加速的。

DNS诊断结果