網站首頁 編程語言 正文
前言
在上一篇,我們了解了redis 復制集群的完整的搭建流程,本篇來分享一下如何搭建 redis 哨兵集群。
為什么需要哨兵集群
redis哨兵集群要解決的問題是什么呢?搞清楚這個問題之后,就知道為什么需要哨兵集群了。我們知道,redis復制集群解決的是,高并發情況下,單節點的讀性能瓶頸以及單節點問題;
但是復制集群的很明顯的問題就是,當主節點掛掉后,集群將無法提供寫業務,如果要恢復集群,則需要人工介入,這個必定會丟失數據不說,而且需要一定的時間;
而在哨兵模式下,集群的狀態通過哨兵可以得到實時監控,一旦主節點宕機,哨兵會立即感知,然后選舉出新的主節點,繼續對外提供服務;
搭建前準備
1、基于centos7 的虛擬機(或云服務器);
2、redis 安裝包(本篇基于6.X版本);
搭建步驟
本篇的集群將在同一臺機器上搭建演示,通過不同的端口進行區分
1、準備(規劃)三個sentinel實例
節點 | IP | PORT |
---|---|---|
s1 | 10.34.33.80 | 27001 |
s2 | 10.34.33.80 | 27002 |
s3 | 10.34.33.80 | 27003 |
2、創建3個文件目錄
要在同一臺虛擬機開啟3個實例,必須準備三份不同的配置文件和目錄,配置文件所在目錄也就是工作目錄。我們創建三個文件夾,名字分別叫s1、s2、s3;
mkdir s1 s2 s3
3、在s1目錄下創建一個sentinel.conf文件
添加下面的內容:
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
:是當前sentinel實例的端口; -
sentinel monitor mymaster 192.168.150.101 7001 2
:指定主節點信息
mymaster
:主節點名稱,自定義,任意寫;
IP 7001
:主節點的ip和端口;
2
:選舉master時的quorum值
4、將s1/sentinel.conf文件拷貝到s2、s3兩個目錄中
在/tmp目錄執行下列命令
cp s1/sentinel.conf s2 cp s1/sentinel.conf s3
5、修改s2,s3目錄下的配置文件端口分別為27002、27003
在tmp目錄下執行下面的命令
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
隨機打開一個s2或s3目錄下的文件,可以發現,配置文件已調整;
6、啟動3個sentinel實例
在啟動sentinel集群之前,先把上一篇的redis集群啟動起來
進入到tmp目錄,分別執行下面的命令進行啟動
# 第1個 redis-sentinel s1/sentinel.conf # 第2個 redis-sentinel s2/sentinel.conf # 第3個 redis-sentinel s3/sentinel.conf
啟動過程
通過輸出日志,也可以看到,三個sentinel實例已經正常啟動,并探測到 7001,7002,7003這三個redis實例,以及這三個redis實例的主從關系,即redis集群已經成功被sentinel集群監控起來;
到這里為止,整改哨兵集群大搭建過程就完成了,接下來,做一下集群的異常測試
集群測試
將redis 7001這個服務實例強制下線
在下線的時候,注意分別觀察sentinel的3個實例控制臺的輸出日志變化
?從sentinel實例控制臺的輸出日志來看,主要經歷了3個階段:
- 認為7001這個redis實例主觀下線;
- 當sentinel集群超過半數以上的實例認為7001這個節點下線時,變成客觀下線;
- 發起投票,在剩下的2個redis實例中進行新的redis master的選舉;
再次啟動7001這個實例
通過sentinel控制臺輸出日志,可以看到,7001服務實例信息再次被sentinel集群探測到,即監控起來
需要注意的是,再次啟動7001服務之后,7001這個redis實例不一定會再次成為master
原文鏈接:https://blog.csdn.net/congge_study/article/details/125949426
相關推薦
- 2022-01-28 Hyper集成laravel中使用的blade模板
- 2022-03-07 Go?container包的介紹_Golang
- 2022-04-19 C語言內存管理及初始化細節示例詳解_C 語言
- 2022-12-26 C++逆向分析移除鏈表元素實現方法詳解_C 語言
- 2022-03-21 詳解C++內存的代碼區,全局區,棧區和堆區_C 語言
- 2021-12-03 C++類和對象實戰之Date類的實現方法_C 語言
- 2022-06-12 C#集合之集(set)的用法_C#教程
- 2022-06-10 教你如何獲取Harbor的帶tag的鏡像清單_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支