docker compose 搭建 redis 主从复制集

环境准备

  • 安装 docker
  • 安装 docker compose

创建目录和配置

  • 目录结构
  • master 主节点: redis.conf
bash 复制代码
# 主节点配置
# 绑定的主机地址
bind 0.0.0.0
# 允许外网访问
protected-mode no
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no
# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid
# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379
# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug (很多信息, 对开发/测试比较有用)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel verbose
# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile redis.log

################################ SNAPSHOTTING  #################################
# RDB存储配置
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   满足以下条件将会同步数据:
#   900秒(15分钟)内有1个更改
#   300秒(5分钟)内有10个更改
#   60秒内有10000个更改
#   Note: 可以把所有"save"行注释掉,这样就取消同步操作了
save 900 1
save 300 10
save 60 10000
# 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
# 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
# 指定本地数据库存放目录,文件名由上一个dbfilename配置项指定
dir /data



################################# REPLICATION #################################


################################## SECURITY ###################################
# 设置密码
requirepass masterpassword

############################## APPEND ONLY MODE ###############################
# 开启aof配置
appendonly yes
# 指定更新日志条件,共有3个可选值:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
# 指定更新日志文件名,默认为appendonly.aof
appendfilename "appendonly.aof"
  • slave1 从节点1 : redis.conf
bash 复制代码
# 从节点配置
# 绑定的主机地址
bind 0.0.0.0
# 允许外网访问
protected-mode no
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no
# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid
# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379
# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0
# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug (很多信息, 对开发/测试比较有用)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel verbose
# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile redis.log

################################ SNAPSHOTTING  #################################
# RDB存储配置
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   满足以下条件将会同步数据:
#   900秒(15分钟)内有1个更改
#   300秒(5分钟)内有10个更改
#   60秒内有10000个更改
#   Note: 可以把所有"save"行注释掉,这样就取消同步操作了
save 900 1
save 300 10
save 60 10000
# 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes
# 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb
# 指定本地数据库存放目录,文件名由上一个dbfilename配置项指定
dir /data


################################# REPLICATION #################################
# 设置当本机为slav服务时,设置master服务的ip地址及端口,在Redis启动时,它会自动从master进行数据同步
replicaof redis-master 6379
# 开启只读模式
replica-read-only yes
# 当master服务设置了密码保护时,slav服务连接master的密码
masterauth masterpassword

repl-diskless-load on-empty-db

################################## SECURITY ###################################
# 设置密码
requirepass slavepassword

############################## APPEND ONLY MODE ###############################
# 开启aof配置
appendonly yes
# 指定更新日志条件,共有3个可选值:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)
appendfsync everysec
# 指定更新日志文件名,默认为appendonly.aof
appendfilename "appendonly.aof"
  • slave2 从节点2: redis.conf
    和 slave1 从节点1 配置一致,复制一份即可

启动redis服务

bash 复制代码
docker-compose up -d

验证主从复制

  • 检查主节点信息
bash 复制代码
docker exec -it redis-master redis-cli -h 127.0.0.1 -p 6379 -a masterpassword info replication

执行上述命令,得到以下输出:role表示角色,connected_slaves表示副本数

bash 复制代码
# Replication
role:master
connected_slaves:2
  • 检查从节点1信息
bash 复制代码
docker exec -it redis-slave1 redis-cli -h 127.0.0.1 -p 6379 -a slavepassword info replication

执行上述命令,得到以下输出:role表示角色,master_link_status表示是否连接成功,up表示成功,down表示失败

bash 复制代码
# Replication
role:slave
master_host:redis-master
master_port:6379
master_link_status:up
  • 检查从节点2信息
bash 复制代码
docker exec -it redis-slave2 redis-cli -h 127.0.0.1 -p 6379 -a slavepassword info replication

执行上述命令,得到以下输出:role表示角色,master_link_status表示是否连接成功,up表示成功,down表示失败

bash 复制代码
# Replication
role:slave
master_host:redis-master
master_port:6379
master_link_status:up

数据持久化验证

  • 写入数据到主节点
bash 复制代码
docker exec -it redis-master redis-cli -h 127.0.0.1 -p 6379 -a masterpassword SET test_data "test_data"
  • 主节点读取数据查看是否设置成功
bash 复制代码
docker exec -it redis-master redis-cli -h 127.0.0.1 -p 6379 -a masterpassword GET test_data
  • 从节点1读取数据,查看是否同步
bash 复制代码
docker exec -it redis-slave1 redis-cli -h 127.0.0.1 -p 6379 -a slavepassword GET test_data
  • 从节点2读取数据,查看是否同步
bash 复制代码
docker exec -it redis-slave2 redis-cli -h 127.0.0.1 -p 6379 -a slavepassword GET test_data
相关推荐
流星白龙5 分钟前
【Redis】8.List列表
redis
NWU_白杨10 分钟前
三种常用的数据存储技术
数据库·redis·mysql·sqlite
hay_lee29 分钟前
Kubernetes StatefulSet:OrderedReady 极简指南
云原生·容器·kubernetes
晚风吹长发42 分钟前
Docker使用——Docker容器及相关命令
linux·运维·服务器·docker·容器·架构
ShiXZ2131 小时前
Docker Compose 安装与配置指南
运维·docker·容器
正儿八经的少年1 小时前
redis 的大 key 和热 key 详解
数据库·redis·缓存
BullSmall2 小时前
Anolis OS 8.10 Docker 部署 SonarQube 9.9 完整教程
运维·docker·容器
X-⃢_⃢-X2 小时前
十、Redis之布隆过滤器
数据库·redis·缓存
流星白龙3 小时前
【Redis】1.Redis特性
数据库·redis·缓存
java_logo6 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris