一. 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.  root root       12月  : redis-sentinel -> redis-server     

  2.2  sentinel.conf 参数说明

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

    -- 监控主库, 名称:mymaster可以自定义, IP端口: 127.0.0.1 ,判断主库客观下线需要2个Sentinel 同意
sentinel monitor mymaster 127.0.0.1 -- 认为主库已经下线所需的毫秒数,例如下线状态超过60000则判定已经下线。
sentinel down-after-milliseconds mymaster -- 指定故障转移超时时间,以毫秒为单位,配置所有slaves指向新的master所需的最大时间
sentinel failover-timeout mymaster -- 在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步,这个值设为 来保证每次只有一个slave 处于不能处理命令请求的状态。如果这个数字越大,就意味着越 多的slave因为replication而不可用。
parallel-syncs mymaster --设置连接master的密码。
sentinel auth-pass mymaster

三.  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
sentinel monitor mymaster 172.168.18.201
sentinel auth-pass mymaster
daemonize yes
logfile "/usr/local/redis/bin/sentinel_26379.log"
sentinel down-after-milliseconds mymaster
sentinel parallel-syncs mymaster
sentinel failover-timeout mymaster -- Sentinel_26380.conf文件配置参数如下,其它参数与Sentinel_26379文件一样
port
logfile "/usr/local/redis/bin/sentinel_26380.log" -- Sentinel_26381.conf文件配置参数如下,其它参数与Sentinel_26379文件一样
port
logfile "/usr/local/redis/bin/sentinel_26381.log"

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

[root@localhost bin]# pwd
/usr/local/redis/bin
[root@localhost bin]# ls -l
总用量
-rw-r--r--. root root 12月 : dump.rdb
-rw-r--r--. root root 12月 : redis_bak.conf
-rwxr-xr-x. root root 12月 : redis-benchmark
-rwxr-xr-x. root root 12月 : redis-check-aof
-rwxr-xr-x. root root 12月 : redis-check-rdb
-rwxr-xr-x. root root 12月 : redis-cli
-rw-r--r--. root root 12月 : redis.conf
lrwxrwxrwx. root root 12月 : redis-sentinel -> redis-server
-rwxr-xr-x. root root 12月 : redis-server
-rw-r--r--. root root 12月 : sentinel_26379.conf
-rw-r--r--. root root 12月 : sentinel_26379.log
-rw-r--r--. root root 12月 : sentinel_26380.conf
-rw-r--r--. root root 12月 : sentinel_26380.log
-rw-r--r--. root root 12月 : sentinel_26381.conf
-rw-r--r--. root root 12月 : sentinel_26381.log
-rw-r--r--. root root 12月 : sentinel.conf

  

  3.2 启动三个sentinel服务

     [root@localhost bin]# pwd
/usr/local/redis/bin
[root@localhost bin]# ./redis-sentinel ./sentinel_26379.conf
[root@localhost bin]# ./redis-sentinel ./sentinel_26380.conf
[root@localhost bin]# ./redis-sentinel ./sentinel_26381.conf

  (1)查看进程信息

[root@localhost bin]# ps -ef | grep redis-sentinel
root : ? :: ./redis-sentinel *: [sentinel]
root : ? :: ./redis-sentinel *: [sentinel]
root : ? :: ./redis-sentinel *: [sentinel]

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

[root@localhost bin]# ./redis-cli -h 172.168.18.200 -p
172.168.18.200:> sentinel master mymaster
) "name"
) "mymaster"
) "ip"
) "172.168.18.201"
) "port"
) ""
) "runid"
) "26cd40ba173490e2ceac61433211af7dc7716dda"
) "flags"
) "master"
) "link-pending-commands"
) ""
) "link-refcount"
) ""
) "last-ping-sent"
) ""
) "last-ok-ping-reply"
) ""
) "last-ping-reply"
) ""
) "down-after-milliseconds"
) ""
) "info-refresh"
) ""
) "role-reported"
) "master"
) "role-reported-time"
) ""
) "config-epoch"
) ""
) "num-slaves"
) ""
) "num-other-sentinels"
) ""
) "quorum"
) ""
) "failover-timeout"
) ""
) "parallel-syncs"
) ""

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

    172.168.18.200:> info sentinel
# Sentinel
sentinel_masters:
sentinel_tilt:
sentinel_running_scripts:
sentinel_scripts_queue_length:
sentinel_simulate_failure_flags:
master0:name=mymaster,status=ok,address=172.168.18.201:,slaves=,sentinels=

 

四.Sentinel高可用测试

  4.1 测试主从同步

    -- 主库写入一个键值对
[root@hsr bin]# ./redis-cli -h 172.168.18.201 -p -a
172.168.18.201:> set mysentinel "hello"
OK
-- 从库203 读取了该键
[root@xuegod64 redis-4.0.]# redis-cli -h 172.168.18.203 -p -a
172.168.18.203:> get mysentinel
"hello"
-- 从库200 读取了该键
[root@localhost bin]# ./redis-cli -h 172.168.18.200 -p -a
172.168.18.200:> get mysentinel
"hello"

  4.2 测试故障转移

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

    172.168.18.201:> shutdown
not connected>

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

    172.168.18.200:> info sentinel
# Sentinel
sentinel_masters:
sentinel_tilt:
sentinel_running_scripts:
sentinel_scripts_queue_length:
sentinel_simulate_failure_flags:
  master0:name=mymaster,status=ok,address=172.168.18.200:,slaves=,sentinels=

    (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:> set mastername  "ip200"
OK
--此时只有203一个从库,成功读取了该键
172.168.18.203:> get mastername
"ip200"

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

[root@localhost bin]# cat sentinel_26379.log
:X Dec ::31.394 # +sdown master mymaster 172.168.18.201
:X Dec ::31.496 # +new-epoch
:X Dec ::31.499 # +vote-for-leader 300fd3d5b5673885c17942c465ec7a09f8f8e2ad
:X Dec ::32.271 # +config-update-from sentinel 300fd3d5b5673885c17942c465ec7a09f8f8e2ad 172.168.18.200 @ mymaster 172.168.18.201
:X Dec ::32.272 # +switch-master mymaster 172.168.18.201 172.168.18.200
:X Dec ::32.272 * +slave slave 172.168.18.203: 172.168.18.203 @ mymaster 172.168.18.200
:X Dec ::32.272 * +slave slave 172.168.18.201: 172.168.18.201 @ mymaster 172.168.18.200
:X Dec ::02.323 # +sdown slave 172.168.18.201: 172.168.18.201 @ mymaster 172.168.18.200

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

  

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

  1. redis 系列23 哨兵Sentinel (上)

    一.概述 Sentinel(哨岗或哨兵)是Redis的高可用解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器,以及这些主 ...

  2. redis 系列24 哨兵Sentinel (中)

    四. 检测下线状态 对于Redis的Sentinel中关于下线有两个不同的概念:(1)主观下线(Subjectively Down, 简称 Sdown) 指的是单个 Sentinel 实例对服务器做出 ...

  3. Redis Sentinel高可用架构

    Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...

  4. Redis Sentinel 高可用服务搭建

    阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...

  5. redis sentinel 高可用(HA)方案部署,及python应用示例

    redis sentinel(哨兵)高可用集群的部署方法,并通过 python 程序实例讲解如何使用 redis sentinel 简介 介绍 redis sentinel(哨兵)集群的部署,配置一主 ...

  6. 【转载】Redis Sentinel 高可用服务架构搭建

    作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...

  7. Redis Sentinel 高可用部署实践集群

    一.Redis Sentinel 介绍    1.Sentinel     数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...

  8. Redis哨兵模式高可用解决方案

    一.序言 Redis高可用有两种模式:哨兵模式和集群模式,本文基于哨兵模式搭建一主两从三哨兵Redis高可用服务. 1.目标与收获 一主两从三哨兵Redis服务,基本能够满足中小型项目的高可用要求,使 ...

  9. Redis Sentinel 高可用实现说明

    背景:      前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...

随机推荐

  1. Exp1 PC平台逆向破解 20164302 王一帆

    1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程 ...

  2. hive动态分区和混合分区

    各位看官,今天我们来讨论下再Hive中的动态分区和混合分区方面的一些知识点以及相关的一些问题. 前面我们已经讲过管理表和外部表的一般分区的一些知识点,对于需要对表创建很多的分区,那么用户就需要些很多的 ...

  3. VB.NET或C#报错:You must hava a license to use this ActiveX control.

    VB.NET或者C# winform开发时,如果使用了Microsoft Visual Basic 6.0 ActiveX,并动态创建该控件实例,那么程序移植到没有安装Visual Basic 6.0 ...

  4. JUC笔记

      3个售票员,卖30张票   package com.javase.thread;   import java.util.concurrent.locks.Lock; import java.uti ...

  5. sql server 查询当前月份日期列表数据

    SELECT ), ,) AS every_time, --日期 ,getdate())) ) AS Weekd --星期几 FROM master..spt_values n WHERE n.typ ...

  6. 我们来谈谈最近最热门的微信小程序

    最近微信小程序真是火到不行,我们的经理大人也就此给我做了一定的培训.他讲的太好,我实在忍不住跟大家简单分享一下: 1.什么是微信小程序? 一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦 ...

  7. oc中的反射机制

    好久没有总结过了,一直在赶项目... 今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵. 反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及 ...

  8. mysql练习

    1.表关系 创建如下表格,并创建相关约束 ##(1)创建一个数据库 create database db2 default charset utf8; ##切换到db2数据库中 use db2 ##创 ...

  9. vue 源码学习三 vue中如何生成虚拟DOM

    vm._render 生成虚拟dom 我们知道在挂载过程中, $mount 会调用 vm._update和vm._render 方法,vm._updata是负责把VNode渲染成真正的DOM,vm._ ...

  10. 4.28Linux(6)

    2019-4-28 21:27:41 明天回家.回家继续学Linux还好有个服务器!!!感觉有个属于自己的服务器感觉好爽啊!! 越努力越幸运!永远不要高估自己!!! Nginx安装 服务器的请求原理 ...