前言
docker compose 安装redis 主要用于测试和学习 版本是redis 6.2.13 redis下载地址
download.redis.io/releases/后面用到的redis.conf
和sentinel.conf
配置都是通过官方默认文件来修改的
安装单机
名称 | ip | 端口 |
---|---|---|
redis | 172.20.192.1 | 6379 |
docker-compose.yml 配置
version: '3'
services:
redis:
image: redis:6.2.13
ports:
- "6379:6379"
environment:
- TZ=Asia/Shanghai # 设置时区
container_name: redis-stand
volumes:
- ./data:/data # 数据挂在 宿主机:容器
- ./conf/redis.conf:/etc/redis/redis-stand.conf #宿主机:容器
command: redis-server /etc/redis/redis-stand.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis.conf 配置
Redis 的配置文件 redis.conf
是一个非常详细的文本文件,包含了许多用于调整 Redis 实例行为的参数。下面是一些重要的配置项的详细介绍,以帮助你理解和配置 Redis:
-
网络设置:
bind
: 指定 Redis 仅接受来自于这些 IP 地址的连接请求。通常用于控制访问权限。protected-mode
: 当没有密码设置,且bind
配置为空时,保护模式会阻止不安全的访问。port
: 设置 Redis 服务器监听的端口号,默认为 6379。tcp-backlog
: 设置 TCP 监听端口的 backlog(未完成三次握手队列的大小),影响着客户端等待连接被接受的数量。timeout
: 设置客户端空闲多久后断开连接。0 表示禁用超时。
-
通用配置:
daemonize
: 指定 Redis 是否以守护进程模式运行。pidfile
: 守护进程模式下,Redis 的 PID 文件路径。loglevel
: 日志的详细程度,可以是debug
,verbose
,notice
,warning
。logfile
: 日志文件的路径。空字符串表示输出到标准输出。
-
安全性:
requirepass
: 设置客户端连接到 Redis 服务器时需要提供的密码。rename-command
: 重命名命令,提高安全性,防止有些危险命令被误用。
-
持久化:
save
: 设置在多长时间内,如果有多少次更新操作,就将数据同步到磁盘。可以设置多个条件。appendonly
: 是否开启 AOF 持久化模式。appendfilename
: AOF 文件的名称。appendfsync
: AOF 文件更新到磁盘的频率。
-
内存管理:
maxmemory
: Redis 最大可用内存量,超过这个内存会触发数据淘汰策略。maxmemory-policy
: 内存达到限制时的数据淘汰策略。maxmemory-samples
: 淘汰过程中样本的大小。
-
数据淘汰策略:
volatile-lru
: 只对设置了过期时间的键进行 LRU(最近最少使用)淘汰。allkeys-lru
: 对所有键进行 LRU 淘汰。volatile-random
: 随机淘汰设置了过期时间的键。allkeys-random
: 随机淘汰所有键。volatile-ttl
: 淘汰即将过期的键。noeviction
: 禁止淘汰数据。
-
复制:
slaveof
: 设置该 Redis 服务器为其他服务器的从属服务器(复制)。masterauth
: 如果主服务器设置了密码,从服务器连接主服务器时的密码。slave-serve-stale-data
: 当与主服务器失去连接时,是否继续提供服务。
-
集群:
cluster-enabled
: 是否启用 Redis 集群模式。cluster-config-file
: 集群配置文件的名称。cluster-node-timeout
: 集群节点超时时间。
-
Lua 脚本:
lua-time-limit
: Lua 脚本最长执行时间。
-
慢查询日志:
slowlog-log-slower-than
: 记录慢查询的阈值。slowlog-max-len
: 慢查询日志的最大长度。
这只是 redis.conf
中的一小部分配置项。实际上,该文件包含了上百个配置项,每个配置项都有详细的注释说明。你应该根据自己的使用场景来调整这些配置。在修改配置之前,建议仔细阅读每个配置项的说明,以确保理解其作用和潜在影响。
修改项
默认配置修改两个参数
bind 127.0.0.1
注释,- 修改
protected-mode no
允许远程连接
测试
连接工具使用 redis Desktop Manager
RedisDesktopManager下载 我用的是 1.6.0 最新版是1.6.6 我windows11 无法打开 所以降级可以使用的
还有一个官方的工具官网redis 连接工具下载 也不错推荐使用
端口是6379
可以正常链接
安装 sentinel 1主2从3哨兵集群
节点
1台 master 2台salvel 3台 sentinel集群
名称 | ip | 端口 |
---|---|---|
master | 172.20.192.1 | 6379 |
slavel1 | 172.20.192.1 | 6380 |
slavel2 | 172.20.192.1 | 6381 |
sentinel1 | 172.20.192.1 | 26379 |
sentinel2 | 172.20.192.1 | 26380 |
sentinel3 | 172.20.192.1 | 26381 |
docker-compose配置
version: '3'
services:
master:
image: redis:6.2.13
container_name: redis-master
ports:
- "6379:6379"
volumes:
- ./master/conf/redis.conf:/usr/local/etc/redis/redis-master.conf
command: redis-server /usr/local/etc/redis/redis-master.conf # 启动 Redis 时使用自定义配置文件
slave1:
image: redis:6.2.13
container_name: redis-slave-1
ports:
- "6380:6379"
volumes:
- ./slave1/conf/redis.conf:/usr/local/etc/redis/redis-slave1.conf
command: redis-server /usr/local/etc/redis/redis-slave1.conf --slaveof 172.20.192.1 6379
depends_on:
- master
slave2:
image: redis:6.2.13
container_name: redis-slave-2
ports:
- "6381:6379"
volumes:
- ./slave1/conf/redis.conf:/usr/local/etc/redis/redis-slave2.conf
command: redis-server /usr/local/etc/redis/redis-slave2.conf --slaveof 172.20.192.1 6379
depends_on:
- master
sentinel1:
image: redis:6.2.13
container_name: redis-sentinel-1
ports:
- "26379:26379"
volumes:
- ./conf/sentinel1/sentinel.conf:/usr/local/etc/redis/sentinel1.conf
command: redis-sentinel /usr/local/etc/redis/sentinel1.conf --port 26379
depends_on:
- master
- slave1
- slave2
sentinel2:
image: redis:6.2.13
container_name: redis-sentinel-2
volumes:
- ./conf/sentinel2/sentinel.conf:/usr/local/etc/redis/sentinel2.conf
ports:
- "26380:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel2.conf
depends_on:
- master
- slave1
- slave2
sentinel3:
image: redis:6.2.13
container_name: redis-sentinel-3
volumes:
- ./conf/sentinel3/sentinel.conf:/usr/local/etc/redis/sentinel3.conf
ports:
- "26381:26379"
command: redis-sentinel /usr/local/etc/redis/sentinel3.conf
depends_on:
- master
- slave1
- slave2
redis.conf配置
bind 127.0.0.1
注释,- 修改
protected-mode no
允许远程连接
sentinel.conf配置
# 哨兵集群 mymaster 名称可以随便起一个,172.20.192.1 6379 主节点 ip:端口 ,
# 2将这个主服务器判断为失效至少需要 2 个 Sentinel 进程的同意,只要同意 Sentinel 的数量不达标,自动failover就不会执行
sentinel monitor mymaster 172.20.192.1 6379 2
# 设置redis 主服务已经宕机所需要的毫秒数
sentinel down-after-milliseconds mymaster 5000
# 设置故障转移超时时间,如果这个时间内故障转移没有成功完成,哨兵会立即停止并尝试重新开始
sentinel failover-timeout mymaster 60000
# 设置在执行故障转移时,可以同时对新的主服务器进行同步的从服务器数量
sentinel parallel-syncs mymaster 1
sentinel1,sentinel2,sentinel3 配置相同
连接
只要写三台其中一台哨兵节点即可
安装 cluster
sentinel.conf配置
集群1
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7000
cluster-announce-bus-port 17000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
集群2
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7001
cluster-announce-bus-port 17001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
集群3
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7002
cluster-announce-bus-port 17002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
集群4
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7003
cluster-announce-bus-port 17003
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
集群5
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7004
cluster-announce-bus-port 17004
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
集群6
# 宿主机ip 后续链接使用这个Ip
cluster-announce-ip 172.20.192.1
cluster-announce-port 7005
cluster-announce-bus-port 17005
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
- port:节点端口;
- requirepass:添加访问认证;
- masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证;
- protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访问密码;关闭保护模式,外部网络可以直接访问;
- daemonize:是否以守护线程的方式启动(后台启动),默认 no;
- appendonly:是否开启 AOF 持久化模式,默认 no;
- cluster-enabled:是否开启集群模式,默认 no;
- cluster-config-file:集群节点信息文件;
- cluster-node-timeout:集群节点连接超时时间;
- cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
- cluster-announce-port:集群节点映射端口;
- cluster-announce-bus-port:集群节点总线端口。
docker-compose.yml配置
version: '3'
services:
redis1:
image: redis:6.2.13
container_name: redis-cluster1
networks:
cluster-net:
ipv4_address: 172.16.238.10
ports:
- "7000:7000"
- "17000:17000"
volumes:
- ./conf/redis1.conf:/etc/redis/redis-cluster1.conf
command: redis-server /etc/redis/redis-cluster1.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis2:
image: redis:6.2.13
container_name: redis-cluster2
networks:
cluster-net:
ipv4_address: 172.16.238.11
volumes:
- ./conf/redis2.conf:/etc/redis/redis-cluster2.conf
ports:
- "7001:7001"
- "17001:17001"
command: redis-server /etc/redis/redis-cluster2.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis3:
image: redis:6.2.13
container_name: redis-cluster3
networks:
cluster-net:
ipv4_address: 172.16.238.12
volumes:
- ./conf/redis3.conf:/etc/redis/redis-cluster3.conf
ports:
- "7002:7002"
- "17002:17002"
command: redis-server /etc/redis/redis-cluster3.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis4:
image: redis:6.2.13
container_name: redis-cluster4
networks:
cluster-net:
ipv4_address: 172.16.238.13
ports:
- "7003:7003"
- "17003:17003"
volumes:
- ./conf/redis4.conf:/etc/redis/redis-cluster4.conf
command: redis-server /etc/redis/redis-cluster4.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis5:
image: redis:6.2.13
container_name: redis-cluster5
networks:
cluster-net:
ipv4_address: 172.16.238.14
volumes:
- ./conf/redis5.conf:/etc/redis/redis-cluster5.conf
ports:
- "7004:7004"
- "17004:17004"
command: redis-server /etc/redis/redis-cluster5.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则,container内的root只是外部的一个普通用户权限
redis6:
image: redis:6.2.13
container_name: redis-cluster6
networks:
cluster-net:
ipv4_address: 172.16.238.15
ports:
- "7005:7005"
- "17005:17005"
volumes:
- ./conf/redis6.conf:/etc/redis/redis-cluster6.conf
command: redis-server /etc/redis/redis-cluster6.conf
privileged: true # 使用该参数,container内的root拥有真正的root权限。否则, container内的root只是外部的一个普通用户权限
networks:
# 创建集群网络,在容器之间通信
cluster-net:
ipam:
config:
- subnet: 172.16.238.0/24
虚拟出 172.16.238.0/24 网络ip 用于 redis集群内部通信,docker 启动成功后进入任意节点执行下面命令,根据提示 再次 输入 yes 等待集群创建成功
redis-cli --cluster create \
172.16.238.10:7000 \
172.16.238.11:7001 \
172.16.238.12:7002 \
172.16.238.13:7003 \
172.16.238.14:7004 \
172.16.238.15:7005 \
--cluster-replicas 1
注意 Ip 连接的使用宿主机 172.18.80.1
项目 地址 gitee.com/q_tuanzahng…