k8sp / issues

We maintain a TODO list in https://github.com/k8sp/issues/issues
1 stars 0 forks source link

etcd2启动异常 #35

Closed zhengbo0 closed 8 years ago

zhengbo0 commented 8 years ago

systemctl status etcd2 发现etcd2启动异常 通过命令 journalctl -f --system 发现如下异常,应该是etcd集群基于服务发现组成集群时,token匹配不上 qq 20160722145629

zhengbo0 commented 8 years ago

http://serverfault.com/questions/723620/etcd2-fails-to-start-on-my-coreos-node 更新上面的解决方案,我重新生产token curl https://discovery.etcd.io/new?size=3,并把新token,替换user-data文件中 discovery中的token,重启后,还是抛这个异常

typhoonzero commented 8 years ago

把/var/lib/etcd2下的文件都清理掉,然后重启吧。是discovery和对应集群的状态不一致了。

zhengbo0 commented 8 years ago

搜索发现/run/systemd/system/etcd2.service.d目录下20-cloudinit.conf文件中有etcd相关的配置

[Service]
Environment="ETCD_ADVERTISE_CLIENT_URLS=http://172.17.8.102:2379"
Environment="ETCD_DISCOVERY=https://discovery.etcd.io/99b182cf1440e7156f9f1dd3974cbf5b"
Environment="ETCD_INITIAL_ADVERTISE_PEER_URLS=http://172.17.8.102:2380"
Environment="ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379,http://0.0.0.0:4001"
Environment="ETCD_LISTEN_PEER_URLS=http://172.17.8.102:2380,http://172.17.8.102:7001"

发现这次etcd2可以正常起来了,但是抛了一个新的异常 qq 20160722151115

Yancey1989 commented 8 years ago

几台机器的时钟是否同步呢?

zhengbo0 commented 8 years ago

试了武哥的方法,还是不行 首先删除了每台节点的/var/lib/etcd2文件夹下面的内容 尝试将/run/systemd/system/etcd2.service.d下的20-cloudinit.conf删除 然后执行systemctl daemon-reload命令,发现三台都正常启动了

zhengbo0 commented 8 years ago

qq 20160722164529 查看日志,发现etcd2启动的时候,会向控制台输出/run/systemd/system/etcd2.service.d/20-cloudinit.conf下的内容,猜测etcd2启动的时候,会将token内容写入20-cloudinit.conf文件中,下次启动时就直接从这个文件中加载获取token信息,如果user-data中token和该文件中不同就会报上面那个异常,所以删除掉20-cloudinit.conf文件,在etcd2重启时,会重新生产这个文件,这样的话token信息就会保持一致了

typhoonzero commented 8 years ago

/run/systemd/system/etcd2.service.d/20-cloudinit.conf 这个文件是cloud-config写的(drop-in),检查下cloud-config的配置的内容。discovery服务配置的token,每个token代表一个集群的配置信息,生成新的token就要删除/var/lib/etcd2下的持久化的数据才行。

drop-in会覆盖systemd的配置/usr/lib64/systemd/system/etcd2.service,这个文件是在只读分区的,所以只能通过drop-in来配置etcd2。

理论上删除/run/systemd/system/etcd2.service.d/20-cloudinit.conf就只会读取/usr/lib64/systemd/system/etcd2.service这个文件了,这样配置还是有问题的,除非是已经初始化过的集群,直接使用/var/lib/etcd2的数据启动

typhoonzero commented 8 years ago

可以看下这个文档,通过cloud-config配置etcd2: https://coreos.com/os/docs/latest/cloud-config.html

zhengbo0 commented 8 years ago

发现etcd2 request cluster ID mismatch的异常。清空所有node 上/var/lib/etcd2目录下的内容,需要更新discovery中url的token 。获取新token的方式curl https://discovery.etcd.io/new?size=3,或者采用static的方式部署etcd集群