- Consul 教程
- Consul - 首頁
- Consul - 簡介
- Consul - 架構
- Consul - 安裝
- Consul - 使用微服務
- Consul - 引導和DNS
- Consul - 查詢節點
- Consul - 故障轉移事件
- Consul - 使用UI
- Consul - 在AWS上使用Consul
- Consul 有用資源
- Consul - 快速指南
- Consul - 有用資源
- Consul - 討論
Consul - 故障轉移事件
在本章中,我們將學習Consul中的故障轉移事件。這將藉助以下功能完成:
- 單叢集故障
- Jepsen 測試
- 多叢集故障
- 拍攝快照
讓我們詳細瞭解一下這些內容。
單叢集故障
在單叢集故障中,放置在其中一個數據中心中的叢集開始出現故障。在每種情況下,務必確保在發生故障轉移時,系統不僅可以防止故障轉移,還可以擁有一個可以依賴的備份。為了防止Consul故障轉移事件,我們將使用稱為Consul-alerts的內容。主要專案可以在以下位置找到:https://github.com/AcalephStorage/consul-alerts。
Consul-alerts是一個高可用守護程序,用於根據Consul健康檢查傳送通知和提醒。此專案在localhost:9000上執行守護程序和API,並連線到本地consul代理(localhost:8500)以及預設資料中心(dc1)。
有兩種方法可以開始使用該專案。第一種方法是透過GO安裝它。對於已安裝和配置GO的使用者,可以按照以下步驟操作:
$ go get github.com/AcalephStorage/consul-alerts $ go install $ consul-alerts start
最後一個命令可以輕鬆地用於覆蓋consul-alert的預設埠、資料中心選項、consul-acl令牌等。該命令也可以按如下所示編寫:
$ consul-alerts start --alert-addr = localhost:9000 --consul-addr = localhost:8500 --consul-dc = dc1 --consul-acl-token = ""
第二種方法涉及使用者使用Docker。這兩種方法在不同的場景中都同樣有用。為了在Docker上使用Consul-alerts,讓我們使用以下命令從Docker Hub拉取映象。
$ docker pull acaleph/consul-alerts
在Docker方法中,我們可以考慮以下三個選項:
- 使用容器本身內建的Consul代理。
- 使用在另一個Docker容器上執行的Consul代理。
- 使用Consul-alerts連結到遠端Consul例項。
現在讓我們詳細討論一下這些內容。
使用容器本身內建的Consul代理
讓我們使用以下命令啟動consul代理:
$ docker run -ti \ --rm -p 9000:9000 \ --hostname consul-alerts \ --name consul-alerts \ --entrypoint = /bin/consul \ acaleph/consul-alerts \ agent -data-dir /data -server -bootstrap -client = 0.0.0.0
在這裡,我們正在覆蓋如標誌--entrypoint所述的Consul的入口點。同時,我們透過使用-p標誌、資料目錄/data(使用標誌-data-dir)並使用0.0.0.0作為客戶端來引導客戶端。
在新終端視窗中,讓我們啟動consul-alerts選項。
$ docker exec -ti consul-alerts /bin/consul-alerts start --alertaddr = 0.0.0.0:9000 --log-level = info --watch-events --watch-checks
在這裡,在上述步驟中,我們正在執行consul-alerts以在互動模式下啟動。警報地址埠被指定為9000。監視檢查consul代理是否已啟用以及consul檢查。
我們可以清楚地看到,consul警報已輕鬆啟動,並且它已透過新增consul代理註冊了一個新的健康檢查。資料中心被視為dc1,可以根據使用者進行更改。
使用在另一個Docker容器上執行的Consul代理
在這裡,您可以使用任何型別的consul映象在Docker容器上執行。使用consul-alerts映象,我們可以輕鬆地將consul容器與consul-alerts容器連結起來。這是使用--link標誌完成的。
注意 - 在使用以下命令之前,請確保consul容器已在另一個終端上執行。
$ docker run -ti \ -p 9000:9000 \ --hostname consul-alerts \ --name consul-alerts \ --link consul:consul \ acaleph/consul-alerts start \ --consul-addr=consul:8500 \ --log-level = info --watch-events --watch-checks
使用Consul-alerts連結到遠端Consul例項
在這裡,我們應該使用以下命令使用Consul-alerts連結到遠端consul例項。
$ docker run -ti \ -p 9000:9000 \ --hostname consul-alerts \ --name consul-alerts \ acaleph/consul-alerts start \ --consul-addr = remote-consul-server.domain.tdl:8500 \ --log-level = info --watch-events --watch-checks
Jepsen 測試
Jespen是一個用於測試任何系統中的部分容錯和網路的工具。它透過在系統上建立一些隨機操作來測試系統。Jepsen是用Clojure編寫的。不幸的是,對於演示,Jepsen測試需要大量叢集形成以及資料庫系統,因此不在此處討論範圍之內。
Jepsen的工作原理是在五個不同的主機上設定要測試的資料儲存。它為要測試的資料儲存建立一個客戶端,並將五個節點中的每一個節點指向以傳送請求。它還建立了一系列特殊的客戶端,稱為“Nemesis”,這些客戶端會在叢集中造成破壞,例如,使用iptables切斷節點之間的連結。然後,它繼續對不同的節點併發地發出請求,同時交替地對網路進行分割槽和修復。
在測試執行結束時,它會修復叢集,等待叢集恢復,然後驗證系統的中間狀態和最終狀態是否符合預期。
有關Jepsen測試的更多資訊,請檢視此處。
多叢集故障
在多叢集故障轉移事件期間,部署在多個數據中心的叢集無法支援為客戶提供的服務。Consul使我們能夠確保當出現此類情況之一時,Consul具有幫助您在這種情況中啟用服務的功能。
為此,我們將檢視一個專案,該專案幫助我們啟用將Consul從一個叢集複製到多個叢集。該專案為我們提供了一種使用consul-replicate守護程序跨多個Consul資料中心複製K/V對的方法。您可以在以下位置檢視此HashiCorp專案:https://github.com/hashicorp/consul-replicate。嘗試此專案的一些先決條件包括:
- Golang
- Docker
- Consul
- Git
讓我們從以下命令開始:
注意 - 在執行以下命令之前,請確保您已在機器上正確安裝和配置了Git。
$ git clone - https://github.com/hashicorp/consul-replicate.git
輸出將如以下螢幕截圖所示。
$ cd consul-replicate $ make
輸出將如以下螢幕截圖所示。
如果您在構建二進位制檔案時遇到一些問題,您也可以嘗試使用以下命令手動拉取Docker映象:
$ docker pull library/golang:1.7.4
上述命令將建立bin/consul-replicate,可以將其作為二進位制檔案呼叫。下表顯示了它涵蓋的完整子命令列表:
| 選項 | 描述 |
|---|---|
| auth | 基本身份驗證使用者名稱(以及可選密碼),用冒號分隔。沒有預設值。 |
| consul* | 要查詢的consul例項的位置(可以是IP地址或FQDN)以及埠。 |
| max-stale | 查詢的最大陳舊性。如果指定,Consule將把工作分配給所有伺服器,而不僅僅是領導者。預設值為0(無)。 |
| ssl | 在與Consul通訊時使用HTTPS。需要將consule伺服器配置為服務安全連線。預設值為false。 |
| ssl-verify | 透過SSL連線時驗證證書。這需要使用-ssl。預設值為true。 |
| syslog | 將日誌輸出傳送到syslog(除了stdout和stderr)。預設值為false |
| syslog-facility | 傳送到syslog時要使用的工具。這需要使用-syslog。預設值為LOCAL |
| token | Consul API令牌。沒有預設值。 |
| prefix* | 包括源字首,以及目標字首選項,用冒號(:)分隔。此選項是累加的,可以為要複製的多個字首多次指定。 |
| exclude | 複製期間要排除的字首。此選項是累加的,可以為要排除的多個字首多次指定。 |
| wait | 複製前等待穩定性的最小值(:最大值),用冒號(:)分隔。如果省略可選的最大值,則假定為所需最小值的4倍。沒有預設值。 |
| retry | 如果Consule在與API通訊時返回錯誤,則等待的時間量。預設值為5秒。 |
| config | 磁碟上配置檔案或配置檔案目錄的路徑,相對於當前工作目錄。在CLI上指定的的值優先於配置檔案中指定的的值。沒有預設值。 |
| log-level | 輸出的日誌級別。這適用於stdout/stderr日誌記錄以及syslog日誌記錄(如果啟用)。有效值為“debug”、“info”、“warn”和“err”。預設值為“warn”。 |
| once | 執行Consule Replicate一次並退出(與預設的守護程式行為相反)。(僅限CLI) |
| version | 輸出版本資訊並退出。(僅限CLI) |
拍攝快照
快照是在發生備份時管理Consul叢集的重要組成部分。預設情況下,Consul為我們提供了一種儲存Consul叢集快照的方法。Consul為我們提供了四個單獨的子命令,我們可以使用它們來使用consul建立快照,它們是:
- Consul snapshot save
- Consul snapshot agent
- Consul snapshot inspect
- Consul snapshot restore
讓我們詳細瞭解一下這些內容。
Consul Snapshot Save
此命令設定為檢索Consul伺服器狀態的原子時間點快照,包括鍵/值條目、服務目錄、準備好的查詢、會話和ACL。快照將儲存到提到的檔名中。
$ consul snapshot save <name-of-the-file>.snap
輸出將如以下螢幕截圖所示。
要檢查當前目錄中檔案的存在,請透過在當前目錄中執行它來檢查它。對於非領導者節點,請執行以下命令:
$ consul snapshot save -stale <name-of-file>.snap
Consul Snapshot Agent
此子命令啟動一個程序,該程序會拍攝 Consul 伺服器狀態的快照並將其儲存在本地,或者將其推送到可選的遠端儲存服務。
Consul 快照檢查
它用於檢查 Consul 伺服器狀態的某個時間點的快照,其中包括鍵/值條目、服務目錄、已準備好的查詢、會話和 ACL。該命令可以按如下方式執行:
注意 - 請記住,以下命令只能在儲存快照的目錄中執行。
$ consul snapshot save <name-of-the-file>.snap
輸出將如以下螢幕截圖所示。
Consul 快照恢復
快照恢復命令用於恢復 Consul 伺服器狀態的某個時間點的快照,其中包括鍵/值條目、服務目錄、已準備好的查詢、會話和 ACL。快照從儲存的備份檔案讀取。
注意 - 請記住,以下命令只能在儲存快照的目錄中執行。
$ consul snapshot restore <name-of-the-file>.snap
輸出將如以下螢幕截圖所示。
如果您正在使用 AWS 上的 Consul,此專案可能可以幫助您節省一些時間:https://github.com/pshima/consul-snapshot。