Redis之集群和集群搭建学习笔记

Redis集群

1 概念

​ Redis集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1N。Redis集群通过分区( partition )来提供一定程度的可用性 ( availability ) :即使集群中有一部分节点失效或者无法进行通讯,集群也可以继续处理命令请求。

2 Redis集群搭建

(1)清空rdb等持久化文件

image-20211015154146210

image-20211015154212701

(2)创建redis6379.conf、redis6380.conf、redis6381.conf、redis6389.conf、redis6390.conf、redis6391.conf六个配置文件,并进行配置修改

​ 以6379为例,在基础配置上再添加几个集群配置

cluster-enabled yes 打开集群模式

cluster-config-file nodes-6379.conf 设定节点配置文件名

cluster-node-timeout 15000 设定节点失联时间,超过该时间(毫秒),集群自动进行主从切换

image-20211015160254798

同理,配置其他五个文件,只不过把6379改为对应的id

image-20211015160323002

(3)启动6个redis服务

image-20211015160525697

检查开启状态

image-20211015160628418

查看nodes-xxxx.conf文件正确生成

image-20211015160835491

(4)将6个节点合成一个集群

首先进入redis安装目录中的src目录下,此处我的redis安装在/opt下

image-20211015161028810

使用redis-cli --cluster create --cluster-replicas 1 192.168.33.11:6379 192.168.33.11:6380 192.168.33.11:6381 192.168.33.11:6389 192.168.33.11:6390 192.168.33.11:6391

–replicas 1表示采用最简单的方式配置集群,一台主机,一台从机,正好三组

image-20211015161639220

之后会询问是否接受这种分配方式,yes即可

image-20211015162405747

如果出现一些问题,可以使用redis-cli --cluster fix 192.168.33.11:6379 这个命令来修复出问题的节点

redis-cli --cluster check 192.168.33.11:6379可以检查节点出现了什么问题

(5)连接集群

通过redis-cli -c -p 6379连接,-c表示采用集群策略连接,设置数据会自动切换到相应的主机,因为redis集群采用无中心连接方式,所以用任何一个节点进行连接都可以,即命令中的6379可以换成其他的端口号,如6380

image-20211015162800239

(6)查看节点信息

通过 cluster nodes可以查看集群内节点信息

image-20211015163854551

3 什么是slots

​ 一个Redis集群包含16384 个插槽(hash slot),数据库中的每个键都属于这16384个插槽的其中一个。
​ 集群使用公式CRC16(key) % 16384来计算键key属于哪个槽,其中CRC16(key)语句用于计算键key的CRC16校验和。集群中的每个节点负责处理一部分插槽

​ 向集群内插入k1 v1,经过计算,数据应该插入在12706这个插槽中,但是6379这个节点维护的是0-5460的插槽,12706并不在这个范围内,查找到在6381维护的范围内,所以直接插入到6381维护的插槽中,此时自动切换到6381节点

image-20211015165649753

image-20211015165909574

可以使用cluster keyslot [key]来计算该key在哪个插槽

image-20211015170337828

使用cluster countkeysinslot [slot]可以查看该插槽内键的数量

image-20211015170534686

cluster getkeysinslot [slot] [count] 返回count个slot插槽中的键

image-20211015170650837

4 故障恢复

​ 如果主机宕机,从机会代替原主机成为主机,如果原主机再次连接,会成为从机。

​ 如果某一段插槽的主从都宕机,而配置文件中cluster-require-full-coverage配置为yes,那么整个集群都挂掉,而如果是no,那么该插槽数据全部不能使用,也不能存储

猜你喜欢

转载自blog.csdn.net/weixin_42195126/article/details/120787271