docker与docker-compose搭建redis1主2从3哨兵

news2025/1/11 18:33:22

docker安装redis

docker pull redis:latest

创建目录结构

用于挂载数据卷配置文件等

在这里插入图片描述

运行redis容器

主redis配置

下面这种方式挂载的配置文件不生效。

 docker run -d \
 --name master_redis_6379 \
  -p 6379:6379 \
   --restart unless-stopped \
   -v /mydata/master_redis/data:/data \
   -v /mydata/master_redis/conf/redis.conf:/etc/redis/redis.conf  \
   redis:latest 

即使我做了目录映射,docker容器中默认使用的redis.conf不是我映射的文件,需要指定配置文件才能生效,即在最后加上redis-server /etc/redis/redis.conf

 docker run -d \
 --name master_redis_6379 \
  -p 6379:6379 \
   --restart unless-stopped \
   -v /mydata/master_redis/data:/data \
   -v /mydata/master_redis/conf/redis.conf:/etc/redis/redis.conf  \
   redis:latest \
   redis-server /etc/redis/redis.conf
-v /mydata/redis/redis.conf:/etc/redis/redis.conf
将主机上的/mydata/redis/redis.conf路径映射到容器内的/etc/redis/redis.conf路径
-v /mydata/redis/data:/data
将主机上的/mydata/redis/data路径映射到容器内的/data路径。
--name master_redis-6379
给这个Docker容器起名为master_redis-6379。

master的redis.conf

bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
#日志文件路径
#logfile "/mydata/master_redis/log/6379.log"
databases 16
always-show-logo yes
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump6379.rdb
dir ./
masterauth "admin"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
#slaveof ip1 6379
#slave-announce-ip ip1
#slave-announce-port 6379

#配置密码
requirepass "admin"

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
#开启aof
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

这是一段Redis服务器的配置文件内容。下面是对这段配置的简单解析:

bind 0.0.0.0: 这意味着Redis将接受来自任何IP地址的连接。
protected-mode no: 这表示Redis将只在非安全模式下运行,也就是说,任何能够连接到Redis的客户端都可以执行命令。
port 6379: 这是Redis服务器监听的端口,通常Redis使用的是6379端口。
tcp-backlog 511: 这是TCP连接的排队长度。
timeout 0: 这表示Redis服务器等待客户端响应的时间,如果超过这个时间,服务器将关闭连接。设置为0表示没有超时限制。
tcp-keepalive 300: 这表示在客户端断开连接后,服务器将等待300秒再关闭TCP连接。
supervised no: 这表示Redis服务器的运行状态是否受操作系统监督。
loglevel notice: 这是Redis服务器日志的级别,这里设置为"notice",表示只记录重要的事件信息。
databases 16: 这表示Redis服务器默认创建16个数据库。
always-show-logo yes: 这个选项可能是在Redis启动时显示一些版权信息或版本信息。
save "": 这表示不进行任何数据持久化操作。
stop-writes-on-bgsave-error yes: 如果在后台保存(bgsave)数据时出现错误,是否停止写操作。
rdbcompression yes: 是否使用压缩算法来保存RDB文件。
rdbchecksum yes: 是否对RDB文件进行校验。
dbfilename dump.rdb: Redis保存数据的默认文件名是dump.rdb。
dir ./: 这表示Redis服务器将在当前目录下存储数据。
masterauth "admin": 这是Redis主服务器在进行复制操作时需要认证的密码。
slave-serve-stale-data yes: 从服务器是否提供旧数据,即使该数据可能已经过时。
slave-read-only yes: 从服务器是否只读。
repl-diskless-sync no: 是否使用磁盘来进行同步。
repl-diskless-sync-delay 5: 在使用磁盘同步数据时,是否延迟5秒再开始同步。
repl-disable-tcp-nodelay no: 是否禁用TCP_NODELAY选项。
slave-priority 100: 从服务器的优先级,默认值为100。
requirepass "admin": 客户端连接Redis时需要提供的密码。
lazyfree-lazy-eviction no: 是否立即释放被缓存的数据,而不是等待其自然释放。
lazyfree-lazy-expire no: 是否立即过期而不是等待其自然过期。
lazyfree-lazy-server-del no: 是否立即删除被缓存的数据而不是等待其自然删除。
slave-lazy-flush no: 从服务器是否立即刷新数据而不是等待其自然刷新。
appendonly yes: 是否开启AOF持久化功能。
appendfilename "appendonly.aof": AOF持久化文件的名称。
appendfsync everysec: AOF持久化文件同步的频率。
no-appendfsync-on-rewrite no: 在AOF重写期间是否同步数据到磁盘。
auto-aof-rewrite-percentage 100: 当AOF文件大小与最后一次重写后的差值超过这个百分比时,触发自动AOF重写。
auto-aof-rewrite-min-size 64mb: AOF重写的最小大小为64MB。
aof-load-truncated yes: 当AOF文件出现截断错误时,是否继续加载数据。
aof-use-rdb-preamble no: 是否在AOF文件的开头写入RDB格式的数据。
lua-time-limit 5000: Lua脚本执行的最大时间限制,单位为毫秒。
slowlog-log-slower-than 10000: 如果某个命令的执行时间超过这个值,将会被记录到慢日志中。
slowlog-max-len 128: 慢日志的最大长度,超过这个长度后将会覆盖最早的慢日志记录。
latency-monitor-threshold 0: 这个选项表示在哪个延迟阈值下触发警报,设置为0表示不触发警报。
notify-keyspace-events "": 这个选项表示当某个事件发生时触发哪些回调函数
hash-max-ziplist-entries 512: 对于Redis的哈希数据类型,如果一个哈希表中有超过512个不同的键值对,Redis会使用一种叫做"ziplist"的压缩列表来存储这个哈希表。这个选项可以增加或减少这个阈值。
hash-max-ziplist-value 64: 对于哈希表中的值,如果单个值的长度超过64字节,Redis会使用ziplist来存储这个哈希表。这个选项可以增加或减少这个阈值。
list-max-ziplist-size -2: 对于Redis的列表数据类型,如果一个列表的元素数量在-2000到2000之间,并且所有元素的长度都在64字节之内,Redis会使用ziplist来存储这个列表。
list-compress-depth 0: 这个选项决定了在列表中删除或插入元素时,Redis将尝试压缩列表的深度。设置为0表示不进行压缩。
set-max-intset-entries 512: 如果一个集合的所有元素都可以用32位整数表示,Redis会使用一种叫做"intset"的数据结构来存储这个集合。这个选项可以增加或减少这个阈值。
zset-max-ziplist-entries 128: 对于Redis的有序集合,如果一个成员在集合中出现的次数超过128次,Redis会使用ziplist来存储这个有序集合。
zset-max-ziplist-value 64: 对于有序集合中的成员的值,如果单个值的长度超过64字节,Redis会使用ziplist来存储这个有序集合。
hll-sparse-max-bytes 3000: HyperLogLog是一种用于估算元素数量的数据结构,这个选项定义了在使用稀疏表示法时,HyperLogLog的最大字节数。
activerehashing yes: 这个选项启用了"活跃的重新哈希"机制,它可以在后台进行哈希表的重新哈希,以优化哈希表的查询性能。
client-output-buffer-limit normal 0 0 0: 这个选项定义了正常客户端的输出缓冲限制。所有的限制都被设置为0,表示没有限制。
client-output-buffer-limit slave 256mb 64mb 60: 这个选项定义了从服务器的输出缓冲限制。从服务器最多可以使用256MB的输出缓冲区,如果超过64MB,从服务器将在60秒内关闭连接。
client-output-buffer-limit pubsub 32mb 8mb 60: 这个选项定义了发布/订阅客户端的输出缓冲限制。发布/订阅客户端最多可以使用32MB的输出缓冲区,如果超过8MB,发布/订阅客户端将在60秒内关闭连接。
hz 10: 这个选项定义了Redis服务器每秒执行的轮询(poll)操作的次数。轮询操作的次数越高,Redis的性能就越好,但是操作系统可能会因为频繁的上下文切换而受到影响。
aof-rewrite-incremental-fsync yes: 这个选项定义了在AOF持久化过程中是否进行增量式同步。设置为yes表示进行增量式同步。

主redis配置文件中,主要参数如下

bind 0.0.0.0: 这意味着Redis将接受来自任何IP地址的连接。

protected-mode no: 这表示Redis将只在非安全模式下运行,也就是说,任何能够连接到Redis的客户端都可以执行命令。

port 6379: 这是Redis服务器监听的端口,通常Redis使用的是6379端口。

requirepass "admin": 客户端连接Redis时需要提供的密码。

进入容器并进入redis命令行

 docker exec -it master_redis_6379 redis-cli

如果出现下面的问题,是需要登录

NOAUTH Authentication required.

解决方法

auth 密码

查看对应redis容器日志

docker logs master_redis_6379 

从redis配置

 docker run -d \
 --name slave_redis_6378 \
  -p 6378:6379 \
   --restart unless-stopped \
   -v /mydata/slave_redis/data:/data \
   -v /mydata/slave_redis/conf/redis.conf:/etc/redis/redis.conf  \
   redis:latest \
   redis-server /etc/redis/redis.conf

从redis主要配置文件

bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
supervised no
loglevel notice
databases 16
always-show-logo yes
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
#replicaof 47.120.0.38 6379
masterauth "admin"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass "admin"
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

#slave-announce-ip ip2
#slave-announce-port 6379
slaveof 47.120.0.38 6379

主要参数

bind 0.0.0.0
protected-mode no
port 6379
slaveof 47.120.0.38 6379  //设置主redis的地址以及端口号
masterauth "admin"     //用于登录到主redis的密码

查看主从节点的复制状态

xxxx.xxx:6379> info replication

在这里插入图片描述
在这里插入图片描述

docker 搭建redis主从

version: '3.1'
services:
  master:
    image: redis:latest
    container_name: master_redis_6379
    restart: always
    ports:
      - 6379:6379
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./master_redis/data:/data
      - ./master_redis/conf/redis.conf:/etc/redis/redis.conf

  slave1:
    image: redis:latest
    container_name: slave_redis_6377
    restart: always
    ports:
      - 6377:6377
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./slave_redis/data_6377:/data
      - ./slave_redis/conf_6377/redis.conf:/etc/redis/redis.conf

  slave2:
    image: redis:latest
    container_name: slave_redis_6378
    ports:
      - 6378:6378
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./slave_redis/data_6378:/data
      - ./slave_redis/conf_6378/redis.conf:/etc/redis/redis.conf

搭建哨兵集群

确保自己安装了docker-compose
安装教程

https://editor.csdn.net/md/?articleId=131579797

在这里插入图片描述

新建如图所示目录
在这里插入图片描述

sentinel.conf内容

#  bind 0.0.0.0
# 禁止保护模式
protected-mode no

port 26379

就是下面这条命令,浪费了我3个小时,
# daemonize yes

 dir /tmp

#  tcp-backlog 511

  masterauth "admin"
#  requirepass admin

# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.118.202代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
sentinel monitor mymaster 47.120.0.38 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster admin

# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
sentinel down-after-milliseconds mymaster 5000
# 指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长
 sentinel parallel-syncs mymaster 1
# 故障转移的超时时间
sentinel failover-timeout mymaster 5000

编写docker-compose.yml文件

version: "3.0"
services:
  #sentinel1
  sentinel_redis_1:
    image: redis:latest
    restart: always
    container_name: sentinel_redis_1
    ports:
      - 26379:26379
    environment:
      - TZ=Asia/Shanghai
    #执行的命令
    command: redis-sentinel  /etc/redis/sentinel.conf
    volumes:
      - ./conf/sentinel.conf:/etc/redis/sentinel.conf
      - ./data/sentinel_redis_1:/data
  #sentinel2
  sentinel_redis_2:
    image: redis:latest
    restart: always
    container_name: sentinel_redis_2
    ports:
      - 26380:26379
    environment:
      - TZ=Asia/Shanghai
    #执行的命令
    command: redis-sentinel  /etc/redis/sentinel.conf
    volumes:
      - ./conf/sentinel.conf:/etc/redis/sentinel.conf
      - ./data/sentinel_redis_2:/data
  #sentinel3
  sentinel_redis_3:
    image: redis:latest
    restart: always
    container_name: sentinel_redis_3
    ports:
      - 26381:26379
    environment:
      - TZ=Asia/Shanghai
    command: redis-sentinel  /etc/redis/sentinel.conf
    volumes:
      - ./conf/sentinel.conf:/etc/redis/sentinel.conf
      - ./data/sentinel_redis_3:/data
networks:
  default:
    external: true
    name: redis_default

在存在该yml的文件下执行

docker-compose up -d

启动成功后可以产看容器日志

docker logs 容器名

遇到的问题

1.docker-compose编排的容器一直在显示重启
打印日志也为空

原因

当daemonize 设置了yes,表示redis在后台运行,当执行docker-compose执行启动redis进程时,docker发现自己无事可做,容器自动结束,所以导致redis启动失败。

解决方法

注释掉

遇到问题

2.哨兵节点监听不到master,即使master下线后,哨兵也不起作用

原因

redis在设置端口是一定要修改容器内的端口,不要都是6379,防止哨兵监听不到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA中导入多module的Maven项目无法识别module的解决办法

首先举个栗子 这是正常的多module工程&#xff08;spring cloud项目&#xff09; 正常工程.png 这是导入出现问题的多module工程 导入出现问题的工程.png 原因&#xff1a; 出现该问题&#xff0c;是由于打开工程的时候IDEA只编译了最外层的pom.xml文件&#xff0c;而内部的…

在线成绩查询

在如今快节奏的社会中&#xff0c;家长们越来越重视孩子的学习情况。为了满足家长们对孩子学习情况的关注&#xff0c;老师们需要一个方便、快速、及时的学生成绩在线查询系统。 今天&#xff0c;我将向大家推荐一个教师必备的工具——易查分&#xff01;相比传统的自行开发的成…

前端下载文件方式(Blob)

以下以下载图标svg文件为例&#xff0c;实现点击按钮下载文件&#xff0c;其中icon结构如下&#xff1a; const DownloadSvg (props) > {function download(downfile) {const tmpLink document.createElement("a");const objectUrl URL.createObjectURL(downfi…

恒驰喜讯 | 荣获2023超聚变合作伙伴大会“聚心同力销售支撑奖”

“创价值、同信念、共成长”&#xff0c;8月18日&#xff0c;2023超聚变合作伙伴大会在北京举行。来自全国各地超过1500家行业、商业、服务生态伙伴&#xff0c;共同探讨算力产业发展。聚菁英&#xff0c;共赢算力未来。作为超聚变的核心合作伙伴&#xff0c;上海恒驰信息系统有…

《Go 语言第一课》课程学习笔记(十)

复合数据类型 同构复合类型&#xff1a;从定长数组到变长切片 由多个同构类型&#xff08;相同类型&#xff09;或异构类型&#xff08;不同类型&#xff09;的元素的值组合而成&#xff0c;这类数据类型在 Go 语言中被称为复合类型。 数组有哪些基本特性&#xff1f; Go 语…

SOA通信中间件常用的通信协议

摘要&#xff1a; SOA&#xff08;面向服务的架构&#xff09;的软件设计原则之一是模块化。 前言 SOA&#xff08;面向服务的架构&#xff09;的软件设计原则之一是模块化。模块化可以提高软件系统的可维护性和代码重用性&#xff0c;并且能够隔离故障。举例来说&#xff0c;…

【算法随记】在计算过程中模的情况

https://leetcode.cn/problems/power-of-heroes/ 计算过程中&#xff0c;可以放心模的情况&#xff1a; 加减乘 先模再加再模和直接加再模一样 a m o d m b m o d m ≡ a b ( m o d m ) a\mod mb\mod m ≡ ab \ (\mod m) amodmbmodm≡ab (modm) 先模再减再模和直接减再模…

linux安装 MySQL8 并配置开机自启动

目录 1.下载 mysql 安装包 2.上传并解压 mysql 3.修改 mysql 文件夹名 4.创建mysql 用户和用户组 5.数据目录 &#xff08;1&#xff09;创建目录 &#xff08;2&#xff09;赋予权限 6.初始化mysql &#xff08;1&#xff09;配置参数 &#xff08;2&#xff09;配置环…

python爬虫实战(3)--爬取某乎热搜

1. 分析爬取地址 打开某乎首页&#xff0c;点击热榜 这个就是我们需要爬取的地址&#xff0c;取到地址某乎/api/v3/feed/topstory/hot-lists/total?limit50&desktoptrue 定义好请求头&#xff0c;从Accept往下的请求头全部复制&#xff0c;转换成json headers {Accep…

关于2023年8月19日PMI认证考试准考信下载及考场规定等有关事项

各位考生&#xff1a; 为保证参加2023年8月19日PMI项目管理资格认证考试的每位考生都能顺利进入考场参加考试&#xff0c;请完整阅读本通知内容。 一、关于准考信下载 为确保您顺利进入考场参加8月份考试&#xff0c;请及时登录本网站个人系统下载并打印准考信&#xff0c;准考…

Git+Gitee使用分享

GitGitee快速入门 创建仓库 ​ ​ ​ 初始化本地仓库 验证本地git是否安装好 打开cmd窗口&#xff0c;输入git ​ 这样就OK。 Git 全局设置:(只需要设置一次) 这台电脑如果是第一次使用git&#xff0c;就需要这样初始化一下&#xff0c;这样才知道是谁提交到仓库了。 git confi…

威班8月份PMP模拟考试实录(附大D老师考前寄语)

威班8月份模拟考试于2023年8月12日在深圳市福田区兴华大厦成功举办&#xff0c;这次考试依旧是通过线上线下同步的方式&#xff0c;在深圳周边的学员直接到达现场做卷考试&#xff0c;全国各地不能到达现场的其他学员已提前收到考试所需要的文件&#xff0c;与现场学员同时参加…

Python豆瓣爬虫(最简洁的豆瓣250爬虫,随机选择电影)

案例背景 电影才是世界艺术&#xff0c;所以我一直想看完豆瓣250&#xff0c;那么就重新拾起我的爬虫知识。 以前刚学爬虫那啥也不会&#xff0c;python语法都没弄清楚&#xff0c;现在不一样了&#xff0c;能用最为简洁的代码写出爬虫250的代码。 代码实现 导入包&#xff…

全方位详解新型轴向磁通电机技术及其应用

售YASA轴向磁通电机 需要请联&#xff1a;shbinzer 拆车邦 01什么是轴向磁通电机 轴向磁通电机&#xff08;也称为“盘式电机”&#xff09;&#xff0c;其磁通路径与普通径向电机不同&#xff0c;气隙是平面型的&#xff0c;气隙磁场方向与电机轴线方向平行[1-2]。轴向磁通…

CSGO游戏搬砖操作细节和技巧!

最近整理一份steam搬砖的项目操作细节和详细要求 一、国外Steam游戏装备汇率差项目&#xff1a;这个项目的基本原理是 购买国外Steam游戏平台上的装备&#xff0c;再在国内网易Buff平台上或国际站csgo饰品平台进行售卖。从充值汇率和两个平台的装备价格差中获得利润。 二、需要…

怎么画思维导图?教你几个绘制小妙招

怎么画思维导图&#xff1f;思维导图是一种非常有效的学习和思考工具。它可以帮助人们更好地组织和表达想法&#xff0c;从而更加清晰地思考问题。但是&#xff0c;很多人并不知道如何画思维导图。下面这篇文章&#xff0c;就给大家介绍一些绘制思维导图的小技巧。 今天要给大家…

深度学习|CNN卷积神经网络

CNN卷积神经网络 解决的问题人类的视觉原理原理卷积层——提取特征池化层——数据降维全连接层——输出结果 应用图像处理自然语言处理 解决的问题 在CNN没有出现前&#xff0c;图像对人工智能来说非常难处理。 主要原因&#xff1a; 图像要处理的数据量太大了。图像由像素组…

UITableView自定义TableHeader和TableFooter

UITableView自定义TableHeader和TableFooter 我猜你希望的效果是这样的 我猜你希望的效果是这样的 自定义页眉视图 让我们创建一个文件名 UITableViewHeaderFooterView 的 CustomerHeaderView 子类。 现在让我们创建视图的 Xib 文件并将其命名为 CustomHeaderView。 更改高度标…

STM32CubeIDE(SPI读写Flash)

参考&#xff1a;①正点原子MINI教程②STM32F103配合STM32CubeMX实现SPI读写flash_stm32f103 cube spi_zerfew的博客-CSDN博客 目录 一、理论知识 1、SPI特征 2、SPI框图 3、SPI的工作模式 4、W25Q64 4.1 NOR FLASH 的特性 4.2 W25Q64芯片引脚图 4.3 NOR FLASH 工作时序…