0


Linux下Redis哨兵集群模式搭建详解(1主2从+3哨兵)

文章目录


前言

Redis 是C语言开发的一个开源高性能键值对的内存数据库,可以用来做数据库、缓存、消息中间件等场景,是一种NoSQL(not-only sql,非关系型数据库)的数据库。最近项目使用的Redis版本需要升级到最新版本,以修补安全漏洞,搭建了一套主从+哨兵模式的Redis集群,今天就记录一下Redis哨兵模式搭建的过程。

一、Redis主从模式搭建

1.安装包下载
下载地址:
https://redis.io/download/#redis-downloads
当前最新稳定版为:redis-7.0.8,下载下来是一个tar.gz压缩包。
在这里插入图片描述

2.安装包路径
/data/hnisi/local/redis-7.0.8

3.解压安装:
tar -zxvf redis-stable.tar.gz

4.进入解压后的目录运行编译命令
cd redis-stable
make && make install

5.进入redis默认安装路径
cd /usr/local/bin

6.新建redis安装目录
mkdir redis-7.0
cd redis-7.0
mkdir bin
mkdir config
在 redis-7.0目录下分别建bin和config两个目录,bin目录存放redis的启动文件,工作区,以及日志信息,config目录专门存放各种配置文件;

7.复制启动文件和配置文件
由于编译安装后的 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理,如下:
cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-7.0/bin

cp redis.config /usr/local/redis-7.0/bin/config

cp sentinel.config /usr/local/redis-7.0/bin/config

8.配置conf文件
cd /usr/local/redis-7.0/config
vim redis.config

修改主节点配置文件:
# 绑定的主机地址(填redis安装服务器的业务私网地址)
bind:127.0.0.1

# redis进程的端口号
port:6479

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes

# log文件输出位置
logfile ./redis.log

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 230216

# 当master设置了密码保护时,slave服务连接master的密码
masterauth 230216

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6479.pid

# 指定本地数据库存放目录(默认当前redis安装目录)
dir  ./

# 指定本地数据库文件名
dbfilename dump.rdb

# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 9001
save 30010 
save 6010000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)

#replica-read-only支持参数[yes,no],no 支持读写操作
replica-read-only no(主节点可读可写)

9.先开启防火墙,开放指定端口6479:
systemctl start firewalld
firewall-cmd --zone=public --add-port=6479/tcp --permanent

10.重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

11.启动主节点redis服务
进入bin目录启动服务:
./redis-server /usr/local/redis-7.0/config/redis.conf

12.查看6479节点信息
./redis-cli -h 173.x.x.x -p 6479
(注意需要输入密码auth password,否则提示NOAUTH Authentication required.)

输入密码:
auth 230216

查看节点信息:
info replication

exit退出

13.配置从节点
(1)修改从节点配置文件redis01.conf:

# 绑定的主机地址(ip换成自己机器的地址)
bind:127.0.0.1

# redis进程的端口号
port 6480

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes

# log文件输出位置
logfile ./redis.log

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 230216

# 当master设置了密码保护时,slave服务连接master的密码
masterauth 230216

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6480.pid

# 指定本地数据库存放目录(默认当前redis安装目录)
dir  ./

# 指定本地数据库文件名
dbfilename dump01.rdb

# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 9001
save 30010 
save 6010000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)

#replica-read-only支持参数[yes,no],no 支持读写操作
replica-read-only yes

#设置主机的 ip+ 端口,来指明主机的redis
replicaof 173.x.x.x 6479  (从节点需要额外设置的参数)

(2)修改从节点配置文件redis02.conf:
参考redis01.conf配置文件,修改端口号信息即可:

# 绑定的主机地址(ip换成自己机器的地址)
bind:127.0.0.1

# redis进程的端口号
port 6481

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码,开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以开启;否则最好关闭设置为no。
protected-mode yes

# redis进程是否以守护进程的方式运行,yes为是(后台运行),no为否(不以守护进程的方式运行会占用一个终端)。
daemonize yes

# log文件输出位置
logfile ./redis.log

# 设置redis连接密码,如果配置了连接密码,客户端在连接redis是需要通过AUTH<password>命令提供密码,默认关闭
requirepass 230216

# 当master设置了密码保护时,slave服务连接master的密码
masterauth 230216

# 指定redis进程的PID文件存放位置
pidfile /var/run/redis_6481.pid

# 指定本地数据库存放目录(默认当前redis安装目录)
dir  ./

# 指定本地数据库文件名
dbfilename dump02.rdb

# 设置数据库的数量,默认为0可以使用select <dbid>命令在连接上指定数据库id
databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
save 9001
save 30010 
save 6010000
(分别表示 900 秒(15 分钟)内有 1 个更改,300 秒(5 分钟)内有 10 个更改以及 60 秒内有 10000 个更改。)

#replica-read-only支持参数[yes,no],no 支持读写操作
replica-read-only yes

#设置主机的 ip+ 端口,来指明主机的redis
replicaof 127.0.0.16479  (从节点需要额外设置的参数,ip换成自己机器的地址)

(3)开放指定端口号
firewall-cmd --zone=public --add-port=6480/tcp --permanent
firewall-cmd --zone=public --add-port=6481/tcp --permanent

(4)重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

(5)启动两个从节点
./redis-server /usr/local/redis-7.0/config/redis01.conf
./redis-server /usr/local/redis-7.0/config/redis02.conf

ps:这里我是一台服务器起一主两从三个节点,所以用了三个端口号来区分服务,如果三台机器来做主从搭建,配置文件就可以用同一个端口号。

14.查看三个redis节点信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到一个master节点,两个slave节点。

15、主从数据同步验证
接下来我们在主机(master)添加几条数据,看从机(slave)是否可以获取到,如果能获取,说明数据已经同步到了从机,主机添加数据,如下:
在这里插入图片描述

16.关闭redis服务
进入6479节点redis客户端:
./redis-cli -h 173.x.x.x -p 6479
shutdown

二、Redis哨兵集群搭建

1.进入到config目录下:
cd /usr/local/redis-7.0/config/

2.修改第一个哨兵节点的配置文件:
vim sentinel.conf

#端口默认为26379。
port:26479

#关闭保护模式,可以外部访问
protected-mode:no

#设置为后台启动
daemonize:yes

#日志文件
logfile:./sentinel-26479.log

#指定主机IP地址和端口,并且指定当有2台哨兵认为主机挂了,则对主机进行容灾切换
sentinel monitor mymaster 173.x.x.x 64792

#当在Redis实例中开启了requirepass,这里就需要提供密码
sentinel auth-pass mymaster 230216

#这里设置了主机多少秒无响应,则认为挂了
sentinel down-after-milliseconds mymaster 3000

#主备切换时,最多有多少个slave同时对新的master进行同步,这里设置为默认的1
sentinel parallel-syncs mymaster 1

#故障转移的超时时间,这里设置为三分钟
sentinel failover-timeout mymaster 180000

#sentinel工作目录(默认/tmp)
dir  ./sentinel-work-26479

#守护进程pid存储文件(默认位置 /var/run/redis-sentinel.pid)
pidfile /var/run/redis-sentinel_26479.pid

# 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码
# sentinel auth-pass <master-name><password>  
sentinel auth-pass mymaster 230216

剩下两个sentinel节点配置改改端口号,日志文件名称,工作目录名称就好了,其他和上边第一个节点配置一样,不在赘述。

ps:
如果是三台机器分布式部署三个sentinel节点,就直接复制sentinel.conf文件在另外两台机器启动服务就好了,不用修改端口号,也无需区分工作目录和日志文件。我这里是在一台机器启动三个节点,所以做了端口号的区分!!!

3.防火墙设置
#开放端口
firewall-cmd --add-port=26479/tcp --permanent --zone=public
firewall-cmd --add-port=26480/tcp --permanent --zone=public
firewall-cmd --add-port=26481/tcp --permanent --zone=public

#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

4.创建sentinel工作空间目录
cd /usr/local/redis-7.0/bin
创建三个工作目录:
mkdir sentinel-work-26479
mkdir sentinel-work-26480
mkdir sentinel-work-26481

5.启动三个哨兵
./redis-sentinel /usr/local/redis-7.0/config/sentinel.conf
./redis-sentinel /usr/local/redis-7.0/config/sentinel01.conf
./redis-sentinel /usr/local/redis-7.0/config/sentinel02.conf

6.查看三个哨兵节点信息
./redis-cli -p 26479
info sentinel
可以看到一个master主节点,两个salve节点状态,三个哨兵节点都正常。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.容灾切换验证
先模拟主机宕机,将主机 redis 服务关闭,进入6479节点redis客户端:
./redis-cli -h 173.x.x.x -p 6479
auth 230216
shutdown
或者使用命令: redis-cli -h host -p port -a password #redis-cli –h IP地址 –p 端口 –a 密码
在这里插入图片描述
可以看到6479节点已下线,服务无法连接到;同时连接6480节点redis客户端,发现6480从节点已成为新的主节点,6481是主节点6480的从节点,主从切换成功。
在这里插入图片描述
在这里插入图片描述
再次启动6479节点,发现该节点已成为节点6480的从节点:
在这里插入图片描述

三.springBoot整合Redis哨兵模式

1.引入redis依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2.yml配置文件

spring:
    redis:
        #----------redis 一主二从哨兵模式 start--------------#
        sentinel:
          master: mymaster
          #哨兵ip地址和端口
          nodes:173.xx.xx.xx:26479,173.xx.xx.xx:26480,173.xx.xx.xx:26481
          #哨兵密码
          password:230216
        #redis认证密码
        password:230216
        #连接超时时间ms
        timeout:6000
        #数据库分片
        database:1 
        lettuce:
          pool:
            max-active:10 # 连接池最大连接数(使用负值表示没有限制),如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)
            max-idle:8   # 连接池中的最大空闲连接 ,默认值也是8
            max-wait:100 # # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
            min-idle:2    # 连接池中的最小空闲连接 ,默认值也是0
          shutdown-timeout:100ms

总结

可以看到,当主机6479挂了的时候,一直连接主机被拒绝,当哨兵选举6480为新的主机后,它成功执行重写了配置文件,并且连接了其他从机。至此,主从+哨兵的集群架构搭建完毕。

标签: redis linux 数据库

本文转载自: https://blog.csdn.net/weixin_42925623/article/details/129192097
版权归原作者 通道已损坏 所有, 如有侵权,请联系我们删除。

“Linux下Redis哨兵集群模式搭建详解(1主2从+3哨兵)”的评论:

还没有评论