文章目錄
- 一、Redis主從復制
- 1、Redis主從復制的概念
- 2、Redis主從復制的作用
- 3、Redis主從復制的流程
- 4、Redis主從復制的搭建
- 1、環境配置/安裝包
- 2、安裝Redis(所有主機)
- 3、修改Master節點Redis組態檔
- 4、修改Slave節點Redis組態檔
- 5、驗證主從效果
- 二、Redis 哨兵模式
- 1、哨兵模式的原理
- 2、哨兵模式的作用
- 3、哨兵模式的結構
- 4、哨兵模式的搭建
- 1、環境配置
- 2、修改 Redis 組態檔(所有節點操作)
- 2、啟動哨兵模式
- 3、故障模擬
- 4、驗證結果
- 三、Redis 群集模式
- 1、集群的作用
- 2、Redis集群的資料分片
- 3、搭建Redis 群集模式
- 1、所有節點
- 2、Master1節點
- 3、其余節點
- 4、所有節點
一、Redis主從復制
1、Redis主從復制的概念
主從復制,是指將一臺Redis服務器的資料,復制到其他的Redis服務器,前者稱為主節點(Master),后者稱為從節點(Slave);資料的復制是單向的,只能由主節點到從節點,
默認情況下,每臺Redis服務器都是主節點;且一個主節點可以有多個從節點(或沒有從節點),但一個從節點只能有一個主節點,
2、Redis主從復制的作用
●資料冗余:主從復制實作了資料的熱備份,是持久化之外的一種資料冗余方式,
●故障恢復:當主節點出現問題時,可以由從節點提供服務,實作快速的故障恢復;實際上是一種服務的冗余,
●負載均衡:在主從復制的基礎上,配合讀寫分離,可以由主節點提供寫服務,由從節點提供讀服務(即寫Redis資料時應用連接主節點,讀Redis資料時應用連接從節點),分擔服務器負載;尤其是在寫少讀多的場景下,通過多個從節點分擔讀負載,可以大大提高Redis服務器的并發量,
●高可用基石:除了上述作用以外,主從復制還是哨兵和集群能夠實施的基礎,因此說主從復制是Redis高可用的基礎,
3、Redis主從復制的流程
●【1】若啟動一個Slave機器行程,則它會向Master機器發送一個“sync command”命令,請求同步連接,
●【2】無論是第一次連接還是重新連接,Master機器都會啟動一個后臺行程,將資料快照保存到資料檔案中(執行rdb操作),同時Master還會記錄修改資料的所有命令并快取在資料檔案中,
●【3】后臺行程完成快取操作之后,Maste機器就會向Slave機器發送資料檔案,Slave端機器將資料檔案保存到硬碟上,然后將其加載到記憶體中,接著Master機器就會將修改資料的所有操作一并發送給Slave端機器,若Slave出現故障導致宕機,則恢復正常后會自動重新連接,
●【4】Master機器收到Slave端機器的連接后,將其完整的資料檔案發送給Slave端機器,如果Mater同時收到多個Slave發來的同步請求,則Master會在后臺啟動一個行程以保存資料檔案,然后將其發送給所有的Slave端機器,確保所有的Slave端機器都正常,
4、Redis主從復制的搭建
1、環境配置/安裝包
安裝包鏈接:redis-5.0.7.tar.gz
| 主機 | 作業系統 | IP地址 | 軟體 / 安裝包 / 工具 |
|---|---|---|---|
| Master | CentOS7 | 192.168.184.10 | redis-5.0.7.tar.gz |
| Slave1 | CentOS7 | 192.168.184.20 | redis-5.0.7.tar.gz |
| Slave2 | CentOS7 | 192.168.184.30 | redis-5.0.7.tar.gz |
2、安裝Redis(所有主機)
systemctl stop firewalld
setenforce 0
yum install -y gcc gcc-c++ make
tar zxvf redis-5.0.7.tar.gz -C /opt/
cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install
cd /opt/redis-5.0.7/utils
./install_server.sh
回車四次,下一步需要手動輸入
Please select the redis executable path [] /usr/local/redis/bin/redis-server
ln -s /usr/local/redis/bin/* /usr/local/bin/
三臺服務器都一樣安裝,以下示范一臺



3、修改Master節點Redis組態檔
(192.168.184.10)
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網段
daemonize yes #137行,開啟守護行程
logfile /var/log/redis_6379.log #172行,指定日志檔案目錄
dir /var/lib/redis/6379 #264行,指定作業目錄
appendonly yes #700行,開啟AOF持久化功能
/etc/init.d/redis_6379 restart



4、修改Slave節點Redis組態檔
(192.168.184.20)、(192.168.184.30)
vim /etc/redis/6379.conf
bind 0.0.0.0 #70行,修改bind 項,0.0.0.0監聽所有網卡
daemonize yes #137行,開啟守護行程
logfile /var/log/redis_6379.log #172行,指定日志檔案目錄
dir /var/lib/redis/6379 #264行,指定作業目錄
replicaof 192.168.80.10 6379 #288行,指定要同步的Master節點IP和埠
appendonly yes #700行,開啟AOF持久化功能
/etc/init.d/redis_6379 restart




5、驗證主從效果
在Master節點上看日志
tail -f /var/log/redis_6379.log

在Master節點上驗證從節點
redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.184.20,port=6379,state=online,offset=555,lag=0
slave1:ip=192.168.184.30,port=6379,state=online,offset=555,lag=0

二、Redis 哨兵模式
哨兵的核心功能:在主從復制的基礎上,哨兵引入了主節點的自動故障轉移
1、哨兵模式的原理
哨兵(sentinel):是一個分布式系統,用于對主從結構中的每臺服務器進行監控,當出現故障時通過投票機制選擇新的 Master 并將所有 Slave 連接到新的 Master,所以整個運行哨兵的集群的數量不得少于3個節點,
2、哨兵模式的作用
●監控:哨兵會不斷地檢查主節點和從節點是否運作正常,
●自動故障轉移:當主節點不能正常作業時,哨兵會開始自動故障轉移操作,它會將失效主節點的其中一個從節點升級為新的主節點,并讓其他從節點改為復制新的主節點,
●通知(提醒):哨兵可以將故障轉移的結果發送給客戶端,
3、哨兵模式的結構
哨兵結構由兩部分組成,哨兵節點和資料節點:
●哨兵節點:哨兵系統由一個或多個哨兵節點組成,哨兵節點是特殊的redis節點,不存盤資料,
●資料節點:主節點和從節點都是資料節點,
哨兵的啟動依賴于主從模式,所以須把主從模式安裝好的情況下再去做哨兵模式,所有節點上都需要部署哨兵模式,哨兵模式會監控所有的 Redis 作業節點是否正常,當 Master 出現問題的時候,因為其他節點與主節點失去聯系,因此會投票,投票過半就認為這個 Master 的確出現問題,然后會通知哨兵間,然后從 Slaves 中選取一個作為新的 Master,
需要特別注意的是,客觀下線是主節點才有的概念;如果從節點和哨兵節點發生故障,被哨兵主觀下線后,不會再有后續的客觀下線和故障轉移操作,
4、哨兵模式的搭建
1、環境配置
基于主從復制已搭建完成
| 主機 | 作業系統 | IP地址 | 軟體 / 安裝包 / 工具 |
|---|---|---|---|
| Master | CentOS7 | 192.168.184.10 | redis-5.0.7.tar.gz |
| Slave1 | CentOS7 | 192.168.184.20 | redis-5.0.7.tar.gz |
| Slave2 | CentOS7 | 192.168.184.30 | redis-5.0.7.tar.gz |
2、修改 Redis 組態檔(所有節點操作)
systemctl stop firewalld
setenforce 0
vim /opt/redis-5.0.7/sentinel.conf
protected-mode no #17行,關閉保護模式
port 26379 #21行,Redis哨兵默認的監聽埠
daemonize yes #26行,指定sentinel為后臺啟動
logfile "/var/log/sentinel.log" #36行,指定日志存放路徑
dir "/var/lib/redis/6379" #65行,指定資料庫存放路徑
sentinel monitor mymaster 192.168.184.10 6379 2 #84行,修改 指定該哨兵節點監控192.168.184.10:6379這個主節點,該主節點的名稱是mymaster,最后的2的含義與主節點的故障判定有關:至少需要2個哨兵節點同意,才能判定主節點故障并進行故障轉移
sentinel down-after-milliseconds mymaster 3000 #113行,判定服務器down掉的時間周期,默認30000毫秒(30秒)
sentinel failover-timeout mymaster 180000 #146行,故障節點的最大超時時間為180000(180秒)



2、啟動哨兵模式
先啟master,再啟slave
cd /opt/redis-5.0.7/
redis-sentinel sentinel.conf &
注意!先啟動主服務器,再啟動從服務器



3、故障模擬
查看redis-server行程號
ps aux | grep redis
root 57394 0.0 0.1 165620 2660 ? Ssl 15:12 0:04 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root 58234 0.1 0.1 153844 2720 ? Ssl 16:34 0:00 redis-sentinel *:26379 [sentinel]
root 58247 0.0 0.0 112676 980 pts/4 R+ 16:34 0:00 grep --color=auto redis
[1]+ 完成 redis-sentinel sentinel.conf

殺死 Master 節點上redis-server的行程號
kill -9 57031 #Master節點上redis-server的行程號

4、驗證結果
tail -f /var/log/sentinel.log

redis-cli -p 26379 INFO Sentinel

三、Redis 群集模式
集群,即Redis Cluster,是Redis 3.0開始引入的分布式存盤方案,
集群由多個節點(Node)組成,Redis的資料分布在這些節點中,集群中的節點分為主節點和從節點:只有主節點負責讀寫請求和集群資訊的維護;從節點只進行主節點資料和狀態資訊的復制,
1、集群的作用
(1)資料磁區:資料磁區(或稱資料分片)是集群最核心的功能,
集群將資料分散到多個節點,一方面突破了Redis單機記憶體大小的限制,存盤容量大大增加;另一方面每個主節點都可以對外提供讀服務和寫服務,大大提高了集群的回應能力,
Redis單機記憶體大小受限問題,在介紹持久化和主從復制時都有提及;例如,如果單機記憶體太大,bgsave和bgrewriteaof的fork操作可能導致主行程阻塞,主從環境下主機切換時可能導致從節點長時間無法提供服務,全量復制階段主節點的復制緩沖區可能溢位,
(2)高可用:集群支持主從復制和主節點的自動故障轉移(與哨兵類似);當任一節點發生故障時,集群仍然可以對外提供服務,
2、Redis集群的資料分片
Redis集群引入了哈希槽的概念
Redis集群有16384個哈希槽(編號0-16383)
集群的每個節點負責一部分哈希槽
每個Key通過CRC16校驗后對16384取余來決定放置哪個哈希槽,通過這個值,去找到對應的插槽所對應的節點,然后直接自動跳轉到這個對應的節點上進行存取操作
#以3個節點組成的集群為例:
節點A包含0到5460號哈希槽
節點B包含5461到10922號哈希槽
節點C包含10923到16383號哈希槽
#Redis集群的主從復制模型
集群中具有A、B、C三個節點,如果節點B失敗了,整個集群就會因缺少5461-10922這個范圍的槽而不可以用,
為每個節點添加一個從節點A1、B1、C1整個集群便有三個Master節點和三個slave節點組成,在節點B失敗后,集群選舉B1位為的主節點繼續服務,當B和B1都失敗后,集群將不可用
3、搭建Redis 群集模式
redis的集群一般需要6個節點,3主3從,方便起見,這里所有節點在6臺服務器上模擬:
以IP及埠號進行區分:3個主節點埠號:7001、7003、7005,對應的從節點埠號:7002、7004、7006,
六臺服務器都需要安裝redis資料庫,可使用以下腳本
Shell腳本一鍵部署——Redis資料庫
| 主機 | 作業系統 | IP:埠 | 軟體/安裝包/工具 |
|---|---|---|---|
| Master1 | CentOS7 | 192.168.184.10:7001 | redis-5.0.7.tar.gz |
| Slave1 | CentOS7 | 192.168.184.20:7002 | redis-5.0.7.tar.gz |
| Master2 | CentOS7 | 192.168.184.30:7003 | redis-5.0.7.tar.gz |
| Slave2 | CentOS7 | 192.168.184.40:7004 | redis-5.0.7.tar.gz |
| Master3 | CentOS7 | 192.168.184.50:7005 | redis-5.0.7.tar.gz |
| Slave3 | CentOS7 | 192.168.184.60:7006 | redis-5.0.7.tar.gz |
1、所有節點
cd /etc/redis/
mkdir -p redis-cluster/redis6379
cp /opt/redis-5.0.7/redis.conf /etc/redis/redis-cluster/redis6379/
cp /opt/redis-5.0.7/src/redis-cli /opt/redis-5.0.7/src/redis-server /etc/redis/redis-cluster/redis6379/

2、Master1節點
#其他5個檔案夾的組態檔以此類推修改,注意6個埠都要不一樣,
cd /etc/redis/redis-cluster/redis6379
vim redis.conf
bind 192.168.184.10 #69行,修改bind項,監聽自己的IP
protected-mode no #88行,修改,關閉保護模式
port 7001 #92行,修改,redis監聽埠,
daemonize yes #136行,以獨立行程啟動
cluster-enabled yes #832行,取消注釋,開啟群集功能
cluster-config-file nodes-6379.conf #840行,取消注釋,群集名稱檔案設定,無需修改
cluster-node-timeout 15000 #846行,取消注釋群集超時時間設定
appendonly yes #699行,修改,開啟AOF持久化

scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.184.20:/etc/redis/redis-cluster/redis6379/redis.conf
scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.184.30:/etc/redis/redis-cluster/redis6379/redis.conf
scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.184.40:/etc/redis/redis-cluster/redis6379/redis.conf
scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.184.50:/etc/redis/redis-cluster/redis6379/redis.conf
scp /etc/redis/redis-cluster/redis6379/redis.conf root@192.168.184.60:/etc/redis/redis-cluster/redis6379/redis.conf

3、其余節點
vim /etc/redis/redis-cluster/redis6379/redis.conf

4、所有節點
啟動redis節點
cd /etc/redis/redis-cluster/redis6379/
redis-server redis.conf

啟動集群
redis-cli --cluster create 192.168.184.10:7001 192.168.184.30:7003 192.168.184.50:7005 192.168.184.60:7006 192.168.184.40:7004 192.168.184.20:7002 --cluster-replicas 1

redis-cli -h 192.168.184.10 -p 7001 -c #加-c引數,節點之間就可以互相跳轉
cluster slots #查看節點的哈希槽編號范圍
set sky blue
cluster keyslot sky #查看name鍵的槽編號


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/264119.html
標籤:其他
上一篇:Echarts實作帶刻度的餅圖
下一篇:Promise實作原理
