• 欢迎来到小爱博客,一个分享互联网IT技术的网站,喜欢就收藏吧!

Redis Sentinel安装与部署,实现redis的高可用

redis 小爱 4周前 (10-03) 31次浏览 已收录 0个评论 扫描二维码

前言

对于生产环境,高可用是避免不了要面对的问题,无论什么环境、服务,只要用于生产,就需要满足高可用;此文针对的是redis的高可用。

环境准备

redis版本:redis-3.0.0

linux:centos6.7

ip:192.168.11.202, 一台服务器上搭建搭建全部redis实例,包括数据节点实例以及哨兵(sentinel)实例

客户端jedis,基于spring-boot

redis主从复制

搭建一主二从的主从环境

  1、redis安装

安装很简单,网上资料很多,redis官网也有说明;主要就是3步:解压,make,make install

  2、数据节点配置文件

redis解压后,redis home目录下有redis配置的样例文件,我们不直接在此文件上就行修改,在redis home目录下新建文件夹master_slave,将配置文件都放于此目录下

master配置文件:redis-6379.conf

port 6379
bind 192.168.11.202
requirepass "myredis"
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/opt/soft/redis/data"

#如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性
masterauth "myredis"

slave-1配置文件:redis-6380.conf

port 6380
bind 192.168.11.202
requirepass "myredis"
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/opt/soft/redis/data"

#如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性
masterauth "myredis"
slaveof 192.168.11.202 6379

slave-2配置文件:redis-6381.conf

port 6381
bind 192.168.11.202
requirepass "myredis"
daemonize yes
logfile "6381.log"
dbfilename "dump-6381.rdb"
dir "/opt/soft/redis/data"

#如若master设置了认证密码,那么所有redis数据节点都配置上masterauth属性
masterauth "myredis"
slaveof 192.168.11.202 6379

  3、节点启动

如下相关路径需要根据自己的情况进行改动,可能和我的不一样

[root@slave1 master_slave]# cd /opt/redis-3.0.0/master_slave/
[root@slave1 master_slave]# ./../src/redis-server redis-6379.conf 
[root@slave1 master_slave]# ./../src/redis-server redis-6380.conf 
[root@slave1 master_slave]# ./../src/redis-server redis-6381.conf

确认主从关系

[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6379 -a myredis info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.11.202,port=6380,state=online,offset=393,lag=0
slave1:ip=192.168.11.202,port=6381,state=online,offset=393,lag=0
master_repl_offset:393
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:392

还可以从从节点视角来看:[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6380 -a myredis info replication

如若进行顺利,按如上配置,一主二从环境搭建完毕

  4、从节点作用

主要两个作用:1、作为主节点的一个备份,一旦主节点出现故障,从节点可以作为后备”顶”上来,并且保证数据尽量不丢失(主从复制是最终一致性);2、从节点可以拓展主节点的能力,一旦主节点不能支撑大并发的读操作,从节点可以在一定程度上帮助主节点分担读压力

  5、主从复制问题

1、一旦主节点出现故障,需要手动将一个从节点晋升为主节点,同时需要修改应用方的主节点地址,还需要命令其他从节点去复制新的主节点,整个过程需要人工干预

2、主节点的写能力受到单机的限制

3、主节点的存储能力受到单机的限制

redis sentinel部署

此片主要讲通过sentinel解决上述问题1,问题2、3则在下篇博客进行说明

  1、3个sentinel节点的配置文件基本一致,区别的只是端口

sentinel-26379.conf

port 26379
daemonize yes
logfile "26379.log"
dir "/opt/soft/redis/data"
sentinel monitor mymaster 192.168.11.202 6380 2
#redis数据master节点设置了认证,则需要如下配置
sentinel auth-pass mymaster myredis
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

sentinel-26380.conf

port 26380
daemonize yes
logfile "26379.log"
dir "/opt/soft/redis/data"
sentinel monitor mymaster 192.168.11.202 6380 2
#redis数据master节点设置了认证,则需要如下配置
sentinel auth-pass mymaster myredis
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

sentinel-26381.conf

port 26381
daemonize yes
logfile "26379.log"
dir "/opt/soft/redis/data"
sentinel monitor mymaster 192.168.11.202 6380 2
#redis数据master节点设置了认证,则需要如下配置
sentinel auth-pass mymaster myredis
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

  2、启动sentinel

[root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26379.conf 
[root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26380.conf 
[root@slave1 master_slave]# ./../src/redis-sentinel sentinel-26381.conf

  3、sentinel确认

[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
master0:name=mymaster,status=ok,address=192.168.11.202:6379,slaves=2,sentinels=3

Redis  Sentinel 最终拓扑结构

 

  4、高可用测试

手动停掉6379实例或者kill掉6379实例

[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6379 -a myredis
192.168.11.202:6379> shutdown

查看26379.log

master节点已经自动切换到192.168.11.202:6380了,重启6379,6379则是6378的从节点了。

[root@slave1 master_slave]# ./../src/redis-cli -h 192.168.11.202 -p 6380 -a myredis
192.168.11.202:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.11.202,port=6381,state=online,offset=80802,lag=1
slave1:ip=192.168.11.202,port=6379,state=online,offset=80802,lag=1
master_repl_offset:80945
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:80944

客户端(Jedis)连接

基于spring-boot开发,spring-boot-test测试, 这两者本文不做说明,网上资料很多,不熟悉的自行去补充; 工程结构如下图

pom.xml

 View Code

redis-sentinel.properties

 View Code

RedisConfig.java

 View Code

Application.java

 View Code

RedisTest.java

 View Code

更多详情请上我的github

运行RedisTest.java的getNameTest方法(name属性已经在redis中设置,没设置的需要提前设置),得到结果:

注意点

1、有人可能会有这样的疑问:为什么通过sentinel来获取redis的连接,而不是直接连接master来获取redis连接呢?

试想一下,客户端直接通过master节点获取redis连接,如果master节点挂掉了,虽然Redis Sentinel可以完成故障转移,但是客户端无法获取这个变化,那么客户端就无法获取redis连接了;

最了解master节点信息的就是Sentinel节点集合,所以通过sentinel来获取redis连接就能满足高可用的要求了。

2、redis master的故障转移不影响客户端连接代码, 但是转移期间内,通过sentinel是获取不到主节点的连接的, 因为转移期间内master节点还没被选举出来;


小爱博客 , 版权所有
转载请注明原文链接:Redis Sentinel安装与部署,实现redis的高可用
喜欢 (1)
【你的支持, 我的动力】
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址