redis 系列25 哨兵Sentinel (高可用演示 下)

一. Sentinel 高可用环境准备

  1.1 Sentinel 集群环境

环境 说明
操作系统版本 CentOS  7.4.1708 
IP地址 172.168.18.200
网关Gateway 172.168.18.1
DNS 172.168.16.11
三个sentinel服务端口 26379,26380,26381
Sentinel密码 无 不设置
是否RDB持久化 不支持
是否 AOF持久化 不支持

  1.2 Redis主库库环境,主从库搭建在(redis 系列22 复制Replication 下)

主库ip 172.168.18.201 6379
从库ip 172.168.18.203 6379,  172.168.18.200 6379

二.  Sentinel 配置说明

  2.1 启动Sentinel服务方法

    对于启动Sentinel服务有二种方法:

    (1)是使用redis-sentinel程序来启动 redis-sentinel  sentinel.conf。

    (2)是使用redis-server 程序来启动一个运行在Sentinel模式下的Redis服务器 redis-server  sentinel.conf  --sentinel。

    启动 Sentinel 实例必须指定相应的配置文件, 系统会使用配置文件来保存 Sentinel 的当前状态, 并在 Sentinel 重启时通过载入配置文件来进行状态还原。查看redis-sentinel程序,只是一个软链接,如下所示:

    lrwxrwxrwx. 1 root root      12 12月 18 16:30 redis-sentinel -> redis-server     

  2.2  sentinel.conf 参数说明

    下面解说sentinel.conf文件中,所需的至少配置参数描述:

    -- 监控主库, 名称:mymaster可以自定义, IP端口: 127.0.0.1 6379,判断主库客观下线需要2个Sentinel 同意
        sentinel monitor mymaster 127.0.0.1 6379 2

    -- 认为主库已经下线所需的毫秒数,例如下线状态超过60000则判定已经下线。
    sentinel down-after-milliseconds mymaster 60000

    -- 指定故障转移超时时间,以毫秒为单位,配置所有slaves指向新的master所需的最大时间
    sentinel failover-timeout mymaster 180000

    -- 在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步,这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。如果这个数字越大,就意味着越 多的slave因为replication而不可用。
    parallel-syncs mymaster 1

    --设置连接master的密码。
    sentinel auth-pass mymaster 123456

三.  Sentinel高可用搭建

  只使用单个Sentinel进程来监控redis集群是不可靠的,当单个Sentinel进程down后,整个集群系统将无法按照预期的方式运行。所以有必要将sentinel集群,在IP 200的电脑上将启动三个Sentinel进程,实现集群。

  3.1  添加3个Sentinel.conf文件

    在ip 为200的sentinel集群服务器上,在redis运行目录下,增加3个配置文件,名称分别为:Sentinel_26379.conf, Sentinel_26380.conf, Sentinel_26381.conf。相关脚本如下:

    --  Sentinel_26379.conf文件配置参数
    protected-mode no
    port 26379
    sentinel monitor mymaster 172.168.18.201  6379 2
    sentinel auth-pass mymaster 123456
    daemonize yes
    logfile "/usr/local/redis/bin/sentinel_26379.log"
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000

    --  Sentinel_26380.conf文件配置参数如下,其它参数与Sentinel_26379文件一样
    port 26380
    logfile "/usr/local/redis/bin/sentinel_26380.log"

    --  Sentinel_26381.conf文件配置参数如下,其它参数与Sentinel_26379文件一样
    port 26381
    logfile "/usr/local/redis/bin/sentinel_26381.log"

  --增加后文件目录如下:

[[email protected] bin]# pwd
/usr/local/redis/bin
[[email protected] bin]# ls -l
总用量 22012
-rw-r--r--. 1 root root      92 12月 18 16:38 dump.rdb
-rw-r--r--. 1 root root   57765 12月 18 16:36 redis_bak.conf
-rwxr-xr-x. 1 root root 2452648 12月 18 16:30 redis-benchmark
-rwxr-xr-x. 1 root root 5754888 12月 18 16:30 redis-check-aof
-rwxr-xr-x. 1 root root 5754888 12月 18 16:30 redis-check-rdb
-rwxr-xr-x. 1 root root 2617840 12月 18 16:30 redis-cli
-rw-r--r--. 1 root root   57762 12月 20 14:22 redis.conf
lrwxrwxrwx. 1 root root      12 12月 18 16:30 redis-sentinel -> redis-server
-rwxr-xr-x. 1 root root 5754888 12月 18 16:30 redis-server
-rw-r--r--. 1 root root    7992 12月 20 14:22 sentinel_26379.conf
-rw-r--r--. 1 root root    6887 12月 20 14:23 sentinel_26379.log
-rw-r--r--. 1 root root    7992 12月 20 14:22 sentinel_26380.conf
-rw-r--r--. 1 root root    7081 12月 20 14:23 sentinel_26380.log
-rw-r--r--. 1 root root    7992 12月 20 14:22 sentinel_26381.conf
-rw-r--r--. 1 root root    8465 12月 20 14:23 sentinel_26381.log
-rw-r--r--. 1 root root    7710 12月 19 14:21 sentinel.conf

  

  3.2 启动三个sentinel服务

     [[email protected] bin]# pwd
    /usr/local/redis/bin
    [[email protected] bin]# ./redis-sentinel ./sentinel_26379.conf
    [[email protected] bin]# ./redis-sentinel ./sentinel_26380.conf
    [[email protected] bin]# ./redis-sentinel ./sentinel_26381.conf

  (1)查看进程信息

[[email protected] bin]# ps -ef | grep redis-sentinel
root       7567      1  0 14:28 ?        00:00:00 ./redis-sentinel *:26379 [sentinel]
root       7572      1  0 14:28 ?        00:00:00 ./redis-sentinel *:26380 [sentinel]
root       7577      1  0 14:28 ?        00:00:00 ./redis-sentinel *:26381 [sentinel]

  (2)查看主库与sentinel关联信息(连接一个sentinel客户端)

[[email protected] bin]# ./redis-cli -h 172.168.18.200 -p 26381
172.168.18.200:26381> sentinel master mymaster
 1) "name"
 2) "mymaster"
 3) "ip"
 4) "172.168.18.201"
 5) "port"
 6) "6379"
 7) "runid"
 8) "26cd40ba173490e2ceac61433211af7dc7716dda"
 9) "flags"
10) "master"
11) "link-pending-commands"
12) "0"
13) "link-refcount"
14) "1"
15) "last-ping-sent"
16) "0"
17) "last-ok-ping-reply"
18) "169"
19) "last-ping-reply"
20) "169"
21) "down-after-milliseconds"
22) "30000"
23) "info-refresh"
24) "3982"
25) "role-reported"
26) "master"
27) "role-reported-time"
28) "24109"
29) "config-epoch"
30) "0"
31) "num-slaves"
32) "2"
33) "num-other-sentinels"
34) "2"
35) "quorum"
36) "2"
37) "failover-timeout"
38) "180000"
39) "parallel-syncs"
40) "1"

  (3)sentinel客户端查看群集信息,可以看到此时主库ip为201

    172.168.18.200:26380> info sentinel
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=mymaster,status=ok,address=172.168.18.201:6379,slaves=2,sentinels=3

 

四.Sentinel高可用测试

  4.1 测试主从同步

    -- 主库写入一个键值对
    [[email protected] bin]# ./redis-cli -h 172.168.18.201 -p 6379 -a 123456
    172.168.18.201:6379> set mysentinel  "hello"
    OK
    -- 从库203 读取了该键
    [[email protected] redis-4.0.6]# redis-cli -h 172.168.18.203 -p 6379 -a 123456
    172.168.18.203:6379> get mysentinel
    "hello"
    -- 从库200 读取了该键
    [[email protected] bin]# ./redis-cli -h 172.168.18.200 -p 6379 -a     123456
    172.168.18.200:6379> get mysentinel
    "hello"

  4.2 测试故障转移

    (1)  首先把主库201的down掉

    172.168.18.201:6379> shutdown
    not connected>

    (2) 在sentinel客户端查看群集信息,发现此时已经实现了故障转移,已经将从库 200 升级成为了新主库

    172.168.18.200:26381> info sentinel
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
   master0:name=mymaster,status=ok,address=172.168.18.200:6379,slaves=2,sentinels=3

    (3) 在redis客户端,查看ip 200的复制信息,角色已成了为master

    172.168.18.200:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=172.168.18.203,port=6379,state=online,offset=204170,lag=0
    master_replid:7464817ee3337cc8f2b508577287b0f0c385a859
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:204170
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:190908
    repl_backlog_histlen:13263

    (4)此时ip200 的redis服务,由之前的只读,变成了可读写。 

    172.168.18.200:6379> set mastername  "ip200"
    OK
    --此时只有203一个从库,成功读取了该键
    172.168.18.203:6379> get mastername
    "ip200"

    (5)查看其中的一个sentinel日志,下面是关于故障转移的相关信息:

[[email protected] bin]# cat sentinel_26379.log
8516:X 20 Dec 14:22:31.394 # +sdown master mymaster 172.168.18.201 6379
8516:X 20 Dec 14:22:31.496 # +new-epoch 1
8516:X 20 Dec 14:22:31.499 # +vote-for-leader 300fd3d5b5673885c17942c465ec7a09f8f8e2ad 1
8516:X 20 Dec 14:22:32.271 # +config-update-from sentinel 300fd3d5b5673885c17942c465ec7a09f8f8e2ad 172.168.18.200 26381 @ mymaster 172.168.18.201 6379
8516:X 20 Dec 14:22:32.272 # +switch-master mymaster 172.168.18.201 6379 172.168.18.200 6379
8516:X 20 Dec 14:22:32.272 * +slave slave 172.168.18.203:6379 172.168.18.203 6379 @ mymaster 172.168.18.200 6379
8516:X 20 Dec 14:22:32.272 * +slave slave 172.168.18.201:6379 172.168.18.201 6379 @ mymaster 172.168.18.200 6379
8516:X 20 Dec 14:23:02.323 # +sdown slave 172.168.18.201:6379 172.168.18.201 6379 @ mymaster 172.168.18.200 6379

  总结:sentinel高可用是基于复制来实现的。在sentinel实现过程中:首先要先搭建好复制架构,并确保数据同步正常运行;最后在复制基础上,再搭建sentinel群集服务架构,并测试好故障转移切换。

  

原文地址:https://www.cnblogs.com/MrHSR/p/10144523.html

时间: 2024-10-13 06:06:10

redis 系列25 哨兵Sentinel (高可用演示 下)的相关文章

redis 系列23 哨兵Sentinel (上)

一.概述 Sentinel(哨岗或哨兵)是Redis的高可用解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求. 1.1 下面是一个Sentinel系统与主从服务器之间的关系: (1) 双环图案的server1是当前的主服务器,以及ser

redis 系列24 哨兵Sentinel (中)

四. 检测下线状态 对于Redis的Sentinel中关于下线有两个不同的概念:(1)主观下线(Subjectively Down, 简称 Sdown) 指的是单个 Sentinel 实例对服务器做出的下线判断,此时不会进行故障转移.(2) 客观下线(Objectively Down, 简称 Odown)指的是多个 Sentinel 实例在对同一个服务器做出 Sdown 判断,此时目标sentinel会对主服务器进行故障转移.本篇具体详细介绍. 4.1 检测主观下线状态 默认情况下,Sentin

Redis Sentinel高可用架构

Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis sentinel高可用架构. 它的主要功能有以下几点 不时地监控redis是否按照预期良好地运行; 如果发现某个redis节点运行出现状况,能够通知另外一个进程(例如它的客户端); 能够进行自动切换.当一个master节点不可用时,能够选举出master的多个slave(如果有超过一个slave的话)中

Redis Sentinel 高可用实现说明

背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做下详细的说明. 安装:      这里对源码编译进行一下说明,本文实例的操作系统是Ubuntu16.04,使用Redis的版本是3.2.0.安装步骤如下: 下载源码包:wget http://download.redis.io/releases/redis-3.2.0.tar.gz 安装依赖包:su

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 http://www.tuicool.com/articles/naeEJbv 基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案 时间 2014-02-21 15:15:17  IT社区推荐资讯 原文  http://itindex.net/detail/48192-redis-sentinel-redis Redis Sentinel是一个分布式系统,可以部署多个Se

Redis 主从、哨兵Sentinel、Jedis

Redis 主从.哨兵Sentinel.Jedis 2017年02月15日 15:52:48 有且仅有 阅读数 6183 文章标签: redis主从sentineljedis 更多 分类专栏: 7/12 Database 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u010297957/article/details/55050098 上篇说到了Redis安装.运行.今天来看一看Red

Redis缓存,持久化,高可用

一,Redis作缓存服务器 ? 本篇博客是接着上一篇博客未分享完的技术点. ? redis作为缓存服务器是众多企业中的选择之一,虽然该技术很成熟但也是存在一定的问题.就是缓存带来的缓存穿透,缓存击穿,缓存失效问题,继而引用分布式锁. 1.1,缓存穿透 ? 在如今的项目中大多采用垂直的MVC架构,由service层去调用DAO层,然后DAO层再去查询数据库.而redis作为缓存服务器就是在service层去调用DAO层去查询时先去缓存服务器查询,如果存在则直接返回该数据,否则再去查询数据库.由此可

基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常

(转)基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案

转载自:http://warm-breeze.iteye.com/blog/2020413 本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Re