1. 构建redis镜像
FROM redis:7.0.15-alpine3.20
# install tools
RUN apk add curl --no-cache &&\
apk add bash --no-cache
# COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf"]
docker build -t redis:v7.0.15-1.1 . -f Dockerfile
2. 配置redis1主3从
redis.conf配置模板
# Redis 配置文件示例
################################## INCLUDES ###################################
# 如果你的 Redis 实例使用 include 配置来引入其他文件,请确保这些文件存在
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES ####################################
# 如果你在编译时加载了模块,请在这里引入它们
################################## NETWORK ####################################
# 绑定的 IP 地址
# bind 127.0.0.1
bind 0.0.0.0
# 端口号
port 6379
# TCP-backlog
tcp-backlog 511
# 网络超时时间(秒)
timeout 0
# 日志级别
loglevel notice
# 通信协议(tcp 或者 unix)
# 默认值为 tcp
# unixsocket /tmp/redis.sock
# unixsocketperm 700
################################# GENERAL #####################################
# 密码认证
# requirepass foobared
# 服务器标识(用于统计)
# servername redis_server_1
# 守护进程模式
daemonize no
# 数据目录
# dir /var/lib/redis
dir /data
# RDB 文件名
dbfilename dump.rdb
# 持久化策略
save 900 1
save 300 10
save 60 10000
# 是否开启 AOF
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# AOF 同步策略
appendfsync everysec
# AOF 自动重写缩减
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 是否开启集群模式
cluster-enabled no
# 慢查询日志阈值(单位微秒)
slowlog-log-slower-than 10000
# 客户端输出缓冲区长度
client-output-buffer-limit normal 0 0 0
# 设置最大客户端连接数
maxclients 10000
# 设置允许的最大内存使用量
maxmemory 4gb
# 设置内存使用达到最大时的处理策略
maxmemory-policy volatile-lru
# 设置是否开启了压缩
rdbcompression yes
# 启用 AOF 持久化
appendonly yes
# 配置 AOF 文件名(可选)
appendfilename "appendonly.aof"
# 设置 AOF 同步策略,确保数据安全
# always: 每次写操作都同步
# everysec: 每秒同步一次(推荐)
# no: 不进行同步
appendfsync everysec
# 启用 AOF 重写机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 启用混合持久化
aof-use-rdb-preamble yes
# RDB 持久化配置
# 定期保存数据到 RDB 文件中
# 格式:save <seconds> <changes>
# 示例:每 900 秒(15 分钟)至少有 1 次修改
# 每 300 秒(5 分钟)至少有 10 次修改
# 每 60 秒(1 分钟)至少有 10000 次修改
save 900 1
save 300 10
save 60 10000
# RDB 文件存储路径
dir ./
redis6379.conf
# 端口号
port 6379
# 其他配置都一样,拷贝即可
redis6380.conf
# 端口号
port 6380
# 其他配置都一样,拷贝即可
redis6381.conf
# 端口号
port 6381
# 其他配置都一样,拷贝即可
redis6382.conf
# 端口号
port 6382
# 其他配置都一样,拷贝即可
3. 配置3节点redis哨兵
redissentinel.conf配置模板
# Redis 配置文件示例
################################## INCLUDES ###################################
# 如果你的 Redis 实例使用 include 配置来引入其他文件,请确保这些文件存在
# include /path/to/local.conf
# include /path/to/other.conf
################################## MODULES ####################################
# 如果你在编译时加载了模块,请在这里引入它们
################################## NETWORK ####################################
# 绑定的 IP 地址
# bind 127.0.0.1
bind 0.0.0.0
# 端口号
port 26379
# sentinel 哨兵配置
sentinel monitor mymaster 10.0.4.12 6379 2
sentinel down-after-milliseconds mymaster 30000
# TCP-backlog
tcp-backlog 511
# 网络超时时间(秒)
timeout 0
# 日志级别
loglevel notice
# 通信协议(tcp 或者 unix)
# 默认值为 tcp
# unixsocket /tmp/redis.sock
# unixsocketperm 700
################################# GENERAL #####################################
# 密码认证
# requirepass foobared
# 服务器标识(用于统计)
# servername redis_server_1
# 守护进程模式
daemonize no
# 数据目录
# dir /var/lib/redis
dir /data
# RDB 文件名
dbfilename dump.rdb
# 持久化策略
save 900 1
save 300 10
save 60 10000
# 是否开启 AOF
appendonly yes
# AOF 文件名
appendfilename "appendonly.aof"
# AOF 同步策略
appendfsync everysec
# AOF 自动重写缩减
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 是否开启集群模式
cluster-enabled no
# 慢查询日志阈值(单位微秒)
slowlog-log-slower-than 10000
# 客户端输出缓冲区长度
client-output-buffer-limit normal 0 0 0
# 设置最大客户端连接数
maxclients 10000
# 设置允许的最大内存使用量
maxmemory 4gb
# 设置内存使用达到最大时的处理策略
maxmemory-policy volatile-lru
# 设置是否开启了压缩
rdbcompression yes
# 启用 AOF 持久化
appendonly yes
# 配置 AOF 文件名(可选)
appendfilename "appendonly.aof"
# 设置 AOF 同步策略,确保数据安全
# always: 每次写操作都同步
# everysec: 每秒同步一次(推荐)
# no: 不进行同步
appendfsync everysec
# 启用 AOF 重写机制
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 启用混合持久化
aof-use-rdb-preamble yes
# RDB 持久化配置
# 定期保存数据到 RDB 文件中
# 格式:save <seconds> <changes>
# 示例:每 900 秒(15 分钟)至少有 1 次修改
# 每 300 秒(5 分钟)至少有 10 次修改
# 每 60 秒(1 分钟)至少有 10000 次修改
save 900 1
save 300 10
save 60 10000
# RDB 文件存储路径
dir ./
redis26379.conf
# 端口号
port 26379
# sentinel
sentinel monitor mymaster 10.0.4.12 6379 2
sentinel down-after-milliseconds mymaster 30000
# 其他配置不需修改
redis26380.conf
# 端口号
port 26380
# sentinel
sentinel monitor mymaster 10.0.4.12 6379 2
sentinel down-after-milliseconds mymaster 30000
# 其他配置不需修改
redis26381.conf
# 端口号
port 26381
# sentinel
sentinel monitor mymaster 10.0.4.12 6379 2
sentinel down-after-milliseconds mymaster 30000
# 其他配置不需修改
4. 启动集群
# 删除已有镜像
docker rm -f ` docker ps -a|grep redis |awk '{print $1}'`
docker run --name redis6379 -p 6379:6379 -v /root/lyl/redis/redis-operator/redis6379.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-server /usr/local/etc/redis/redis.conf
# sleep
sleep 10
docker run --name redis6380 -p 6380:6380 -v /root/lyl/redis/redis-operator/redis6380.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-server /usr/local/etc/redis/redis.conf
docker run --name redis6381 -p 6381:6381 -v /root/lyl/redis/redis-operator/redis6381.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-server /usr/local/etc/redis/redis.conf
docker run --name redis6382 -p 6382:6382 -v /root/lyl/redis/redis-operator/redis6382.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-server /usr/local/etc/redis/redis.conf
docker run --name redis26379 -p 26379:26379 -v /root/lyl/redis/redis-operator/redis26379.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-sentinel /usr/local/etc/redis/redis.conf
docker run --name redis26380 -p 26380:26380 -v /root/lyl/redis/redis-operator/redis26380.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-sentinel /usr/local/etc/redis/redis.conf
docker run --name redis26381 -p 26381:26381 -v /root/lyl/redis/redis-operator/redis26381.conf:/usr/local/etc/redis/redis.conf -d redis:v7.0.15-1.1 redis-sentinel /usr/local/etc/redis/redis.conf
5. 连接哨兵节点,配置到主节点的连接
# 进入6380容器,配置主节点
redis-cli -p 6380
slaveof masterip masterport
6381,6382,6383节点配置方式同。
6. 查看集群状态
进到master(6380)容器,连接redis,使用info replication命令查看集群状态
进入哨兵节点,查看集群信息: