您將如何設置多個 SSL 終止 Haproxy 實例,這些實例本身是負載平衡的?
我一直在對此進行大量研究和實驗,但我真的遇到了困難:
我正在嘗試將 HAProxy 設置為高可用性環境的反向代理。所有進出這個環境的流量都是 SSL 加密的,所以最初的設計是讓 HAProxy 做 SSL 終止,並將流量以明文方式傳遞到 enclave,然後以另一種方式轉換回來。到目前為止,一切都很好,有很多關於這方面的出色文件。
問題是這樣的:單個 SSL 終止 HAProxy 框無法處理龐大的流量,因此需要多個 SSL 終止反向代理。
好的,我對此進行了高低審視,發現許多文章似乎朝著正確的方向發展,但總是以 1 個主 HAProxy 和 1 個備份結束(例如,所有的 heartbeat 和 keepalived 解決方案,例如如這里和這裡),或者完全忽略 SSL 終止,並與負載均衡器討論 DNS 循環。
所以我想我真正想要的是讓多個 haproxy ssl 終端盒同時分擔負載的能力。有沒有辦法在 DNS 循環之外做到這一點?
我想我認為有一種方法可以讓它們共享相同的虛擬 IP 地址,並同時在它們之間分配流量,所有這些都類似於集群。如果一個盒子出現故障,則可以使用上述 keepalived 方法或其他方法來解決故障轉移。這似乎不是一個常見的案例……甚至可能嗎?
(當然還有如何在 HAProxy 程序之間共享 SSL 會話的問題,但如果這不可能,在這種情況下偶爾重新建立一個新會話並不是一個殺手。)
提前致謝!
兩個 haproxy 實例可以通過使用 2 個虛擬 IP 來共享負載,每個實例都是其中一個的主實例。輪詢 DNS 在 2 個虛擬 IP 之間(以及因此在兩個 haproxy 實例之間)大致平衡。此方法也適用於 SSL。但是,對這種主動-主動設置三思而後行的一個原因是,如果一個實例無法單獨處理總流量,那麼如果任一實例出現故障,它將超載。從根本上說,這只能通過擁有多餘的“浪費”容量或接受暫時的性能打擊來解決。
或者,您可以在 SSL 終止代理之前以 TCP 模式進行 haproxy 平衡。一個 TCP 會話將堅持到後端,因此您無需過多擔心重新協商。