架構師進階:01---集羣專題之(Redis集羣)

前言

  • 本文主要對Redis的單點模式、主從模式、Sentinel模式、cluster模式做一個簡單介紹,並且每一個都進行演示案例
  • 相關的細節請參閱文章中給出的鏈接,幾乎涵蓋了所有Redis在集羣方面的知識點(語法方面)

一、Redis集羣知識點總覽

  • Redis有如下幾種工作模式:
    • ①單點模式
    • ②主從複製模式
    • ③Sentinel模式(哨兵模式)
    • ④cluster模式(集羣模式)

①單點模式

  • 單節點實例還是比較簡單的,平時做個測試,寫個小程序如果需要用到緩存的話,啓動一個Redis還是很輕鬆的,做爲一個 key/value數據庫也是可以勝任的
  • 實際開發場景中幾乎不會使用

②主從複製模式

  • 在分佈式系統中爲了解決單點問題,通常會把數據複製多個副本部署到其他機器,滿足故障恢復和負載均衡等需求。Redis也是如此,它爲我們提供了複製功能,實現了相同數據的多個Redis副本
  • 主從模式一般用來:
    • 備份數據:這樣當一個節點損壞(指不可恢復的硬件損壞)時,數據因爲有備份,可以方便恢復
    • 負載均衡:所有客戶端都訪問一個節點肯定會影響Redis工作效率,有了主從以後,查詢操作就可以通過查詢從節點來完成
  • 主從模式缺點:
    • master 節點掛了以後,redis 就不能對外提供寫服務了,因爲剩下的 slave 不能成爲master
    • 這個缺點影響是很大的,尤其是對生產環境來說,是一刻都不能停止服務的,所以一般的生產壞境是不會單單隻有主從模式的。所以有了下面的 sentinel 模式
  • 備註:主從模式做到高可用,除了sentinel模式,還有lvs+keepalived方案可以解決
  • 主從複製模式的相關文章請參閱(幾乎包含所有知識點):

③Sentinel模式(哨兵模式)

  • 主從模式雖然實現了數據的分離,但是沒提高可用性,也就是說當主節點宕機之後,所有從節點也跟着不能再使用。爲了提高高可用性,Redis提供了Sentinel模式
  • Redis Sentinel是Redis高可用的實現方案。Sentinel是一個管理多個Redis實例的工具,它可 以實現對Redis的監控、通知、自動故障轉移

④cluster模式(集羣模式)

  • Redis Cluster是Redis的分佈式解決方案,在3.0版本正式推出,有效地解決了Redis分佈式方面的需求。當遇到單機內存、併發、流量等瓶頸時,可以採用Cluster架構方案達到負載均衡的目的
  • 主要是針對海量數據+高併發+高可用的場景,海量數據,如果你的數據量很大,那麼建議就用 redis cluster

二、主從複製演示案例

  • 第一步:創建一個redis-slave目錄作爲複製相關的目錄,然後進入redis-slave目錄進去創建redis11、redis12、redis13三個目錄,用來存放三個redis節點,其中redis11作爲主節點,redis12、redis13作爲從節點都複製於redis11
mkdir redis-slave

cd redis-slave

mkdir redis11 redis12 redis13

  • 第二步:分別進入redis11、redis12、redis13目錄創建redis11-8001.conf、redis12-8002.conf、redis13-8003.conf三個配置文件,用來啓動三個節點
# redis11-8001.conf

bind 0.0.0.0

port 8001

logfile "redis11-8001.log"

dbfilename "dump-redis11-8001.rdb"

daemonize yes

rdbcompression yes
# redis12-8002.conf

bind 0.0.0.0

port 8002

logfile "redis11-8002.log"

dbfilename "dump-redis12-8002.rdb"

daemonize yes

rdbcompression yes

#複製主節點
slaveof 127.0.0.1 8001
# redis11-8003.conf

bind 0.0.0.0

port 8003

logfile "redis11-8003.log"

dbfilename "dump-redis13-8003.rdb"

daemonize yes

rdbcompression yes

#複製主節點
slaveof 127.0.0.1 8001

  • 第三步:在cluster-slave目錄下創建如下shell腳本(start-all.sh),用來啓動三個節點
#!/bin/bash

cd redis11/
redis-server redis11-8001.conf &
cd ..

cd redis12/
redis-server redis12-8002.conf &
cd ..

cd redis13/
redis-server redis13-8003.conf &
cd ..

  • 第四步:爲腳本添加可執行權限,然後啓動腳本,啓動之後,可以通過netstat查看情況
chmod +x start-all.sh

./start-all.sh

netstat -anop | grep redis

  • 第五步:進入主節點或從節點,輸入下面的命令可以查看主從複製的信息
info replication

  • 第六步:測試主從模式,首先進入8001、8002、8003節點查看都無name鍵。然後進入8001建立name鍵,值爲dongshao,之後再查看都成功顯示

三、sentienl模式演示案例

  • 第一步:創建一個redis-sentinel目錄作爲哨兵相關的目錄,然後進入redis-sentinel目錄進去創建redis21、redis22、redis23三個目錄,用來存放三個redis節點,其中redis21作爲主節點,redis22、redis23作爲從節點都複製於redis21
mkdir redis-sentinel

cd redis-sentinel

mkdir redis21 redis22 redis23

  • 第二步:分別進入redis21、redis22、redis23目錄創建redis21-9001.conf、redis22-9002.conf、redis23-9003.conf三個配置文件,用來啓動三個節點
# redis21-9001.conf

bind 0.0.0.0

port 9001

logfile "redis21-9001.log"

dbfilename "dump-redis21-9001.rdb"

daemonize yes

rdbcompression yes
# redis22-9002.conf

bind 0.0.0.0

port 9002

logfile "redis22-9002.log"

dbfilename "dump-redis22-9002.rdb"

daemonize yes

rdbcompression yes

#複製主節點
slaveof 127.0.0.1 9001
# redis23-9003.conf

bind 0.0.0.0

port 9003

logfile "redis23-9003.log"

dbfilename "dump-redis23-9003.rdb"

daemonize yes

rdbcompression yes

#複製主節點
slaveof 127.0.0.1 9001

  • 第三步:在redis-sentinel目錄中創建一個sentienl目錄用來存放sentinel節點的相關配合,然後在sentienl目錄中再創建一個sentinel-26379.conf作爲配置文件,命令與配置文件內容如下:
mkdir sentinel

vim sentinel/sentinel-26379.conf
# sentinel-26379.conf

# 端口號默認爲26379
port 26379

daemonize yes

logfile "sentinel-26379.log"

# 監控的主節點爲9001節點, 1代表主節點失敗至少需要1個sentinel節點同意
sentinel monitor mymaster 127.0.0.1 9001 1

sentinel down-after-milliseconds mymaster 30000

sentinel failover-timeout mymaster 180000

sentinel deny-scripts-reconfig yes

  • 第四步:在cluster-sentinel目錄下創建如下shell腳本(start-all.sh),用來啓動三個節點和sentinel節點
#!/bin/bash

cd redis21/
redis-server redis21-9001.conf &
cd ..

cd redis22/
redis-server redis22-9002.conf &
cd ..

cd redis23/
redis-server redis23-9003.conf &
cd ..

cd sentinel/
redis-sentinel sentinel-26379.conf &
cd ..

  • 第五步:爲腳本添加可執行權限,然後啓動腳本,啓動之後,可以通過netstat查看情況
chmod +x start-all.sh

./start-all.sh

netstat -anop | grep redis

  • 第六步:在sentinel中輸入下面的命令可以來查看相關信息
redis-cli -p 26379 info sentinel

  • 第七步:測輸入下面的命令可以看到當前sentinel監控的主節點爲9001節點
redis-cli -p 26379 sentinel master mymaster

  • 第八步:通過kill命令,我們將9001節點關閉

  • 第九步:等到failover-timeout參數所指定的180000毫秒過去之後,再次查看sentinel監控的主節點,發現變爲了9003(這是自動完成的)

四、cluster模式演示案例

  • 第一步:創建一個redis-cluster目錄作爲cluster相關的目錄,然後進入redis-cluster目錄進去創建redis01、redis02、redis03、redis04、redis05、redis06六個目錄,用來存放6個redis節點,
mkdir redis-cluster

cd redis-cluster

mkdir redis01 redis02 redis03 redis04 redis05 redis06

 

  • 第二步:分別進入redis01、redis02、redis03、redis04、redis05、redis06目錄創建redis01.conf、redis02.conf、redis03.conf、redis04.conf、redis05.conf、redis06.conf六個配置文件。下面就不列出配置文件了(文件太多內容太多),我們以redis的默認配置文件爲基礎然後修改,先修改各自對應的端口(分別爲7001、7002、7003、7004、7005、7006),然後修改daemonize爲yes,然後將cluster-enabled改爲yes

  • 第三步:在cluster-cluster目錄下創建如下shell腳本(start-all.sh),用來啓動6個節點
#!/bin/bash

cd redis01
redis-server redis.conf &
cd ..

cd redis02
redis-server redis.conf &
cd ..

cd redis03
redis-server redis.conf &
cd ..

cd redis04
redis-server redis.conf &
cd ..

cd redis05
redis-server redis.conf &
cd ..

cd redis06
redis-server redis.conf &
cd ..

  • 第四步:爲腳本添加可執行權限,然後啓動腳本,啓動之後,可以通過netstat查看情況可以看到六個節點啓動
chmod +x start-all.sh

./start-all.sh

netstat -anop | grep redis

  • 第五步:用一個redis客戶端,輸入下面的命來開啓集羣,輸入命令之後輸入yes,然後redis開始配置集羣,最後顯示成功
# 創建3個集羣主節點和3個集羣從節點
redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

  • 第六步:測可以輸入下面的命令來檢查集羣的完整性
redis-cli --cluster check 127.0.0.1:7001

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章