看完!還不懂Redis的高可用實現方案來打我。

如果只有一臺redis的話,這臺redis掛掉了怎麼辦,難道只能等待他修好嗎?這樣會對用戶的訪問造成很大的印象,所以redis的高可用也很關鍵。下面就是redis高可用的兩種實現方案

Redis的哨兵機制

1.什麼是哨兵

Sentinel(哨兵)是用於監控Redis集羣中Master狀態的工具,是 Redis 高可用解決方案,哨兵可以監視一個或者多個redis master服務,以及這些master服務的所有從服務;當某個master服務宕機後,會把這個master下的某個從服務升級爲master來替代已宕機的master繼續工作。

2.哨兵機制詳解
2.1 哨兵監控

當我們啓動哨兵之後,哨兵會檢測我們的所有redis節點,我們的哨兵也不只是一個,可以是多個做成一個哨兵集羣,同時檢測redis集羣。
在這裏插入圖片描述

2.2 故障轉移觸發條件

當我們的master因爲一些原因掉線之後,哨兵檢測到就會開始故障轉移工作,但不是有一個哨兵檢測到master宕機就可以進行故障轉移,如果只有一個哨兵檢測到master宕機被稱爲主觀下線,並不會達成故障轉移的條件,多個哨兵都檢測到master異常被稱爲客觀下線。只有是客觀下線狀態纔會觸發故障轉移,多少個哨兵檢測到Mastr異常纔算作客觀下線在配置文件中可以配置,配置項名稱叫做quorun
在這裏插入圖片描述

2.3 選舉leader

當滿足客觀下線狀態後就開始了故障轉移工作,故障轉移工作是由哨兵來操作的,這個時候哨兵們會進行一個選舉,票數最多的人會來執行故障轉移工作,這個哨兵會在其他從節點中選擇一個作爲master,再由這個master去同步數據到從節點,同時同步從節點個數可以配置,配置項爲:sentinel parallel-syncs mymaster 1,該配置項是幾,就會有幾個從節點一起同步。當同步完成後,哨兵就會繼續監控這個redis集羣.
在這裏插入圖片描述

2.4 原master恢復

當原master從故障中恢復之後,會再次加入整個redis集羣中,但是這個時候原master只能當做從節點了,如果新master故障之後,原master會和其他的master在一起競爭。
在這裏插入圖片描述

3.redis哨兵方式的配置

在redis的安裝目錄下有一個叫sentinel.conf的配置文件,哨兵方式的配置都在這個下面
在這裏插入圖片描述
修改配置文件:
1.protected-mode是否開啓公網保護

yes 開啓保護,只有配置的ip可以訪問
no 不開啓,所以ip都可以訪問

在這裏插入圖片描述
2.port 哨兵的端口號
在這裏插入圖片描述
3.daemonize 是否後臺啓動

yes 開啓
no 不開啓

在這裏插入圖片描述
4.pidfile 進程的pid
在這裏插入圖片描述
5.logfile 哨兵日誌存儲位置
在這裏插入圖片描述
6.dir 工作目錄
在這裏插入圖片描述
7.sentinel monitor :哨兵核心配置

# ‘mymaster’ 哨兵名稱
# ‘127.0.0.1’ 監控的redis master ip
#   ‘6379’redis的端口
# ‘2’表示幾臺哨兵監聽不到msater,才標記master爲宕機狀態
sentinel monitor mymaster 127.0.0.1 6379 2

在這裏插入圖片描述
8.sentinel auth-pass redis的密碼
在這裏插入圖片描述
9.sentinel down-after-milliseconds 設定宕機多少毫秒後失效
在這裏插入圖片描述
啓動哨兵:redis-sentinel sentinel.conf
在這裏插入圖片描述
啓動後如果在ps-ef |grep redis 中存在哨兵進程,則爲啓動成功

4.哨兵信息檢查
# 查看哨兵下的master節點信息 sentinel master mymaster 
# 查看哨兵下的slaves節點信息 sentinel slaves mymaster 
# 查看哨兵下的哨兵節點信息 sentinel sentinels mymaster

Redis的集羣

1.什麼是Redis集羣

主從複製以及哨兵,他們可以提高讀的併發,但是單個master容量有限,數據達到一定程度會有瓶頸,這個時候可以通過水平擴展爲多master-slave成爲集羣。
redis-cluster:他可以支撐多個master-slave,支持海量數據,實現高可用與高併發。

2.Redis集羣配置

1.修改redis配置文件,所有的配置項都在REDIS CLUSTER這個下面
在這裏插入圖片描述

# 開啓集羣模式 
cluster-enabled yes 
# 每一個節點需要有一個配置文件,每個節點處於集羣的角色都需要告知其他所有節點,彼此知道,這個文件用於存儲集羣模式下的集羣狀態等信息,這個文件是由redis自己維護,我們不用管。如果你要重新創建集羣,那麼把這個文件刪了就行 
cluster-config-file nodes-201.conf 
# 超時時間,超時則認爲master宕機,隨後主備切換 
cluster-node-timeout 5000 
# 開啓AOF 
appendonly yes

2.啓動redis
3.創建集羣

##### # 注意1:如果你使用的是redis3.x版本,需要使用redis-trib.rb來構建集羣,最新版使用C語言來構建了,這個要注意 
# 注意2:以下爲新版的redis構建方式 ##### 
# 創建集羣,主節點和從節點比例爲1,1-3爲主,4-6爲從,1和4,2和5,3和6分別對應爲主從關係,這也是最經典用的最多的集羣模式 
redis-cli --cluster create ip1:port1 ip2:port2 ip3:port3 ip4:port4 ip5:port5 ip6:port6 --cluster-replicas 1

4.檢查集羣信息
redis-cli --cluster check 192.168.25.64:6380

3.slot槽節點

在redis集羣中數據都是存放的槽節點中,槽節點是所有redis主節點平均分配,每個數據進來之後會經過hash算法之後存放到不同的槽中,而不同的槽又在不同的redis主節點上,所以數據就會存放到不同的redis節點中,比如集羣中有三個redis節點,三個節點會均分所有的槽節點,當一個key進來以後,通過hash假如分配到了5000這個槽中,5000這個槽假假如在A節點中,那麼這個數據就會存放到A節點上

總結

哨兵模式:其實也是一種集羣,他能夠提高讀請求的併發,但是容錯方面可能會有一些問題,比如master同步數據給slave的時候,這其實是異步複製吧,這個時候master掛了,那麼slave上的數據就沒有master新,數據同步需要時間的,1-2秒的數據會丟失。master恢復並轉換成slave後,新數據則丟失。
集羣模式:

  • 每個節點知道彼此之間的關係,也會知道自己的角色,當然他們也會知道自己存在與一個集羣環境中,他們彼此之間可以交互和通信,比如ping pong。那麼這些關係都會保存到某個配置文件中,每個節點都有,這個我們在搭建的時候會做配置的。
  • 客戶端要和集羣建立連接的話,只需要和其中一個建立關係就行。
  • 某個節點掛了,也是通過超過半數的節點來進行的檢測,客觀下線後主從切換,和我們之前在哨兵模式中提到的是一個道理。
  • Redis中存在很多的插槽,又可以稱之爲槽節點,用於存儲數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章