Redis 集群搭建(基于Linux)
一、基础环境
1.虚拟机 VMware 15.x
2.Linux系统,用的是Centos7的Linux系统
3.Redis数据库版本 5.0.3
二、Redis集群简介
1.背景
Redis在3.0版本前只支持单实例模式,虽然支持主从模式部署来解决单点的故障,但是现在互联网企业的数据,都是几百G的数据,完全无法满足业务的需求,所以,在3.0版本以后就退出了集群模式。
2.概念
将多台Redis的服务器组成集群,分担负载。相对于主从架构,是进一步的扩展和升级。集群中的多台主服务器,同时对外提供读写功能,并分担整体的负载压力。而且每台主服务器都还会有自己的从服务器,作为数据的副本,也作为各自主服务器的候补(当主服务器意为崩溃,则从服务器自动变为主服务器,保证了整个集群的高可用性)
在负载压力分担,和系统的高可用性上,集群是一个很好的解决方案。
三、集群的搭建
1.为了我们方便的搭建集群,我们需要建立一个目录,里面放着六台服务器(一个集群至少六台服务器)。如下:
我们自己建立了一个叫 redis-cluster 的目录(图中蓝色框),在这个目录中又建立了六个子目录,用来存放Redis服务器。
2.然后cd到我们原有的redis服务目录下,进行集群的配置修改
① cluster-enabled yes 开启集群的支持
② cluster-config-file nodes.conf 记录每个节点的信息,保存到文件nodes.conf文件中
③ bind 0.0.0.0 开放ip访问权限
3.然后在我们已经搭建好的Redis服务目录下,将已经设置好的 redis.conf 分别复制到我们建立好的六个目录下。如下:
注:redis_conf 是我的redis服务的守护进程启动配置目录,里面放着启动进程的redis.conf配置文件,后面的我们上面的建立的目录的相对路径。
4.在复制好六个服务器之后,再去修改每个服务的配置文件中的端口号 ,这里我们分配了8001 --8006 端口 分别给这个六个服务器。如下,
注:然后依次去修改其余的五个,保证服务的端口各不相同即可。
5. 接着,以各自的配置启动redis服务
1 redis-server 8001/redis.conf 2 redis-server 8002/redis.conf 3 redis-server 8003/redis.conf 4 redis-server 8004/redis.conf 5 redis-server 8005/redis.conf 6 redis-server 8006/redis.conf
开启后的效果图,如下
6.创建Redis集群
语法:
redis-cli --cluster create 192.168.142.131:9001 192.168.142.131:9002 192.168.142.131:9003 192.168.142.131:9004 192.168.142.131:9005 192.168.142.131:9006 --cluster-replicas 1
解释: redis 客户端 集群 创建 。。。上面创建六个redis服务器的端口。。。 集群 一比一主从配置
然后我们输入 yes ,Redis 就会创建好集群,结果如下。
7.集群说明
--cluster-replicas 1 表示主从复制比例为 1:1,即一个主节点对应一个从节点;然后,默认给我们分配好了每个主节点和对应从节点服务器,以及 slot 的大小,
因为在 Redis 集群中有且仅有 16384 个 slot ,默认情况会给我们平均分配,当然你可以指定,后续的增减节点也可以重新分配。
查看集群信息:192.168.134.124:7003> cluster info(查看集群信息)或cluster nodes(查看节点列表)
集群搭建完毕,6个节点,3主,3从,只有主节点才拥有槽,并对外提供读写数据服务。注意至少有3个主节点才可以搭建集群,为每个主至少分配1个从,所以至少需要6个redis节点才可以形成集群。
8.槽
- redis cluster 默认分配了 16384 个slot,所有的主redis服务器,大概均分所有的槽
- 存/取值时 ,redis会根据key,计算一个介于 0 – 16383之间的数字,此数字即为当前数据的槽位置,通过槽位置,决定哪个redis主服务器来负责本次访问
Redis 集群会把数据存在一个master节点,然后在这个master和其对应的slave之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。
只有当一个master 挂掉之后,才会启动一个对应的slave节点,充当master。
需要注意的是:必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
9.集群的特性或者优点
集群搭建后:
- 性能的进一步提升,可以在单位时间内,吞吐更多的请求
- 数据的存储节点,具有高可用性(集群有好的容错机制)
集群容错:
- 所有槽可以被覆盖时,则集群正常运行
- 如果16384个槽,不能被所有主机完整覆盖了,则集群宕机
四、集群中节点的操作
1.删除从节点
测试效果如下:
2.添加从节点
redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7001 --cluster-slave --cluster-master-id 4032891b648e76b2975e5bc701e9c8a52ad6f3dd
# 注意:加新节点之前 要清楚新节点中数据
# add-node: 后面的分别跟着新加入的slave和集群中任意一个节点
# cluster-slave:表示加入的是slave节点
# --cluster-master-id:表示slave对应的master的node ID
3.删除主节点
需要先进行重新分片:
redis-cli --cluster reshard 192.168.142.131:9001 #后面的ip和端口 起到定位的作用
回车执行该语句
①系统会提出问题 要分出多少个槽 5461
②系统接着提出问题 将这些槽 分给谁 回答 一个主服务器的id
③系统再问 从哪里获得这些槽 回答 一个主服务器的id
④接着执行done 和yes 开始重新分片
4.添加主节点
redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7006
#新增加的主节点 #一个已存在的节点 定位集群的作用
将7006添加到7001所在集群中,成为一个主节点,但此时它不持有任何槽,需要重新分片
具体操作图 如下,
之后输入done 即可执行分槽。
开始后,确认,系统问你要执行吗
输入yes
然后会执行一段时间的迁移过程
以上就是关于Redis集群的相关知识。