Redis集群搭建

Redis是我们在平时开发中经常会用到的一个缓存数据库,特别是在高并发环境下,可以抗住很高的流量,很大的程度上提高了项目的性能

Redis运用之所以这么广泛有一个很大的原因,那就是可以很好的支持集群模式,到现在Redis一共支持三种集群模式----主从模式、哨兵模式、Redis Cluster集群

Redis安装

如果大家已经会怎么安装redis了,那么这一步可以直接跳过

我们首先要去官网下载Redis包

官网下载地址:https://redis.io/download/#redis-downloads

我这里下载的Redis版本是 6.2.7,我用的linux版本的centos 7 ,大家在搭建的时候尽量与我使用的版本保持一致,不然按照我的教程搭建有可能出问题

下载完成之后,需要将包上传到linux上,可以通过 rz 命令上传,如果没有的这个命令的话就需要安装下了

在搭建之前需要看下系统有没有安装gc环境,可以通过命令查看

 gc -v 

如果查看不了或者没有的话,那么就需要执行命令进行安装

 yum  install  gcc-c++

我这里使用的gcc版本是 4.8.5 的,版本不用跟我的保持一致,反正使用4.8以上的就行了

环境都准备完成之后,我们就可以通过 tar -zxvf 对之前上传的Redis包进行解压了

 tar -zxvf redis-6.2.7.tar.gz

解压完成之后我们需要进入到 redis-6.2.7/src 目录下

 cd redis-6.2.7/src/

然后执行下 make 命令,等它编译完

 make

编译完成之后,我们再来启动下试试

注意此时启动redis服务不是后台启动的,在启动之前,我们需要改成为后台启动,需要通过修改下 redis-6.2.7 目录下的 redis.conf 配置文件,在配置文件里把 daemonize 改为 yes

在这里插入图片描述

我们通过 redis-6.2.7/src/ 目录下的 redis-server 启动,注意改为后台启动之后,在启动时需要指定配置文件

 src/redis-server redis.conf

启动完成之后,我们再来启动下Redis客户端

src/redis-cli

服务与客户端启动,测试添加数据,我已经全部截取在一张图里了,大家可以自行尝试
在这里插入图片描述

主从模式

主从模式是最典型也是最基础的一种集群模式,这种模式除了在Redis上运用,在其他的中间件上也有运用,比如Zookeeper、Mysql等

对于主从模式一般都是一主多从,主Redis节点主要对外提供服务,从Redis节点不对外提供服务,只对主Redis节点进行数据备份,具体的主从示意图如下:
在这里插入图片描述
你们肯定就要想了,既然从Redis不对外提供服务,那这种集群模式有啥用呢

我们要想一下,如果只有一台Redis,那么在流量特别高的环境下,这台Redis突然宕机了,那已经无法对外提供服务了,严重一点可能导致整个服务不可用,因此为了能够让服务高可用,我们就需要搭建这种集群架构

我如果有从节点,那么当主节点挂了,我们可以切换到从节点上,最起码保证能够对外提供服务

一般在Redis主从搭建的时候,我们只需要一个主节点两个从节点就可以了,要手动搭建这种主从集群其实也比较简单

我们可以把 redis.conf 文件复制两份,然后把这三个conf文件分别改为 redis-6379.conf、redis-6380.conf、redis-6381.conf,这三个文件分别对应端口 6379 、6380、6381

这里为啥要弄三个 conf 文件呢,这是因为一台Redis实例只要启动的时候指定配置文件是可以启动多次的,我通过这种方式就可以只使用一台Redis实例就可以了

我们把端口为 6379 的 redis 做为主节点,另外的两台做为从节点,我们再把从节点的conf文件做下修改就行了

从节点 conf 配置文件里具体要改的东西我已经列出来了

port 6380                     -- 端口号改成各自的端口
dir  /redis-6.2.7/data/      -- 这个文件路径主要是存放数据的,我们可以改成自定义路径
replicaof  127.0.0.1  67390        -- 主节点的ip和端口

改完之后我们就可以启动了,我们先要启动主节点,然后再分别启动两个从节点

 src/redis-server redis-6379.conf    -- 启动主节点
 
 src/redis-server redis-6380.conf    -- 启动从节点
 
 src/redis-server redis-6381.conf    -- 启动从节点 
 

我们可以连接下主节点的客户端

 src/redis-cli -p  6379

连接完成之后我们可以通过 info 命令查看主从信息

在这里插入图片描述

我们往主节点里添加一条数据

set liutongxue  abc

我们可以分别在从节点里获取到
在这里插入图片描述

Redis哨兵集群

上面的主从架构虽然可以保证高可用,但是假设主节点宕机了还需要人工的切换到从节点上

你可能会觉得这没什么,但是如果是半夜三更突然宕机了,此时的开发和运维也在休息,那么就无法恢复了,因为缺乏了人工的干预

为了能过够来抵抗节点故障,当故障发生时可以自动进行主从切换,Redis提供了一种方案—Redis Sentinel ,俗称哨兵,哨兵是对主从结构进行了增强

哨兵集群就是为了能够保证主从架构能够宕机自动恢复,我们可以把这个哨兵集群理解为是一个监控,当主从架构主节点宕机了,哨兵集群如果监控到了,其内部会通过选举机制来选出某一台从节点,并把这台从节点设置为主节点然后就继续对外提供服务

哨兵其实就是Redis提供的一个服务,我们一般搭建哨兵集群也需要用到三个Redis实例

redis-6.2.7 目录下有一个 sentinel.conf 文件,我们按照上面主从架构的搭建步骤同样也复制两份,并命名为 sentinel-26379.conf、sentinel-26380.conf、sentinel-26381.conf

对应如下:
在这里插入图片描述
我们以 26379 端口号的Redis为主节点,其他的为从节点

这三个 conf 文件需要配置东西如下

port 26379  --- 端口号需要改各个哨兵节点的端口号
daemonize yes --- 改成后台启动
pidfile  "/var/run/redis‐sentinel‐26379.pid" ---pid文件,这里的路径可以自定义
dir "/redis‐6.2.7/data/sentinel"   ---存放数据的路径,也可以自定义
sentinel monitor mymaster 127.0.0.1 6379 2   ---这个是监控Redis主节点的ip和端口

这里我要重点说下 sentinel monitor 这个配置
在这里插入图片描述
我要说下后面的四个参数:

master-name: 主节点名称,这个在客户端访问集群的时候需要用到

ip: 监控Redis主节点的IP地址,注意这里是Redis集群的主节点,不是哨兵集群里的主节点

redis-port:监控Redis主节点的端口号

quorum:指明当有多少个sentinel认为一个master失效时,master才算失效,这里我配置的是2 ( 一般为:sentinel总数 / 2 + 1)

配置完成之后再来启动哨兵服务,如下

 src/redis-sentinel sentinel-26379.conf  
 
 src/redis-sentinel sentinel-26380.conf
 
 src/redis-sentinel sentinel-26381.conf

在这里插入图片描述
到这里我们的哨兵集群就搭建完了,我们如果要访问的话得需要通过java客户端来访问

public class JedisSentinelTest { 
 public static void main(String[] args) throws IOException {       
     JedisPoolConfig config = new JedisPoolConfig(); 
     config.setMaxTotal(20); 
     config.setMaxIdle(10); 
     config.setMinIdle(5);
     String masterName = "mymaster"; 
     Set sentinels = new HashSet();
     
     // 这里添加的是哨兵集群节点信息
     sentinels.add(new HostAndPort("192.168.18.13",26379).toString()); 
     sentinels.add(new HostAndPort("192.168.18.13",26380).toString());     
     sentinels.add(new HostAndPort("192.168.18.13",26381).toString());
     
     JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName, sentinels, co nfig, 3000, null); 
     Jedis jedis = null; 
     try { 
      jedis = jedisSentinelPool.getResource();       
      System.out.println(jedis.set("name", "zhangsan"));  
      System.out.println(jedis.get("name")); 
      } catch (Exception e) { 
        e.printStackTrace(); 
       } finally {  
       //注意这里不是关闭连接,在JedisPool模式下,Jedis会被归还给资源池。 
       if (jedis != null) {
         jedis.close(); 
       }
 }
}

Redis Cluster集群

虽然哨兵集群解决了宕机不能自动恢复问题,但是当主节点挂了之后,当需要切换主节点的时候,哨兵集群内部会通过一个选举机制来选举出某个从节点来进行切换,在这个选举切换的过程中是无法对外提供服务的,因此哨兵集群也不完全能过够做到高可用

因此为了更好的做到高可用就推出Redis Clustere 集群模式,它是由多个主从架构组成的一个集群,如下所示:
在这里插入图片描述

其实也是在主从架构上的一个增强,这种集群没有中信节点,可以水平扩展,其性能和高可用均优于哨兵模式

Redis Cluster 最少需要三个主从架构,我这里直接使用一主一从,那么就需要六个redis实例

我们之前已经创建了三个 conf 文件了,这里我再来创建三个 conf 文件,这三个文件就命名为 redis-6382.conf、redis-6383.conf、redis-6384.conf

在这个四个 conf 文件里,我们需要把 replicaof 这个配置给注释掉
在这里插入图片描述

然后在这六个文件里还需要改动一些配置,具体如下:

daemonize yes  --- 后台启动
port 8001      --- 配置各自的端口号
dir "/redis‐6.2.7/data/" --- 数据存放路径,可以自定义
pidfile /var/run/redis_8001.pid  --- 把pid进程号写入pidfile配置的文件,后面跟的是端口号,不同的节点配置不同的端口号
cluster‐enabled yes   --- 启动集群模式
cluster‐config‐file nodes‐8001.conf -- 开启配置文件,后面跟的是端口号,不同的节点需要改成各自的端口号
cluster‐node‐timeout 10000  --- 节点连接过期时间
protected‐mode no           --- 关闭保护模式
appendonly yes            

配置完成之后再启动六个节点
在这里插入图片描述

启动完成之后,执行下命令创建Redis Cluster 集群

src/redis‐cli ‐‐cluster create ‐‐cluster‐replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
 --- 创建命令后面跟的就是每一个节点的ip和端口

出现如下消息就代表Redis Cluster集群创建成功

在这里插入图片描述

创作不易,希望多多点赞支持下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值