• 内部域名无法解析

    内部域名无法解析

    在部署和使用时,如果遇到类似这样的日志信息:"Name or service not known" 或者 "host=xxx.service.consul port=xxxx max retries…."

    意味着内部域名无法解析的问题。内部域名,指的是蓝鲸集群模块之间使用 consul 模块注册的以".service.consul"结尾的域名。它由每台机器上运行的consul进程监听的53端口提供解析服务。

    当无法解析时,第一步,在报错的机器上使用dig看看consul能否解析:

    1. dig xxx.service.consul @127.0.0.1

    @127.0.0.1 表示使用 127.0.0.1:53 这个作为dns服务器,也就是使用 consul 提供的dns服务。

    正常情况下,可以看到类似下图的记录。如果命令换成dig 域名 没出现正确的记录,说明/etc/resolv.conf里没有配置上127.0.0.1 的namserver,确认/etc/resolv.conf里第一行是nameserver 127.0.0.1

    1. ;; QUESTION SECTION:
    2. ;zk.service.consul. IN A
    3. ;; ANSWER SECTION:
    4. zk.service.consul. 0 IN A 10.x.x.x
    5. zk.service.consul. 0 IN A 10.x.x.x
    6. zk.service.consul. 0 IN A 10.x.x.x
    7. ;; Query time: 1 msec
    8. ;; SERVER: 127.0.0.1#53(127.0.0.1)

    如果出现以下信息, 说明 consul 没有正常启动。那么 使用supervisor启动consul进程。

    1. ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> zk.service.consul @127.0.0.1
    2. ;; global options: +cmd
    3. ;; connection timed out; no servers could be reached

    如果出现以下信息 "IN A" 后面没有 ip地址,说明consul 启动了,但是无法解析域名

    1. ;; QUESTION SECTION:
    2. ;zk.service.consul. IN A
    3. ;; AUTHORITY SECTION:
    4. consul. 0 IN SOA ns.consul. postmaster.consul. 1530849644 3600 600 86400 0

    此时按照以下步骤:

    • 运行 consul monitor 看看日志,主要确认consul集群状态是否正常。观察是否有"no cluster leader" 的输出。
    • 针对具体的域名,譬如 zk.service.consul,那么登陆到zk所在机器,查看/data/bkce/etc/consul.d/zk.json文件 运行里面的check脚本,看返回的输出。
      对于出现"no cluster leader"的输出时,说明consul之间没有成功组成集群,选举出leader:

    • 检查consul server节点是否都running

    • 在任意一台consul上输入 consul join <另外一个consul节点>
    • 查看节点状态:consul operator raft list-peers