上周在配置跨主机flannel网络的时候,发现完全按照教程搭建 edcd 集群。在启动后使用 etcdctl
命令时出现如下报错:
1 | Error: client: etcd cluster is unavailable or misconfigured; error #0: dial tcp 127.0.0.1:4001: getsockopt: connection refused; |
出错的环境是两台装有最新的 Ubuntu 20.04 LTS 的 x86-64 机器,etcd 版本是 3.3.10。
搜索引擎查询后发现网友们的出错原因普遍是 etcd 的启动文件 etcd.service
或者 etcd.conf
中 ETCD_LISTEN_CLIENT_URLS
这一项缺少 localhost 的地址 http://127.0.0.1:2379 ,只要补上就正常运行了。
可是我的 ETCD_LISTEN_CLIENT_URLS
中已经包括了 http://127.0.0.1:2379,但还是出此错误,属实让人迷惑。更奇怪的是,在此之前,我按教程在单一主机上配置了flannel容器网络,并没有出现上述报错。但是在跨主机时,却出现上述错误,网上也没有网友记录了类似的情况。
我又检查了端口的打开情况,该打开的端口也是打开的了。后来,经过好几个小时的调试,终于找到了出错的原因:
我没有没有在root身份下打开etcd,而是使用了 sudo
命令,这导致上述的报错。
我猜原因可能是 sudo
命令获取的只是临时的超级用户权限,而跨主机时 etcd 的运行需要持久的超级用户权限来保证分布式系统互相访问的能力。
所以如果有和我有相同问题的朋友,可以按下面的步骤尝试:
-
检查自己的 etcd 启动/配置文件里
ETCD_LISTEN_CLIENT_URLS
这一项有没有缺少 localhost 地址 http://127.0.0.1:2379 。若缺少了,需要补上。 -
检查etcd需要的端口打开了没有,比如我的 2379 、2380 端口。如果有没打开的端口,打开它。
-
启动 etcd 的时候前,先
sudo su
进入root
权限,而不是在启动时使用sudo
的临时root权限。1
2sudo su
systemctl start etcd