Redis集群安装部署完整指南

Redis 集群安装部署完整指南

前言

Redis 集群是 Redis 官方提供的分布式解决方案,支持数据自动分片、主从复制和故障自动转移。本文将详细介绍如何在 Linux 服务器上部署 Redis 集群。

环境准备

服务器规划

本文使用 6 台服务器搭建 3 主 3 从的 Redis 集群:

服务器IP 端口 角色
192.168.1.101 7000 Master1
192.168.1.101 7001 Slave1
192.168.1.102 7000 Master2
192.168.1.102 7001 Slave2
192.168.1.103 7000 Master3
192.168.1.103 7001 Slave3

系统要求

  • 操作系统:CentOS 7+ / Ubuntu 18.04+
  • 内存:最低 2GB,推荐 4GB+
  • 网络:服务器之间内网互通

安装 Redis

1. 安装依赖


# CentOS
yum install -y gcc gcc-c++ make tcl

# Ubuntu
apt-get install -y build-essential tcl

2. 下载并编译 Redis


cd /usr/local/src
wget https://download.redis.io/releases/redis-7.0.15.tar.gz
tar xzf redis-7.0.15.tar.gz
cd redis-7.0.15
make -j4
make install PREFIX=/usr/local/redis

3. 创建目录结构


mkdir -p /usr/local/redis/{7000,7001,7002,7003,7004,7005}
mkdir -p /usr/local/redis/{7000,7001,7002,7003,7004,7005}/{data,logs}

配置 Redis 集群节点

节点配置文件示例(7000 端口)


cat > /usr/local/redis/7000/redis.conf << 'EOF'

# 基础配置
bind 0.0.0.0
port 7000
daemonize yes
pidfile /usr/local/redis/7000/redis.pid
loglevel notice
logfile /usr/local/redis/7000/logs/redis.log

# 持久化配置
dir /usr/local/redis/7000/data/
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb

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

# 网络配置
tcp-backlog 511
timeout 0
tcp-keepalive 300

# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru

# 慢查询日志
slowlog-log-slower-than 10000
slowlog-max-len 128

# 集群配置
cluster-enabled yes
cluster-config-file /usr/local/redis/7000/nodes.conf
cluster-node-timeout 15000
cluster-require-full-coverage no

# 安全配置
requirepass your_password

# 连接数
maxclients 10000
EOF

批量创建配置文件


for i in {0..5}; do
    port=$((7000 + i))
    dir_port=$((7000 + i))
    cat > /usr/local/redis/${dir_port}/redis.conf << EOF
bind 0.0.0.0
port ${port}
daemonize yes
pidfile /usr/local/redis/${dir_port}/redis.pid
loglevel notice
logfile /usr/local/redis/${dir_port}/logs/redis.log
dir /usr/local/redis/${dir_port}/data/
cluster-enabled yes
cluster-config-file /usr/local/redis/${dir_port}/nodes.conf
cluster-node-timeout 15000
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
maxmemory 2gb
maxmemory-policy allkeys-lru
EOF
done

启动 Redis 实例

1. 编写启动脚本


cat > /usr/local/redis/start-all.sh << 'EOF'
#!/bin/bash
for port in 7000 7001 7002 7003 7004 7005; do
    echo "Starting Redis on port ${port}..."
    /usr/local/redis/bin/redis-server /usr/local/redis/${port}/redis.conf
done
echo "All Redis instances started!"
EOF

chmod +x /usr/local/redis/start-all.sh

2. 启动 Redis


/usr/local/redis/start-all.sh

3. 验证启动


redis-cli -p 7000 ping
# 应该返回 PONG

redis-cli -p 7000 info server | grep tcp-port
# 查看端口信息

ps aux | grep redis-server
# 查看进程

创建 Redis 集群

使用 redis-cli 创建集群


/usr/local/redis/bin/redis-cli --cluster create \
    192.168.1.101:7000 192.168.1.101:7001 \
    192.168.1.102:7000 192.168.1.102:7001 \
    192.168.1.103:7000 192.168.1.103:7001 \
    --cluster-replicas 1 \
    --cluster-yes

集群创建过程说明

执行上述命令后,Redis 会:

1. 分配槽位:自动将 16384 个槽位分配给 3 个主节点 2. 分配从节点:为每个主节点分配一个从节点 3. 数据同步:从节点从主节点同步数据 4. 集群就绪:完成后集群即可使用

验证集群状态


redis-cli -p 7000 cluster info
# 查看节点状态

redis-cli -p 7000 cluster nodes
# 查看槽位分配

redis-cli -p 7000 cluster slots
# 查看所有槽位信息

集群管理命令

查看集群信息


# 连接任意节点查看集群信息
redis-cli -c -p 7000 cluster info

# 查看所有主节点
redis-cli -c -p 7000 cluster nodes | grep master

# 查看槽位信息
redis-cli -c -p 7000 cluster slots

测试集群读写


# 开启集群模式连接
redis-cli -c -p 7000

# 设置键值(自动路由到对应节点)
127.0.0.1:7000> SET key1 value1
-> Redirected to slot [9189] located at 192.168.1.102:7000
OK

# 读取键值
127.0.0.1:7000> GET key1
-> Redirected to slot [9189] located at 192.168.1.102:7000
"value1"

节点管理


# 登录特定节点
redis-cli -c -p 7000

# 查看节点信息
127.0.0.1:7000> INFO replication

# 查看所有 key
127.0.0.1:7000> KEYS *

故障转移测试

手动故障转移


# 登录从节点
redis-cli -p 7001

# 执行故障转移
127.0.0.1:7001> CLUSTER FAILOVER

模拟主节点宕机


# 停止主节点
redis-cli -p 7000 SHUTDOWN

# 等待几秒,观察从节点是否提升为主节点
redis-cli -p 7001 cluster nodes

# 恢复原主节点
/usr/local/redis/bin/redis-server /usr/local/redis/7000/redis.conf

集群扩容操作

添加新节点


# 1. 启动新节点(端口 7006)
/usr/local/redis/bin/redis-server /usr/local/redis/7006/redis.conf

# 2. 添加新节点到集群
redis-cli --cluster add-node 192.168.1.103:7006 192.168.1.101:7000

# 3. 重新分配槽位(reshard)
redis-cli --cluster reshard 192.168.1.101:7000 \
    --cluster-from all \
    --cluster-to <新节点ID> \
    --cluster-slots 4096 \
    --cluster-yes

删除节点


# 1. 先将槽位移走
redis-cli --cluster reshard 192.168.1.103:7006 \
    --cluster-from <要删除的节点ID> \
    --cluster-to <目标节点ID> \
    --cluster-slots <移槽位数> \
    --cluster-yes

# 2. 删除节点
redis-cli --cluster del-node 192.168.1.103:7006 <要删除的节点ID>

配置 Systemd 服务

创建 Redis 服务文件


cat > /etc/systemd/system/redis@.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store (Cluster Node %i)
After=network.target

[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/%i/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -p %i shutdown
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

管理 Redis 服务


# 启动服务
systemctl start redis@7000
systemctl start redis@7001

# 查看状态
systemctl status redis@7000

# 设置开机自启
systemctl enable redis@7000
systemctl enable redis@7001

# 查看所有 Redis 服务状态
systemctl list-units | grep redis

性能监控

Redis CLI 监控


# 实时监控
redis-cli -p 7000 --stat

# 内存信息
redis-cli -p 7000 INFO memory

# 客户端连接
redis-cli -p 7000 INFO clients

# 复制信息
redis-cli -p 7000 INFO replication

# 持久化信息
redis-cli -p 7000 INFO persistence

慢查询日志


# 查看慢查询
redis-cli -p 7000 SLOWLOG GET 10

# 查看慢查询数量
redis-cli -p 7000 SLOWLOG LEN

# 重置慢查询日志
redis-cli -p 7000 SLOWLOG RESET

常见问题

1. 集群创建失败


# 检查防火墙
firewall-cmd --list-ports
firewall-cmd --permanent --add-port=7000-7005/tcp

# 检查端口占用
netstat -tlnp | grep 70

2. 节点无法通信


# 检查节点间网络连通性
redis-cli -p 7000 -h 192.168.1.102 -p 7000 PING

# 检查集群配置
redis-cli -p 7000 cluster nodes

3. 槽位冲突


# 检查槽位分配
redis-cli -p 7000 cluster slots

# 如有冲突,修复槽位
redis-cli --cluster fix 192.168.1.101:7000

总结

本文详细介绍了 Redis 集群的完整部署流程,包括:

1. 环境准备和服务器规划 2. Redis 源码编译安装 3. 集群节点配置 4. 集群创建和管理 5. 故障转移测试 6. 扩容缩容操作 7. Systemd 服务配置 8. 性能监控和故障排查

通过本文的步骤,您可以在生产环境中成功部署和管理 Redis 集群,为应用提供高可用的分布式缓存服务。

参考资源:

  • Redis 官方文档:https://redis.io/documentation
  • Redis Cluster 教程:https://redis.io/topics/cluster-tutorial

发表回复

后才能评论