Docker:docker搭建redis一主多從集群(配置哨兵模式)


角色 實例IP 實例端口 宿主機IP 宿主機端口
master 172.19.0.2 6382 192.168.1.200 6382
slave01 172.19.0.3 6383 192.168.1.200 6383
slave02 172.19.0.4 6384 192.168.1.200 6384

1. 創建文件夾

這里我習慣在home文件夾下創建文件夾

#創建文件夾,方便之后生成配置文件
cd /home

mkdir redis

2. 編寫自動生成配置文件腳本

首先編寫配置文件 redis-cluster.tmpl

#進入redis文件夾內
cd redis

#創建配置文件
vi redis-cluster.tmpl

內容如下

# redis端口
port ${PORT}
# 關閉保護模式
protected-mode no
# 配置遠程訪問
bind 0.0.0.0
# 開啟集群(配置主從節點需要關閉集群模式)
cluster-enabled no
# 集群節點配置
cluster-config-file nodes.conf
# 超時
cluster-node-timeout 5000
# 集群節點IP host模式為宿主機IP
cluster-announce-ip 172.19.0.1
# 集群節點端口 6379 - 6384
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
#配置主節點IP
slaveof 172.19.0.2 6382
# 開啟 appendonly 備份模式
appendonly yes
# 每秒鍾備份
appendfsync everysec
# 對aof文件進行壓縮時,是否執行同步操作
no-appendfsync-on-rewrite no
# 當目前aof文件大小超過上一次重寫時的aof文件大小的100%時會再次進行重寫
auto-aof-rewrite-percentage 100
# 重寫前AOF文件的大小最小值 默認 64mb
auto-aof-rewrite-min-size 64mb
# 配置數據庫個數
databases 16

編寫哨兵模式配置文件 sentinel.conf (在redis的bin 目錄下有一個redis.sentinel文件,這個文件用於啟動哨兵的配置文件,哨兵的配置文件需要我們自己去創建)

#創建哨兵模式配置文件
vi sentinel.conf

內容如下

# 添加守護進程模式
daemonize yes

# 添加指明日志文件名
logfile "/usr/local/redis/sentinel_log.log"

# 修改啟動端口
port 26379

# 添加關閉保護模式
protected-mode no

# 修改sentinel monitor為master的ip端口,最后的數字2表示: 有兩個哨兵認證master掛掉,才會推選新的master
sentinel monitor mymaster 172.19.0.2 6382 2

sentinel auth-pass mymaster GaosiDev 

sentinel down-after-milliseconds mymaster 30000

sentinel parallel-syncs mymaster 1

sentinel failover-timeout mymaster 10000  

sentinel deny-scripts-reconfig yes

最后編寫自動生成腳本 redis-cluster-config.sh

#創建自動生成腳本
vi redis-cluster-config.sh

內容如下

#! /bin/bash
# 6382 6384是准備創建的三個redis的端口區間
for port in `seq 6382 6384`; do \ mkdir -p ./redis-cluster/${port}/conf \ && PORT=${port} envsubst < ./redis-cluster.tmpl > ./redis-cluster/${port}/conf/redis.conf \ && cp ./sentinel.conf ./redis-cluster/${port}/conf/sentinel.conf && mkdir -p ./redis-cluster/${port}/data; \ done

3. 運行腳本自動生成配置文件

#運行腳本
bash redis-cluster-config.sh

之后就會生成redis-cluster文件夾

4. 創建docker容器

首先創建網段

#創建網段
docker network create --driver bridge --subnet 172.19.0.1/24  redis_net

開始創建redis容器

docker run -d --network redis_net --ip 172.19.0.2 -p 6382:6382 -v /home/redis/redis-cluster/6382/conf/:/usr/local/etc/redis/ --name=redis1 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
docker run -d --network redis_net --ip 172.19.0.3 -p 6383:6383 -v /home/redis/redis-cluster/6383/conf/:/usr/local/etc/redis/ --name=redis2 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
docker run -d --network redis_net --ip 172.19.0.4 -p 6384:6384 -v /home/redis/redis-cluster/6384/conf/:/usr/local/etc/redis/ --name=redis3 redis:6.0.8 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

5. 啟動哨兵模式

#進入redis2容器
docker exec -it redis2 bash

#啟動哨兵模式
redis-server /usr/local/etc/redis/sentinel.conf --sentinel
#進入redis3容器
docker exec -it redis3 bash

#啟動哨兵模式
redis-server /usr/local/etc/redis/sentinel.conf --sentinel

至此搭建(一主多從(哨兵模式))redis完成。

測試時,可進入容器查看當前redis的master是否變化,

 

#登錄redis
redis-cli -h 172.19.0.3 -p 6383 -c

#查看主從關系
info replication

 

 

文章整合至:https://blog.csdn.net/qq_38900565/article/details/108335532https://blog.csdn.net/macro_g/article/details/82593996?utm_medium=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pic&dist_request_id=1332024.8086.16189865735716115&depth_1-utm_source=distribute.wap_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.wap_blog_relevant_pichttps://www.cnblogs.com/daleyzou/p/docker-redis-sentinel.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM