REDIS集群基礎知識總結

REDIS集群

單機

單點故障、瓶頸;多個節點負載;

集群

主從複製

定義

Replication

鏡像:增刪改 查詢負載到從節點

實現高可用 Sentinel

一個redis服務可以有多個該服務的複製品,這個redis服務稱之為Master,其他稱為slaves

只要網絡連接正常,Master和Slaves之間就會保持主從數據同步

只有Master可以執行寫命令,Slaves只能執行讀命令

從服務器執行客戶端發送的讀命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANGE等等 客戶端可以連接Slaves執行讀請求,降低Master的讀壓力

如何創建主從複製

redis-server --slaveof ,配置當前服務稱為某Redis服務的Slave

<code>redis-server --port 6380 --slaveof 127.0.0.1 6379/<code>

SLAVEOF host port命令,將當前服務器狀態從Master修改為別的服務器的Slave

<code>redis > SLAVEOF 192.168.1.1 6379,將服務器轉換為Slaveredis > SLAVEOF NO ONE ,將服務器重新恢復到Master,不會丟棄已同步數據/<code> 

主從複製問題 手動解決master掛掉

一個Master可以有多個Slaves

Slaves下線,只是讀請求的處理性能下降

Master下線,寫請求無法執行

某一臺Slave使用SlaveOF no one命令稱為Master,其它Slaves執行SLAVEOF命令指向這個新的Master,從它這裡同步數據

Sentinel

Sentinel哨兵,實現故障轉移Failover高可用監控MonitoringSentinel會不斷檢查Master和Slaves是否正常每一個Sentinel可以監控任意多個Master和該Master下的Slaves

REDIS集群基礎知識總結

當主服務器下線時

當一個sentinel認為被監視的服務器已經下線時,它會向網絡中的其他Sentinel進行確認,判斷該服務器是否真的已經下線

如果下線的服務器為主服務器,那麼sentinel網絡將對下線主服務器進行自動故障轉移,通過將下線主服務器的某個從服務器提升為新的主服務器,並讓其從服務器轉為複製新的主服務器,以此來讓系統重新回到上線的狀態

Sentinel配置文件

<code>至少包含一個監控配置選項,用於指定被監控Master的相關信息Sentinel monitor<name><port><quorum>,例如sentinel monitor mymaster 127.0.0.1 6379 2監視mymaster的主服務器,服務器ip和端口,將這個主服務器判斷為下線失效至少需要2個Sentinel同意,如果多數Sentinel同意才會執行故障轉移Sentinel會根據Master的配置自動發現Master的SlavesSentinel默認端口號為26379/<quorum>/<port>/<name>/<code>

Sentinel 總結

<code>1 主從複製,解決了讀請求的分擔,從節點下線,會使得讀請求能力有所下降2 Master只有一個,寫請求單點問題3 Sentinel會在Master下線後自動執行Failover操作,提升一臺Slave為Master,並讓其他Slaves重新成為新Master的Slaves4 主從複製+哨兵Sentinel只解決了讀性能和高可用問題,但是沒有解決寫性能問題/<code> 

Redis Twemproxy

主從對寫壓力沒有分擔 使用多個節點分擔,將寫請求分散到不同節點處理

使用多個節點分擔,將寫請求分散到不同節點處理

分片Sharding 多節點分擔的思路有點類似關係型數據庫處理大表水平切分思路

Twemproxy

Twitter開發的代理服務器,他兼容Redis和Memcached,允許用戶將多個redis服務器添加到一個服務器池(pool)裡面,並通過用戶選擇的散列函數和分佈函數,將來自客戶端的命令請求分發給服務器池中的各個服務器

通過使用twemproxy我們可以將數據庫分片到多臺redis服務器上面,並使用這些服務器來分擔系統壓力以及數據庫容量:在服務器硬件條件相同的情況下,對於一個包含N臺redis服務器的池來說,池中每臺平均1/N的客戶端命令請求

向池裡添加更多服務器可以線性的擴展系統處理命令請求的能力,以及系統能夠保存的數據量

配置方案

<code>Twemproxy配置redischi:  listen: 192.168.56.201:22121  hash: fnv1a_64  distribution: ketama  auto_eject_hosts: true  redis: true  server_retry_timeout: 2000  server_failure_limit: 3  servers:   - 192.168.56.201:6379:1   - 192.168.56.202:6379:1   - 192.168.56.203:6379:1/<code> 

配置說明

<code>Twemproxy配置說明redischi,服務器池的名字,支持創建多個服務器池listen: 192.168.56.201:22121,這個服務器池的監聽地址和端口號hash: fnv1a_64,鍵散列算法,用於將鍵映射為一個散列值distribution: ketama,鍵分佈算法,決定鍵被分佈到哪個服務器redis: true,代理redis命令請求,不給定時默認代理memcached請求servers,池中各個服務器的地址和端口號及權重auto_eject_hosts、server_failure_limit: twemproxy連續3次向同一個服務器發送命令請求都遇到錯誤時,twemproxy就會將該服務器標記為下線,並交由池中其他在線服務器處理/<code>


分享到:


相關文章: