docker 1分鐘 快速搭建 redis 哨兵集群

使用 docker-compose 1 分鐘搭建好 1主2從3哨兵的 redis 哨兵集群

目錄結構

redis-sentinel-cluster
├── check_redis.sh
├── docker-compose.yml
├── redis
│   └── redis.conf
├── sentinel
│   └── sentinel.conf

docker-compose.yml 配置

version: '3.8'services:# --- Redis 主節點 ---redis-master:image: redis:7.2container_name: redis-masterhostname: redis-mastercommand: redis-server /usr/local/etc/redis/redis.confports:- "7000:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-master-data:/datanetworks:redis-net:ipv4_address: 192.168.80.1# --- Redis 從節點 1 ---redis-slave-1:image: redis:7.2container_name: redis-slave-1hostname: redis-slave-1# 啟動時,指定它復制 redis-mastercommand: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379ports:- "7001:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-slave-1-data:/datanetworks:redis-net:ipv4_address: 192.168.80.2depends_on:- redis-master# --- Redis 從節點 2 ---redis-slave-2:image: redis:7.2container_name: redis-slave-2hostname: redis-slave-2command: redis-server /usr/local/etc/redis/redis.conf --replicaof redis-master 6379ports:- "7002:6379"volumes:- ./redis/redis.conf:/usr/local/etc/redis/redis.conf- redis-slave-2-data:/datanetworks:redis-net:ipv4_address: 192.168.80.3depends_on:- redis-master# --- 哨兵節點 1 ---redis-sentinel-1:image: redis:7.2container_name: redis-sentinel-1hostname: redis-sentinel-1# 使用 sentinel.conf 啟動哨兵模式command: redis-sentinel /usr/local/etc/redis/sentinel.confmem_limit: 256mports:- "27000:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.4depends_on:- redis-master- redis-slave-1- redis-slave-2# --- 哨兵節點 2 ---redis-sentinel-2:image: redis:7.2container_name: redis-sentinel-2hostname: redis-sentinel-2command: redis-sentinel /usr/local/etc/redis/sentinel.confports:- "27001:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.5depends_on:- redis-master- redis-slave-1- redis-slave-2# --- 哨兵節點 3 ---redis-sentinel-3:image: redis:7.2container_name: redis-sentinel-3hostname: redis-sentinel-3command: redis-sentinel /usr/local/etc/redis/sentinel.confports:- "27002:26379"volumes:- ./sentinel/sentinel.conf:/usr/local/etc/redis/sentinel.confnetworks:redis-net:ipv4_address: 192.168.80.6depends_on:- redis-master- redis-slave-1- redis-slave-2# 定義網絡,讓所有容器都在同一個網絡下,可以通過服務名互相通信
networks:redis-net:driver: bridgeipam:config:- subnet: 192.168.80.0/20gateway: 192.168.80.255# 定義數據卷,用于持久化 Redis 數據
volumes:redis-master-data:redis-slave-1-data:redis-slave-2-data:

redis/redis.conf 配置

根據實際情況進行密碼修改

# 綁定到所有網絡接口,以便容器間可以互相訪問
bind 0.0.0.0# 開啟保護模式(建議在有密碼時關閉,通過防火墻保護)
protected-mode no# 設置密碼,這是生產環境的最佳實踐,根據實際安全要求進行密碼修改
# 主從和哨兵都需要用這個密碼來認證
requirepass "your_redis_password"# 當本實例作為從節點時,連接主節點所用的密碼
masterauth "your_redis_password"# 開啟 AOF 持久化,保證數據安全
appendonly yes

sentinel/sentinel.conf 配置

# 綁定到所有網絡接口
bind 0.0.0.0# 后臺啟動
#daemonize yes# 哨兵的工作端口
port 26379# 監控名為 'mymaster' 的主節點,其地址是 redis-master:6379
# '2' 是 quorum(法定人數),意味著至少需要 2 個哨兵同意,才能判定主節點下線并觸發故障轉移
# docker-compose 網絡會通過服務名 'redis-master' 解析到正確的容器 IP
sentinel monitor mymaster 192.168.80.1 6379 2# 主節點被判定為主觀下線(SDOWN)所需的毫秒數
# 如果一個哨兵在 5000 毫秒內沒有收到主節點的有效回復,就認為它主觀下線
sentinel down-after-milliseconds mymaster 5000# 故障轉移的超時時間(毫秒)
# 如果一個哨兵在 180000 毫秒內沒有完成對該 master 的故障轉移,
# 其他哨兵可以接替它繼續進行
sentinel failover-timeout mymaster 180000# 在故障轉移后,最多允許多少個從節點同時與新的主節點進行同步
# '1' 是最安全的選擇,可以防止新主節點因大量同步請求而過載
sentinel parallel-syncs mymaster 1# 指定連接 Redis 主從節點所需的密碼
sentinel auth-pass mymaster "your_redis_password"
# 哨兵密碼,根據實際安全要求進行密碼修改
requirepass "your_sentinel_password"

啟動并驗證

啟動
docker-compose up -d

類似如下輸出

[+] Running 7/7? Network redis-sentinel-cluster_redis-net  Created                                                                                         0.2s ? Container redis-master                    Started                                                                                         0.7s ? Container redis-slave-2                   Started                                                                                         0.9s ? Container redis-slave-1                   Started                                                                                         0.9s ? Container redis-sentinel-1                Started                                                                                         1.2s ? Container redis-sentinel-2                Started                                                                                         1.2s ? Container redis-sentinel-3                Started  
查看 啟動狀態
docker-compose ps

類似如下輸出

NAME               IMAGE       COMMAND                   SERVICE            CREATED         STATUS         PORTS
redis-master       redis:7.2   "docker-entrypoint.s…"   redis-master       5 seconds ago   Up 4 seconds   0.0.0.0:7000->6379/tcp, :::7000->6379/tcp
redis-sentinel-1   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-1   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27000->26379/tcp, :::27000->26379/tcp
redis-sentinel-2   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-2   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27001->26379/tcp, :::27001->26379/tcp
redis-sentinel-3   redis:7.2   "docker-entrypoint.s…"   redis-sentinel-3   5 seconds ago   Up 3 seconds   6379/tcp, 0.0.0.0:27002->26379/tcp, :::27002->26379/tcp
redis-slave-1      redis:7.2   "docker-entrypoint.s…"   redis-slave-1      5 seconds ago   Up 3 seconds   0.0.0.0:7001->6379/tcp, :::7001->6379/tcp
redis-slave-2      redis:7.2   "docker-entrypoint.s…"   redis-slave-2      5 seconds ago   Up 3 seconds   0.0.0.0:7002->6379/tcp, :::7002->6379/tcp
驗證集群狀態
./check_redis_sentinel.sh -h 192.168.80.1 -p 6379 -a your_redis_password

類似有如下輸出:

成功連接到 Redis (192.168.80.1:6379)--- 正在檢查單機/主從模式 ---
模式判斷: 主從復制模式 或 單機模式
----------------------------------------
Redis 版本         : 7.2.10
運行時間         : 0 天
已連接客戶端   : 7
使用內存         : 1.29M
當前節點角色   : MASTER
----------------------------------------
節點角色: MASTER
發現 2 個從節點:- slave0:192.168.80.2:6379- slave1:192.168.80.3:6379提示: 如果這是一個由 Sentinel 管理的集群, 請使用 -s <sentinel_port> 參數來獲取詳細的哨兵和主從信息.
./check_redis.sh -h 192.168.80.4 -s 26379 -a your_sentinel_password

類似有如下輸出

--- 正在檢查哨兵 (Sentinel) 模式 ---
成功連接到 Redis (192.168.80.4:26379)
模式判斷: 哨兵 (Sentinel) 模式監控組: mymaster
----------------------------------------
[Master 節點]- 192.168.80.1:6379
[Slave 節點]- 192.168.80.3:6379- 192.168.80.2:6379
[Sentinel 節點]- 192.168.80.6:26379 (284f5f39749c4461097f19df31d6df2b1042f2d9)- 192.168.80.5:26379 (522a29a38455cc8d74e11f05626dd01b4b67d3f1)- 192.168.80.4:26379 (當前連接的節點)

check_redis_sentinel 腳本地址:https://github.com/zhengmingliang/code-fragment/blob/main/shell/linux/redis/check_redis_sentinel.sh

筆記來源

個人博客 docker 1分鐘 快速搭建 redis 哨兵集群 https://alianga.com/articles/docker-redis-sentinel

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920778.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git與DevOps實戰:從版本控制到自動化部署

一、版本控制1.什么是版本控制&#xff1f;版本控制用于高效追蹤和管理項目開發中的代碼、配置及文檔變更歷史&#xff0c;確保團隊成員始終使用正確版本&#xff0c;并支持版本回溯、差異比較和文件恢復。它能帶來以下優勢&#xff1a;通過歷史記錄保障數據安全與完整性&#…

大模型——利用RAG構建智能問答平臺實戰

利用RAG構建智能問答平臺實戰 目前公司的智能問答平臺利用RAG技術構建,現給大家分享下通RAG技術構建智能問平臺的具體流程和原理。 一、什么是RAG RAG是檢索增強生成技術(Retrieval-Augmented Generation),目前是構建智能問答的重要技術。RAG相比傳統的檢索可以可以減少…

flume事務機制詳解:保障數據可靠性的核心邏輯

flume事務機制詳解&#xff1a;保障數據可靠性的核心邏輯 在數據采集過程中&#xff0c;“不丟數據、不重數據” 是核心需求。Flume 之所以能在分布式環境下保證數據可靠性&#xff0c;關鍵在于其內置的事務機制。Flume 通過在 “Source → Channel” 和 “Channel → Sink” …

第四十九天(springboot模版注入ThymeleafFreemarkerVelocity)

開發框架-SpringBoot 參考&#xff1a;Spring Boot 中文文檔 新建一個spring Boot 項目&#xff0c;修改服務器url為 aliyun.com 不然沒有與jdk8版本對應的java 選擇一個spring web 庫&#xff0c;點擊創建即可 來到這個頁面點擊運行 啟動的是8080端口&#xff0c;用127.0.0.1…

Spring MVC 九大組件源碼深度剖析(六):HandlerExceptionResolver - 異常處理的藝術

文章目錄一、異常處理的核心價值二、核心接口設計三、四大內置實現類源碼解析1. ExceptionHandlerExceptionResolver&#xff08;現代異常處理核心&#xff09;2. ResponseStatusExceptionResolver&#xff08;HTTP狀態碼處理&#xff09;3. DefaultHandlerExceptionResolver&a…

MCP(Model Context Protocol,模型上下文協議)介紹

1. 背景 隨著大語言模型&#xff08;LLM, Large Language Model&#xff09;的應用越來越廣泛&#xff0c;一個核心問題逐漸凸顯&#xff1a; 模型在對話或推理時&#xff0c;往往只能依賴有限上下文窗口。外部工具、知識庫、應用接口如何統一接入模型&#xff0c;缺乏標準協議…

synchronized的鎖對象 和 wait,notify的調用者之間的關系

誰調用了wait和notify方法&#xff0c;會決定這兩個方法的控制范圍嗎&#xff1f;你的問題非常深入&#xff0c;涉及到 wait() 和 notify() 方法的控制范圍和作用域。讓我們詳細分析一下&#xff1a;? 核心概念&#xff1a;控制范圍由“鎖對象”決定wait() 和 notify() 的控制…

【技術教程】如何將文檔編輯器集成到用 .Net 編寫的網絡應用程序中

在現代網絡應用中&#xff0c;?富文本編輯能力已成為內容管理系統的核心需求。對于 .NET 開發者而言&#xff0c;選擇適合的編輯器并高效集成&#xff0c;是構建企業級應用的關鍵一步&#xff0c;可讓項目管理、 CRM 或定制化系統具備原生辦公能力&#xff0c;消除頻繁切換應用…

【大模型記憶-Mem0詳解-1】概述

目的和能力 Mem0 通過提供以下功能將無狀態 AI 應用程序轉換為有狀態、支持內存的系統&#xff1a; 持久記憶 &#xff1a;跨會話長期保留用戶偏好、對話歷史記錄和上下文信息多級內存 &#xff1a;支持具有自適應個性化的用戶級、會話級和代理級內存智能提取 &#xff1a;基于…

2024年山東省信息學小學組(CSP-X)第一輪題解

2024年山東省信息學小學組(CSP-X)第一輪題解 原題下載 單項選擇題 閱讀程序 閱讀程序 #1 判斷題 閱讀程序 #2 判斷題 單選題 閱讀程序 #3 判斷題 單選題 完善程序 消滅怪獸 位運算操作 原題下載 CSP-X2024小學組(山東)第一輪試題以及答案 單項選擇題 共 15 題,每題 2 分…

SW - 用裝配圖的方式組合多個子零件然后轉換成為零件,可維護性好

文章目錄SW - 用裝配圖的方式組合多個子零件然后轉換成為零件&#xff0c;可維護性好概述筆記例子將裝配圖另存為零件將零件圖中的多個實體組合為一個實體的特征備注ENDSW - 用裝配圖的方式組合多個子零件然后轉換成為零件&#xff0c;可維護性好 概述 以前畫機械零件&#x…

PhotoshopImageGenerator:基于Photoshop的自動化圖像數據集生成工具

整體邏輯與設計思路 PhotoshopImageGenerator是一個基于Python和Win32COM的自動化工具,通過控制Adobe Photoshop CC 2019創建多樣化的圖像數據集。其核心設計思路是通過程序化調用Photoshop的圖像編輯能力,為基礎圖像添加隨機元素(圖片、文本、形狀)和效果,快速生成大量變…

macos自動安裝emsdk4.0.13腳本

1.替換文件 emsdk #!/bin/sh # Copyright 2019 The Emscripten Authors. All rights reserved. # Emscripten is available under two separate licenses, the MIT license and the # University of Illinois/NCSA Open Source License. Both these licenses can be # foun…

c++ Effective c++ 條款5

class MyClass { public:MyClass(int& ref, const int c_val) : myRef(ref), myConstVal(c_val) {}// 明確刪除拷貝操作MyClass(const MyClass&) delete;MyClass& operator(const MyClass&) delete;private:int& myRef; // 引用成員const int myCo…

如何使用 Xshell 8 連接到一臺 CentOS 7 電腦(服務器)

什么是 Xshell&#xff1f; Xshell 是一款功能強大的、適用于 Windows 平臺的終端模擬器。它支持 SSH (Secure Shell)、SFTP、TELNET、RLOGIN 和 SERIAL 等多種網絡協議&#xff0c;讓用戶能夠安全地連接和管理遠程服務器。 對于開發者、系統管理員和網絡工程師來說&#xff…

CSS scale函數詳解

目錄 基本語法 核心特性 常用場景示例 1. 等比例縮放&#xff08;X 軸和 Y 軸相同&#xff09; 2. 非等比例縮放&#xff08;X 軸和 Y 軸不同&#xff09; 3. 翻轉并縮放 4. 配合過渡動畫實現交互效果 5. 圖片懸停縮放效果 6. 縮放原點調整 與其他變換組合使用 注意…

【MATLAB代碼】基于EKF的二維組合導航仿真代碼,狀態量為位置、速度、航向角與IMU偏置,觀測量為XY軸的位置和速度,附完整代碼

8維狀態量(2維位置、2維速度、航向角、航向角偏置、2維加速度計偏置)+4維觀測量(2維位置、2維速度)。 訂閱專欄后,可直接查看源代碼,粘貼到MATLAB空腳本中即可直接運行、得到結果 文章目錄 運行結果 MATLAB源代碼 程序詳解 ?? 程序概述 狀態預測(狀態轉移函數) 狀態雅…

OpenCV 圖像輪廓檢測

目錄 一、輪廓檢測基礎概念 二、核心 API 詳解&#xff1a;cv2.findContours () 參數說明&#xff1a; 返回值說明&#xff1a; 三、輪廓檢測實戰步驟 1. 圖像預處理&#xff08;灰度化與二值化&#xff09; 2. 查找輪廓 3. 繪制輪廓 四、輪廓的常用屬性與操作 1. 輪…

【圖論】 Graph.jl 概覽

文章目錄安裝基礎使用基本操作全局圖的指標頂點性質邊性質讀寫圖按照 .lgz 格式存儲圖數據&#xff08;壓縮格式&#xff09;按照 .lg 格式存儲圖數據&#xff08;非壓縮格式&#xff09;圖的繪制TikzGraphs.jl Latex 論文風格GraphPlot.jl 通常與 Compose.jl 一起使用SGtSNEpi…

[java] 控制三個線程按順序交替輸出數字123123…

控制三個線程按順序交替輸出數字123123… synchronized&#xff08;配合專用鎖對象&#xff09; 通過共享鎖和 volatile 變量控制執行順序&#xff0c;每個線程按指定順序打印指定內容&#xff0c;確保輸出序列如 “123123…”。使用 synchronized 和 wait/notifyAll 實現線程間…