Redis集群
單機
單點故障、瓶頸;多個節點負載;
集群
主從復制
定義
Replication 鏡像:增刪改<主 退化至單節點> 查詢負載到從節點
實作高可用 Sentinel
1.一個redis服務可以有多個該服務的復制品,這個redis服務稱之為Master,其他稱為slaves
2.只要網路連接正常,Master和Slaves之間就會保持主從資料同步
3.只有Master可以執行寫命令,Slaves只能執行讀命令
從服務器執行客戶端發送的讀命令,比如GET、LRANGE、SMEMMBERS、HGET、ZRANGE等等 客戶端可以連接Slaves執行讀請求,降低Master的讀壓力
如何創建主從復制
redis-server --slaveof ,配置當前服務稱為某Redis服務的Slave
redis-server --port 6380 --slaveof 127.0.0.1 6379
SLAVEOF host port命令,將當前服務器狀態從Master修改為別的服務器的Slave
redis > SLAVEOF 192.168.1.1 6379,將服務器轉換為Slave
redis > SLAVEOF NO ONE ,將服務器重新恢復到Master,不會丟棄已同步資料
配置方式:啟動時,服務器讀取組態檔,并自動成為指定服務器的從服務器
slaveof <masterip> <masterport>
slaveof 127.0.0.1 6379
主從復制問題 手動解決master掛掉
1.一個Master可以有多個Slaves
2.Slaves下線,只是讀請求的處理性能下降
3.Master下線,寫請求無法執行
4.某一臺Slave使用SlaveOF no one命令稱為Master,其它Slaves執行SLAVEOF命令指向這個新的Master,從它這里同步資料
Sentinel
Sentinel 哨兵,實作故障轉移Failover高可用 監控Monitoring Sentinel會不斷檢查Master和Slaves是否正常 每一個Sentinel可以監控任意多個Master和該Master下的Slaves

當主服務器下線時
當一個sentinel認為被監視的服務器已經下線時,它會向網路中的其他Sentinel進行確認,判斷該服務器是否真的已經下線 如果下線的服務器為主服務器,那么sentinel網路將對下線主服務器進行自動故障轉移,通過將下線主服務器的某個從服務器提升為新的主服務器,并讓其從服務器轉為復制新的主服務器,以此來讓系統重新回到上線的狀態
Sentinel組態檔
至少包含一個監控配置選項,用于指定被監控Master的相關資訊
Sentinel monitor<name><ip><port><quorum>,例如sentinel monitor mymaster 127.0.0.1 6379 2監視mymaster的主服務器,服務器ip和埠,將這個主服務器判斷為下線失效至少需要2個Sentinel同意,如果多數Sentinel同意才會執行故障轉移
Sentinel會根據Master的配置自動發現Master的Slaves
Sentinel默認埠號為26379
Sentinel 總結
1 主從復制,解決了讀請求的分擔,從節點下線,會使得讀請求能力有所下降
2 Master只有一個,寫請求單點問題
3 Sentinel會在Master下線后自動執行Failover操作,提升一臺Slave為Master,并讓其他Slaves重新成為新Master的Slaves
4 主從復制+哨兵Sentinel只解決了讀性能和高可用問題,但是沒有解決寫性能問題
Redis Twemproxy
1.主從對寫壓力沒有分擔 使用多個節點分擔,將寫請求分散到不同節點處理
2.使用多個節點分擔,將寫請求分散到不同節點處理
3.分片Sharding 多節點分擔的思路有點類似關系型資料庫處理大表水平切分思路
Twemproxy
Twitter開發的代理服務器,他兼容Redis和Memcached,允許用戶將多個redis服務器添加到一個服務器池(pool)里面,并通過用戶選擇的散列函式和分布函式,將來自客戶端的命令請求分發給服務器池中的各個服務器 通過使用twemproxy我們可以將資料庫分片到多臺redis服務器上面,并使用這些服務器來分擔系統壓力以及資料庫容量:在服務器硬體條件相同的情況下,對于一個包含N臺redis服務器的池來說,池中每臺平均1/N的客戶端命令請求 向池里添加更多服務器可以線性的擴展系統處理命令請求的能力,以及系統能夠保存的資料量
配置方案
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
配置說明
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就會將該服務器標記為下線,并交由池中其他在線服務器處理
最后
我這邊整理了一份:Redis基礎知識總結檔案(另外還有Java核心知識點、面試專題和20年最新的互聯網真題、電子書等)有需要的朋友可以加微信 mxj94670 即可獲取,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/232017.html
標籤:其他
上一篇:vc++自動斷開wifi功能
