2

3 つのノードで Core Os クラスターをテストしているときに、いくつかの追加ノードを正常に追加および削除した後、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"}]

しかし、現在稼働しているマシンは 3 台だけです。クォーラムに到達するためにマシンを追加しようとしましたが、無駄でした。次のバージョンを実行しています。

$ 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

これは効果がありません。クラスターを保存する方法はありますか?

4

1 に答える 1

1

私の理解では、クラスターを保存することはできますが、それだけの価値はありません。

新しいマシンを追加するにはクォーラムが必要であり、既存のマシンのクォーラムがないため、クラスターは新しいマシンを受け入れていません。マシンの削除とキーの削除についても同様です。

クラスター メンバーとして一覧表示されている十分な数のマシンを起動し、クラスター メンバーとして正常に動作させることができれば、クォーラムが作成され、クラスターが保存されます。

私が見る限り、6 台のマシンがクラスター メンバーとしてリストされています。既存のクラスターが動作するには、少なくとも 4 つが実行されている必要があります。

于 2015-05-06T22:18:17.393 に答える