2026/4/17 3:12:32
网站建设
项目流程
鲜花网站建设规模设想,黑马程序员视频库,平面设计免费自学网,熟练掌握网站开发技术一、核心配置解析#xff08;先理解关键参数#xff09;1. Redis 配置文件#xff08;redis1.conf/redis2.conf...#xff09;核心参数参数作用port 7001Redis 节点的服务端口#xff08;6 个节点对应 7001-7006#xff09;protected-mode no关闭保护模式#xff08;允许…一、核心配置解析先理解关键参数1. Redis 配置文件redis1.conf/redis2.conf...核心参数参数作用port 7001Redis 节点的服务端口6 个节点对应 7001-7006protected-mode no关闭保护模式允许跨机器访问集群部署必须关闭cluster-enabled yes开启集群模式Redis Cluster 核心开关cluster-config-file nodes.conf集群节点信息文件自动生成无需手动修改cluster-node-timeout 5000集群节点超时时间5 秒超时则判定节点不可用cluster-announce-ip 172.13.3.160集群对外公告的 IP必须是宿主机可访问的 IP容器内 IP 不行cluster-announce-port 7001集群对外公告的服务端口和 port 一致cluster-announce-bus-port 17001集群节点间通信的总线端口服务端口 10000appendonly yes开启 AOF 持久化防止集群重启数据丢失2. docker-compose.yml 核心配置redis-imageYAML 锚点语法复用redis:5.0.7镜像避免重复写volumes挂载本地配置文件到容器内./redis1.conf:/home/redis/cluster/redis.conf、挂载数据目录./7001/data:/data保证配置生效和数据持久化ports映射端口服务端口 总线端口必须全部开放否则集群节点无法通信。二、完整部署步骤适配通用 Linux 环境如 CentOS/Ubuntu步骤 1环境准备检查 Docker 和 Docker Compose 是否安装bash运行# 检查Docker docker -v # 检查Docker Compose docker-compose -v # 若未安装先安装以CentOS为例 yum install -y docker docker-compose systemctl start docker systemctl enable docker替换配置中的宿主机 IP将所有redis*.conf和集群创建命令中的172.13.3.160替换为你的宿主机实际 IP可通过ifconfig/ip addr查看。关闭防火墙 / 开放端口二选一推荐开放端口更安全bash运行# 方式1临时关闭防火墙CentOS systemctl stop firewalld systemctl disable firewalld # 方式2开放所需端口推荐CentOS firewall-cmd --add-port7001-7006/tcp --permanent firewall-cmd --add-port17001-17006/tcp --permanent firewall-cmd --reload # Ubuntu 防火墙开放端口 ufw allow 7001-7006/tcp ufw allow 17001-17006/tcp ufw reload步骤 2创建目录和配置文件创建项目目录统一管理文件bash运行mkdir -p redis-cluster/{7001,7002,7003,7004,7005,7006}/data cd redis-cluster生成 6 个 Redis 配置文件以 redis1.conf 为例其他仅改端口bash运行# 创建redis1.conf cat redis1.conf EOF port 7001 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 你的宿主机IP cluster-announce-port 7001 cluster-announce-bus-port 17001 appendonly yes pidfile /var/run/redis_7001.pid EOF # 快速生成redis2-redis6.conf替换端口 for port in {2..6}; do cp redis1.conf redis${port}.conf sed -i s/7001/700${port}/g redis${port}.conf sed -i s/17001/1700${port}/g redis${port}.conf sed -i s/redis_7001/redis_700${port}/g redis${port}.conf done创建 docker-compose.yml 文件yaml# 注意新版本Docker Compose可删除version字段避免过时警告 x-image: redis-image redis:5.0.7 services: redis1: image: *redis-image container_name: redis1 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis1.conf:/home/redis/cluster/redis.conf - ./7001/data:/data ports: - 7001:7001 - 17001:17001 # 可选添加网络模式避免IP问题 network_mode: host redis2: image: *redis-image container_name: redis2 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis2.conf:/home/redis/cluster/redis.conf - ./7002/data:/data ports: - 7002:7002 - 17002:17002 network_mode: host redis3: image: *redis-image container_name: redis3 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis3.conf:/home/redis/cluster/redis.conf - ./7003/data:/data ports: - 7003:7003 - 17003:17003 network_mode: host redis4: image: *redis-image container_name: redis4 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis4.conf:/home/redis/cluster/redis.conf - ./7004/data:/data ports: - 7004:7004 - 17004:17004 network_mode: host redis5: image: *redis-image container_name: redis5 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis5.conf:/home/redis/cluster/redis.conf - ./7005/data:/data ports: - 7005:7005 - 17005:17005 network_mode: host redis6: image: *redis-image container_name: redis6 command: [redis-server, /home/redis/cluster/redis.conf] volumes: - ./redis6.conf:/home/redis/cluster/redis.conf - ./7006/data:/data ports: - 7006:7006 - 17006:17006 network_mode: host✨ 关键优化添加network_mode: host让容器使用宿主机网络避免容器内 IP 和宿主机 IP 不一致导致集群通信失败。步骤 3启动容器bash运行# 启动并后台运行容器 docker-compose up -d # 检查容器状态6个容器都应是Up状态 docker-compose ps # 或 docker ps | grep redis步骤 4初始化 Redis Cluster 集群进入任意一个 Redis 容器比如 redis1bash运行docker exec -it redis1 /bin/bash执行集群创建命令替换为你的宿主机 IPbash运行redis-cli --cluster create 你的宿主机IP:7001 你的宿主机IP:7002 你的宿主机IP:7003 你的宿主机IP:7004 你的宿主机IP:7005 你的宿主机IP:7006 --cluster-replicas 1--cluster-replicas 1表示每个主节点对应 1 个从节点最终形成 3 主 3 从的集群执行后会提示集群规划输入yes确认即可。步骤 5验证集群是否正常连接集群-c 表示开启集群模式自动重定向bash运行redis-cli -c -p 7001查看集群节点信息redis127.0.0.1:7001 cluster nodes # 输出会显示6个节点标注主master/从slave、槽位分配等信息测试数据读写验证集群分片redis127.0.0.1:7001 set name test OK 127.0.0.1:7001 get name test # 切换节点测试比如7002 127.0.0.1:7001 exit redis-cli -c -p 7002 127.0.0.1:7002 get name # 会自动重定向到存储该key的节点并返回结果三、常用运维命令bash运行# 停止集群容器 docker-compose stop # 启动集群容器 docker-compose start # 彻底删除集群含数据谨慎使用 docker-compose down rm -rf 700*/data/* # 删除持久化数据 # 查看集群状态 docker exec -it redis1 redis-cli -c -p 7001 cluster info四、常见问题及解决方法集群创建失败Could not connect to xxx:7001原因端口未开放、宿主机 IP 配置错误、容器网络模式问题解决检查防火墙 / 端口、确认cluster-announce-ip是宿主机 IP、添加network_mode: host。容器启动后日志报错Cluster state changed: fail原因节点间总线端口17001-17006未开放解决开放 17001-17006 端口重启容器。数据写入后重启容器丢失原因数据目录未挂载或权限问题解决检查volumes挂载路径是否正确给本地数据目录赋权bash运行chmod 777 -R 700*/data总结部署核心替换宿主机 IP 开放所有端口7001-7006、17001-17006 初始化集群命令关键配置cluster-announce-ip必须是宿主机 IPprotected-mode no关闭保护模式避坑点添加network_mode: host避免容器网络隔离导致的通信失败开启 AOF 持久化防止数据丢失。