redis超详细篇8 redis集群搭建

前几篇我们都学习了redis的相关配置,本章来学习下集群

集群概念

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

集群简易搭建

设计思路

定义6个端口 6379、6380、6381 他们的从服务器端口分别是6389、6390、6391;组成三组主从;

具体操作

我们依旧在myredis文件夹下进行操作

删除持久化文件

在这里插入图片描述

修改redis6379.conf文件作为范本

include /root/microservice/myredis/redis.conf
pidfile "/var/run/redis_6379.pid"
port 6379
dbfilename "dump6379.rdb"
masterauth "123456"
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

命令含义:
cluster-enabled yes 打开集群模式
cluster-config-file nodes-6379.conf 设定节点配置文件名
cluster-node-timeout 15000 设置节点失联时间,超高该时间(毫秒)集群自动进行主从切换

新建复制6380、6381、6389、6390、6391配置文件

(复制redis6379.conf文件,然后该其中的端口号;可以用命令: %s/6379/xxxxx)
在这里插入图片描述

启动六个服务

在这里插入图片描述
启动完成后,服务启动成功以及节点生成成功

六个节点合成一个集群*

1.先进入redis安装目录下的src目录

cd /root/microservice/tools/redis-6.2.6/src/

这个命令启动前,一定要确保各服务正常运行别切生成了node文件

2.输入合成命令

redis-cli --cluster create --cluster-replicas 1 192.168.1.180:6379 192.168.1.180:6380 192.168.1.180:6381 192.168.1.180:6389 192.168.1.180:6390 192.168.1.180:6391

命令解析
redis-cli 是src目录下的执行命令,固定
–cluster create :创建一个集群,固定
–cluster-replicas 1 :采用最简单的方式配置集群,一台主机,一台从机,正好三组
特别注意:
此处的IP要用真实IP,不要用127.0.0.1

命令执行完,此处可能报错:

[ERR] Node 192.168.1.180:6379 NOAUTH Authentication required.

错误如图:
在这里插入图片描述

解决办法:末尾加上密码授权 -a xxxxx

redis-cli --cluster create --cluster-replicas 1 192.168.1.180:6379 192.168.1.180:6380 192.168.1.180:6381 192.168.1.180:6389 192.168.1.180:6390 192.168.1.180:6391 -a 123456

3.运行效果
在这里插入图片描述
让这里自动做好了分类,让6379、6380、6381作为主机;其他三个作为相应的从机。并提示我们是否接受这种安排

看看最终效果:
在这里插入图片描述
这里集群已经搭建好了

集群化连接

-c 采用集群策略连接,设置数据会自动切换到相应的写主机
我们就以6379为例

redis-cli -c -p 6379 -a 123456

连接进去之后,可以用cluster nodes查看集群节点的相互关系;
我们还可以写入个键值,看看各主从机有啥变化
在这里插入图片描述
在这里插入图片描述
我们发现,当在6379写入个数据之后,6380、6381也读取到了数据

分配原则:尽量保证每个主数据库运行在不同的IP地址,每个从库和主库不在一个IP地址上

特别强调:因为是模拟集群搭建,真实运用要确保每个服务器运行在不同的IP地址,每个从库和主库不在一个IP上。这是redis cluster分配的基本原则

我们来测试下多个值同时插入:
在这里插入图片描述
发现报错了,提示了xxx same slot

什么是slot

slots是插槽。
一个redis集群包含了16384个插槽,数据库中的每个键都属于者16384个插槽中的一个;
集群使用公式 CRC16(key) % 16384 来计算键key属于哪个槽,其中CRC16(key)语句用于计算键值key的CRC16校验和

集群中的每个节点负责处理一部分插槽。举例:
节点1负责 0 到 5460号插槽
节点2负责5461到10922插槽
节点3负责10923到10683插槽

在这里插入图片描述

那么在插入值得时候是怎么工作的?
比如说:set name jiqun
他会拿着key值name 来计算 它所在的插槽,然后在所在的槽中加入数据;不同的值,会分担到不同的集群中去,这是因为他们的槽值不一样。

当我们同时插入多个值,比如说:mset nation han qfjg fsf
我们发现报错了,如截图;
在这里插入图片描述
为什么呢?因为它没办法计算添加多个插槽

有一种解决方法

故障恢复

思考过:如果主机节点下线,从节点能否自动升为主节点?
如果主节点恢复了,主从关系又如何?

主机异常,从机如何变化?

我们来测试下。现在服务都是正常的
在这里插入图片描述
我们来关闭下6379主服务器试试
在这里插入图片描述
关闭完,我们来看看各节点状态
在这里插入图片描述
原来的6389从服务器变成了主服务器,也就是说在超时时间内,一旦主机异常,从机就会顶替它的位置成为主机

原主机恢复后,它的角色是怎样?
我们现在来恢复下原6379的主机,看看此时各节点的变化

在这里插入图片描述
我们发现6379虽然启动了,但是它已经变成了从机,不再是主机了,这和之前学的哨兵模式(自动版反客为主)很像是不是
在这里插入图片描述

到这我们对集群以及故障恢复等有了一个初步的概念,下篇带领大家继续前行


版权声明:本文为luoshao666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。