Redis使用去中心化分片集群
1、去中心化分片集群是什么?請簡單介紹,
Redis分片集群對Redis集群進行分片,采用多主多從的方式實作Redis集群,每一個分片都是由一個Redis主機和多個從機組成,片區和片區之間是相互平行的,Redis Cluster就是Redis 3.0+版本之后官方推薦的一種分片集群實作方式,主要是基于Hash卡槽(slot)和crc16(key)演算法的實作策略來實作Redis集群分片和資料跨主機轉移、共享,這是一種去中心化的集群解決方案,可以實作Redis動態擴容和縮容,但是缺點就是集群環境比較復雜,搭建成本高,
2、為什么使用去中心化分片集群?
在不使用去中心化集群時,我們通常采用了主從復制+哨兵模式實作的,【主從模式】【哨兵模式】,一般采用了(一主多從)搭建Redis集群實作的,采用哨兵模式作為守護存在,一旦主節點宕機,就進行投票選舉,實作自動化故障發現和轉移,最大化保證集群的高可用,但是在此期間,是禁止使用寫操作,同時主節點宕機就會導致資料丟失,
這時候就需要用到Redis Cluster去中心化分片集群,Redis Cluster去中心化分片集群使用Hash卡槽來確定和定位Key的讀寫位置,最大的優點是有利于Redis動態擴容、縮容,把宕機資料丟失的風險降到最小,
3、傳統的主從哨兵集群的優缺點
缺點:
- 始終只有一個Redis主機來接收和處理寫請求,
- 用戶數量大的情況下資料同步效率低,
- 從節點和主節點的資料始終是同步的,存在大量冗余資料,浪費空間,
- 主從復制的讀寫分離原則:主機只負責寫操作,子節點不能執行寫操作,如果是高并發的情況下,就會導致主節點寫操作的壓力非常大,同時會加重同步資料到子節點的負荷,如果主節點宕機,那么就會導致大量資料同時失效,
- 主節點宕機后,哨兵模式就開始選舉主節點,但是在這期間,誰也不知道主節點和子節點是誰,此時Redis就會開啟保護機制,禁止寫操作,直到選舉出來新的主節點,這是中心化的集群實作方案,耦合度很高,
說了這么多缺點,也該說說優點了吧!
優點:
- 讀寫分離策略:從節點可以擴展主庫節點的讀能力,有效應對大并發量的讀操作,
- 采用雙機主備架構,能夠在主庫出現故障時自動進行主備切換,從庫提升為主庫提供服務,保證服務平穩運行,
- 開啟資料持久化功能和配置合理的備份策略,能有效的解決資料誤操作和資料例外丟失的問題,
- Redis Sentinel 集群部署簡單,
4、Redis Cluster資料磁區的簡單理解,
- 對于每次讀寫操作的的Key值都會計算對應的卡槽數,根據計算出的卡槽數會把Key存入到卡槽區間范圍包含這個卡槽數的Redis主機中,或者從包含這個Key卡槽數的卡槽范圍的Redis主機中獲取Key,
- Key的卡槽數計算是基于crc16演算法實作的,根據每次寫入/讀取的Key的值不同,該演算法會計算出不同的卡槽數,Key的卡槽數計算公式:
N(Key的卡槽數)=crc16(Key)%16384 - 如果寫入的Key計算出的卡槽數不在當前操作的Redis主機的卡槽數范圍內,那么會自動把這個Key轉發到卡槽范圍包含這個Key的卡槽數的Redis主機中進行寫操作,
- 如果需要獲取的Key計算出的卡槽數也不在當前操作的Redis主機卡槽范圍內(當前操作的Redis主機中沒有這個Key),那么也會自動轉發到包含這個Key的卡槽數的卡槽范圍的Redis主機中去獲取到這個Key,
需要注意的地方:
- hash卡槽只會分配給每個片區的主節點,子節點不會分配卡槽
- 每個hash卡槽可以存放多個Key
- hash卡槽的目的是確認資料存放到哪個片區的Redis主機,實作Redis集群分攤Key,減少宕機導致資料丟失帶來的意外風險,
- 每個片區的Redis主機卡槽數都對應一個范圍**,多個片區之間卡槽數范圍是等比分配的**(1:1,比如存在3個片區對應3個Redis主機,那么 3個Redis主機的卡槽總數分別是:16384/3,3個Redis主機的卡槽范圍分別是:
第一臺Redis主機:0~5460
第二臺Redis主機:5461~10921
第三臺Redis主機:10922~16383
Redis Cluster去中心化分片集群使用Hash卡槽來確定和定位Key的讀寫位置,最大的優點是有利于Redis動態擴容、縮容,把宕機資料丟失的風險降到最小,
5、Redis使用去中心化分片集群環境搭建
手上暫時沒有太多空余的服務器,采用了一臺服務器通過采用不同埠來區分不同的Redis節點,也方便初期搭建減少了一些因操作不數量導致的錯誤,
**怎么區分不同的Redis節點:**使用不同的Redis組態檔設定不一樣的埠,啟動不同的Redis服務,使用埠區分不同的Redis服務,
這里采用了三主三從的集群環境搭建,也就是三臺主節點+三臺子節點

安裝Redis6.2.1【點這里】
操作環境:
Centos7
Redis 6.2.1
xshell 6
埠號分別設定成:9000,9001,9002,9003,9004,9005
5、1 復制redis.conf組態檔并編輯組態檔,
我的啟動項在/usr/local/bin/下面
cd /usr/local/bin
mkdir three-myredis
cp redis.conf /usr/local/bin/
mv redis.conf redis9000.conf
使用vim編輯組態檔,
cd /
cd /usr/local/bin/three-myredis
vim redis9000.conf
建議使用vim來編輯組態檔,
vim和vi一樣的操作,但是vim會把注釋的內容特殊顏色標識,未注釋的采用白色標識,
如果使用vim提示未找到此命令,
執行這條命令,來安裝vim編輯器
yum -y install vim*
需要修改的內容:
- port 這個改成你想要設定的埠號
- 設定全部ip地址可以訪問
- 開啟后臺運行服務
- 開啟AOF
- 開啟集群
- 開啟集群的組態檔
- 開啟集群的超時時間
== 提示進入編輯檔案后,輸入/ 后面跟所要查詢的內容,例如/ prot小寫n是向下查找,大寫N是向上查找, ==

將上面的復制到下面的框框里面,注意后面的空格不能帶,linux對空格敏感



注意,下面的陳述句前面有一個#,一定要干掉,不然啟動不了,

修改完后,執行復制檔案,
cp redis9000.conf redis9001.conf
cp redis9000.conf redis9002.conf
cp redis9000.conf redis9003.conf
cp redis9000.conf redis9004.conf
cp redis9000.conf redis9005.conf
再對新cp的檔案進行編輯,提示:只需要所搜你剛才設定的數字即可,其他的不需要動了,
5、2啟動組態檔,
redis-server redis9000.conf
redis-server redis9001.conf
redis-server redis9002.conf
redis-server redis9003.conf
redis-server redis9004.conf
redis-server redis9005.conf
查看行程,只有后面帶**[cluster]**才算啟動成功,

5、2為主節點分配槽以及分配子節點
cluster-replica:每個主節點跟隨的從節點的個數
redis-cli --cluster create --cluster-replicas 1 192.168.31.33:9000 192.168.31.33:9001 192.168.31.33:9002 192.168.31.33:9003 192.168.31.33:9004 192.168.31.33:9005


簡單的去中心化分片集群搭建完畢,
客戶端訪問:
redis-cli -c -h 127.0.0.1 -p 9000
一定要加上-h,表示使用集群服務,不然啟動的也只是普通的,
提示:
cluster info 查看所有主機的狀態,
cluster nodes 查看所有的節點資訊,
info 查看節點記憶體、cpu、key數量等資訊
6、測驗
進入后添加資料,發現會自動更換埠,說明片區劃分成功,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/276744.html
標籤:其他
