您好,登錄后才能下訂單哦!
Sentinel(哨兵)是用于監控redis集群中Master狀態的工具,是Redis的高可用性解決方案,sentinel哨兵模式已經被集成在redis2.4之后的版本中。sentinel是redis高可用的解決方案,sentinel系統可以監視一個或者多個redis master服務,以及這些master服務的所有從服務;當某個master服務下線時,自動將該master下的某個從服務升級為master服務替代已下線的master服務繼續處理請求。
sentinel可以讓redis實現主從復制,當一個集群中的master失效之后,sentinel可以選舉出一個新的master用于自動接替master的工作,集群中的其他redis服務器自動指向新的master同步數據。一般建議sentinel采取奇數臺,防止某一臺sentinel無法連接到master導致誤切換。
Redis-Sentinel是Redis官方推薦的高可用性(HA)解決方案,當用Redis做Master-slave的高可用方案時,假如master宕機了,Redis本身(包括它的很多客戶端)都沒有實現自動進行主備切換,而Redis-sentinel本身也是一個獨立運行的進程,它能監控多個master-slave集群,發現master宕機后能進行自動切換。Sentinel由一個或多個Sentinel 實例 組成的Sentinel系統可以監視任意多個主服務器,以及這些主服務器屬下的所有從服務器,并在被監視的主服務器進入下線狀態時,自動將下線主服務器屬下的某個從服務器升級為新的主服務器。
Sentinel工作方式(每個Sentinel實例都執行的定時任務)
1)每個Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個PING命令。
2)如果一個實例(instance)距離最后一次有效回復PING命令的時間超過 own-after-milliseconds 選項所指定的值,則這個實例會被Sentinel標記為主觀下線。?
3)如果一個Master被標記為主觀下線,則正在監視這個Master的所有 Sentinel 要以每秒一次的頻率確認Master的確進入了主觀下線狀態。?
4)當有足夠數量的Sentinel(大于等于配置文件指定的值)在指定的時間范圍內確認Master的確進入了主觀下線狀態,則Master會被標記為客觀下線。
5)在一般情況下,每個Sentinel 會以每10秒一次的頻率向它已知的所有Master,Slave發送 INFO 命令。
6)當Master被Sentinel標記為客觀下線時,Sentinel 向下線的 Master 的所有Slave發送 INFO命令的頻率會從10秒一次改為每秒一次。?
7)若沒有足夠數量的Sentinel同意Master已經下線,Master的客觀下線狀態就會被移除。 若 Master重新向Sentinel 的PING命令返回有效回復,Master的主觀下線狀態就會被移除。
環境:
主機IP:
192.168.121.121
192.168.121.122
192.168.121.123
系統:centos7.6
上傳源碼包到主機
redis-4.0.11.tar.gz
1、三臺主機編譯
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、三臺主機可拷貝配置文件
mkdir /data/usr/redis/{conf,data,logs}
cp *.conf /data/usr/redis/conf
編輯配置文件
cd /data/usr/redis/conf
2.1、配置redis
主節點:
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"
兩個從節點:
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?#設置 主名稱 ip地址 端口號 參入選舉的哨兵數
sentinel auth-pass mymaster Redis2019!
最后兩條配置要按照先后順序
3、啟動
將redis服務啟動:先啟動master再啟動slave
/data/usr/redis/bin/redis-server /data/usr/redis/conf/redis.conf?
查看redis服務狀態
/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?
啟動sentinel服務:先啟動redis服務再啟動sentinel服務,關閉則是反過來的,先關閉sentinel服務,再關閉redis服務。
/data/usr/redis/bin/redis-sentinel /data/usr/redis/conf/sentinel.conf?
查看哨兵服務狀態
/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、測試
4.1、同步測試
主節點:
192.168.121.121:6379> set name kkk
從節點:
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、從庫只讀測試
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、冗余測試
測試停止主redis,發現其中一個從變為主,啟動停止的服務后發現為從服務,主服務不變。
停止一個節點sentinel服務,之后再停止主服務,發現其中一個從服務升級為主服務
停止哨兵服務命令
/data/usr/redis/bin/redis-cli -h 192.168.121.121 -p 26379 shutdown
停止redis服務命令
/data/usr/redis/bin/redis-cli -h 192.168.121.122 -p 6379 -a Redis2019 shutdown
停止第二個哨兵服務,再停止redis主服務,發現剩下的redis服務中并沒有產生主服務,說明哨兵服務最少要有兩個,最好是三個及以上。
5、問題處理
5.1、執行 make PREFIX=/data/usr/redis install 報錯
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
編譯報錯
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.
執行下面命令編譯
make generic
5.2、啟動哨兵出錯
./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.
出現錯誤:
sentinel monitor mymaster 192.168.121.123 6379 2
sentinel auth-pass mymaster Redis2019
上邊的配置要按照順序,錯誤是因為上邊一條的配置在下面造成的。
參考:
https://www.cnblogs.com/kevingrace/p/9004460.html
https://blog.csdn.net/qq_40476230/article/details/85845166
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。