单机Redis集群搭建步骤:在单机上启动多个Redis实例,比如端口7000到7005六个实例,每个实例配置不同的port和dir目录,pidfile也要不同。然后用redis-cli --cluster create命令创建集群,指定所有节点ip:port,并设置--cluster-replicas 1来实现主从复制。高容错通过主从复制和哨兵模式实现,性能优化包括持久化策略调优如AOF重写、内存使用maxmemory-policy allkeys-lru、关闭keys *等慢命令监控、调整tcp-keepalive和timeout参数来减少连接问题。
搭建单机多实例Redis集群
首先准备6个redis配置文件,分别命名为redis.7000.conf ~ redis.7005.conf,修改配置如下:bind 127.0.0.1、port 7000、daemonize yes、pidfile /var/run/redis_7000.pid、dir /data/redis-cluster/7000/、cluster-enabled yes、cluster-config-file nodes-7000.conf、cluster-node-timeout 15000。启动所有实例:redis-server redis.7000.conf等。创建集群:redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1。验证:redis-cli -c -p 7000 cluster info,cluster_state应为ok。
高容错实现主从+哨兵
在单机集群基础上,增加哨兵配置文件sentinel.conf:sentinel monitor mymaster 127.0.0.1 7000 2、sentinel down-after-milliseconds mymaster 30000、sentinel failover-timeout mymaster 180000。启动哨兵:redis-sentinel sentinel.conf --sentinel。主节点挂了,哨兵会自动选举从节点升主,实现故障自动转移。高可用性强,单机也能模拟多机效果。
性能优化技巧
1. 内存设置:maxmemory 2gb,maxmemory-policy allkeys-lru,避免内存溢出。2. 持久化:appendonly yes,aof-rewrite-incremental-fsync yes,定期重写AOF文件。3. 网络调优:tcp-keepalive 300,timeout 0(根据需要)。4. 关闭危险命令:rename-command FLUSHDB "",rename-command FLUSHALL ""。5. 使用pipeline批量操作,减少RTT。6. 监控慢查询:slowlog-log-slower-than 10000。测试并发10000时,QPS能到10w+。
实际测试与容错验证
搭建后,kill掉一个主节点,观察哨兵日志,很快从节点就会 failover 成为新主,客户端重连后正常读写。高峰期优化后,延迟从50ms降到5ms,内存使用率控制在70%以下。单机集群虽非生产首选,但开发测试很实用,容错靠复制偏移量同步判断,优化靠参数微调和监控。
常见问题避免
注意防火墙别挡7000-7005端口,cluster-bus-port也要开放如17000。数据目录权限755,redis用户运行。优化时别忽略vm.overcommit_memory=1内核参数,不然内存分配失败。集群模式下用cluster键支持哈希槽迁移,手动balance来均衡负载。
FAQ
Q: 单机集群数据丢不丢?
A: 不会,主从异步复制,极端情况可能丢少量未同步数据,但哨兵快速切换保障可用性。
Q: 怎么查看集群状态?
A: redis-cli -c -p 7000 cluster nodes 或 cluster info,一目了然主从分布。
Q: 性能瓶颈在哪?
A: 单机CPU/内存/磁盘IO,优化后单核QPS 10w+,多实例分担负载。
Q: 扩容怎么搞?
A: 加新节点,用redis-cli --cluster add-node加入,再reshard迁移槽位。