自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux下 Redis集群搭建詳解(主從+哨兵)

存儲(chǔ) 存儲(chǔ)軟件 Redis
由于項(xiàng)目需要,搭建了一個(gè) Redis 服務(wù)器集群,實(shí)現(xiàn)了主從配置和容災(zāi)部署,使得主機(jī)出現(xiàn)故障時(shí),可自動(dòng)進(jìn)行容災(zāi)切換,下面就詳細(xì)講解一下如何利用 Redis 來實(shí)現(xiàn)。

 [[322247]]

前言

由于項(xiàng)目需要,搭建了一個(gè) Redis 服務(wù)器集群,實(shí)現(xiàn)了主從配置和容災(zāi)部署,使得主機(jī)出現(xiàn)故障時(shí),可自動(dòng)進(jìn)行容災(zāi)切換,下面就詳細(xì)講解一下如何利用 Redis 來實(shí)現(xiàn)。

文章重點(diǎn)

1、Redis 入門簡(jiǎn)介

2、Redis 安裝部署

3、Redis 集群整體架構(gòu)

4、Redis 主從配置及數(shù)據(jù)同步

5、Redis 哨兵模式搭建

一、Redis 入門簡(jiǎn)介

Redis(Remote Dictionary Server 遠(yuǎn)程字典服務(wù))是一個(gè)開源的高性能key-value數(shù)據(jù)庫,它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因?yàn)橹?value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型,官網(wǎng):https://redis.io/。

  • Redis支持?jǐn)?shù)據(jù)的持久化,可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中,重啟的時(shí)候可以再次加載進(jìn)行使用。
  • Redis不僅僅支持簡(jiǎn)單的key-value類型的數(shù)據(jù),同時(shí)還提供 list,set,zset,hash等數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)。
  • Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。

為什么用Redis?

一個(gè)字,快!傳統(tǒng)的關(guān)系型數(shù)據(jù)庫如 Mysql 等已經(jīng)不能適用所有的場(chǎng)景了,比如在高并發(fā),訪問流量高峰等情況時(shí),數(shù)據(jù)庫很容易崩了。Redis 運(yùn)行在內(nèi)存,能起到一個(gè)緩沖作用,由于內(nèi)存的讀寫速度遠(yuǎn)快于硬盤,因此 Redis 在性能上比其他基于硬盤存儲(chǔ)的數(shù)據(jù)庫有明顯的優(yōu)勢(shì)。同時(shí)除了快之外,還可應(yīng)用于集群的自動(dòng)容災(zāi)切換以及數(shù)據(jù)的讀寫分離,減輕高并發(fā)的壓力。

二、Redis 安裝部署

1、下載安裝包

官網(wǎng)下載地址:https://redis.io/download,這里我們下載目前最新版5.0.7,直接點(diǎn)擊下載。

 

Linux下 Redis集群搭建詳解(主從+哨兵)

或者直接使用命令下載,如下:

  1. wget http://download.redis.io/releases/redis-5.0.7.tar.gz 

2、安裝

首先解壓安裝包,如下

  1. cd redis-5.0.7/ 
  2. make 

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

tar

進(jìn)入解壓文件目錄使用make命令對(duì)解壓的 redis 文件進(jìn)行編譯,如下

  1. cd redis-5.0.7/ 
  2. make 

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

make

編譯完成之后,可以看到解壓文件 redis-5.0.7 中會(huì)有對(duì)應(yīng)的 src、conf 等文件,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

編譯后目錄

編譯成功后,進(jìn)入 src 文件夾,執(zhí)行 make install 進(jìn)行 Redis 安裝。

  1. cd src/ 
  2. make install 

安裝完成后,顯示如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

install

注:如出現(xiàn)/bin/sh: cc: command not found錯(cuò)誤,是因?yàn)闆]有安裝 gcc 環(huán)境,使用命令yum install gcc安裝 gcc 環(huán)境即可。

3、部署

由于 src 下文件非常多,我們可以將幾個(gè)常用的命令和 conf 配置文件復(fù)制出來進(jìn)行統(tǒng)一管理,如下:(1)新建 bin 和 etc 文件夾

  1. cd /root/redis-5.0.7/ 
  2. mkdir etc 
  3. mkdir bin 

(2)回到安裝目錄,將redis.conf復(fù)制到 ect 文件夾下

  1. cp redis.conf /root/redis-5.0.7/etc 

(3)進(jìn)入 src 文件夾下,將mkreleasehdr.sh、redis-benchmark、redis-check-aof、redis-check-rdb、redis-cli、redis-server、redis-sentinel文件復(fù)制到 bin 文件夾

  1. cd src/ 
  2. cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /root/redis-5.0.7/bin/ 

查看復(fù)制后的文件,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

copyFile

4、啟動(dòng)redis服務(wù)

切換到 bin 目錄,使用./redis-server即可啟動(dòng) redis 服務(wù),但是這種方式?jīng)]有指明配置文件,redis 將采用默認(rèn)配置,所以我們需要讓 redis 按照我們的配置文件來啟動(dòng),如下,啟動(dòng)時(shí)指定剛才我們復(fù)制到 etc 文件夾下的redis.conf。

  1. cd /root/redis-5.0.7/bin 
  2. ./redis-server /root/redis-5.0.7/etc/redis.conf 

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

啟動(dòng)redis服務(wù)

啟動(dòng)后查看redis的進(jìn)程,如下,可以看到6379端口就是我們運(yùn)行的 redis 服務(wù)(配置文件中默認(rèn)端口為6379)。

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

查看redis進(jìn)程

使用redis-cli命令連接客戶端,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

redis-cli

5、關(guān)閉redis服務(wù)

如果需要關(guān)閉redis服務(wù),使用如下命令即可關(guān)閉。

  1. redis-cli -p 6379 shutdown 

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

關(guān)閉redis服務(wù)

三、Redis 集群整體架構(gòu)

這里我們采用的集群整體架構(gòu)就是主從結(jié)構(gòu)+哨兵(sentinel),實(shí)現(xiàn)容災(zāi)的自動(dòng)切換,如下圖所示:

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

redis架構(gòu)(主從+哨兵)

一個(gè)主節(jié)點(diǎn)(master)可擁有多個(gè)從節(jié)點(diǎn)(slave),從節(jié)點(diǎn)實(shí)現(xiàn)對(duì)主節(jié)點(diǎn)的復(fù)制,保證數(shù)據(jù)同步。而哨兵(sentinel)則對(duì)各節(jié)點(diǎn)進(jìn)行監(jiān)控,主要包括主節(jié)點(diǎn)存活檢測(cè)、主從運(yùn)行情況檢測(cè)等,一旦主節(jié)點(diǎn)宕機(jī),哨兵可自動(dòng)進(jìn)行故障轉(zhuǎn)移 (failover)、主從切換。接下來就開始搭建這樣一個(gè)集群,首先是主從結(jié)構(gòu),然后是哨兵模式,接著往下看。

四、Redis 主從配置及數(shù)據(jù)同步

在第一步 Redis 安裝部署中我們已經(jīng)啟動(dòng)了 Redis 服務(wù),但是配置文件并沒有做修改,因?yàn)橹鲝呐渲弥饕褪峭ㄟ^修改配置文件來實(shí)現(xiàn),所以 Redis 配置文件的修改統(tǒng)一在這里進(jìn)行講解。

這里我創(chuàng)建了三臺(tái)虛擬機(jī)來演示,分別按照上述安裝方式安裝好 Redis,三臺(tái)虛擬機(jī)如下配置:

IP地址端口號(hào)角色192.168.231.1306379主機(jī)(master)192.168.231.1326380從機(jī)(slave)192.168.231.1316381從機(jī)(slave)

現(xiàn)在進(jìn)入 etc 文件夾,使用vi redis.conf命令打開編輯 redis.conf 配置文件,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

viconfig

首先看一下redis.conf 配置文件中的各個(gè)參數(shù),詳解如下

  1. # redis進(jìn)程是否以守護(hù)進(jìn)程的方式運(yùn)行,yes為是,no為否(不以守護(hù)進(jìn)程的方式運(yùn)行會(huì)占用一個(gè)終端)。 
  2. daemonize no 
  3. # 指定redis進(jìn)程的PID文件存放位置 
  4. pidfile /var/run/redis.pid 
  5. # redis進(jìn)程的端口號(hào) 
  6. port 6379 
  7. #是否開啟保護(hù)模式,默認(rèn)開啟。要是配置里沒有指定bind和密碼。開啟該參數(shù)后,redis只會(huì)本地進(jìn)行訪問,拒絕外部訪問。要是開啟了密碼和bind,可以開啟。否則最好關(guān)閉設(shè)置為no。 
  8. protected-mode yes 
  9. # 綁定的主機(jī)地址 
  10. bind 127.0.0.1 
  11. # 客戶端閑置多長(zhǎng)時(shí)間后關(guān)閉連接,默認(rèn)此參數(shù)為0即關(guān)閉此功能 
  12. timeout 300 
  13. # redis日志級(jí)別,可用的級(jí)別有debug.verbose.notice.warning 
  14. loglevel verbose 
  15. # log文件輸出位置,如果進(jìn)程以守護(hù)進(jìn)程的方式運(yùn)行,此處又將輸出文件設(shè)置為stdout的話,就會(huì)將日志信息輸出到/dev/null里面去了 
  16. logfile stdout 
  17. # 設(shè)置數(shù)據(jù)庫的數(shù)量,默認(rèn)為0可以使用select <dbid>命令在連接上指定數(shù)據(jù)庫id 
  18. databases 16 
  19. # 指定在多少時(shí)間內(nèi)刷新次數(shù)達(dá)到多少的時(shí)候會(huì)將數(shù)據(jù)同步到數(shù)據(jù)文件 
  20. save <seconds> <changes> 
  21. # 指定存儲(chǔ)至本地?cái)?shù)據(jù)庫時(shí)是否壓縮文件,默認(rèn)為yes即啟用存儲(chǔ) 
  22. rdbcompression yes 
  23. # 指定本地?cái)?shù)據(jù)庫文件名 
  24. dbfilename dump.db 
  25. # 指定本地?cái)?shù)據(jù)問就按存放位置 
  26. dir ./ 
  27. # 指定當(dāng)本機(jī)為slave服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口,在redis啟動(dòng)的時(shí)候他會(huì)自動(dòng)跟master進(jìn)行數(shù)據(jù)同步 
  28. replicaof <masterip> <masterport> 
  29. # 當(dāng)master設(shè)置了密碼保護(hù)時(shí),slave服務(wù)連接master的密碼 
  30. masterauth <master-password
  31. # 設(shè)置redis連接密碼,如果配置了連接密碼,客戶端在連接redis是需要通過AUTH<password>命令提供密碼,默認(rèn)關(guān)閉 
  32. requirepass footbared 
  33. # 設(shè)置同一時(shí)間最大客戶連接數(shù),默認(rèn)無限制。redis可以同時(shí)連接的客戶端數(shù)為redis程序可以打開的最大文件描述符,如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí),Redis會(huì)關(guān)閉新的連接并向客戶端返回 max number of clients reached 錯(cuò)誤信息 
  34. maxclients 128 
  35. # 指定Redis最大內(nèi)存限制,Redis在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,Redis會(huì)先嘗試清除已到期或即將到期的Key。當(dāng)此方法處理后,仍然到達(dá)最大內(nèi)存設(shè)置,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作。Redis新的vm機(jī)制,會(huì)把Key存放內(nèi)存,Value會(huì)存放在swap區(qū) 
  36. maxmemory<bytes> 
  37. # 指定是否在每次更新操作后進(jìn)行日志記錄,Redis在默認(rèn)情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會(huì)在斷電時(shí)導(dǎo)致一段時(shí)間內(nèi)的數(shù)據(jù)丟失。因?yàn)閞edis本身同步數(shù)據(jù)文件是按上面save條件來同步的,所以有的數(shù)據(jù)會(huì)在一段時(shí)間內(nèi)只存在于內(nèi)存中。默認(rèn)為no。 
  38. appendonly no 
  39. # 指定跟新日志文件名默認(rèn)為appendonly.aof 
  40. appendfilename appendonly.aof 
  41. # 指定更新日志的條件,有三個(gè)可選參數(shù) - no:表示等操作系統(tǒng)進(jìn)行數(shù)據(jù)緩存同步到磁盤(快),always:表示每次更新操作后手動(dòng)調(diào)用fsync()將數(shù)據(jù)寫到磁盤(慢,安全), everysec:表示每秒同步一次(折衷,默認(rèn)值); 
  42. appendfsync everysec 

1、主機(jī)配置

主機(jī)(192.168.231.130)需要改動(dòng)的配置如下所示,修改完畢后先按 esc ,然后:wq命令保存退出。

  1. bind:0.0.0.0 
  2. port:6379 
  3. protected-mode:no 
  4. daemonize:yes 
  5. logfile:./redis.log 
  6. requirepass:pwdtest@2019 
  7. masterauth:pwdtest@2019 
  8. replicaof 192.168.231.130 6379  
  • bind:0.0.0.0

Redis 默認(rèn)只允許本機(jī)訪問,把 bind 修改為 0.0.0.0 表示允許所有遠(yuǎn)程訪問。如果想指定限制訪問,可設(shè)置對(duì)應(yīng)的 ip。

  • port:6379

監(jiān)聽端口默認(rèn)為6379,想改其他也行。

  • protected-mode:no

關(guān)閉保護(hù)模式,可以外部訪問。

  • daemonize:yes

設(shè)置為后臺(tái)啟動(dòng)。

  • logfile:./redis.log

redis 日志文件,生成后在 bin 目錄下可找到。

  • requirepass:pwdtest@2019

設(shè)置 redis 連接密碼。

  • masterauth:pwdtest@2019

slave 服務(wù)連接 master 的密碼。

2、從機(jī)配置

從機(jī)的配置和主機(jī)相似,相同的地方我就不再詳解,不同的地方是需要使用replicaof指定主機(jī)(master)的IP地址和端口,需要注意的是老版本使用的是 slaveof,目前我使用的5.0.7版本要使用 replicaof ,如下。

  1. bind:0.0.0.0 
  2. port:6379 
  3. protected-mode:no 
  4. daemonize:yes 
  5. logfile:./redis.log 
  6. requirepass:pwdtest@2019 
  7. masterauth:pwdtest@2019 
  8. replicaof 192.168.231.130 6379  
  • replicaof 192.168.231.130 6379

指定當(dāng)本機(jī)為 slave 服務(wù)時(shí),設(shè)置 master 服務(wù)的IP地址及端口,在 redis 啟動(dòng)的時(shí)候會(huì)自動(dòng)跟 master 進(jìn)行數(shù)據(jù)同步,所以兩臺(tái)從機(jī)都這樣配置即可。

注:由于我們搭建的集群需要自動(dòng)容災(zāi)切換,主數(shù)據(jù)庫可能會(huì)變成從數(shù)據(jù)庫,所以三臺(tái)機(jī)器上都需要同時(shí)設(shè)置 requirepass 和 masterauth 配置項(xiàng)。

3、數(shù)據(jù)同步

上面我們主從節(jié)點(diǎn)的配置文件配置好后,重啟 redis 服務(wù),進(jìn)入 bin 目錄即可查看配置文件中指定的redis.log日志文件。

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

查看log

下面我們需要設(shè)置一下防火墻,否則主從機(jī)之間無法同步數(shù)據(jù),命令如下,這里根據(jù)自己設(shè)置的端口進(jìn)行更改。

  1. firewall-cmd --add-port=6379/tcp --permanent --zone=public 
  2. #重啟防火墻(修改配置后要重啟防火墻) 
  3. firewall-cmd --reload 

至此主從結(jié)構(gòu)搭建完畢,不出意外主從機(jī)已經(jīng)可以數(shù)據(jù)同步,下面我們分別查看三臺(tái)機(jī)器的信息,如下

  • 192.168.231.130 6379(主)

info_6379.png

可以看到當(dāng)前角色為主機(jī)(master),并且連接了另外兩臺(tái)從機(jī)(slave)。

  • 192.168.231.132 6380(從)

info_6380.png

可以看到當(dāng)前角色為從機(jī)(slave),并指明了主機(jī)地址192.168.231.130和端口6379。

  • 192.168.231.131 6381(從)

info_6381.png

可以看到當(dāng)前角色為從機(jī)(slave),并指明了主機(jī)地址192.168.231.130和端口6379。

4、主從驗(yàn)證

接下來我們?cè)谥鳈C(jī)(master)添加幾條數(shù)據(jù),看從機(jī)(slave)是否可以獲取到,如果能獲取,說明數(shù)據(jù)已經(jīng)同步到了從機(jī),主機(jī)添加數(shù)據(jù),如下:

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

6379set

兩臺(tái)從機(jī)已經(jīng)獲取到數(shù)據(jù),證明主從搭建成功并可同步數(shù)據(jù),如下所示:

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

6380get

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

6381get

五、Redis 哨兵模式搭建

1、哨兵模式詳解

Redis Sentinel是Redis 的高可用性解決方案,由一個(gè)或多個(gè)Sentinel(哨兵)實(shí)例組成。它可以監(jiān)視任意多個(gè)主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進(jìn)入下線狀態(tài)時(shí),自動(dòng)將下線主服務(wù)器屬下的某個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器,它的主要功能如下:

  • 監(jiān)控(Monitoring):Sentinel會(huì)不斷地檢查你的主服務(wù)器和從服務(wù)器是否運(yùn)作正常。
  • 通知(Notification):當(dāng)被監(jiān)控的某個(gè) Redis 服務(wù)器出現(xiàn)問題時(shí), Sentinel可以通過API向管理員或者其他應(yīng)用程序發(fā)送通知。
  • 故障遷移:當(dāng)主服務(wù)器不能正常工作時(shí),Sentinel會(huì)自動(dòng)進(jìn)行故障遷移,也就是主從切換。
  • 統(tǒng)一的配置管理:連接者詢問sentinel取得主從的地址。

哨兵原理

Sentinel 使用的算法核心是 Raft 算法,主要用途就是用于分布式系統(tǒng),系統(tǒng)容錯(cuò),以及Leader選舉,每個(gè)Sentinel都需要定期的執(zhí)行以下任務(wù):

  • 每個(gè) Sentinel 會(huì)自動(dòng)發(fā)現(xiàn)其他 Sentinel 和從服務(wù)器,它以每秒鐘一次的頻率向它所知的主服務(wù)器、從服務(wù)器以及其他 Sentinel 實(shí)例發(fā)送一個(gè) PING 命令。
  • 如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時(shí)間超過 down-after-milliseconds 選項(xiàng)所指定的值, 那么這個(gè)實(shí)例會(huì)被 Sentinel 標(biāo)記為主觀下線。 有效回復(fù)可以是: +PONG 、 -LOADING 或者 -MASTERDOWN 。
  • 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 那么正在監(jiān)視這個(gè)主服務(wù)器的所有Sentinel要以每秒一次的頻率確認(rèn)主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)。
  • 如果一個(gè)主服務(wù)器被標(biāo)記為主觀下線, 并且有足夠數(shù)量的Sentinel(至少要達(dá)到配置文件指定的數(shù)量)在指定的時(shí)間范圍內(nèi)同意這一判斷, 那么這個(gè)主服務(wù)器被標(biāo)記為客觀下線。
  • 在一般情況下, 每個(gè)Sentinel會(huì)以每 10 秒一次的頻率向它已知的所有主服務(wù)器和從服務(wù)器發(fā)送 INFO 命令。 當(dāng)一個(gè)主服務(wù)器被Sentinel標(biāo)記為客觀下線時(shí),Sentinel向下線主服務(wù)器的所有從服務(wù)器發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次。
  • 當(dāng)沒有足夠數(shù)量的Sentinel同意主服務(wù)器已經(jīng)下線, 主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除。 當(dāng)主服務(wù)器重新向Sentinel的 PING 命令返回有效回復(fù)時(shí), 主服務(wù)器的主管下線狀態(tài)就會(huì)被移除。

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

哨兵原理

配置文件詳解

哨兵的配置主要就是修改sentinel.conf配置文件中的參數(shù),在Redis安裝目錄即可看到此配置文件,各參數(shù)詳解如下:

  1. # 哨兵sentinel實(shí)例運(yùn)行的端口,默認(rèn)26379   
  2. port 26379 
  3. # 哨兵sentinel的工作目錄 
  4. dir ./ 
  5. # 是否開啟保護(hù)模式,默認(rèn)開啟。 
  6. protected-mode:no 
  7. # 是否設(shè)置為后臺(tái)啟動(dòng)。 
  8. daemonize:yes 
  9.  
  10. # 哨兵sentinel的日志文件 
  11. logfile:./sentinel.log 
  12.  
  13. # 哨兵sentinel監(jiān)控的redis主節(jié)點(diǎn)的  
  14. ## ip:主機(jī)ip地址 
  15. ## port:哨兵端口號(hào) 
  16. ## master-name:可以自己命名的主節(jié)點(diǎn)名字(只能由字母A-z、數(shù)字0-9 、這三個(gè)字符".-_"組成。) 
  17. ## quorum:當(dāng)這些quorum個(gè)數(shù)sentinel哨兵認(rèn)為master主節(jié)點(diǎn)失聯(lián) 那么這時(shí) 客觀上認(rèn)為主節(jié)點(diǎn)失聯(lián)了   
  18. # sentinel monitor <master-name> <ip> <redis-port> <quorum>   
  19. sentinel monitor mymaster 127.0.0.1 6379 2 
  20.  
  21. # 當(dāng)在Redis實(shí)例中開啟了requirepass,所有連接Redis實(shí)例的客戶端都要提供密碼。 
  22. # sentinel auth-pass <master-name> <password>   
  23. sentinel auth-pass mymaster 123456   
  24.  
  25. # 指定主節(jié)點(diǎn)應(yīng)答哨兵sentinel的最大時(shí)間間隔,超過這個(gè)時(shí)間,哨兵主觀上認(rèn)為主節(jié)點(diǎn)下線,默認(rèn)30秒   
  26. # sentinel down-after-milliseconds <master-name> <milliseconds> 
  27. sentinel down-after-milliseconds mymaster 30000   
  28.  
  29. # 指定了在發(fā)生failover主備切換時(shí),最多可以有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步。這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長(zhǎng);反之,但是如果這個(gè)數(shù)字越大,就意味著越多的slave因?yàn)閞eplication而不可用??梢酝ㄟ^將這個(gè)值設(shè)為1,來保證每次只有一個(gè)slave,處于不能處理命令請(qǐng)求的狀態(tài)。 
  30. # sentinel parallel-syncs <master-name> <numslaves> 
  31. sentinel parallel-syncs mymaster 1   
  32.  
  33. # 故障轉(zhuǎn)移的超時(shí)時(shí)間failover-timeout,默認(rèn)三分鐘,可以用在以下這些方面: 
  34. ## 1. 同一個(gè)sentinel對(duì)同一個(gè)master兩次failover之間的間隔時(shí)間。   
  35. ## 2. 當(dāng)一個(gè)slave從一個(gè)錯(cuò)誤的master那里同步數(shù)據(jù)時(shí)開始,直到slave被糾正為從正確的master那里同步數(shù)據(jù)時(shí)結(jié)束。   
  36. ## 3. 當(dāng)想要取消一個(gè)正在進(jìn)行的failover時(shí)所需要的時(shí)間。 
  37. ## 4.當(dāng)進(jìn)行failover時(shí),配置所有slaves指向新的master所需的最大時(shí)間。不過,即使過了這個(gè)超時(shí),slaves依然會(huì)被正確配置為指向master,但是就不按parallel-syncs所配置的規(guī)則來同步數(shù)據(jù)了 
  38. # sentinel failover-timeout <master-name> <milliseconds>   
  39. sentinel failover-timeout mymaster 180000 
  40.  
  41. # 當(dāng)sentinel有任何警告級(jí)別的事件發(fā)生時(shí)(比如說redis實(shí)例的主觀失效和客觀失效等等),將會(huì)去調(diào)用這個(gè)腳本。一個(gè)腳本的最大執(zhí)行時(shí)間為60s,如果超過這個(gè)時(shí)間,腳本將會(huì)被一個(gè)SIGKILL信號(hào)終止,之后重新執(zhí)行。 
  42. # 對(duì)于腳本的運(yùn)行結(jié)果有以下規(guī)則:   
  43. ## 1. 若腳本執(zhí)行后返回1,那么該腳本稍后將會(huì)被再次執(zhí)行,重復(fù)次數(shù)目前默認(rèn)為10。 
  44. ## 2. 若腳本執(zhí)行后返回2,或者比2更高的一個(gè)返回值,腳本將不會(huì)重復(fù)執(zhí)行。   
  45. ## 3. 如果腳本在執(zhí)行過程中由于收到系統(tǒng)中斷信號(hào)被終止了,則同返回值為1時(shí)的行為相同。 
  46. # sentinel notification-script <master-name> <script-path>   
  47. sentinel notification-script mymaster /var/redis/notify.sh 
  48.  
  49. # 這個(gè)腳本應(yīng)該是通用的,能被多次調(diào)用,不是針對(duì)性的。 
  50. # sentinel client-reconfig-script <master-name> <script-path> 
  51. sentinel client-reconfig-script mymaster /var/redis/reconfig.sh 

2、哨兵搭建

這里我們部署三個(gè)哨兵,每臺(tái)服務(wù)器一個(gè)哨兵,配置方式相同,如下

(1)同樣為了方便管理,首先將sentinel.conf復(fù)制到 etc 下

  1. cd /data/redis-5.0.7/ 
  2. cp sentinel.conf /data/redis-5.0.7/etc/ 

(2)編輯 sentinel.conf

  1. cd etc/ 
  2. vi sentinel.conf 

配置文件修改如下,修改完畢后先按 esc ,然后:wq命令保存退出。

  1. //端口默認(rèn)為26379。 
  2. port:26379 
  3. //關(guān)閉保護(hù)模式,可以外部訪問。 
  4. protected-mode:no 
  5. //設(shè)置為后臺(tái)啟動(dòng)。 
  6. daemonize:yes 
  7. //日志文件。 
  8. logfile:./sentinel.log 
  9. //指定主機(jī)IP地址和端口,并且指定當(dāng)有2臺(tái)哨兵認(rèn)為主機(jī)掛了,則對(duì)主機(jī)進(jìn)行容災(zāi)切換。 
  10. sentinel monitor mymaster 192.168.231.130 6379 2 
  11. //當(dāng)在Redis實(shí)例中開啟了requirepass,這里就需要提供密碼。 
  12. sentinel auth-pass mymaster pwdtest@2019 
  13. //這里設(shè)置了主機(jī)多少秒無響應(yīng),則認(rèn)為掛了。 
  14. sentinel down-after-milliseconds mymaster 3000 
  15. //主備切換時(shí),最多有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步,這里設(shè)置為默認(rèn)的1。 
  16. snetinel parallel-syncs mymaster 1 
  17. //故障轉(zhuǎn)移的超時(shí)時(shí)間,這里設(shè)置為三分鐘。 
  18. sentinel failover-timeout mymaster 180000 

3、防火墻設(shè)置

命令如下,這里根據(jù)自己設(shè)置的端口進(jìn)行更改。

  1. firewall-cmd --add-port=26379/tcp --permanent --zone=public 
  2. #重啟防火墻(修改配置后要重啟防火墻) 
  3. firewall-cmd --reload 

4、啟動(dòng)三個(gè)哨兵:

  1. cd /data/redis-5.0.7/bin 
  2. redis-sentinel /data/redis-5.0.7/etc/sentinel.conf 

三個(gè)哨兵都啟動(dòng)后,可使用如下命令查看哨兵信息

  1. redis-cli -p 26379 
  2. info sentinel 

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

info_sentinel.

可以看到,哨兵已經(jīng)監(jiān)聽到當(dāng)前的主機(jī)IP端口和運(yùn)行狀態(tài),并且有2臺(tái)從機(jī),3個(gè)哨兵。

5、容災(zāi)切換

現(xiàn)在我們模擬主機(jī)宕機(jī),將主機(jī) redis 服務(wù)關(guān)閉,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

模擬宕機(jī)

現(xiàn)在我們?nèi)タ慈_(tái)服務(wù)器的情況,發(fā)現(xiàn)剛才的主機(jī)(192.168.231.130 6379)已經(jīng)變成了從機(jī),并且哨兵(Sentinel)通過選舉機(jī)制選舉了從機(jī)(192.168.231.131 6381)作為了新的主機(jī),如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

容災(zāi)切換

進(jìn)入192.168.231.131 6381 可以看到它已經(jīng)由從機(jī)(slave)變?yōu)榱酥鳈C(jī)(master),并且成功連接從機(jī)。

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

newMaster

需要注意的是,主從切換后配置文件已經(jīng)被自動(dòng)進(jìn)行了更改,我們現(xiàn)在看一下新上位的主機(jī) redis 日志,如下

 

Linux下 Redis集群搭建詳解(主從+哨兵)

 

容災(zāi)后redis日志

可以看到,當(dāng)主機(jī)掛了的時(shí)候,一直連接主機(jī)被拒絕,當(dāng)哨兵選舉它為主機(jī)后,它成功執(zhí)行重寫的配置文件,并且連接了其他從機(jī)。

至此,主從+哨兵的集群架構(gòu)搭建完畢。

結(jié)語

為了寫這篇文章,熬了好幾個(gè)夜,覺得有幫助點(diǎn)贊轉(zhuǎn)發(fā)吧。最后感興趣的可以關(guān)注下我的公眾號(hào)(公眾號(hào)搜索chaodev),來吧英雄。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-02-11 08:41:19

WindowsRedis集群

2023-10-26 07:47:53

Redis哨兵集群

2019-09-03 15:45:31

Redis分片集群

2021-03-31 05:57:40

集群搭建哨兵集群Redis

2024-07-16 08:38:06

2019-09-16 16:05:13

Redis集群模式

2023-09-27 06:26:07

2013-12-12 13:25:18

2023-03-15 08:30:37

2014-07-29 17:46:09

Linuxtomcattomcat集群

2017-07-11 13:30:12

RedisDockerLinux

2023-09-26 01:07:34

2015-05-06 13:34:14

MySQL集群搭建

2014-05-12 09:59:49

RedisUbuntu主從環(huán)境

2021-03-16 11:10:37

Redis數(shù)據(jù)庫命令

2017-02-27 21:55:04

LinuxCentOS 7.0Redis

2022-02-06 10:58:37

Redis主從模式

2023-04-09 19:54:52

2021-01-07 10:18:03

Redis數(shù)據(jù)庫環(huán)境搭建

2024-03-07 16:03:56

RedisDocker
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)