docker搭建redis主从复制

news2025/1/18 16:57:33

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

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

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

相关文章

集简云本周新增/更新:新增3大功能,集成19款应用,更新5款应用,新增近290个动作

本周更新概要 功能更新 ◉ 新增功能:语聚AI开放API功能 ◉ 新增功能:数据表表格公开分享功能 ◉ 新增功能:浏览器页面操作页面内容读取(增强版本) 应用新增 新增应用:赛捷CRM 新增应用:快跑者 新增应…

LeGO-Loam代码解析(一) 项目介绍、论文解读、配置安装

目录 1.项目介绍 2. 论文解读 LeGO-LOAM:轻量级且地面优化的可变地形激光里程计与建图 2.1 摘要 2.2 介绍 2.3 正文部分1 --- System Review 2.4 正文部分2 --- Segmatation(地面点角面点分离) 2.5 Feature Extraction 正文部分3 ---…

QT Quick之quick与C++混合编程

Qt quick能够生成非常绚丽界面,但有其局限性的,对于一些业务逻辑和复杂算法,比如低阶的网络编程如 QTcpSocket ,多线程,又如 XML 文档处理类库 QXmlStreamReader / QXmlStreamWriter 等等,在 QML 中要么不可…

【操作系统考点汇集】操作系统考点汇集

关于操作系统可能考察的知识点 操作系统基本原理 什么是操作系统? 操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和它软件方便的接口和环境,是计算机系统中最基…

【C语言学习】参数传递

调用函数 1.如果函数有参数,调用函数时必须传递给它数量、类型正确的的值。 2.可以传递给函数的值是表达式的结果,包括: 字面量 变量 函数的返回值 计算的结果 int a,b,c; a5; b6; cmax(10,12); cmax(a,b); cmax(c,23); cmax(max(23,45),a);…

opencv实战项目-停车位计数

手势识别系列文章目录 手势识别是一种人机交互技术,通过识别人的手势动作,从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪(定位手部关键点) 2.opencv实战项目 实现手势跟踪并返回位置信息&a…

前端基础(JavaScript语法)

前言:今天学习JavaScript的基本语法,包括变量、函数、对象、数组。 目录 JavaScript 变量 函数 对象 数组 JavaScript 变量 定义变量 判断语句 判断等于: 判断不等于:! if else语句 if(vavb){ console.log("…

Harmony OS教程学习笔记

基础知识 1.如何修改程序启动的第一个页面? 不想使用创建的默认的页面,这时需要修改启动页面,修改的地方在EntryAbility文件中的onWindowStageCreate方法中。 onWindowStageCreate(windowStage: window.WindowStage) {// Main window is cr…

解决无法访问 Github 问题

GitHub作为程序员访问最频繁的网站,程序员们经常需要访问 Github找开源项目、学习新框架、管理自己的个人开源项目等等。 github加速器 因为GitHub属于国外的网站,直接访问的话,速度非常慢,甚至访问不了, 今天给大家…

centos下使用jemalloc解决Mysql内存泄漏问题

参考: MySQL bug:https://bugs.mysql.com/bug.php?id83047&tdsourcetags_pcqq_aiomsg https://github.com/jemalloc/jemalloc/blob/dev/INSTALL.md (1)ptmalloc 是glibc的内存分配管理 (2)tcmalloc…

如何批量修改图片名为不同名称

如何批量修改图片名为不同名称?当今社会,因为人们都养成了随手拍照的习惯,所以拥有上千上万张照片的相册已经司空见惯不足为奇。然而,我们在保存这些照片时往往都会碰到一个大难题——电脑中的图片名称千奇百怪,让整个…

打开软件提示mfc100u.dll缺失是什么意思?要怎么处理?

当你打开某个软件或者运行游戏,系统提示mfc100u.dll丢失,此时这个软件或者游戏根本无法运行。其实,mfc100u.dll是动态库文件,它是VS2010编译的软件所产生的,如果电脑运行程序时提示缺少mfc100u.dll文件,程序…

由“美”出发 听艺术家林曦关于美育与智慧的探讨

不久前,林曦老师与我们的老朋友「十点读书」进行了一次线上直播,有关林曦老师十余年的书法教学,和传统美育的心得,以及因此诞生的新书《无用之美》。      这一次的直播,由“美”的主题出发,延伸出美育…

微服务参数透传实现

说明:在微服务架构中,用户身份经网关验证后,我们可以将用户信息,如ID加入到请求头上。后面的微服务中,可以设置一个拦截器,拦截请求,获取请求头上的用户ID,加入到ThreadLocal中。 最…

Spring【学习记录一】

Spring内容解释 早期的Spring仅指代Spring Framework,后来基于Spring Framework孵化出大量的项目,Spring的含义变成了指代Spring家族 Spring Framework是Spring家族所有成员的基础,想要学透Spring,就必须要掌握Spring Framework…

电脑提示concrt140.dll丢失或找不到怎么恢复

现在系统在安装的时候为了简化包体会将一些组件给删除了,这样会造成在运行某些程序的时候,出现组件丢失的提示。例如concrt140.dll丢失,如果不及时处理,会导致系统中不少程序无法正常使用,那么要如何处理这个问题呢&am…

SpringBoot案例-员工管理-删除员工

查看页面原型,明确需求 页面原型 有批量删除和删除单个数据 需求 查看接口文档 接口文档的链接如下: 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 删除单个数据,将要删除的员工信息的id传…

消息中间件主要作用

首先我们想一下,两个公司之间如果有互相调用接口的业务需求,如果没有引入中间件技术,是怎么实现的呢? 用户发起请求给系统A,系统A接到请求直接调用系统B,系统B返回结果后,系统A才能返回结果给用…

YOLOv5、YOLOv8改进:S2注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下S2-MLPv2.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 S2-MLPv2注意力机制 最近,出现了基于 MLP 的视觉主干。与 CNN 和视觉Transformer相比,基于 MLP 的视觉架构具有较少的归纳偏差,在图像识…

线代强化第四章

下面正式开始公式的证明: B改变了矩阵的秩,所以他是不满秩的。 就是说一个矩阵如果左边乘上一个列满秩的,它的秩不会改变 一个矩阵如果右边乘上一个行满秩的,它的秩不会改变 PROVE: 等于主对角线或副对角线上分块阵的秩的和 当两…