Docker安装Redis

Arthit 于 2023-12-11 发布

单机部署

下载配置文件

先到官方网站下载最新版配置文件redis.conf 官网截图
把配置文件的参数按以下说明进行修改,当然你也可以按自己的需求修改更多的参数

# 解除本地连接限制
bind 0.0.0.0

# 默认yes,如果设置为yes,则只允许在本机的回环连接,其他机器无法连接。
protected-mode no

# 默认no 为不守护进程模式,docker部署不需要改为yes,docker run -d本身就是后台启动,不然会冲突
daemonize no

# 设置密码
requirepass 123456

# 是否开启 aof 增量备份功能,默认是否
appendonly yes

# AOF文件的名称,这里使用默认值
appendfilename appendonly.aof

# aof 增量备份的策略,这里是每秒钟一次,将累积的写命令持久化到硬盘中
appendfsync everysec

# 配置日志目录()
# logfile /log/redis.log

# 是否压缩 rdb 备份文件,默认是压缩
# 如果 redis 承载的数据量非常大的话,建议不要压缩
# 因为压缩过程中需要耗费大量 cpu 和内存资源,磁盘相对而言比较廉价
rdbcompression yes

# rdb 备份的文件名
dbfilename dump.rdb

# Redis 备份文件存储目录,注意:该路径是 docker 容器内的路径
dir /data

创建挂载文件目录

#mkdir -p redis/conf && mkdir -p redis/data && mkdir -p redis/log
mkdir -p redis/conf && mkdir -p redis/data

把配置文件放到conf目录下

启动容器

把以下文本保存为docker-compose.yml文件,放到redis目录下

version: '3.3'
services:
    redis:
        ports:
            - '9379:6379'
        container_name: redis
        volumes:
            - './redis/conf:/etc/redis'
            - './redis/data:/data'
            # redis的日志默认显示到控制台,我给挂载到本地的log目录下感觉意义不大,所以注释掉了。
            # 如果需要挂载就取消配置文件注释
            # - './redis/log:/log'
        restart: always
        environment:
            - TZ=Asia/Shanghai
        command: redis-server /etc/redis/redis.conf
        image: redis:latest

使用 docker-compose 启动容器

cd redis
docker-compose up -d

# 连接redis
redis-cli -p 6379
# 输入密码
127.0.0.1:6379> auth 123456
OK
# 查看配置-数据目录
CONFIG GET dir
1) "dir"
2) "/data"
# 查看配置-日志目录
config get logfile
1) "logfile"
2) ""

主从模式

#取消成为任何服务器的从服务器
slaveof no one
#查看主从信息
info replication
# 详细查看这篇[文章](https://blog.csdn.net/CYK_byte/article/details/132191535)
# 用于禁用 Nagle 算法。 Nagle 算法用于优化小数据包的传输,通过将小数据包积累成较大的数据包再发送,以减少网络上的数据包数量,从而提高网络效率。然而,这会引入延迟,因为发送方需要等待数据积累到一定大小。yes的话会立即发送,适用于实时性的,no的话小数据包会被积累成较大数据包再发送。
repl-disable-tcp-nodelay no
使用 psync 命令完成主从数据同步

哨兵模式

info sentinel

集群模式

redis-cli -c -p 6379
cluster info
cluster nodes

集群扩容

我们新建两个 redis 实例,一个节点(192.168.31.213:6007),一个节点(192.168.31.213:6008)。让 6007 加入集群成为集群的 master 节点,让 6008 加入集群成为集群 6007 的 slave 节点。
进入集群任意的一个节点,例如:192.168.31.213:6001

# 加入集群
redis-cli --cluster add-node 192.168.31.213:6007
# 检查集群情况
redis-cli --cluster check 192.168.31.213:6001
# 重新分配槽
redis-cli --cluster reshard 192.168.31.213:6001
# 此命令输入后
#  - 输入要重新分配的槽数量,根据提示输入4096(16384 / 4)。
#  - 分盘给谁,输入6007的节点Id。多个用逗号分隔,或者直接按回车让 Redis 自动选择。
#  - 输入all分盘给所有槽位。
#  - 输入yes

让6008成为集群6007的slave节点,9fc2d278e80c7f45bc619e6582196d50959e559a为6007的节点Id
redis-cli --cluster add-node 192.168.31.213:6008 192.168.31.213:6007 --cluster-slave --cluster-master-id 9fc2d278e80c7f45bc619e6582196d50959e559a
再次检查集群情况
redis-cli --cluster check 192.168.31.213:6001

集群缩容

# 先删除从服务器
redis-cli --cluster del-node 192.168.31.213:6008 53f0a54255a7e9243d8c61fcac5abab4a94a62d5
# 检查集群情况
redis-cli --cluster check 192.168.31.213:6001
# 重新分配槽号。删除主库6007要先将6387的槽号清空,再重新分配槽号,槽号可以任意分配给其他任意主库,本例将清出来的槽号都给6001
redis-cli --cluster reshard 192.168.31.213:6001
# 此命令输入后
#  - 输入清空的槽数量,输入4096,因为6007有4096槽位。
#  - 分盘给谁,输入6001的节点Id。
#  - 输入6007的容器Id,6007槽位要清空。
#  - 输入done。
#  - 输入yes。

# 分配好后再次查看集群信息
redis-cli --cluster check 192.168.31.213:6001
# 删除主服务器
redis-cli --cluster del-node 192.168.31.213:6007 9fc2d278e80c7f45bc619e6582196d50959e559a

补充

  1. 默认 RDB 快照,AOF 日志追加。aof-use-rdb-preamble yes 混合持久