Redis Sentinel部署

2020-01-16

更多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 监控主从实例,自动进行故障恢复.如图所示 :
20150620161606990.jpg
sentinel是解决HA问题的,cluster是解决主从复制问题的,不重复,并且经常一起使用 .

Redis Sentinel 集群部署

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

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