Redis Sentinel部署
更多Sentinel配置请参考 Redis哨兵模式 , Redis sentinel介绍与部署
Redis是用C语言开发的一个开源的高性能键值对数据库(key_val) .他是一个NoSql数据库(缓存数据库)
->操作数据的本质是操作内存
->存储的特点是 :key_value键值对的形式,不需要做任何校验,直接存取.
Redis支持的键值数据类型
redis的value支持5种数据类型
1-->字符串(string)
2-->哈希(hash)
3-->字符串列表(list)
4-->字符串集合(set)
5-->有序字符串集合(sorted set )
Redis有16个数据库 ,库名不可以更改,但是可以切换,Redis数据库索引是0基的,不同的数据库之间,相同的key不会影响值的存取,不同的数据库下,相同的key取到各自的值.
Redis HA方案
HA(高可用性集群) ,是保证业务连续性的有效解决方案 ,一般有两个或者两个以上的节点 .且分为活动节点和备用节点 .当活动节点出现问题,导致正在运行的业务不能征程运行时,备用节点此时就会侦测到,并立即接续活动节点来执行任务.从而实现业务的不中断或短暂中断.
Redis一般以主/从方式部署 (这里讨论的应用从实例主要用于备份,主实例提供读写)该方式实现HA,有好几种方案 ,如 :keepalived,zookeeper,sentinel.我这里就直接使用sentinel了.
sentinel: 通过 Sentinel 监控主从实例,自动进行故障恢复.如图所示 :

sentinel是解决HA问题的,cluster是解决主从复制问题的,不重复,并且经常一起使用 .
Redis Sentinel 集群部署
Redis集群可以在一组Redis节点之间实现高可用性和sharding.在集群中会有 1 个 master 和多个 slave 节点。当 master 节点失效时,应选举出一个 slave 节点作为新的 master。然而 Redis 本身(包括它的很多客户端)没有实现自动故障发现并进行主备切换的能力,需要外部的监控方案来实现自动故障恢复。
Redis Sentinel是官方推荐的高可用性解决方案。它是 Redis 集群的监控管理工具,可以提供节点监控、通知、自动故障恢复和客户端配置发现服务。

docker-compose搭建Redis集群
version: '3.4'
services:
master:
image: redis
container_name: redis-master
restart: always
command: redis-server --requirepass myour2019
ports:
- 6382:6379
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro
- ./masterData:/data
networks:
- sentinel-master
slave1:
image: redis
container_name: redis-slave-1
restart: always
ports:
- 6380:6379
command: redis-server --slaveof redis-master 6379 --requirepass myour2019 --masterauth myour2019
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro
- ./slave1Data:/data
networks:
- sentinel-master
slave2:
image: redis
container_name: redis-slave-2
restart: always
ports:
- 6381:6379
command: redis-server --slaveof redis-master 6379 --requirepass myour2019 --masterauth myour2019
environment:
- TZ=Asia/Shanghai
volumes:
- /etc/localtime:/etc/localtime:ro
- ./slave2Data:/data
networks:
- sentinel-master
networks:
sentinel-master:
使用docker-compose搭建 Sentinel 集群
我们至少需要三个Sentinel服务,docker-compose.yml的配置如下
version: '3.4'
services:
sentinel1:
image: redis
container_name: redis-sentinel-1
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26379:26379
volumes:
- ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf
- /etc/localtime:/etc/localtime:ro
sentinel2:
image: redis
container_name: redis-sentinel-2
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26380:26379
volumes:
- ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf
- /etc/localtime:/etc/localtime:ro
sentinel3:
image: redis
container_name: redis-sentinel-3
command: redis-sentinel /usr/local/etc/redis/sentinel.conf
restart: always
ports:
- 26381:26379
volumes:
- ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf
- /etc/localtime:/etc/localtime:ro
networks:
default:
external:
name: sentinel-master
Sentinel核心配置文件
我们在docker-compose.yml中已经定义好了配置文件名sentinel1.conf,sentinel2.conf,sentinel3.conf
port 26379
dir /tmp
# 自定义集群名,其中 47.102.148.144 为 redis-master 的 ip,6382 为 redis-master 的端口,2 为最小投票数(因为有 3 台 Sentinel 所以可以设置成 2)
sentinel monitor mymaster 47.102.148.144 6382 2
# 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达
sentinel down-after-milliseconds mymaster 30000
# 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs mymaster 1
# 故障转移超时时间为180000毫秒
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
# 设置sentinel连接的master和slave的密码,这个需要和redis.conf文件中设置的密码一样
sentinel auth-pass mymaster RedisPassword
三个配置文件一样即可.
查看集群是否生效
进入Sentinel容器,使用Sentinel API查看监控情况
docker exec -it 容器ID /bin/bash
redis-cli -p 26379
sentinel master 集群名称
sentinel slaves 集群名称
标题:Redis Sentinel部署
作者:yifabukeshoushi
地址:https://blog.tyxgg.cn/articles/2020/01/16/1579108728749.html