簡體   English   中英

2節點Redis HA

[英]2 Node Redis HA

我有兩個節點,我想在主動-主動模式下作為服務器運行,並且還具有 HA 功能,即如果一個節點關閉,另一個節點應該開始接收所有請求,但是當兩個節點都啟動時,兩個節點都應該接收所有請求。 現在,由於 Redis 不允許相同哈希集的主動-主動模式,而且我沒有運行 Sentinel 的選項,因為我不能有第三個節點,我的想法是在復制中運行這兩個節點,我自己決定是否主節點已關閉並將從屬節點提升為主節點。 這有什么問題嗎? 當原來的master回來時,有沒有辦法將它配置為slave?

這聽起來是個好主意嗎? 我對 Redis 以外的建議持開放態度。

一般運行兩個節點從來都不是一個好主意,因為它必然會出現腦裂問題:當兩個節點之間的網絡宕機一兩分鍾時,兩個節點不可避免地會認為對方下線並會自我提升/保持成為主人並開始接受來自其他服務的請求。 然后發生裂腦。

如果您對這種可能的情況感到滿意,那么您可以在腳本文件和 HA 服務(如起搏器或 keepalived)的幫助下研究設置主從。

通常,您必須通過預定義的規則告訴集群管理器,當兩台機器在裂腦條件下重新加入時,哪一台是您的首選主機。

當一個主節點被選舉出來時,執行腳本,基本上它自己執行slaveof no one noone,並在另一個節點上執行slaveof <new-master-ip> <port>

您可以在腳本文件中更進一步並嘗試將兩個數據集合並在一起,但這是否可以實現完全取決於您在 Redis 中如何組織數據以及您准備等待多長時間數據同步。

我以前通過起搏器+ corosync自己做過這種方式。

好的,使用SLAVEOF的部分解決方案:

您可以通過運行手動將 slave 提升為 master:

SLAVEOF NO ONE

您可以通過運行手動將主設備轉換為從設備:

SLAVEOF <HOST> <port>

應該禁用集群。

我建議至少有 3 個帶有 Sentinel 設置的節點,以啟用 gossip/quorum,以便在當前主節點出現故障時自動將從節點提升為主節點。

如果您通過將副本更改為replicaof no one來手動使副本聯機,則需要小心地將失敗的主節點作為新節點的副本重新聯機,這樣您就不會覆蓋更新的數據。 我不建議手動執行此操作。 您希望最大限度地減少停機時間,因此自動故障轉移是理想的選擇

您提到對其他產品持開放態度。 查看具有您正在尋找的確切配置的KeyDB 它是一個維護的多線程 redis 分支,提供您正在尋找的活動副本方案。 在這里查看一個例子

將兩個節點作為彼此的副本運行,同時接受讀取和寫入(取決於前期代理配置)。 如果一個失敗,另一個繼續承擔全部負載並且已經同步。

關於腦裂問題,KeyDB 可以處理主節點之間的連接被切斷但繼續寫入的腦裂場景。 每次寫入都帶有時間戳,當連接恢復時,每個 master 將共享他們的新數據。 最新的寫入將獲勝。 這可以防止陳舊的數據覆蓋連接斷開后寫入的新數據。

我相信可以使用以下命令創建具有兩個節點的集群:

$ redis-cli --cluster create <ip-node1>:7000 <ip-node1>:7001 <ip-node2>:7000 <ip-node2>:7001 --cluster-replicas 1

解決腦裂問題。 您可以添加沒有數據的第三個節點:

$ cluster meet #IP_node3#:7000

$集群節點

我認為它有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM