網(wǎng)站首頁 編程語言 正文
前言
在上一篇,我們了解了redis 復(fù)制集群的完整的搭建流程,本篇來分享一下如何搭建 redis 哨兵集群。
為什么需要哨兵集群
redis哨兵集群要解決的問題是什么呢?搞清楚這個(gè)問題之后,就知道為什么需要哨兵集群了。我們知道,redis復(fù)制集群解決的是,高并發(fā)情況下,單節(jié)點(diǎn)的讀性能瓶頸以及單節(jié)點(diǎn)問題;
但是復(fù)制集群的很明顯的問題就是,當(dāng)主節(jié)點(diǎn)掛掉后,集群將無法提供寫業(yè)務(wù),如果要恢復(fù)集群,則需要人工介入,這個(gè)必定會丟失數(shù)據(jù)不說,而且需要一定的時(shí)間;
而在哨兵模式下,集群的狀態(tài)通過哨兵可以得到實(shí)時(shí)監(jiān)控,一旦主節(jié)點(diǎn)宕機(jī),哨兵會立即感知,然后選舉出新的主節(jié)點(diǎn),繼續(xù)對外提供服務(wù);
搭建前準(zhǔn)備
1、基于centos7 的虛擬機(jī)(或云服務(wù)器);
2、redis 安裝包(本篇基于6.X版本);
搭建步驟
本篇的集群將在同一臺機(jī)器上搭建演示,通過不同的端口進(jìn)行區(qū)分
1、準(zhǔn)備(規(guī)劃)三個(gè)sentinel實(shí)例
節(jié)點(diǎn) | IP | PORT |
---|---|---|
s1 | 10.34.33.80 | 27001 |
s2 | 10.34.33.80 | 27002 |
s3 | 10.34.33.80 | 27003 |
2、創(chuàng)建3個(gè)文件目錄
要在同一臺虛擬機(jī)開啟3個(gè)實(shí)例,必須準(zhǔn)備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。我們創(chuàng)建三個(gè)文件夾,名字分別叫s1、s2、s3;
mkdir s1 s2 s3
3、在s1目錄下創(chuàng)建一個(gè)sentinel.conf文件
添加下面的內(nèi)容:
port 27001 sentinel announce-ip IP sentinel monitor mymaster IP 7001 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 dir "/tmp/s1"
配置文件解讀:
-
port 27001
:是當(dāng)前sentinel實(shí)例的端口; -
sentinel monitor mymaster 192.168.150.101 7001 2
:指定主節(jié)點(diǎn)信息
mymaster
:主節(jié)點(diǎn)名稱,自定義,任意寫;
IP 7001
:主節(jié)點(diǎn)的ip和端口;
2
:選舉master時(shí)的quorum值
4、將s1/sentinel.conf文件拷貝到s2、s3兩個(gè)目錄中
在/tmp目錄執(zhí)行下列命令
cp s1/sentinel.conf s2 cp s1/sentinel.conf s3
5、修改s2,s3目錄下的配置文件端口分別為27002、27003
在tmp目錄下執(zhí)行下面的命令
sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf
隨機(jī)打開一個(gè)s2或s3目錄下的文件,可以發(fā)現(xiàn),配置文件已調(diào)整;
6、啟動(dòng)3個(gè)sentinel實(shí)例
在啟動(dòng)sentinel集群之前,先把上一篇的redis集群啟動(dòng)起來
進(jìn)入到tmp目錄,分別執(zhí)行下面的命令進(jìn)行啟動(dòng)
# 第1個(gè) redis-sentinel s1/sentinel.conf # 第2個(gè) redis-sentinel s2/sentinel.conf # 第3個(gè) redis-sentinel s3/sentinel.conf
啟動(dòng)過程
通過輸出日志,也可以看到,三個(gè)sentinel實(shí)例已經(jīng)正常啟動(dòng),并探測到 7001,7002,7003這三個(gè)redis實(shí)例,以及這三個(gè)redis實(shí)例的主從關(guān)系,即redis集群已經(jīng)成功被sentinel集群監(jiān)控起來;
到這里為止,整改哨兵集群大搭建過程就完成了,接下來,做一下集群的異常測試
集群測試
將redis 7001這個(gè)服務(wù)實(shí)例強(qiáng)制下線
在下線的時(shí)候,注意分別觀察sentinel的3個(gè)實(shí)例控制臺的輸出日志變化
?從sentinel實(shí)例控制臺的輸出日志來看,主要經(jīng)歷了3個(gè)階段:
- 認(rèn)為7001這個(gè)redis實(shí)例主觀下線;
- 當(dāng)sentinel集群超過半數(shù)以上的實(shí)例認(rèn)為7001這個(gè)節(jié)點(diǎn)下線時(shí),變成客觀下線;
- 發(fā)起投票,在剩下的2個(gè)redis實(shí)例中進(jìn)行新的redis master的選舉;
再次啟動(dòng)7001這個(gè)實(shí)例
通過sentinel控制臺輸出日志,可以看到,7001服務(wù)實(shí)例信息再次被sentinel集群探測到,即監(jiān)控起來
需要注意的是,再次啟動(dòng)7001服務(wù)之后,7001這個(gè)redis實(shí)例不一定會再次成為master
原文鏈接:https://blog.csdn.net/congge_study/article/details/125949426
相關(guān)推薦
- 2022-05-02 C++的輸入和輸出流詳解_C 語言
- 2022-01-04 圖片網(wǎng)絡(luò)地址轉(zhuǎn)base64和文件
- 2022-06-08 問題記錄:HttpServletRequestWrapper導(dǎo)致跨域失敗的問題
- 2022-11-05 Flutter實(shí)現(xiàn)一個(gè)支持漸變背景的Button示例詳解_Android
- 2022-10-15 使用Pycharm創(chuàng)建一個(gè)Django項(xiàng)目的超詳細(xì)圖文教程_python
- 2022-01-12 npm ERR 部署meteor時(shí)npm install出錯(cuò)問題解決
- 2022-03-14 關(guān)于VS+QT5應(yīng)用程序換圖標(biāo)的解決方案_C 語言
- 2022-09-30 Go語言編譯原理之源碼調(diào)試_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支