Redis
适用环境:RHEL/OEL 7/9 Linux
1. Redis 集群概述
Redis 集群是 Redis 的分布式解决方案,它提供了数据自动分片、高可用性和水平扩展能力。Redis 集群采用主从架构,每个分片有一个主节点和多个从节点。
更多学习教程公众号风哥教程itpux_com 学习交流加群风哥微信: itpux-com 风哥提示:数据库升级过程中请确保备份完整数据,以防意外情况发生。 学习交流加群风哥微信: itpux-com 学习交流加群风哥QQ113257174 学习交流加群风哥微信: itpux-com 更多学习教程公众号风哥教程itpux_com
1.1 Redis 集群的特点
- 数据自动分片
- 高可用性
- 水平扩展
- 无中心架构
1.2 集群拓扑
推荐的 Redis 集群拓扑为 3 主 3 从,共 6 个节点。
学习交流加群风哥QQ113257174 风哥提示:数据库升级过程中请确保备份完整数据,以防意外情况发生。 更多视频教程www.fgedu.net.cn 风哥提示:数据库升级过程中请确保备份完整数据,以防意外情况发生。 更多视频教程www.fgedu.net.cn 学习交流加群风哥QQ113257174 学习交流加群风哥微信: itpux-com
2. 硬件及系统要求
2.1 硬件要求
- 每个节点:至少 2 核 CPU,4GB 内存,50GB SSD
- 网络:千兆网卡,低延迟网络环境
2.2 系统要求
- 操作系统: RHEL/OEL 7.x 或 9.x
- 内核版本: 3.10.0-1160.el7.x86_64 或更高
- 关闭 SElinux 或设置为 permissive 模式
- 关闭防火墙或开放必要端口
3. 环境准备
3.1 配置主机名和 hosts 文件
# 节点 1
echo "redis-node1" > /etc/hostname
hostnamectl set-hostname redis-node1
# 节点 2
echo "redis-node2" > /etc/hostname
hostnamectl set-hostname redis-node2
# 节点 3
echo "redis-node3" > /etc/hostname
hostnamectl set-hostname redis-node3
# 节点 4
echo "redis-node4" > /etc/hostname
hostnamectl set-hostname redis-node4
# 节点 5
echo "redis-node5" > /etc/hostname
hostnamectl set-hostname redis-node5
# 节点 6
echo "redis-node6" > /etc/hostname
hostnamectl set-hostname redis-node6
# 在所有节点上添加 hosts 条目
cat >> /etc/hosts << EOF
192.168.1.101 redis-node1
192.168.1.102 redis-node2
192.168.1.103 redis-node3
192.168.1.104 redis-node4
192.168.1.105 redis-node5
192.168.1.106 redis-node6
EOF
3.2 关闭防火墙和 SElinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
4. Redis 安装
4.1 安装依赖
yum install -y gcc gcc-c++ make wget
4.2 下载 Redis
cd /tmp
wget https://download.redis.io/releases/redis-7.0.12.tar.gz
4.3 解压并编译
tar -zxvf redis-7.0.12.tar.gz
cd redis-7.0.12
make
4.4 安装 Redis
make install PREFIX=/usr/local/redis
4.5 创建配置目录
mkdir -p /etc/redis/cluster
5. 集群配置
5.1 创建节点配置文件
# 节点 1
vi /etc/redis/cluster/redis-7001.conf
port 7001
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/var/log/redis/redis-7001.log"
dir /var/lib/redis/7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
requirepass your_secure_password
masterauth your_secure_password
5.2 为其他节点创建配置文件
# 节点 2
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-7002.conf
sed -i 's/7001/7002/g' /etc/redis/cluster/redis-7002.conf
# 节点 3
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-7003.conf
sed -i 's/7001/7003/g' /etc/redis/cluster/redis-7003.conf
# 节点 4
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-7004.conf
sed -i 's/7001/7004/g' /etc/redis/cluster/redis-7004.conf
# 节点 5
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-7005.conf
sed -i 's/7001/7005/g' /etc/redis/cluster/redis-7005.conf
# 节点 6
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-7006.conf
sed -i 's/7001/7006/g' /etc/redis/cluster/redis-7006.conf
5.3 创建数据目录
mkdir -p /var/lib/redis/{7001,7002,7003,7004,7005,7006}
mkdir -p /var/log/redis
chown -R redis:redis /var/lib/redis
chown -R redis:redis /var/log/redis
5.4 启动所有节点
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7001.conf
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7002.conf
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7003.conf
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7004.conf
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7005.conf
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7006.conf
5.5 创建集群
/usr/local/redis/bin/redis-cli --cluster create \
192.168.1.101:7001 \
192.168.1.102:7002 \
192.168.1.103:7003 \
192.168.1.104:7004 \
192.168.1.105:7005 \
192.168.1.106:7006 \
--cluster-replicas 1 \
-a your_secure_password
6. 集群验证
6.1 检查集群状态
/usr/local/redis/bin/redis-cli -c -p 7001 -a your_secure_password cluster info
6.2 检查节点状态
/usr/local/redis/bin/redis-cli -c -p 7001 -a your_secure_password cluster nodes
6.3 测试数据同步
/usr/local/redis/bin/redis-cli -c -p 7001 -a your_secure_password set test_key "Hello Redis Cluster"
/usr/local/redis/bin/redis-cli -c -p 7002 -a your_secure_password get test_key
/usr/local/redis/bin/redis-cli -c -p 7003 -a your_secure_password get test_key
6.4 测试故障转移
# 停止一个主节点
pkill -f redis-server.*7001
# 检查集群状态
/usr/local/redis/bin/redis-cli -c -p 7002 -a your_secure_password cluster nodes
# 重启节点
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7001.conf
# 检查集群状态
/usr/local/redis/bin/redis-cli -c -p 7001 -a your_secure_password cluster nodes
7. 性能优化
7.1 操作系统参数优化
vi /etc/sysctl.conf
# 内存参数
vm.overcommit_memory = 1
# 网络参数
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
sysctl -p
7.2 Redis 集群参数优化
vi /etc/redis/cluster/redis-7001.conf
# 最大内存
maxmemory 4gb
# 内存策略
maxmemory-policy allkeys-lru
# 持久化策略
appendonly no
# 或使用 RDB 持久化
save 900 1
save 300 10
save 60 10000
# 客户端连接
maxclients 10000
# 超时时间
timeout 0
# 复制配置到其他节点
for port in 7002 7003 7004 7005 7006; do
cp /etc/redis/cluster/redis-7001.conf /etc/redis/cluster/redis-${port}.conf
sed -i "s/7001/${port}/g" /etc/redis/cluster/redis-${port}.conf
done
# 重启所有节点
for port in 7001 7002 7003 7004 7005 7006; do
pkill -f redis-server.*${port}
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-${port}.conf
done
8. 故障排查
8.1 常见问题及解决方法
8.1.1 集群创建失败
# 检查节点状态
ps aux | grep redis-server
# 检查端口是否被占用
netstat -tuln | grep 700
# 检查日志
cat /var/log/redis/redis-7001.log
8.1.2 节点无法加入集群
# 检查网络连接
telnet redis-node1 7001
# 检查防火墙
firewall-cmd --list-ports
# 检查配置文件
vi /etc/redis/cluster/redis-7001.conf
8.1.3 故障转移失败
# 检查集群状态
/usr/local/redis/bin/redis-cli -c -p 7001 -a your_secure_password cluster nodes
# 检查日志
cat /var/log/redis/redis-7001.log
# 手动触发故障转移
/usr/local/redis/bin/redis-cli -c -p 7004 -a your_secure_password cluster failover
8.1.4 内存不足
# 检查内存使用情况
free -h
# 调整最大内存
vi /etc/redis/cluster/redis-7001.conf
maxmemory 2gb
# 重启节点
pkill -f redis-server.*7001
/usr/local/redis/bin/redis-server /etc/redis/cluster/redis-7001.conf
警告:本指南仅供参考,实际部署时请根据具体环境进行调整。在生产环境中,建议进行充分的测试和监控。
提示:定期监控 Redis 集群的运行状态,确保所有节点正常运行,数据同步良好。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
