Redis数据库的集群学习笔记
Redis-集群
一、简介
Redis 在3.0版本前只支持单实例模式,虽然支持主从模式部署来解决单点故障,但是现在互联网企业动辄大几百G的数据,完全无法满足业务的需求,所以,Redis 在 3.0 版本以后就推出了集群模式。
将多台redis服务器组成集群,分担负载。相对于主从架构,是进一步的扩展和升级。集群中的多台主服务器同时对外提供读写功能,并分担整体的负载压力。而且每台主服务器都还会有自己的从服务器,作为数据副本,也作为主服务器的候补,当主服务器意外崩溃,则从服务器自动成为主服务器,保证了整个集群的高可用性。
在负载压力分担,和系统的高可用性上,集群是很好的解决方案 。
二、集群搭建
1、配置集群服务器
启动至少6个redis服务器(3主3从),每台服务器在配置中要增加:
1
2
3
4
5cluster-enabled yes #开启集群支持
cluster-config-file nodes.conf #记录节点信息
bind 0.0.0.0 #开放所有ip以各自的配置开启所有服务器
1
2
3
4
5
6redis-server 7001/redis.conf
redis-server 7002/redis.conf
redis-server 7003/redis.conf
redis-server 7004/redis.conf
redis-server 7005/redis.conf
redis-server 7006/redis.conf
2、创建redis集群
2.1 创建Redis集群
1 | redis-cli --cluster create 192.168.134.124:7001 192.168.134.124:7002 192.168.134.124:7003 192.168.134.124:7004 192.168.134.124:7005 192.168.134.124:7006 --cluster-replicas 1 |
--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节点才可以形成集群。
2.3 槽
redis cluster 默认分配了 16384 个slot,所有的主redis服务器,大概均分所有的槽
存/取值时 ,redis会根据key,计算一个介于 0 – 16383之间的数字,此数字即为当前数据的槽位置,通过槽位置,决定哪个redis主服务器来负责本次访问
所有的读写操作都会交给redis的主服务器,现在有3台redis的主服务器,来了数据请求之后,具体由哪一台redis的主服务器负责提供服务呢?
set name Tom name经过hash算法算出一个介于0-16383之间的数字 5798
set age 18 age经过hash算法算出0-16383 741
Redis 集群会把数据存在一个master节点,然后在这个master和其对应的slave之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的slave节点,充当master。
需要注意的是:必须要3个或以上
的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。
2.4 集群说明
- 集群搭建后:
- 性能的进一步提升,可以在单位时间内,吞吐更多的请求
- 数据的存储节点,具有高可用性(集群有好的容错机制)
- 集群容错:
- 所有槽可以被覆盖时,则集群正常运行
- 如果16384个槽,不能被所有主机完整覆盖了,则集群宕机
三、集群节点操作
1、从节点操作
1.1 添加从节点
1 | redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7001 --cluster-slave --cluster-master-id 4032891b648e76b2975e5bc701e9c8a52ad6f3dd |
1.2 删除从节点
1 | #集群中已存在的节点ip:port #要删除的节点的id |
2、主节点操作
2.1 添加主节点
1 | redis-cli --cluster add-node 192.168.134.124:7000 192.168.134.124:7006 |
将7006添加到7001所在集群中,成为一个主节点,但此时它不持有任何槽,需要重新分片
2.2 重新分片
1 | redis-cli --cluster reshard 192.168.134.124:7000 |
分出去的槽,从之前拥有操作的所有主节点中获取。