【redis】redis高可用 哨兵模式 一主二从三哨兵部署教程

哨兵模式:自动主从同步、自动选举主节点;基本可以满足大部分业务场景;
在针对大规模数据和高并发请求的场景、数据不能丢失,才需要用到集群模式。

本文教程基于redis3 , centos 8 stream操作系统,理论上来说 redis3也好 redis6也罢 ,centos和类centos系统都通用。

安装redis

  1. 下载redis包、解压

    如果没有c++环境 需要先安装

    yum -y install gcc gcc-c++ make
    

    下载redis:

    wget http://download.redis.io/releases/redis-3.2.6.tar.gz
    

    解压redis:

    tar -zxvf redis-3.2.6.tar.gz
    

    进入redis的解压目录
    (假设当前在在 /app/redis/ 目录下)

    cd redis-3.2.6/
    

    编译redis

    make
    

    进入src目录

    cd src
    

    编译成功src目录下会有 redis-server 以及 redis-sentinel文件

配置redis

配置redis.conf

进入目录:

cd /app/redis/redis-3.2.6/

编辑配置文件:

vim redis.conf

核心修改地方:

主节点


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0

# 允许redis后台运行
daemonize yes

# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6379.log"

# 设置为no,允许外部网络访问
protected-mode no

# redis端口
port 6379

# 设置redis密码
requirepass 123456

# 主从同步master的密码
masterauth 123456

# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no

从节点1

(核心区别在于配置文件最后一行需要指定主节点)

tips:由于博主在同一台机器部署,所以port和logfile也有变动;
同一机器部署时,需要复制一个redis.tar包 解压,将改好的从节点配置文件复制过去,并编译


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0

# 允许redis后台运行
daemonize yes

# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6389.log"

# 设置为no,允许外部网络访问
protected-mode no

# redis端口 博主在同一台机器模拟部署,所以改了端口
port 6389

# 设置redis密码
requirepass 123456

# 主从同步master的密码
masterauth 123456

# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no

# 从节点核心配置:指定主节点地址 redis5以上为replicaof 
slaveof 192.168.0.1 6379

从节点2:
与从节点1相似,改了个port


# 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
bind 0.0.0.0

# 允许redis后台运行
daemonize yes

# 设置redis日志存放路径 需要先手动touch创建该文件
logfile "/app/redis/log/redis_6399.log"

# 设置为no,允许外部网络访问
protected-mode no

# redis端口 博主在同一台机器模拟部署,所以改了端口
port 6399

# 设置redis密码
requirepass 123456

# 主从同步master的密码
masterauth 123456

# appendonly 一般保持默认的no就可以 , 取决业务是否需要开启AOF
appendonly no

# 从节点核心配置:指定主节点地址 redis5以上为replicaof 
slaveof 192.168.0.1 6379

注意: 哨兵模式不需要开启 cluster-enable!

配置sentinel.conf

主节点:

# 修改Sentinel监听端口
port 26379

# 设置为no,允许外部网络访问 (不能漏了)
protected-mode no

# 允许Sentinel后台运行
daemonize yes

# 设置Sentinel日志存放路径 同样需要手动touch创建
logfile "/app/redis/log/redis_6379_sentinel.log"


#  mymaster:master名称可自定义,127.0.0.1 6379 :redis主节点IP和端口,2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
sentinel monitor mymaster 127.0.0.1 6379 2

# 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒   
sentinel down-after-milliseconds mymaster 10000

# 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。
sentinel failover-timeout mymaster 60000

# 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
sentinel parallel-syncs mymaster 2

# 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
sentinel auth-pass mymaster 123456

两个从节点配置都是和主节点一样的,由于博主是同机器模拟部署,所以改了个port

从节点1修改部分:

# 修改Sentinel监听端口
port 26389

从节点2修改部分:

# 修改Sentinel监听端口
port 26399

启动redis和哨兵

cd /app/redis/

先启动redis主节点

./redis-3.2.6/src/redis-server ./redis-3.2.6/redis.conf

再启动redis两个从节点 (注意将路径和配置文件名 改成自己的)

./redis_s1/src/redis-server ./redis_s1/redis_s1.conf
./redis_s2/src/redis-server ./redis_s2/redis_s2.conf

先启动sentinel哨兵主节点

./redis-3.2.6/src/redis-sentinel ./redis-3.2.6/sentinel.conf

再启动sentinel哨兵两个从节点 (注意将路径和配置文件名 改成自己的)

./redis_s1/src/redis-sentinel ./redis_s1/sentinel_s1.conf
./redis_s2/src/redis-sentinel ./redis_s2/sentinel_s2.conf

springboot项目整合

maven依赖

       <!-- Spring Data Redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
        <!-- Lettuce Core, 用于Redis客户端连接 -->
        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </dependency>

yml配置

特别注意:nodes配置的是哨兵的端口,所以这也是为什么我们在sentinel.conf里面也要关闭protected mode的原因

spring:

  redis:
    sentinel:
      master: mymaster
      nodes: 192.168.0.1:26379,192.168.0.1:26380,192.168.0.1:26381
    ##redis 单机环境配置
#    port: 6379
#    host: 192.168.0.1
#    ssl: false
    password: 123456
    database: 1

验证

  1. 我们可以通过可视化图形界面来验证, 在主节点增加一个key,我们打开从节点 发现key自动同步过去了,说明自动同步成功; 回到服务器将主节点kill -9 杀掉,在从节点1新增一个key, 从节点2能自动同步 ; 重新启动主节点 主节点也能拉取到从节点新增的数据 ,则表明集群正常运转。
    在这里插入图片描述
  2. 可以通过redis自带的cli 检验:
cd /app/redis/redis-3.2.6/src
./redis-cli 

输入密码

auth 123456

查看集群

info replication

按照教程步骤 6379端口对应的redis 本来是主节点,博主将主节点kill -9,并重启6379。
如下图:成功选举了6389为主节点,6379变成了slave
在这里插入图片描述

图形界面

redis图形界面 我们可以使用 Another-Redis-Desktop-Manager 更加好用 ,在github即可下载.

可以直连sentinel,需要注意的是:当勾选了sentinel port填写的是sentinel的端口, password不要输入密码,而是在redis node password输入密码
在这里插入图片描述

如果是普通的连接,如下即可:
在这里插入图片描述

新版的Another-Redis-Desktop-Manager 也支持查看redis stream格式(redis 5的新特性)的数据

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟秋与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值