您好,登錄后才能下訂單哦!
Sentinel(哨兵)是用于監(jiān)控redis集群中Master狀態(tài)的工具,是Redis的高可用性解決方案,sentinel哨兵模式已經(jīng)被集成在redis2.4之后的版本中。sentinel是redis高可用的解決方案,sentinel系統(tǒng)可以監(jiān)視一個(gè)或者多個(gè)redis master服務(wù),以及這些master服務(wù)的所有從服務(wù);當(dāng)某個(gè)master服務(wù)下線時(shí),自動(dòng)將該master下的某個(gè)從服務(wù)升級(jí)為master服務(wù)替代已下線的master服務(wù)繼續(xù)處理請(qǐng)求。
sentinel可以讓redis實(shí)現(xiàn)主從復(fù)制,當(dāng)一個(gè)集群中的master失效之后,sentinel可以選舉出一個(gè)新的master用于自動(dòng)接替master的工作,集群中的其他redis服務(wù)器自動(dòng)指向新的master同步數(shù)據(jù)。一般建議sentinel采取奇數(shù)臺(tái),防止某一臺(tái)sentinel無(wú)法連接到master導(dǎo)致誤切換。
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當(dāng)用Redis做Master-slave的高可用方案時(shí),假如master宕機(jī)了,Redis本身(包括它的很多客戶端)都沒有實(shí)現(xiàn)自動(dòng)進(jìn)行主備切換,而Redis-sentinel本身也是一個(gè)獨(dú)立運(yùn)行的進(jìn)程,它能監(jiān)控多個(gè)master-slave集群,發(fā)現(xiàn)master宕機(jī)后能進(jìn)行自動(dòng)切換。Sentinel由一個(gè)或多個(gè)Sentinel 實(shí)例 組成的Sentinel系統(tǒng)可以監(jiān)視任意多個(gè)主服務(wù)器,以及這些主服務(wù)器屬下的所有從服務(wù)器,并在被監(jiān)視的主服務(wù)器進(jìn)入下線狀態(tài)時(shí),自動(dòng)將下線主服務(wù)器屬下的某個(gè)從服務(wù)器升級(jí)為新的主服務(wù)器。
Sentinel工作方式(每個(gè)Sentinel實(shí)例都執(zhí)行的定時(shí)任務(wù))
1)每個(gè)Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實(shí)例發(fā)送一個(gè)PING命令。
2)如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù)PING命令的時(shí)間超過(guò) own-after-milliseconds 選項(xiàng)所指定的值,則這個(gè)實(shí)例會(huì)被Sentinel標(biāo)記為主觀下線。?
3)如果一個(gè)Master被標(biāo)記為主觀下線,則正在監(jiān)視這個(gè)Master的所有 Sentinel 要以每秒一次的頻率確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài)。?
4)當(dāng)有足夠數(shù)量的Sentinel(大于等于配置文件指定的值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master的確進(jìn)入了主觀下線狀態(tài),則Master會(huì)被標(biāo)記為客觀下線。
5)在一般情況下,每個(gè)Sentinel 會(huì)以每10秒一次的頻率向它已知的所有Master,Slave發(fā)送 INFO 命令。
6)當(dāng)Master被Sentinel標(biāo)記為客觀下線時(shí),Sentinel 向下線的 Master 的所有Slave發(fā)送 INFO命令的頻率會(huì)從10秒一次改為每秒一次。?
7)若沒有足夠數(shù)量的Sentinel同意Master已經(jīng)下線,Master的客觀下線狀態(tài)就會(huì)被移除。 若 Master重新向Sentinel 的PING命令返回有效回復(fù),Master的主觀下線狀態(tài)就會(huì)被移除。
環(huán)境:
主機(jī)IP:
192.168.121.121
192.168.121.122
192.168.121.123
系統(tǒng):centos7.6
上傳源碼包到主機(jī)
redis-4.0.11.tar.gz
1、三臺(tái)主機(jī)編譯
yum install gcc gcc-c++ -y
tar -zxf redis-4.0.11.tar.gz -C /data/usr/src
cd /data/usr/src/redis-4.0.11/
make && make install PREFIX=/data/usr/redis
2、三臺(tái)主機(jī)可拷貝配置文件
mkdir /data/usr/redis/{conf,data,logs}
cp *.conf /data/usr/redis/conf
編輯配置文件
cd /data/usr/redis/conf
2.1、配置redis
主節(jié)點(diǎn):
vi redis.conf?
bind 127.0.0.1 192.168.121.121
protected-mode no
daemonize yes
slave-priority 100
appendonly yes
dir /data/usr/redis/data
requirepass "Redis2019!"
masterauth "Redis2019!"
logfile "/data/usr/redis/logs/redis.log"
兩個(gè)從節(jié)點(diǎn):
bind 127.0.0.1 192.168.121.122
protected-mode no
daemonize yes
slave-priority 90
appendonly yes
dir /data/usr/redis/data
slaveof 192.168.121.121 6379
requirepass "Redis2019!"
masterauth "Redis2019!"
logfile "/data/usr/redis/logs/redis.log"
bind 127.0.0.1 192.168.121.123
protected-mode no
daemonize yes
slave-priority 90
appendonly yes
dir /data/usr/redis/data
slaveof 192.168.121.121 6379
requirepass "Redis2019!"
masterauth "Redis2019!"
logfile "/data/usr/redis/logs/redis.log"
2.2、配置哨兵
vi sentinel.conf?
protected-mode no
daemonize yes
logfile "/data/usr/redis/logs/sentinel.log"
sentinel monitor mymaster 192.168.121.121 6379 2?#設(shè)置 主名稱 ip地址 端口號(hào) 參入選舉的哨兵數(shù)
sentinel auth-pass mymaster Redis2019!
最后兩條配置要按照先后順序
3、啟動(dòng)
將redis服務(wù)啟動(dòng):先啟動(dòng)master再啟動(dòng)slave
/data/usr/redis/bin/redis-server /data/usr/redis/conf/redis.conf?
查看redis服務(wù)狀態(tài)
/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 6379 -a Redis2019! info replication?
/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 6379 -a Redis2019! info replication?
/data/usr/redis/bin/redis-cli -h 192.168.121.123 -p 6379 -a Redis2019! info replication?
啟動(dòng)sentinel服務(wù):先啟動(dòng)redis服務(wù)再啟動(dòng)sentinel服務(wù),關(guān)閉則是反過(guò)來(lái)的,先關(guān)閉sentinel服務(wù),再關(guān)閉redis服務(wù)。
/data/usr/redis/bin/redis-sentinel /data/usr/redis/conf/sentinel.conf?
查看哨兵服務(wù)狀態(tài)
/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 26379 info sentinel
/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 26379 info sentinel
/data/usr/redis/bin/redis-cli -h 192.168.121.123 -p 26379 info sentinel
4、測(cè)試
4.1、同步測(cè)試
主節(jié)點(diǎn):
192.168.121.121:6379> set name kkk
從節(jié)點(diǎn):
192.168.121.122:6379> keys *
1) "name"
192.168.121.122:6379> get name
"kkk"
192.168.121.123:6379> keys *
1) "name"
192.168.121.123:6379> get name
"kkk"
4.2、從庫(kù)只讀測(cè)試
192.168.121.122:6379> set bname yyy
(error) READONLY You can't write against a read only slave.
192.168.121.123:6379> set bname yyy
(error) READONLY You can't write against a read only slave.
4.3、冗余測(cè)試
測(cè)試停止主redis,發(fā)現(xiàn)其中一個(gè)從變?yōu)橹?,啟?dòng)停止的服務(wù)后發(fā)現(xiàn)為從服務(wù),主服務(wù)不變。
停止一個(gè)節(jié)點(diǎn)sentinel服務(wù),之后再停止主服務(wù),發(fā)現(xiàn)其中一個(gè)從服務(wù)升級(jí)為主服務(wù)
停止哨兵服務(wù)命令
/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 26379 shutdown
停止redis服務(wù)命令
/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 6379 -a Redis2019 shutdown
停止第二個(gè)哨兵服務(wù),再停止redis主服務(wù),發(fā)現(xiàn)剩下的redis服務(wù)中并沒有產(chǎn)生主服務(wù),說(shuō)明哨兵服務(wù)最少要有兩個(gè),最好是三個(gè)及以上。
5、問題處理
5.1、執(zhí)行 make PREFIX=/data/usr/redis install 報(bào)錯(cuò)
cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
cc: error: ../deps/lua/src/liblua.a: No such file or directory
cd deps/
ls
hiredis? jemalloc? linenoise? lua? Makefile? README.md? update-jemalloc.sh
cd hiredis
make?
cd linenoise
make
cd lua
make?
cd lua
make
編譯報(bào)錯(cuò)
Please do
? ?make PLATFORM
where PLATFORM is one of these:
? ?aix ansi bsd freebsd generic linux macosx mingw posix solaris
See INSTALL for complete instructions.
[root@slave1 lua]# make PLATFORM
make: *** No rule to make target `PLATFORM'.? Stop.
執(zhí)行下面命令編譯
make generic
5.2、啟動(dòng)哨兵出錯(cuò)
./redis-sentinel sentinel.conf?
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 92
>>> 'sentinel auth-pass mymaster Redis2019'
No such master with specified name.
出現(xiàn)錯(cuò)誤:
sentinel monitor mymaster 192.168.121.123 6379 2
sentinel auth-pass mymaster Redis2019
上邊的配置要按照順序,錯(cuò)誤是因?yàn)樯线呉粭l的配置在下面造成的。
參考:
https://www.cnblogs.com/kevingrace/p/9004460.html
https://blog.csdn.net/qq_40476230/article/details/85845166
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。