2020 It邦幫忙鐵人賽 系列文章
由於我比較熟悉 GCP / GKE 的服務,這篇的操作過程都會以 GCP 平台作為範例,不過操作過程大體上是跨平台通用的。
寫文章真的是體力活,覺得我的文章還有參考價值,請左邊幫我點讚按個喜歡,右上角幫我按個追縱,底下歡迎留言討論。給我一點繼續走下去的動力。
對我的文章有興趣,歡迎到我的網站上 https://chechiachang.github.io 閱讀其他技術文章,有任何謬誤也請各方大德直接聯繫我,感激不盡。
上篇的例子完成應該是這樣
+-------+ +--------+ +------------+ +---------+
|Clients|---|HAProxys|----|redis master|----|sentinels|
+-------+ +--------+ +------------+ +---------+
那現在就來聊聊這些服務可能怎麼死的,回復的機制又是如何
這個是目前我們這個 Redis HAProxy 配置主要想解決的問題,故障與回覆的流程大概是這樣
這邊的幾個重要的參數
sentinel
haproxy.cfg
從這個例子來看,這個配置的 HA 其實還是有離線時間
這個是很好解決的錯誤,如同我們在 topology 這篇提到的,原則上只要能維持 quorum 以上的 sentinel 正常運作,就可以容忍多個 sentinel 的錯誤
這個在 kubernetes 上也是很好解決
HAProxy 不用知道彼此,只要能夠監測後端服務,並且 proxy request 即可
我們啟動 HAProxy 時會一次啟動多個 HAProxy
Kubernetes 會自動透過 stats port,對 HAPRoxy 做 liveness check,check 失敗就不會把流量導近來
HAproxy 前端的 kubernetes service 會自動 load balance client 到正常運作的 HAProxy 上
例如起了 3 HAProxy
3 HAProxy 都各自向 redis instance 做 tcp-check,每秒 3 * 3 組 check
客戶端連入任一 HAProxy,都可以連入正確的 master
HAProxy 只要至少有一個活著就可以,也就是可以死 2 個
Kubernetes service 會自動導向活著的 HAProxy
2 HAPRoxy 回復的時候,就是 HAProxy 重啟後重新開始服務
由於效能瓶頸還是在 redis master,為了能支撐夠多 client,最好把 client 需要讀寫的拆分開來
HAProxy 的設定,就會需要
這樣可以輕易地透過 scale slave 來擴大讀取的流量帶寬
Intro 的時候有提到,redis cluster 是另一個面向的 redis solution。
使用 redis cluster 將資料做 sharding,分散到不同群組內,partitions 由複數的 master 來存取
這部份我們下回待續