使用docker 部署redis 单机 Cluster模式 集群3主3从 可视化web页面

1 使用docker部署单机的redis

复制代码
1.拉取Redis镜像
java 复制代码
# 拉取最新版本
docker pull redis:latest

# 或指定版本
docker pull redis:7.2
复制代码
2. 创建Redis配置文件
java 复制代码
# 创建配置文件目录
mkdir -p /docker/redis/conf
mkdir -p /docker/redis/data

# 创建Redis配置文件
nano /docker/redis/conf/redis.conf

配置文件内容如下:

# 基础配置
port 6379
bind 0.0.0.0
protected-mode no
daemonize no

# 持久化配置
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

# 内存配置
maxmemory 1gb
maxmemory-policy allkeys-lru

# 日志配置
loglevel notice
logfile "/data/redis.log"

# 密码配置(可选)
requirepass your_password
复制代码
3.启动Redis容器
java 复制代码
docker run -d \
  --name redis \
  --restart always \
  -p 6379:6379 \
  -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf \
  -v /docker/redis/data:/data \
  redis:latest \
  redis-server /etc/redis/redis.conf
复制代码
4 测试连接
java 复制代码
# 进入容器
docker exec -it redis redis-cli

# 如果设置了密码,需要认证
AUTH your_password

# 测试
SET test "Hello Redis"
GET test

2 Redis集群安装

复制代码
1 创建Docker网络
java 复制代码
docker network create redis-net
复制代码
2 创建集群配置文件
为每个节点创建配置文件:
java 复制代码
# 创建目录结构
mkdir -p /docker/redis-cluster/7001/conf   
mkdir -p /docker/redis-cluster/7001/data
mkdir -p /docker/redis-cluster/7002/conf   
mkdir -p /docker/redis-cluster/7002/data
mkdir -p /docker/redis-cluster/7003/conf   
mkdir -p /docker/redis-cluster/7003/data
mkdir -p /docker/redis-cluster/7004/conf   
mkdir -p /docker/redis-cluster/7004/data
mkdir -p /docker/redis-cluster/7005/conf   
mkdir -p /docker/redis-cluster/7005/data
mkdir -p /docker/redis-cluster/7006/conf   
mkdir -p /docker/redis-cluster/7006/data
复制代码
3.创建配置文件
java 复制代码
nano /docker/redis-cluster/7001/conf/redis.conf
nano /docker/redis-cluster/7002/conf/redis.conf
nano /docker/redis-cluster/7003/conf/redis.conf
nano /docker/redis-cluster/7004/conf/redis.conf
nano /docker/redis-cluster/7005/conf/redis.conf
nano /docker/redis-cluster/7006/conf/redis.conf
复制代码
配置内容:
java 复制代码
port 7001
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.11
cluster-announce-port 7001
cluster-announce-bus-port 17001

port 7002
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.12
cluster-announce-port 7002
cluster-announce-bus-port 17002

port 7003
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.13
cluster-announce-port 7003
cluster-announce-bus-port 17003

port 7004
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.14
cluster-announce-port 7004
cluster-announce-bus-port 17004

port 7005
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.15
cluster-announce-port 7005
cluster-announce-bus-port 17005

port 7006
bind 0.0.0.0
protected-mode no
daemonize no
appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.20.0.16
cluster-announce-port 7006
cluster-announce-bus-port 17006
复制代码
3.创建docker-compose.yml
java 复制代码
nano /docker/redis-cluster/docker-compose.yml

内容如下

version: 'docker-compose 版本号'
services:
  redis1:
    image: redis:latest
    container_name: redis1
    networks:
      redis-net:
        ipv4_address: 172.20.0.11
    volumes:
      - ./7001/conf/redis.conf:/etc/redis/redis.conf
      - ./7001/data:/data
    command: redis-server /etc/redis/redis.conf
    ports:
      - "7001:7001"
      - "17001:17001"

  redis2:
    image: redis:latest
    container_name: redis2
    networks:
      redis-net:
        ipv4_address: 172.20.0.12
    volumes:
      - ./7002/conf/redis.conf:/etc/redis/redis.conf
      - ./7002/data:/data
    command: redis-server /etc/redis/redis.conf
    ports:
      - "7002:7002"
      - "17002:17002"

  # 重复类似配置直到redis6
  # ...

networks:
  redis-net:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16
复制代码
4.启动集群
java 复制代码
# 启动所有容器
cd /docker/redis-cluster
docker-compose up -d
java 复制代码
# 进入redis1 创建集群
docker exec -it redis1 redis-cli --cluster create \
  172.20.0.11:7001 \
  172.20.0.12:7002 \
  172.20.0.13:7003 \
  172.20.0.14:7004 \
  172.20.0.15:7005 \
  172.20.0.16:7006 \
  --cluster-replicas 1

3 监控和管理

复制代码
1 安装Redis Commander(Web管理界面)
java 复制代码
docker run -d \
  --name redis-commander \
  --restart always \
  -p 8081:8081 \
  -e REDIS_HOSTS=local:redis:6379 \
  rediscommander/redis-commander:latest
复制代码
2.常用管理命令
java 复制代码
# 查看容器状态
docker ps | grep redis

# 查看容器日志
docker logs redis

# 查看集群信息
docker exec -it redis1 redis-cli cluster info

# 查看节点信息
docker exec -it redis1 redis-cli cluster nodes

4 备份和恢复

复制代码
1 创建备份脚本
java 复制代码
#!/bin/bash
BACKUP_DIR="/docker/redis/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

# 创建备份
docker exec redis redis-cli SAVE
docker cp redis:/data/dump.rdb $BACKUP_DIR/dump_$DATE.rdb
复制代码
2 设置定时备份
java 复制代码
# 编辑crontab
crontab -e

# 添加定时任务(每天凌晨2点备份)
0 2 * * * /docker/redis/backup.sh

5.性能优化建议

java 复制代码
# redis.conf 性能优化配置

# 内存优化
maxmemory-samples 10
activedefrag yes
active-defrag-ignore-bytes 100mb
active-defrag-threshold-lower 10
active-defrag-threshold-upper 30

# 持久化优化
save 900 1
save 300 10
save 60 10000

# 网络优化
tcp-keepalive 300
timeout 0
tcp-backlog 511

6 安全配置

java 复制代码
# redis.conf 安全配置

# 设置访问密码
requirepass your_strong_password

# 禁用危险命令
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command KEYS ""

# 设置最大连接数
maxclients 10000
相关推荐
华玥作者6 小时前
[特殊字符] VitePress 对接 Algolia AI 问答(DocSearch + AI Search)完整实战(下)
前端·人工智能·ai
Mr Xu_7 小时前
告别冗长 switch-case:Vue 项目中基于映射表的优雅路由数据匹配方案
前端·javascript·vue.js
前端摸鱼匠7 小时前
Vue 3 的toRefs保持响应性:讲解toRefs在解构响应式对象时的作用
前端·javascript·vue.js·前端框架·ecmascript
lang201509287 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
好家伙VCC8 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
未来之窗软件服务8 小时前
未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
前端·javascript·vue.js·仙盟创梦ide·东方仙盟·昭和仙君
嘿起屁儿整9 小时前
面试点(网络层面)
前端·网络
VT.馒头9 小时前
【力扣】2721. 并行执行异步函数
前端·javascript·算法·leetcode·typescript
_运维那些事儿9 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
phltxy10 小时前
Vue 核心特性实战指南:指令、样式绑定、计算属性与侦听器
前端·javascript·vue.js