Redis哨兵集群搭建 | 张扎瓦的博客

Redis哨兵集群搭建

搭建Redis哨兵主从复制集群,SpringBoot连接哨兵集群


redis哨兵最少需要三台服务器搭建(节点选举master,半数+1),其中master负责数据写入,slave节点进行数据同步。原则上,slave节点不允许写入数据。当有一台服务宕掉后,哨兵会从剩余的机器中选举一台作为master,从而达到服务高可用的目的。

接下来我使用3台虚拟机来演示一下具体的配置步骤。

ip 角色
192.168.0.74 master
192.168.0.61 slave
192.168.0.56 slave

安装redis

redis安装比较简单,从官网下载安装包,解压编译就可以直接使用。

  1. 解压程序包

    1
    tar -zxvf redis-5.0.7.tar.gz

    解压完成后,会在前目录下生成 redis-5.0.7目录

  2. 编译生成可执行文件

    进入 redis-5.0.7/src 目录,执行

    1
    make

    编译完成后,会在当前目录下生成可执行文件

    image-20200909143027180

    图中绿色的文件,就是编译后生成的可执行文件

配置redis.conf

使用vim打开redis.conf文件,修改如下配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#设置绑定的ip,一般为当前机器的ip地址,也可以设置为 0.0.0.0
bind 192.168.0.74
#是否设置后台执行
daemonize yes
#设置日志文件位置
logfile "/usr/local/redis/redis.log"
#设置工作目录
dir /data/redis
#设置同步数据时的密码
masterauth 123456
#客户端连接密码
requirepass 123456
#打开AOF持久化
appendonly yes

从节点配置增加:

1
2
# 主节点ip,端口
replicaof 192.168.0.74 6379

注意:配置logfile 和 dir 后,需要手动创建一下目录

配置sentinel.conf

使用vim打开sentinel.conf文件,修改如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
#设置是否后台运行
daemonize yes
#日志文件位置
logfile "/usr/local/redis/sentinel.log"
#设置工作目录
dir "/usr/local/redis/sentinel"
#设置监听的节点ip,端口号,选举节点需要哨兵同意个数
#判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
sentinel monitor mymaster 192.168.0.74 6379 2
#设置同步时的密码
sentinel auth-pass mymaster 123456
#master节点无法访问30秒,才算宕机,重新选举master节点
sentinel down-after-milliseconds mymaster 30000

其他两台的sentinel配置与此相同。

注意:配置logfile 和 dir 后,需要手动创建一下目录

启动服务

先启动redis,启动命令如下:

1
redis-server ../redis.conf

依次启动三个机器的redis,再依次启动三个哨兵,启动命令如下

1
redis-sentinel ../sentinel.conf

验证

数据同步演示

随便连接一台redis,输入 info replication,查看节点状态

image-20200909150527274

可以看到当前节点的角色和master节点的ip

连接到master节点,执行

1
set test1 1

image-20200909151145985

再随便连接一个slave节点,执行

1
keys *

image-20200909151219870

可以看到节点数据已经同步了

动图演示:

redis集群演示

宕机重新切换节点验证

将master节点的redis进程杀掉,等待十几秒,随便连接一个从节点,执行info replication,会从剩余的两个节点中选出一个master。

动图演示:

redis集群宕机演示

SpringBoot 连接哨兵集群

SpringBoot连接redis哨兵集群比较简单,修改application.properties 配置文件为:

1
2
3
4
5
#哨兵集群名称
spring.redis.sentinel.master=mymaster
#哨兵节点,多个节点使用英文的,分割
spring.redis.sentinel.nodes=10.71.55.81:26379,10.71.55.82:26379,10.71.55.83:26379
spring.redis.password=123456

注意:此处连接不能使用6379端口号,需要连接哨兵的端口号26379

如果我的文章对您有所帮助,不妨打赏一杯豆浆以资鼓励(○` 3′○)