Redis集群

目录

前言

一、概述

(一)、概述

(二)、原理

(三)、架构细节

(四)、选举过程

二、搭建

(一)、更改配置文件

Redis-server1

Redis-server2

Redis-server3

(二)、构建集群

更改配置文件

将其他节点加入集群 

给master分配slot

 建立主从关系

验证

总结



前言

Redis 是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。


一、概述

(一)、概述

Redis3.0版本以上开始支持cluster,采用的是hashslot(hash槽),可以将多个Redis实例整合在一起,形成一个群集,也就是将数据分散到群集的多台机器上。

(二)、原理

  Redis Cluster是一个无中心的结构,每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。

(三)、架构细节

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。

(2)节点的失效(fail)在群集中超过半数的主(master)节点检测失效时才生效。

(3)客户端与 redis 节点直连,不需要中间代理(proxy)层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可。

(4)redis-cluster 把所有的物理节点映射到【0-16383】slot 上,cluster 负责维护 node<->slot<->key。

(四)、选举过程

选举过程是群集中所有master参与,如果半数以上master节点与当前 master 节点通信超时(cluster—node—timeout),认为当前 master 节点挂掉。以下两种情况为整个群集不可用(cluster_state:fail),当群集不可用时,所有对群集的操作都不可用,收到((error)CLUSTEFDOWN The cluster is down)错误。


如果群集任意 master挂掉,且当前 master 没有 slave,则群集进入 fail状态,也可以理解成群集的slot映射【0 ~16383】不完整时进入fail状态。


如果群集中超过半数的master挂掉,无论是否有slave,群集都进入 fail状态。


默认情况下,每个群集的节点都使用两个TCP端口.一个是6379,一个是16379;6379服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个端口。

二、搭建

本篇文章用FinaShell远程连接进行的操作

事先用网络源在三台虚拟机上安装了Redis服务

Redis集群_第1张图片

以此图为例,Redis-server1的IP更改为192.168.238.129Redis-server2的IP更改为192.168.238.130Redis-server3的IP更改为192.168.238.131

(一)、更改配置文件

Redis-server1

192.168.238.129

创建目录

mkdir /etc/redis -p 

cp /etc/redis.conf  /etc/redis/redis1_6379.conf

cp /etc/redis.conf  /etc/redis/redis2_6380.conf

mkdir /var/lib/redis/redis1_6379 -p

mkdir /var/lib/redis/redis2_6380 -p

更改配置文件

更改port、protected-mode、daemonize、bind、dir

vim /etc/redis/redis1_6379.conf

vim /etc/redis/redis2_6380.conf

以/etc/redis/redis1_6379为例

Redis集群_第2张图片

 Redis集群_第3张图片

 Redis集群_第4张图片

Redis集群_第5张图片

 启动服务

redis-server /etc/redis/redis1_6379.conf

redis-server /etc/redis/redis2_6380.conf

netstat -anptu |grep redis

Redis-server2

192.168.238.130

创建目录

mkdir /etc/redis -p 

cp /etc/redis.conf  /etc/redis/redis3_6379.conf

cp /etc/redis.conf  /etc/redis/redis4_6380.conf

mkdir /var/lib/redis/redis3_6379 -p

mkdir /var/lib/redis/redis4_6380 -p

更改配置文件

更改port、protected-mode、daemonize、bind、dir

vim /etc/redis/redis3_6379.conf

vim /etc/redis/redis4_6380.conf

启动服务

redis-server /etc/redis/redis3_6379.conf

redis-server /etc/redis/redis4_6380.conf

netstat -anptu |grep redis

Redis-server3

192.168.238.131

创建目录

mkdir /etc/redis -p 

cp /etc/redis.conf  /etc/redis/redis5_6379.conf

cp /etc/redis.conf  /etc/redis/redis6_6380.conf

mkdir /var/lib/redis/redis5_6379 -p

mkdir /var/lib/redis/redis6_6380 -p

更改配置文件

更改port、protected-mode、daemonize、bind、dir

vim /etc/redis/redis5_6379.conf

vim /etc/redis/redis6_6380.conf

启动服务

redis-server /etc/redis/redis5_6379.conf

redis-server /etc/redis/redis6_6380.conf

netstat -anptu |grep redis

(二)、构建集群

更改配置文件

cluster-enabled、cluster-config-file、cluster-node-timeout

启动服务前要先杀死进程以免冲突

kill 43366

kill 43452

Redis-server1

Redis集群_第6张图片


Redis集群_第7张图片

启动服务

redis-server /etc/redis/redis1_6379.conf

redis-server /etc/redis/redis2_6380.conf

netstat -anptu |grep redis

Redis-server2和Redis-server3同上操作,注意端口不同

将其他节点加入集群

不区分大小写,在一台机器上操作即可

redis-cli -h 192.168.238.131

 CLUSTER MEET 192.168.238.131 6380
 CLUSTER MEET 192.168.238.130 6379
 CLUSTER MEET 192.168.238.130 6380
 CLUSTER MEET 192.168.238.129 6379
 CLUSTER MEET 192.168.238.129 6380

cluster nodes
    查看所有群集节点

给master分配slot

需退出再界面外操作,否则会异常

Redis集群_第8张图片

 建立主从关系

对应图中关系建立主从

Redis集群_第9张图片 

Redis集群_第10张图片

 

Redis集群_第11张图片

 cluster info
    查看群集状态

 Redis集群_第12张图片

 若主从配置错误,需每个节都重置

重置集群命令
    cluster reset
    数据的key不能相同

验证

需注意是哈希算法随机分配,按提示进行

哈希分配的是2919,所有只有在{0..5461}的范围才可以

Redis集群_第13张图片

总结

今天的内容要格外的细心,前面和Redis主从复制有雷同地方,集群中的主从配置才是要重点关注的地方,一定要先将图中主从关系理清出再去操作,否则要重置重新配置。

你可能感兴趣的:(redis,数据库,缓存)