2014-11-24 205 views
2

在使用三个节点测试Core Os群集时,在成功添加和删除少量附加节点之后,我遇到了以下问题,据推测,这是由于etcd选举过程中的争用情况造成的。如何解决etcd领导选举中的竞争状态?

检查新领导人给出:

$ curl -L http://127.0.0.1:4001/v2/stats/leader 
{"errorCode":300,"message":"Raft Internal Error","index":629006} 

Journalctl对于集群中的每一台机器给:

$ journalctl -r -u etcd 
-- Logs begin at Wed 2014-11-12 15:09:01 UTC, end at Mon 2014-11-24 10:47:34 UTC. -- 
Nov 24 10:47:34 node-1 etcd[56576]: [etcd] Nov 24 10:47:34.307 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: term #5221 started. 
Nov 24 10:47:34 node-1 etcd[56576]: [etcd] Nov 24 10:47:34.306 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: state changed from 'candidate' to 'follower'. 
Nov 24 10:47:33 node-1 etcd[56576]: [etcd] Nov 24 10:47:33.098 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: state changed from 'follower' to 'candidate'. 
Nov 24 10:47:32 node-1 etcd[56576]: [etcd] Nov 24 10:47:32.081 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: term #5219 started. 
Nov 24 10:47:32 node-1 etcd[56576]: [etcd] Nov 24 10:47:32.081 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: state changed from 'candidate' to 'follower'. 
Nov 24 10:47:31 node-1 etcd[56576]: [etcd] Nov 24 10:47:31.962 INFO  | 965d12d38a4a4b2c807bd232fb7b0db7: state changed from 'follower' to 'candidate'. 

并与船队上市的机器出现故障:

$ fleetctl list-machines 
2014/11/24 10:56:19 INFO client.go:278: Failed getting response from http://127.0.0.1:4001/: dial tcp 127.0.0.1:4001: connection refused 
2014/11/24 10:56:19 ERROR client.go:200: Unable to get result for {Get /_coreos.com/fleet/machines}, retrying in 100ms 
2014/11/24 10:56:19 INFO client.go:278: Failed getting response from http://127.0.0.1:4001/: dial tcp 127.0.0.1:4001: connection refused 
2014/11/24 10:56:19 ERROR client.go:200: Unable to get result for {Get /_coreos.com/fleet/machines}, retrying in 200ms 
2014/11/24 10:56:19 INFO client.go:278: Failed getting response from http://127.0.0.1:4001/: dial tcp 127.0.0.1:4001: connection refused 

清单的集群中的机器给出:

$ curl -L http://127.0.0.1:7001/v2/admin/machines 
[{"name":"","state":"follower","clientURL":"http://100.72.62.35:4001","peerURL":"http://100.72.62.35:7001"}, 
{"name":"555cca74216644fea48990673b3d539c","state":"follower","clientURL":"http://100.72.62.59:4001","peerURL":"http://100.72.62.59:7001"}, 
{"name":"965d12d38a4a4b2c807bd232fb7b0db7","state":"follower","clientURL":"http://100.72.20.153:4001","peerURL":"http://100.72.20.153:7001"}, 
{"name":"a1b566dedb194c259f7eb2ffde5595b1","state":"follower","clientURL":"http://100.72.62.2:4001","peerURL":"http://100.72.62.2:7001"}, 
{"name":"a45efba827754b5f93c38b751a0ae273","state":"follower","clientURL":"http://100.72.62.31:4001","peerURL":"http://100.72.62.31:7001"}, 
{"name":"d041738235a9483cb814d37ca7fa4b6d","state":"follower","clientURL":"http://100.72.20.18:4001","peerURL":"http://100.72.20.18:7001"}] 

但目前只有三台机器正在运行。我试图添加额外的机器来达到法定人数而无济于事。 我运行以下版本:

$ etcdctl -v 
etcdctl version 0.4.6 

为此,这里https://coreos.com/docs/distributed-configuration/etcd-api/#cluster-config提到,领导模块,迫使领导者已被删除。丑陋的部分是,因为没有法定人数,我无法从计算机列表中删除当前没有使用例如运行的:

$ curl -L -XDELETE http://127.0.0.1:7001/v2/admin/machines/2abbf47a9e644bc69652a986d796d7a6 

它有没有效果。有什么方法可以保存集群吗?

回答

1

在我的理解中,您可以保存集群,但这不值得。

群集不接受新机器,因为它需要仲裁才能添加新机器,并且没有现有机器的法定人数。删除机器和删除密钥也是一样。

如果您可以启动足够多的作为集群成员列出的机器并使它们成功地作为集群成员工作,那么您将拥有仲裁并保存集群。

从我所看到的情况来看,有六台机器被列为集群成员。您需要至少运行四个现有群集才能运行。