1)Redis介紹及部署在CentOS7上(一)html
2)Redis指令與數據結構(二)node
3)Redis客戶端鏈接以及持久化數據(三)redis
4)Redis高可用之主從複製實踐(四)ruby
5)Redis高可用之哨兵模式Sentinel配置與啓動(五)服務器
6)Redis高可用之集羣配置(六)微信
上篇文章中介紹了redis的主從複製,可是若是出從複製沒法知足單節點故障問題,則須要引入集羣部署。數據結構
在以前有看到過redis集羣部署的三種方案,不過性能最高的仍是redis官方推薦的redis-cluster,性能最高,其餘兩種我就不介紹了,主要介紹一下redis-cluster這種。app
一、redis-cluster負載均衡
A、採用去中心化的思想,沒有中心節點的說法,它使用hash slot方式將16348個hash slot覆蓋到全部節點上,對於存儲的每一個key值,使用CRC16(KEY)&16348=slot獲得他對應的hash slot,asp.net
並在訪問key的時候就去找他的hash slot在哪個節點上,而後由當前訪問節點從實際被分配了這個hash slot的節點去取數據,節點之間使用輕量協議通訊 減小帶寬佔用 性能很高,
自動實現負載均衡與高可用,自動實現failover而且支持動態擴展,官方已經玩到能夠1000個節點 實現的複雜度低。
B、其內部中也須要配置主從,而且內部也是採用哨兵模式,若是有半數節點發現某個異常節點,共同決定更改異常節點的狀態,若是改節點是主節點,則對應的從節點自動頂替爲主節點,當原先的主節點上線後,則會變爲從節點。
若是集羣中的master沒有slave節點,則master掛掉後整個集羣就會進入fail狀態,由於集羣的slot映射不完整。若是集羣超過半數以上的master掛掉,不管是否有slave,集羣都會進入fail狀態。
C、根據官方推薦 集羣部署至少要3臺以上的master節點。那麼接下來就開始部署吧
一、環境配置
第一:準備3臺服務器,每臺服務器運行兩個redis
主機說明 | 主機IP | 端口 |
Redis | 192.168.250.129
|
7000 7001 |
Redis | 192.168.250.130 | 7002 7003 |
Redis | 192.168.250.131 |
7004 7005
|
二、在每一臺服務器上咱們添加一下配置文件
分別爲: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
三、上面文件都配置好後,便可啓動
四、啓動後咱們就能夠建立集羣啦
注意:
在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。
五、咱們驗證一下集羣是否建立成功
登陸redis客戶端 ./src/redis-cli -c -p 7000, -c 參數表明鏈接到集羣中
咱們先看一下主從配對狀況,根據node ID匹配能夠得出配比。以下:紅色圈出來的爲標註,你們能夠看看是否有對應的ID,這樣咱們就區分了主從節點的關係了。
驗證數據匹配是否採用哈希槽的方式。你們可自行測試一下。發現我在7000客戶端設置的數據,被分配到7002上了。
咱們查看一下key 爲 wangjing,發現定位到了7002
六、咱們驗證一下故障轉移
咱們從上面能夠看出7002爲master,7001爲其從節點。咱們按照以下流程進行操做
先停掉7002,發現7001轉爲了master節點,而後恢復7002上線,7002變爲slave節點。
那麼redis集羣演示就到此爲止吧。
後面還涉及到 集羣新增節點(包括master和slave)以及刪除節點,這些操做你們自行操做吧,俗話說 師父領進門修行在我的。你們加油。
你們若是有問題歡迎提問,謝謝。
asp.net core 交流羣:787464275 歡迎加羣交流
若是您認爲這篇文章還不錯或者有所收穫,您能夠點擊右下角的【推薦】按鈕精神支持,由於這種支持是我繼續寫做,分享的最大動力!
微信公衆號:歡迎關注 QQ技術交流羣: 歡迎加羣