Cluster

如何從 Consul 集群中完全刪除節點?

  • January 14, 2019

這個位於另一個 DC 中的 Consul Server 節點在我刪除它後會繼續加入。

目標:

DC 中由 5 個 Consul 伺服器組成的集群alpha0,其 KV 儲存一個alpha0Vault 集群用作儲存後端:

  • alpha0consulserver1.alpha0
  • alpha0consulserver2.alpha0
  • alpha0consulserver3.alpha0
  • alpha0consulserver4.alpha0
  • alpha0consulserver5.alpha0

DC 中由 5 個 Consul 伺服器組成的集群prd0,其 KV 儲存一個prd0Vault 集群用作儲存後端:

  • 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 協議,但我覺得也許我已經開始在我的搜尋中切線了。任何指導表示讚賞,無論是評論還是答案。

更準確地說,我如何讓prd0Consul 伺服器節點擁有自己獨立的 KV 儲存和 Consul 領導者與alpha0Consul 伺服器節點?

僅在此處嘗試標準刪除過程後:

$ 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

引用自:https://serverfault.com/questions/852520