文章目錄
-
- 單節點Redis伺服器的問題與解決方法
- Redis叢集概念
-
- Redis叢集介紹
- Redis叢集的優勢
- Redis叢集的資料分片
- Redis以3個節點組成的叢集為例
- Redis支援添加或者删除節點
- Redis叢集的主從複制模型
- 項目案例拓撲圖
- Redis叢集操作步驟
-
- 安裝Redis
- 修改所有節點的配置檔案
- Master1上配置操作
- 測試群集
單節點Redis伺服器的問題與解決方法
- 問題:
- 單點故障點,服務不可以用
- 無法處理大量的并發資料請求
- 資料丢失–大災難
-
解決方法:
搭建Redis叢集
Redis叢集概念
Redis叢集介紹
- Redis叢集是一個提供在多個Redis間節點共享資料的程式集。
- Redis叢集并不支援多處理多個Keys的指令,應為這需要在不同節點。
- 間移動資料,進而達不到想Redis那樣的性能,在高負載的情況下可能會導緻不可預料的錯誤。
- Redis叢集通過分區來提供一定程度的可用性,在實際環境中檔某個節點當機或則不可達的情況下繼續處理指令。
Redis叢集的優勢
- 自動分割資料到不同的節點上。
- 整個叢集的部分節點失敗或者不可達的情況下能夠繼續處理指令。
Redis叢集的資料分片
- Redis叢集沒有使用一緻性hash,而是引入了哈希槽的概念
- Redis叢集有16384個哈希槽
- 每個Key通過CRC16校驗後對16384取模來決定放置哪個槽
- 叢集的每個節點負責一部分hash槽
Redis以3個節點組成的叢集為例
- 節點A包含0到5500号哈希槽
- 節點B包含5501到11000号哈希槽
- 節點C包含11001到16384号哈希槽
Redis支援添加或者删除節點
- 添加删除節點無需停止服務。比如如果我想添加節點D,我需要移動節點A、B、C中的部分槽到D上;如果我想移除節點A,需要将A中的槽移到B和C節點上,然後将沒有任何槽的A節點從叢集中移除
Redis叢集的主從複制模型
- 叢集中具有A、B、C三個節點,如果節點B失敗了,整個叢集就會因缺少5501-11000這個範圍的槽而不可以用。
- 為每個節點添加一個從節點A1、B1、C1整個叢集便有三個master節點和三個slave節點組成,在節點B失敗後,叢集選舉B1位新的主節點繼續服務。當B和B1都失敗後,叢集将不可用。
項目案例拓撲圖

Redis叢集操作步驟
安裝Redis
- 略(以前部落格有安裝教程)
修改所有節點的配置檔案
- 修改配置檔案
vim /etc/redis/6379.conf
#70行删除原來的127.0.0.1 然後添加各主機對應的IP位址
bind 192.168.18.101
#839行開啟群集功能
cluster-enabled yes
#847行開啟群集節點配置檔案
cluster-config-file nodes-6379.conf
#853行開啟群集逾時時間
cluster-node-timeout 15000
#930行去掉注釋yes改成no
cluster-require-full-coverage no
- 重新開機服務
/etc/init.d/redis_6379 restart
Master1上配置操作
- 安裝Ruby
yum -y install ruby rubygems
- 上傳redis-3.2.0.gem并安裝
gem install redis --version 3.2.0
- 将所有節點加入到群集中
redis-cli --cluster create --cluster-replicas 1 192.168.18.101:6379 192.168.18.102:6379 192.168.18.103:6379 192.168.18.104:6379 192.168.18.105:6379 192.168.18.106:6379
測試群集
- 遠端連接配接Redis資料庫
redis-cli -h 192.168.18.102 -p 6379 -c
192.168.18.102:6379> set student Alice
-> Redirected to slot [5249] located at 192.168.18.101:6379
OK
192.168.18.101:6379> KEYS *
1) "student"
192.168.18.101:6379> get student
"Alice"
- 檢視叢集狀态
192.168.18.103:6379> cluster info
- 檢視節點資訊
192.168.18.103:6379> cluster nodes