如何從 Consul 集群中完全刪除節點?
這個位於另一個 DC 中的 Consul Server 節點在我刪除它後會繼續加入。
目標:
DC 中由 5 個 Consul 伺服器組成的集群
alpha0
,其 KV 儲存一個alpha0
Vault 集群用作儲存後端:
alpha0consulserver1.alpha0
alpha0consulserver2.alpha0
alpha0consulserver3.alpha0
alpha0consulserver4.alpha0
alpha0consulserver5.alpha0
DC 中由 5 個 Consul 伺服器組成的集群
prd0
,其 KV 儲存一個prd0
Vault 集群用作儲存後端:
prd0consulserver1.prd0
prd0consulserver2.prd0
prd0consulserver3.prd0
prd0consulserver4.prd0
prd0consulserver5.prd0
WAN 連接正常。但我擔心如果他們同步他們的 KV 儲存,這可能會影響兩個單獨的 HashiCorp Vault 集群,每個集群都將它們用作後端。
問題:
我編寫的一個測試不佳的 Puppet 腳本導致一個 Consul 節點
prd0consulserver5
連接到另一個 DC 中的另一個節點,alpha0consulserver1
.我已經為 prd0consulserver5 完全清除並重新安裝了 Consul,但
alpha0consulserver1
仍然連接到它。以下是其中一個配置文件的範例,特別是 alpha0consulserver1.alpha0 的配置文件:
nathan-basanese-zsh8 % sudo cat /etc/consul/config.json { "bind_addr": "192.176.100.1", "client_addr": "0.0.0.0", "data_dir": "/opt/consul", "domain": "consul.basanese.com", "bootstrap_expect": 5, "enable_syslog": true, "log_level": "DEBUG", "datacenter": "bts0", "node_name": "alpha0consulserver1", "ports": { "http": 8500, "https": 8501 }, "recursors": ["192.176.176.240", "192.176.176.241"], "server": true, "retry_join": ["192.176.100.3", "192.176.100.2", "192.176.100.1"] }
以下是來自 的一些相關日誌
prd0consulserver5
,但我可以根據要求發布更多資訊:2017/05/26 23:38:00 [DEBUG] memberlist: Stream connection from=192.176.100.1:47239 2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver2.alpha0 192.176.100.2 2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver1.alpha0 10.240.112.3 2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver2.bts0" in area "wan" 2017/05/26 23:38:00 [INFO] serf: EventMemberJoin: alpha0consulserver3.alpha0 192.176.100.3 2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver1.bts0" in area "wan" 2017/05/26 23:38:00 [INFO] consul: Handled member-join event for server "alpha0consulserver3.bts0" in area "wan"
最終,我得到了這個:
2017/05/26 23:39:02 [DEBUG] memberlist: Initiating push/pull sync with: 192.176.100.2
我關閉了節點,因為我不希望我寫入節點上的 KV 儲存的密鑰
alpha0
出現在prd0
節點上。到目前為止我已經嘗試過:
我嘗試了以下方法:
https://www.consul.io/api/agent.html#graceful-leave-and-shutdown
我沒有嘗試
force-leave
,因為它在配置的 DC 之外的節點上不起作用。我還嘗試
prod0
從主機註銷所有alpha0
主機。https://www.consul.io/api/catalog.html#deregister-entity
我在我的智慧盡頭,在這裡,似乎無法找到方法
我在搜尋引擎上搜尋過它,使用這個查詢和許多類似的查詢:https ://duckduckgo.com/?q=totally+deregister+consul+node&t=hc&ia=software
以下兩個結果似乎有一個稍微相似的問題,但沒有像將一個由 5 個 Consul 伺服器組成的集群與另一個由 5 個 Consul 伺服器組成的集群分開那麼簡單的事情。
https://github.com/hashicorp/consul/issues/1188 https://groups.google.com/forum/#!msg/consul-tool/bvJeP1c3Ujs/EvSZoYiZFgAJ
我認為這可以通過
"join_wan":
配置設置來處理,但似乎沒有辦法明確將其關閉。另外,這似乎是解決此問題的一種簡單方法。我也考慮過 IPTables。
反正總覺得少了點什麼。我已經開始深入研究 Raft 協議,但我覺得也許我已經開始在我的搜尋中切線了。任何指導表示讚賞,無論是評論還是答案。
更準確地說,我如何讓
prd0
Consul 伺服器節點擁有自己獨立的 KV 儲存和 Consul 領導者與alpha0
Consul 伺服器節點?
僅在此處嘗試標準刪除過程後:
$ consul leave $ consul force-leave <node>
如果您移動到下面,這將從集群中完全刪除節點:
$ consul operator raft remove-peer
// ,對於我的具體情況,我在
consul operator raft remove-peer
.但我急切地等待有關問題如何發生的資訊,在這裡:
https://github.com/hashicorp/consul/issues/3218#issuecomment-312721634