0、Redis目錄結構
5)Redis高可用之哨兵模式Sentinel配置與啟動(五)
一、介紹
上篇文章中介紹了redis的主從復制,但是如果出從復制無法滿足單節點故障問題,則需要引入集群部署。
在之前有看到過redis集群部署的三種方案,不過性能最高的還是redis官方推薦的redis-cluster,性能最高,其他兩種我就不介紹了,主要介紹一下redis-cluster這種。
1、redis-cluster
A、采用去中心化的思想,沒有中心節點的說法,它使用hash slot方式將16348個hash slot覆蓋到所有節點上,對於存儲的每個key值,使用CRC16(KEY)&16348=slot得到他對應的hash slot,
並在訪問key的時候就去找他的hash slot在哪一個節點上,然后由當前訪問節點從實際被分配了這個hash slot的節點去取數據,節點之間使用輕量協議通信 減少帶寬占用 性能很高,
自動實現負載均衡與高可用,自動實現failover並且支持動態擴展,官方已經玩到可以1000個節點 實現的復雜度低。
B、其內部中也需要配置主從,並且內部也是采用哨兵模式,如果有半數節點發現某個異常節點,共同決定更改異常節點的狀態,如果改節點是主節點,則對應的從節點自動頂替為主節點,當原先的主節點上線后,則會變為從節點。
如果集群中的master沒有slave節點,則master掛掉后整個集群就會進入fail狀態,因為集群的slot映射不完整。如果集群超過半數以上的master掛掉,無論是否有slave,集群都會進入fail狀態。
C、根據官方推薦 集群部署至少要3台以上的master節點。那么接下來就開始部署吧
二、集群部署
1、環境配置
第一:准備3台服務器,每台服務器運行兩個redis
主機說明 | 主機IP | 端口 |
Redis | 192.168.250.129
|
7000 7001 |
Redis | 192.168.250.130 | 7002 7003 |
Redis | 192.168.250.131 |
7004 7005
|
2、在每一台服務器上我們添加一下配置文件
分別為:redis-7000.conf redis-7001.conf redis-7002.conf redis-7003.conf redis-7004.conf redis-7005.conf
配置文件內容為如下:其他的配置文件修改一下端口以及log文件、日志文件即可。其中中間部分cluster代表集群設置
daemonize yes port 7000 logfile 7000.log dir ./ bind 192.168.250.129 127.0.0.1 cluster-enabled yes cluster-config-file nodes_7000.conf cluster-node-timeout 15000 appendonly yes appendfilename aof-7000.aof appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
3、上面文件都配置好后,即可啟動
4、啟動后我們就可以創建集群啦
注意:
在redis5.0后 創建集群統一使用redis-cli,之前的版本使用redis-trib.rb,但是需要安裝ruby軟件相對復雜,相比之前的版本5.0不需要安裝額外的軟件,方便。具體的可以參照redis官方網站查看
https://redis.io/topics/cluster-tutorial
創建集群命令:其中 cluster-replicas 1 代表 一個master后有幾個slave,1代表為1個slave節點
./src/redis-cli --cluster create 192.168.250.129:7000 192.168.250.129:7001 192.168.250.130:7002 192.168.250.130:7003 192.168.250.131:7004 192.168.250.131:7005 --cluster-replicas 1
等待集群創建成功,發現 7000/7002/7004為master主節點,其他的為slave。
5、我們驗證一下集群是否創建成功
登錄redis客戶端 ./src/redis-cli -c -p 7000, -c 參數代表連接到集群中
我們先看一下主從配對情況,根據node ID匹配可以得出配比。如下:紅色圈出來的為標注,大家可以看看是否有對應的ID,這樣我們就區分了主從節點的關系了。
驗證數據匹配是否采用哈希槽的方式。大家可自行測試一下。發現我在7000客戶端設置的數據,被分配到7002上了。
我們查看一下key 為 wangjing,發現定位到了7002
6、我們驗證一下故障轉移
我們從上面可以看出7002為master,7001為其從節點。我們按照如下流程進行操作
先停掉7002,發現7001轉為了master節點,然后恢復7002上線,7002變為slave節點。
那么redis集群演示就到此為止吧。
后面還涉及到 集群新增節點(包括master和slave)以及刪除節點,這些操作大家自行操作吧,俗話說 師父領進門修行在個人。大家加油。
大家如果有問題歡迎提問,謝謝。
asp.net core 交流群:787464275 歡迎加群交流
如果您認為這篇文章還不錯或者有所收獲,您可以點擊右下角的【推薦】按鈕精神支持,因為這種支持是我繼續寫作,分享的最大動力!
微信公眾號:歡迎關注 QQ技術交流群: 歡迎加群