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-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-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-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

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

 建立主从关系

对应图中关系建立主从

 

 

 cluster info
    查看群集状态

 

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

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

验证

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

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

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值