Redis | 集群模式
随着互联网应用规模的不断扩大,单一节点的数据库性能已经无法满足大规模应用的需求。为了提高数据库的性能和可扩展性,分布式数据库成为了解决方案之一。Redis 作为一个高性能的内存数据库,自然也有了自己的分布式部署方式——Redis 集群模式。
1. 什么是 Redis 集群模式?
Redis 集群模式是 Redis 数据库的一种分布式部署方式,它通过数据分片(Sharding)将数据存储在多个节点上,从而实现数据的水平拆分和负载均衡。每个节点负责处理其中一部分数据,并支持主从复制以提供数据冗余和高可用性。
在 Redis 集群中,数据被分成 16384 个槽(slots),每个槽对应一个节点。数据根据一定的规则(通常是键的哈希值)被映射到不同的槽上,从而实现分布式存储。当集群中添加或移除节点时,Redis 会自动重新分片数据,无需手动迁移数据,大大简化了扩容和缩容操作。
2. Redis 集群的特点
- 高性能和低延迟:由于 Redis 是一个内存数据库,它能够提供高性能和低延迟的读写操作,适用于对响应速度有要求的应用场景。
- 高可用性:Redis 集群支持主从复制,每个节点都有一个或多个从节点用于数据备份。当主节点失效时,从节点可以自动切换成主节点,保障数据的可用性。
- 自动分片和负载均衡:Redis 集群在添加或移除节点时,会自动重新分片数据,无需手动干预。客户端可以直接连接到集群中的任意节点,并根据键的哈希值将请求发送到对应的节点,实现负载均衡。
- 无中心节点:Redis 集群没有单点故障,没有中心节点,所有节点都是平等的,减少了集群的单点故障风险。
3. 配置
启动参数方式
--cluster-enabled yes
:开启集群cluster-node-timeout 15000
:集群节点间超时时间--masterauth <master-node-password>
:主节点密码
配置文件方式
redis.conf
cluster-enabled yes
cluster-node-timeout 15000
masterauth <master_node_password>
4. 演示
docker-compose.yaml
version: "3.8"
networks:network:ipam:driver: defaultconfig:- subnet: '192.168.200.0/24'
services:redis1:container_name: redis1image: redis:7.0networks:network:ipv4_address: 192.168.200.2command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis2:container_name: redis2image: redis:7.0networks:network:ipv4_address: 192.168.200.3command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis3:container_name: redis3image: redis:7.0networks:network:ipv4_address: 192.168.200.4command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis4:container_name: redis4image: redis:7.0networks:network:ipv4_address: 192.168.200.5command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis5:container_name: redis5image: redis:7.0networks:network:ipv4_address: 192.168.200.6command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*redis6:container_name: redis6image: redis:7.0networks:network:ipv4_address: 192.168.200.7command:- redis-server- --cluster-enabled yes- --cluster-node-timeout 15000- --requirepass 123456- --masterauth 123456- --bind * -::*
- 启动:
docker compose up
- 创建集群:进入容器
docker exec -it redis1 bash
redis-cli \ -a 123456 \ --cluster \ create \ 192.168.200.2:6379 192.168.200.3:6379 192.168.200.4:6379 \ 192.168.200.5:6379 192.168.200.6:6379 192.168.200.7:6379 \ --cluster-replicas 1
- 进入集群操作
注意:一定要添加
-c
参数。redis-cli -c -a 123456
- 测试
127.0.0.1:6379> set name yimt -> Redirected to slot [5798] located at 192.168.200.7:6379 OK 192.168.200.7:6379> get name "yimt"