1.为什么需要redis集群?
Redis 集群提供了高可用性、横向扩展和数据分片等功能,使得 Redis 能够应对大规模的数据存储和高并发访问的需求。以下是一些需要使用 Redis 集群的常见情况:
-
高可用性:通过在多个节点之间进行数据复制和故障转移,Redis 集群能够保证即使出现节点故障也能够保持系统的可用性。这是因为即使某个节点不可用,仍然可以从其他节点获取相同的数据。
-
横向扩展:当单个 Redis 实例无法满足系统的性能需求时,可以通过增加更多的节点来扩展整个集群的性能和容量。这种方式称为横向扩展,可以通过增加节点来增加集群的总体容量和吞吐量,从而满足系统的需求。
-
数据分片:Redis 集群支持将数据分片存储在不同的节点上,以便有效地管理大规模的数据集。通过数据分片,可以将数据均匀地分布在多个节点上,从而降低单个节点的负载和提高系统的整体性能。
总的来说,Redis 集群能够提供高可用性、横向扩展和数据分片等功能,使得 Redis 能够适应大规模的数据存储和高并发访问的需求。
2. 搭建集群
2.1配置集群所需要的环境
我们现在介绍的是伪集群,当然真实情况跟这样差不了多少
Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
2.2配置六台伪服务器
2.2.1创建他们的目录
2.2.2修改配置文件
2.2.2.1在7001目录下创建配置文件
vim redis.conf
2.2.2.2修改配置文件
include /usr/java/redis/redis-5.0.14/redis.conf
port 7001
pidfile "/var/run/redis_7001.pid"
dbfilename "dump_7001.rdb"
dir "/usr/myredis/7001"
logfile "/usr/myredis/7001/redis_err_7001.log"
bind 0.0.0.0
protected-mode no
daemonize yes
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
2.2.2.3把这个配置文件复制给另外几个文件夹
echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /usr/java/redis_cluster/7001/redis.conf
2.3搞一个一键启动
编写一个shell脚本
#!/bin/bash
/usr/local/bin/redis-server /usr/local/myredis/7001/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7002/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7003/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7004/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7005/redis.conf
/usr/local/bin/redis-server /usr/local/myredis/7006/redis.conf
bash stredis.sh 一键启动各个服务
2.4创建redis的集群
/usr/local/bin/redis-cli --cluster create 192.168.37.33:7001 192.168.37.33:7002 192.168.37.33:7003 192.168.37.33:7004 192.168.37.33:7005 192.168.37.33:7006 --cluster-replicas 1
2.5使用cli连接redis集群
-c cluster
-h 主机ip
-p 端口号
/usr/java/redis/bin/redis-cli -c -h 192.168.159.34 -p 7002
2.6查询集群状态
只有进入节点中cli 才可以查看集群状态
3.新增主节点
3.1新建文件夹及复制配置文件
3.2添加节点
/usr/local/bin/redis-cli --cluster add-node 192.168.37.33:7007 192.168.37.33:7001
3.3分配槽slot
新添加的节点为主节点 但是slot为0,没有卵用
给他再分配一下从节点
/usr/local/bin/redis-cli --cluster add-node 192.168.37.33:7008 192.168.37.33:7002 --cluster-slave --cluster-master-id 7dfb72f66759e044b36b3431e8dcd0b366bc62b1
yes即可
4.slot槽
4.1在集群中录入值
不在一个slot下的键值,是不能使用mget,mset等多键操作
将他们设置一个组,才能存进去
5.删除从节点
从节点只读数据没有槽
/usr/local/bin/redis-cli --cluster del-node 192.168.37.33:7001 5b6ca7235628db7a3d534ad8158a95b1b034e0e5
5.1删除完检查节点状态
/usr/local/bin/redis-cli --cluster check 192.168.37.33:7003