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

最近公司项目中单机的redis总是出现各种宕机的问题,导致系统部分瘫痪,为了解决这个问题,打算搭建一套主从+哨兵模式的Redis形式的集群,废话不多说,上干货!!!

目录:

一:Redis主从模式搭建过程

二:Redis主从模式搭建过程

三:Springboot整合集群相关配置



一:Redis主从模式搭建过程

1.下载最新且稳定的安装包


2.文件上传到对应服务器文件夹中

/usr/local/soft

3.解压安装

tar -zxvf redis-stable.tar.gz

4.进入解压目录并运行编译

cd redis-stable

make && make install

5.进入Redis默认安装路径

cd /usr/local/bin

6.新建Redis主从需要的文件以及文件夹

cd /usr/local

mkdir redis-7.0

cd redis-7.0

mkdir bin

mkdir conf

bin下面放启动文件 conf下面放配置文件

7.复制相关文件到以上两个文件夹中

由于编译安装后的 src 下文件非常多,我们可以将几个常用的命令和 conf 配置文件复制出来进行统一管理:

cd /usr/local/soft/redis-stable/src

cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis-7.0/bin

cd /usr/local/soft/redis-stable

cp redis.conf /usr/local/redis-7.0/conf

cp sentinel.conf /usr/local/redis-7.0/conf

8.修改配置文件

cd /usr/local/redis-7.0/conf

vi redis.conf

# 保护模式关闭

protected-mode no

# 端口号

port 6479

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

daemonize yes

# 指定redis进程的PID文件存放位置

pidfile "/var/run/redis_6479.pid"

# log日志输出位置

logfile "./redis.log"

# 设置数据库数量

databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save 900 1

save 300 10

save 60 10000

# 指定本地数据库文件名

dbfilename "dump.rdb"

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

dir "/usr/local/redis-7.0/bin"

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

masterauth "123456"

# 是否只读

replica-read-only no

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

requirepass "123456"

##########其他配置默认即可,如有特殊需要自行查找修#############

9.配置从节点配置文件

cp redis.conf redis01.conf

cp redis.conf redis02.conf

vi redis01.conf

vi redis02.conf

redis01(6480) 和 redis02(6481)端口号不同,其它都一样即可

# 保护模式关闭

protected-mode no

# 端口号

port 6480

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

daemonize yes

# 指定redis进程的PID文件存放位置

pidfile "/var/run/redis_6480.pid"

# log日志输出位置

logfile "./redis.log"

# 设置数据库数量

databases 16

# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

save 900 1

save 300 10

save 60 10000

# 指定本地数据库文件名

dbfilename "dump01.rdb"

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

dir "/usr/local/redis-7.0/bin"

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

masterauth "123456"

# 是否只读

replica-read-only yes

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

requirepass "123456"

# 设置主机的 ip+ 端口,来指明主机的redis

replicaof 192.x.x.x 6479

##########其他配置默认即可,如有特殊需要自行查找修改########



二:哨兵搭建过程

1.修改哨兵配置文件

cd /usr/local/conf

vi sentinel.conf

# 关闭保护模式可以外部访问

protected-mode no

# 端口号

port 26479

# 支持后台启动

daemonize yes

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

pidfile "/var/run/redis-sentinel_26479.pid"

# 日志文件存放地址

logfile "/usr/local/redis-7.0/bin/sentinel-work-26479/sentinel-26479.log"

# sentinel工作目录(默认/tmp)

dir "/usr/local/redis-7.0/bin/sentinel-work-26479"

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

sentinel monitor mymaster 192.*.*.* 6479 2

# 当在Redis实例中开启了requirepass,这里就需要提供密码

sentinel auth-pass mymaster 123456

# 故障转移的超时时间,这里设置为三分钟

sentinel failover-timeout mymaster 180000

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

sentinel parallel-syncs mymaster 1

# 这里设置了主机多少秒无响应,则认为挂了

sentinel down-after-milliseconds mymaster 3000

2.剩余两个哨兵修改端口号以及日志文件名称,工作目录即可

cd /usr/local/redis-7.0/conf

cp sentinel.conf sentinel01.conf 

----端口26480(配置文件的26479全部替换为26480即可)

cp sentinel.conf sentinel02.conf

----端口26481(配置文件的26479全部替换为26481即可)




三:开放端口

1.开启防火墙

systemctl start firewalld

2.开放端口

firewall-cmd --zone=public --add-port=6479/tcp --permanent

firewall-cmd --zone=public --add-port=6480/tcp --permanent

firewall-cmd --zone=public --add-port=6481/tcp --permanent、

rewall-cmd --zone=public --add-port=26479/tcp --permanent

firewall-cmd --zone=public --add-port=26480/tcp --permanent

firewall-cmd --zone=public --add-port=26481/tcp --permanent、

3.重启防火墙

firewall-cmd --reload



四:启动redis服务以及哨兵

1.启动哨兵

cd /usr/local/redis-7.0/bin

./redis-sentinel /usr/local/redis-7.0/conf/sentinel.conf

./redis-sentinel /usr/local/redis-7.0/conf/sentinel01.conf

./redis-sentinel /usr/local/redis-7.0/conf/sentinel02.conf

2.查看哨兵信息

cd /usr/local/redis-7.0/bin

./redis-cli -p 26479

info sentinel

# Sentinel

sentinel_masters:1

sentinel_tilt:0

sentinel_tilt_since_seconds:-1

sentinel_running_scripts:0

sentinel_scripts_queue_length:0

sentinel_simulate_failure_flags:0

master0:name=mymaster,status=ok,address=192.*.*.*:6479,slaves=2,sentinels=3

从上面可以看到主节点为6479,这个时候就要优先启动节点为6479的redis服务,保证主节点优先启动,遵从哨兵的选举

3.启动redis主节点服务

cd /usr/local/redis-7.0/bin

./redis-server /usr/local/redis-7.0/conf/redis.conf

4.启动从节点

cd /usr/local/redis-7.0/bin

./redis-server /usr/local/redis-7.0/conf/redis01.conf

./redis-server /usr/local/redis-7.0/conf/redis02.conf

5.查看各个节点信息

cd /usr/local/redis-7.0/bin

./redis-cli -p 6479

127.0.0.1:6479> auth "123456"

OK

127.0.0.1:6479> info replication

# Replication

role:master

connected_slaves:2

slave0:ip=192.*.*.*,port=6480,state=online,offset=85926153,lag=1

slave1:ip=192.*.*.*,port=6481,state=online,offset=85926292,lag=0

master_failover_state:no-failover

master_replid:f67c98e3e0250987d0843002f016b45595939524

master_replid2:d1a1ee80c29746668605b2df22e8cddf1e7f007f

master_repl_offset:85926292

second_repl_offset:32549101

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:84875501

repl_backlog_histlen:1050792

以上信息可以看出redis服务已正常启动,之后可以自行测试,kill掉端口为6479的redis服务,哨兵将会在其它两个redis节点中重新选举一个为新的主节点。



五:Spring配置文件-yml

spring:

redis:

    #----------redis 一主二从哨兵模式 start--------------#

    sentinel:

      master: mymaster

      #哨兵ip地址和端口

      nodes: 192.*.*.*:26479,192.*.*.*:26480,192.*.*.*:26481

      #哨兵密码

      password: 123456

    #redis认证密码

    password: 123456

    #连接超时时间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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容