为什么要搭建集群
高可用性:Redis集群可以提供高可用性,即使其中的一台节点发生故障,其他节点仍然可以继续提供服务。当一个节点下线时,集群会自动将负载均衡到其他可用节点上,从而保证系统的稳定性和可用性。
扩展性:Redis集群可以水平扩展,允许在需要更多内存或处理能力时添加更多的节点。通过将数据分布在多个节点上,集群可以处理更大规模的数据和更高的并发请求,以满足系统的增长需求。
性能提升:由于Redis集群可以将数据分散到多个节点上进行处理,因此可以实现并行处理和负载均衡,从而提高系统的整体性能。每个节点都可以处理一部分请求,减轻单个节点的负担,提高响应速度。
数据复制和持久化:Redis集群支持数据复制和持久化机制,可以确保数据在多个节点之间的同步和备份。当一个节点发生故障时,可以从其他节点中获取备份数据,并快速恢复系统的正常运行。
故障恢复:Redis集群可以自动检测并快速恢复节点故障。当一个节点宕机或无法访问时,集群会自动将该节点标记为不可用,并将请求路由到其他可用节点上,从而保证系统的连续性和可用性。
通过搭建Redis集群,可以提高系统的可靠性、扩展性和性能,以满足大规模应用对数据存储和处理的需求。
配置集群所需的环境
Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。
要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。
规划网络
这里我们用一台虚拟机,使用六个reids节点来模拟
创建redis节点
自定义个目录来存放这些节点的文件
mkdir /usr/myredis
在该目录下分别创建出六个节点的目录
mkdir 7001 7002 7003 7004 7005 7006
在7001中配置redis.conf文件
# 指令(切记先切到7001目录下)
vim redis.conf
# 配置文件的内容(切忌配置密码,如果你引入的配置文件中设置了密码,请将密码去除)
include /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
将该配置文件复制到每个节点目录下
echo ./7002 ./7003 ./7004 ./7005 ./7006 | xargs -n 1 cp -v /usr/myredis/7001/redis.conf
将每个节点目录下的配置文件进行修改(主要是将其中的7001改成对应的)可以在进入命令行模式时使用替换命令,例:
将6个redis全部启动,我们来写一个脚本来开启
# 命令 使用vim打开文件,如果没有该文件会生成一个新文件
vim startredis
#脚本内容
#!/bin/bash
/usr/local/bin/redis-server /usr/myredis/7001/redis.conf
/usr/local/bin/redis-server /usr/myredis/7002/redis.conf
/usr/local/bin/redis-server /usr/myredis/7003/redis.conf
/usr/local/bin/redis-server /usr/myredis/7004/redis.conf
/usr/local/bin/redis-server /usr/myredis/7005/redis.conf
/usr/local/bin/redis-server /usr/myredis/7006/redis.conf
如果脚本运行失败,可以看一下redis-server的位置是否正确,以及文件权限是否足够,可以直接赋予最高权限
chmod 777 /usr/myredis/startredis
查看一下是否允许成功
这样即启动成功,开始配置集群
#复制下面内容宰命令行中允许,运行前确认你的redis-cli所在的位置
/usr/local/bin/redis-cli --cluster create 192.168.184.33:7001 192.168.184.33:7002 192.168.184.33:7003 192.168.184.33:7004 192.168.184.33:7005 192.168.184.33:7006 --cluster-replicas 1
#cluster-replicas 1 表示主从1:1
允许后出现下面内容,输入yes
出现下面即成功
连接集群
#-c cluster 不能省略
#-h 主机ip
#-p 端口号
/usr/local/bin/redis-cli -c -h 192.168.162.33 -p 7001
当感觉节点不够用的时候可以接着添加
添加主机
和前面步骤相同,先创建目录,复制、修改配置文件,启动,然后就是添加节点的指令
#redis-cli --cluster add-node 新节点 集群中的节点 例:
redis-cli --cluster add-node 192.168.162.33:7007 192.168.162.33:7003
但目前因为没有槽,所以7007还不能作为主节点使用,先为他创建一个子节点。
先查看一下节点的状态,将7007的id复制下来
然后就是创建7008的节点目录,配置文件,启动,将其添加为7007的子节点
#/usr/local/bin/redis-cli --cluster add-node (要添加的节点的ip:端口号) (集群中随意一个节点的ip:端口号) --cluster-slave --cluster-master-id (主节点的id)
/usr/local/bin/redis-cli --cluster add-node 192.168.162.33:7008 192.168.162.33:7002 --cluster-slave --cluster-master-id 96aecfe0b2d8979c4a959a29fdade4d15d3fb9c9
重新分配槽,这样才能使7007拥有主节点的能力
输入done会出现以下界面,输入yes即可
再次查看下节点信息
删除节点
/usr/local/bin/redis-cli --cluster del-node 192.168.162.33:7001 2158f7e2c9b6ed1fcc6afc1b14c2f64e67335f13
要删除主节点的话需要先将从节点移到别的主节点上 ,还要将槽归还
关闭
我们写一个脚本来执行关闭
# 命令
vim redisclose
#脚本内容
#!/bin/bash
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7001 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7002 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7003 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7004 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7005 shutdown
/usr/local/bin/redis-cli -h 192.168.162.33 -p 7006 shutdown
#给脚本文件赋予权限
chmod 777 redisclose