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
當主服務器下線時
當一個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>
閱讀更多 微科技分享 的文章