内部域名无法解析
在部署和使用时,如果遇到类似这样的日志信息:"Name or service not known" 或者 "host=xxx.service.consul port=xxxx max retries…."
意味着内部域名无法解析的问题。内部域名,指的是蓝鲸集群模块之间使用 consul 模块注册的以".service.consul"结尾的域名。它由每台机器上运行的consul进程监听的53端口提供解析服务。
当无法解析时,第一步,在报错的机器上使用dig看看consul能否解析:
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
;; QUESTION SECTION:
;zk.service.consul. IN A
;; ANSWER SECTION:
zk.service.consul. 0 IN A 10.x.x.x
zk.service.consul. 0 IN A 10.x.x.x
zk.service.consul. 0 IN A 10.x.x.x
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
如果出现以下信息, 说明 consul 没有正常启动。那么 使用supervisor启动consul进程。
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.2 <<>> zk.service.consul @127.0.0.1
;; global options: +cmd
;; connection timed out; no servers could be reached
如果出现以下信息 "IN A" 后面没有 ip地址,说明consul 启动了,但是无法解析域名
;; QUESTION SECTION:
;zk.service.consul. IN A
;; AUTHORITY SECTION:
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