请教搭建自己的etcd Discovery后:getsockopt: connection refused[已解决]


大家好,我在搭建自己的etcd Discovery服务,步骤如下:
拓扑结构简单画一下:
etcd.png

3台都安装了etcd 2.2.5
在192.168.0.231操作:
curl -L https://github.com/coreos/etcd ... ar.gz -o etcd-v2.2.5-linux-amd64.tar.gz
tar zxf etcd-v2.2.5-linux-amd64.tar.gz
mv etcd-v2.2.5-linux-amd64 /opt/etcd-2.2.5
./etcd &

uuidgen

3c05a685-a4be-490c-a4d5-76edcfa23092

curl -X PUT http://127.0.0.1:2379/v2/keys/ ... /size -d value=3

{"action":"set","node":{"key":"/discovery/3c05a685-a4be-490c-a4d5-76edcfa23092/_config/size","value":"3","modifiedIndex":4,"createdIndex":4}}

疑问:这样3c05a685-a4be-490c-a4d5-76edcfa23092就是Discovery的token么?

按照官方的文档,接下来应该在192.168.0.224、192.168.0.221、192.168.0.222分别启动etcd:
etcd1.png


=================================

错误1请忽略

错误1为:
Coreos-node3 ~ # etcd -name infra0 -initial-advertise-peer-urls http://192.168.0.221:7001 \
> -listen-peer-urls http://192.168.0.221:7001 \
> -listen-client-urls http://192.168.0.221:4001,http://127.0.0.1:4001 \
> -advertise-client-urls http://192.168.0.221:4001 \
> -discovery https://192.168.0.231:4001/v2/keys/e3f05c93-6342-40ab-bd51-ca9eddfde928
etcd

Usage:
etcd -name <name>
etcd -name <name> 
etcd -h | -help
etcd -version
...
flag provided but not defined: -initial-advertise-peer-urls


错误1已经解决,是版本问题。之前使用的是etcd-0.4.9。现在改为2.2.5.

错误1请忽略

错误2:
客户端执行命令为:
/etc/etcd-2.2.5/etcd -name etcd0 -initial-advertise-peer-urls http://192.168.0.224:2380 \
-listen-peer-urls http://192.168.0.224:2380 \
-listen-client-urls http://192.168.0.224:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://192.168.0.224:2379 \
-discovery http://192.168.0.231:2379/v2/keys/discovery/3c05a685-a4be-490c-a4d5-76edcfa23092 &> /etc/etcd-2.2.5/etcd.log &

/etc/etcd-2.2.5/etcd -name etcd0 -initial-advertise-peer-urls http://192.168.0.221:2380 \
-listen-peer-urls http://192.168.0.221:2380 \
-listen-client-urls http://192.168.0.221:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://192.168.0.221:2379 \
-discovery http://192.168.0.231:2379/v2/keys/discovery/3c05a685-a4be-490c-a4d5-76edcfa23092 &> /etc/etcd-2.2.5/etcd.log &

/etc/etcd-2.2.5/etcd -name etcd0 -initial-advertise-peer-urls http://192.168.0.222:2380 \
-listen-peer-urls http://192.168.0.222:2380 \
-listen-client-urls http://192.168.0.222:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://192.168.0.222:2379 \
-discovery http://192.168.0.231:2379/v2/keys/discovery/3c05a685-a4be-490c-a4d5-76edcfa23092 &> /etc/etcd-2.2.5/etcd.log &


如上执行后,日志报连接不到Discovery2379错误:
2016-03-16 13:46:32.508132 E | discovery: error #0: dial tcp 192.168.0.231:2379: getsockopt: connection refused
2016-03-16 13:46:32.508408 I | discovery: cluster status check: error connecting to http://192.168.0.231:2379, retrying in 8m32s
^C


防火墙及selinux都是关闭的:

getenforce

Permissive

iptables -L -n

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
已邀请:

xiangbei

赞同来自:


flag provided but not defined: -initial-advertise-peer-urls

这个原因是etcd版本的问题。

xiangbei

赞同来自:


以解决问题:主要是token的造成的
替代discovery.etcd.io 步骤:
http://kernal.blog.51cto.com/8136890/1607079
http://www.chengweiyang.cn/201 ... view/
https://segmentfault.com/a/119 ... 93862
etcd可以安装在Centos、Ubuntu、coreos等linux系统中,这里使用Ubuntu作为Discovery服务端。
etcd Discovery服务端(192.168.0.231)操作:
1.软件版本etcd-0.4.9
curl -L https://github.com/coreos/etcd ... ar.gz -o etcd-v0.4.9-linux-amd64.tar.gz
mv etcd-v0.4.9-linux-amd64.tar.gz /opt
tar /opt/zxf etcd-v0.4.9-linux-amd64.tar.gz -C /opt/etcd-0.4.9
2.启动
/opt/etcd-0.4.9/etcd &amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;gt; /opt/etcd-0.4.9/log &amp;amp;amp;amp;amp;amp;amp;
3.生成uuid 使用uuidgen命令即可
uuidgen
27feb397-8ecb-48a6-88c2-28178e6d56cf
4.注册节点个数为3的集群
curl -X PUT http://192.168.0.231:4001/v2/k ... /size -d value=3
查看token:

/opt/etcd-0.4.9/etcdctl ls --recursive /

/discovery
/discovery/27feb397-8ecb-48a6-88c2-28178e6d56cf
集群中的每个coreos操作:
5.修改/var/lib/coreos-install/user_data 然后重启etcd服务(有可能需要重启系统)
etcd:
discovery: http://192.168.0.231:4001/v2/k ... d56cf
addr: 192.168.0.224:4001
peer-addr: 192.168.0.224:7001
说明:其实按照这里http://kernal.blog.51cto.com/8136890/1607079也可以生成token
比如,etcdctl set keys keys 请注意,第二个keys就是token!keys可以替换为任意字符,但是不能重复!
如果使用keys,那么集群中的每个coreos的user_data应该修改为:
etcd:
discovery: http://192.168.0.231:4001/v2/keys/keys
addr: 192.168.0.224:4001
peer-addr: 192.168.0.224:7001
6.验证是否成功
在每台coreos上查看:
fleetctl list-machines
Core-test ~ # fleetctl list-machines
MACHINE IP METADATA
0ceff317... 192.168.0.224 -
86655917... 192.168.0.221 -
c1bc7cf2... 192.168.0.222 -

常见问题
etcd监听在127.0.0.1,造成客户端无法连接到此端口。
这种情况可能因为etcd没有指定 -advertise-client-urls ,然后etcd就会在集群里宣告默认的 127.0.0.1,这样etcdctl从集群里拿到的就是 127.0.0.1的地址。解决办法是,给etcdctl加 --no-sync 参数强制etcdctl不从集群里同步状态,然后通过 --peers 直接去连接etcd。参考:http://www.tuicool.com/articles/MbAZN3F

要回复问题请先登录注册