一、Redis主从配置

1、环境说明

主机名称 IP地址 redis版本和角色说明
redis-master 192.168.56.11 redis 5.0.3(主)
redis-slave01 192.168.56.12 redis 5.0.3(从)
redis-slave02 192.168.56.13 redis 5.0.3(从)

2、修改主从的redis配置文件

[root@redis-master ~]# grep -Ev "^$|#" /usr/local/redis/redis.conf
bind 192.168.56.11
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis.log"
dir /var/redis/ [root@redis-slave01 ~]# grep -Ev "^$|#" /usr/local/redis/redis.conf
bind 192.168.56.12
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis.log"
dir /var/redis/
replicaof 192.168.56.11 6379 #配置为master的从,如果master上有密码配置,还需要增加下面一项密码配置
masterauth 123456 #配置主的密码 [root@redis-slave02 ~]# grep -Ev "^$|#" /usr/local/redis/redis.conf
bind 192.168.56.13
protected-mode yes
port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/var/log/redis.log"
dir /var/redis/
replicaof 192.168.56.11 6379 #配置为master的从
masterauth 123456 #配置主的密码

3、启动主从redis

这里需要注意的是:redis主从和mysql主从不一样,redis主从不用事先同步数据,它会自动同步过去

[root@redis-master ~]# systemctl start redis
[root@redis-slave01 ~]# systemctl start redis
[root@redis-slave02 ~]# systemctl start redis
[root@redis-master ~]# netstat -tulnp |grep redis
tcp 0 0 192.168.56.11:6379 0.0.0.0:* LISTEN 1295/redis-server 1
[root@redis-slave01 ~]# netstat -tulnp |grep redis
tcp 0 0 192.168.56.12:6379 0.0.0.0:* LISTEN 1625/redis-server 1
[root@redis-slave02 ~]# netstat -tulnp |grep redis
tcp 0 0 192.168.56.13:6379 0.0.0.0:* LISTEN 1628/redis-server 1

3、数据同步验证

[root@redis-master ~]# redis-cli -h 192.168.56.11	#主上写入数据
192.168.56.11:6379> KEYS *
(empty list or set)
192.168.56.11:6379> set k1 123
OK
192.168.56.11:6379> set k2 456
OK [root@redis-slave01 ~]# redis-cli -h 192.168.56.12 #slave01上查看是否数据同步
192.168.56.12:6379> KEYS *
1) "k2"
2) "k1"
192.168.56.12:6379> get k1
"123"
192.168.56.12:6379> get k2
"456" [root@redis-slave02 ~]# redis-cli -h 192.168.56.13 #slave02上查看是否数据同步
192.168.56.13:6379> KEYS *
1) "k2"
2) "k1"
192.168.56.13:6379> get k1
"123"
192.168.56.13:6379> get k2
"456"

二、Redis哨兵模式

1、Redis sentinel介绍

Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

2、Redis Sentinel的主要功能

Sentinel的主要功能包括主节点存活检测、主从运行情况检测、自动故障转移(failover)、主从切换。Redis的Sentinel最小配置是一主一从。 Redis的Sentinel系统可以用来管理多个Redis服务器,该系统可以执行以下四个任务:

  • 监控

    Sentinel会不断的检查主服务器和从服务器是否正常运行。

  • 通知

    当被监控的某个Redis服务器出现问题,Sentinel通过API脚本向管理员或者其他的应用程序发送通知。

  • 自动故障转移

    当主节点不能正常工作时,Sentinel会开始一次自动的故障转移操作,它会将与失效主节点是主从关系的其中一个从节点升级为新的主节点, 并且将其他的从节点指向新的主节点。

  • 配置提供者

    在Redis Sentinel模式下,客户端应用在初始化时连接的是Sentinel节点集合,从中获取主节点的信息。

3、Redis Sentinel的工作流程

Sentinel是Redis的高可用性解决方案:

由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求 。如下图:



Sentinel负责监控集群中的所有主、从Redis,当发现主故障时,Sentinel会在所有的从中选一个成为新的主。并且会把其余的从变为新主的从。同时那台有问题的旧主也会变为新主的从,也就是说当旧的主即使恢复时,并不会恢复原来的主身份,而是作为新主的一个从。

在Redis高可用架构中,Sentinel往往不是只有一个,而是有3个或者以上。目的是为了让其更加可靠,毕竟主和从切换角色这个过程还是蛮复杂的。

4、相关概念

  • 主观失效

    SDOWN(subjectively down),直接翻译的为”主观”失效,即当前sentinel实例认为某个redis服务为”不可用”状态.

  • 客观失效

    ODOWN(objectively down),直接翻译为”客观”失效,即多个sentinel实例都认为master处于”SDOWN”状态,那么此时master将处于ODOWN,ODOWN可以简单理解为master已经被集群确定为”不可用”,将会开启failover

5、环境说明

主机名称 IP地址 redis版本和角色说明
redis-master 192.168.56.11:6379 redis 5.0.3(主)
redis-slave01 192.168.56.12:6379 redis 5.0.3(从)
redis-slave02 192.168.56.13:6379 redis 5.0.3(从)
redis-master 192.168.56.11:26379 Sentinel01
redis-slave01 192.168.56.12:26379 Sentinel02
redis-slave02 192.168.56.13:26379 Sentinel03

6、部署Sentinel

Sentinel.conf配置文件主要参数解析:

# 端口
port 26379 # 是否后台启动
daemonize yes # pid文件路径
pidfile /var/run/redis-sentinel.pid # 日志文件路径
logfile "/var/log/sentinel.log" # 定义工作目录
dir /tmp # 定义Redis主的别名, IP, 端口,这里的2指的是需要至少2个Sentinel认为主Redis挂了才最终会采取下一步行为
sentinel monitor mymaster 127.0.0.1 6379 2 # 如果mymaster 30秒内没有响应,则认为其主观失效
sentinel down-after-milliseconds mymaster 30000 # 如果master重新选出来后,其它slave节点能同时并行从新master同步数据的台数有多少个,显然该值越大,所有slave节点完成同步切换的整体速度越快,但如果此时正好有人在访问这些slave,可能造成读取失败,影响面会更广。最保守的设置为1,同一时间,只能有一台干这件事,这样其它slave还能继续服务,但是所有slave全部完成缓存更新同步的进程将变慢。
sentinel parallel-syncs mymaster 1 # 该参数指定一个时间段,在该时间段内没有实现故障转移成功,则会再一次发起故障转移的操作,单位毫秒
sentinel failover-timeout mymaster 180000 # 不允许使用SENTINEL SET设置notification-script和client-reconfig-script。
sentinel deny-scripts-reconfig yes

修改三台Sentinel的配置文件,如下

[root@redis-master ~]# grep -Ev "^$|#" /usr/local/redis/sentinel.conf
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 192.168.56.11 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes [root@redis-slave01 ~]# grep -Ev "^$|#" /usr/local/redis/sentinel.conf
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 192.168.56.11 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes [root@redis-slave02 ~]# grep -Ev "^$|#" /usr/local/redis/sentinel.conf
port 26379
daemonize yes
pidfile "/var/run/redis-sentinel.pid"
logfile "/var/log/sentinel.log"
dir "/tmp"
sentinel monitor mymaster 192.168.56.11 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes

7、启动Sentinel

启动的顺序:主Redis --> 从Redis --> Sentinel1/2/3

[root@redis-master ~]# redis-sentinel /usr/local/redis/sentinel.conf
[root@redis-master ~]# ps -ef |grep redis
root 1295 1 0 14:03 ? 00:00:06 /usr/local/redis/src/redis-server 192.168.56.11:6379
root 1407 1 1 14:40 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 1412 1200 0 14:40 pts/1 00:00:00 grep --color=auto redis [root@redis-slave01 ~]# redis-sentinel /usr/local/redis/sentinel.conf
[root@redis-slave01 ~]# ps -ef |grep redis
root 1625 1 0 14:04 ? 00:00:06 /usr/local/redis/src/redis-server 192.168.56.12:6379
root 1715 1 1 14:41 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 1720 1574 0 14:41 pts/0 00:00:00 grep --color=auto redis [root@redis-slave02 ~]# redis-sentinel /usr/local/redis/sentinel.conf
[root@redis-slave02 ~]# ps -ef |grep redis
root 1628 1 0 14:07 ? 00:00:06 /usr/local/redis/src/redis-server 192.168.56.13:6379
root 1709 1 0 14:42 ? 00:00:00 redis-sentinel *:26379 [sentinel]
root 1714 1575 0 14:42 pts/0 00:00:00 grep --color=auto redis

8、Sentinel操作

[root@redis-master ~]# redis-cli -p 26379	#哨兵模式查看
127.0.0.1:26379> sentinel master mymaster #输出被监控的主节点的状态信息
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.56.11"
5) "port"
6) "6379"
7) "runid"
8) "bae06cc3bc6dcbff7c2de1510df7faf1a6eb6941"
9) "flags"
10) "master"
......
127.0.0.1:26379> sentinel slaves mymaster #查看mymaster的从信息,可以看到有2个从节点
1) 1) "name"
2) "192.168.56.12:6379"
3) "ip"
4) "192.168.56.12"
5) "port"
6) "6379"
7) "runid"
8) "c86027e7bdd217cb584b1bd7a6fea4ba79cf6364"
9) "flags"
10) "slave"
......
2) 1) "name"
2) "192.168.56.13:6379"
3) "ip"
4) "192.168.56.13"
5) "port"
6) "6379"
7) "runid"
8) "61597fdb615ecf8bd7fc18e143112401ed6156ec"
9) "flags"
10) "slave"
...... 127.0.0.1:26379> sentinel sentinels mymaster #查看其它sentinel信息
1) 1) "name"
2) "ba12e2a4023d2e9bcad282395ba6b14030920070"
3) "ip"
4) "192.168.56.12"
5) "port"
6) "26379"
7) "runid"
8) "ba12e2a4023d2e9bcad282395ba6b14030920070"
9) "flags"
10) "sentinel"
......
2) 1) "name"
2) "14fca3f851e9e1bd3a4a0dc8a9e34bb237648455"
3) "ip"
4) "192.168.56.13"
5) "port"
6) "26379"
7) "runid"
8) "14fca3f851e9e1bd3a4a0dc8a9e34bb237648455"
9) "flags"
10) "sentinel"

9、哨兵模式下的主从测试

模拟停止master上的Redis,查看Redis的主从变化,如下:

[root@redis-master ~]# systemctl stop redis		#停止master上的redis

[root@redis-slave01 ~]# tail -n 20 /var/log/sentinel.log 	#查看哨兵日志
......
1747:X 19 Apr 2019 14:59:01.747 # +monitor master mymaster 192.168.56.11 6379 quorum 2
1747:X 19 Apr 2019 14:59:44.829 # +sdown sentinel 14fca3f851e9e1bd3a4a0dc8a9e34bb237648455 192.168.56.13 26379 @ mymaster 192.168.56.11 6379
1747:X 19 Apr 2019 14:59:46.950 # -sdown sentinel 14fca3f851e9e1bd3a4a0dc8a9e34bb237648455 192.168.56.13 26379 @ mymaster 192.168.56.11 6379
1747:X 19 Apr 2019 15:00:44.391 # +sdown master mymaster 192.168.56.11 6379
1747:X 19 Apr 2019 15:00:44.525 # +new-epoch 1
1747:X 19 Apr 2019 15:00:44.527 # +vote-for-leader 14fca3f851e9e1bd3a4a0dc8a9e34bb237648455 1
1747:X 19 Apr 2019 15:00:45.023 # +config-update-from sentinel 14fca3f851e9e1bd3a4a0dc8a9e34bb237648455 192.168.56.13 26379 @ mymaster 192.168.56.11 6379
1747:X 19 Apr 2019 15:00:45.023 # +switch-master mymaster 192.168.56.11 6379 192.168.56.13 6379
1747:X 19 Apr 2019 15:00:45.024 * +slave slave 192.168.56.12:6379 192.168.56.12 6379 @ mymaster 192.168.56.13 6379
1747:X 19 Apr 2019 15:00:45.024 * +slave slave 192.168.56.11:6379 192.168.56.11 6379 @ mymaster 192.168.56.13 6379
1747:X 19 Apr 2019 15:01:15.050 # +sdown slave 192.168.56.11:6379 192.168.56.11 6379 @ mymaster 192.168.56.13 6379 #从上面的日志可以看到master已经sdown,并切换为192.168.56.13为master节点,下面查看slave01上的配置,会自动的更改replicaof配置项,如下: [root@redis-slave01 ~]# grep "replicaof" /usr/local/redis/redis.conf |grep -vE "#"
replicaof 192.168.56.13 6379 [root@redis-master ~]# redis-cli -p 26379 #哨兵模式下查看主从信息,也是可以看到主从的变化
127.0.0.1:26379> sentinel master mymaster
1) "name"
2) "mymaster"
3) "ip"
4) "192.168.56.13"
5) "port"
6) "6379"
7) "runid"
8) "61597fdb615ecf8bd7fc18e143112401ed6156ec"
9) "flags"
10) "master"
......
127.0.0.1:26379> sentinel slaves mymaster
1) 1) "name"
2) "192.168.56.12:6379"
3) "ip"
4) "192.168.56.12"
5) "port"
6) "6379"
7) "runid"
8) "c86027e7bdd217cb584b1bd7a6fea4ba79cf6364"
9) "flags"
10) "slave"
......
2) 1) "name"
2) "192.168.56.11:6379"
3) "ip"
4) "192.168.56.11"
5) "port"
6) "6379"
7) "runid"
8) ""
9) "flags"
10) "s_down,slave,disconnected" #提示该节点为从,并且状态为s_down,无法链接的状态
......

Redis学习之路(三)之Redis主从和哨兵模式的更多相关文章

  1. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  2. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  3. 分布式缓存技术redis学习系列(三)——redis高级应用(主从、事务与锁、持久化)

    上文<详细讲解redis数据结构(内存模型)以及常用命令>介绍了redis的数据类型以及常用命令,本文我们来学习下redis的一些高级特性. 安全性设置 设置客户端操作秘密 redis安装 ...

  4. Redis学习笔记(三)Redis支持的5种数据类型的总结

    继续Redis学习笔记(二)来说说剩余的三种数据类型. 三.列表类型(List) 1.介绍 列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的一段片段.列表类型内部是 ...

  5. Redis学习笔记(三)redis 的键管理

    Redis 的键管理 一.Redis 数据库管理 Redis 是一个键值对(key-value pair)的数据库服务器,其数据保存在 src/server.h/redisDb 中(网上很多帖子说在 ...

  6. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  7. Redis学习之路(000)- 目录

    本文是博主学习整理网上大神的文件以及自学的心得. Redis学习之路(000)- 目录 Redis学习之路(001)- Redis介绍以及安装(Linux) Redis学习之路(002)- Ubunt ...

  8. Redis学习笔记(2)——Redis的下载安装部署

    一.下载Redis Redis的官网下载页上有各种各样的版本,如图 但是官网下载的Redis项目不正式支持Windows.如果需要再windows系统上部署,要去GitHub上下载.我下载的是Redi ...

  9. Redis学习笔记(1)——Redis简介

    一.Redis是什么? Remote Dictionary Server(Redis) 是一个开源的使用ANSI C语言编写.遵守BSD协议.支持网络.可基于内存亦可持久化的日志型.Key-Value ...

  10. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

随机推荐

  1. windows 服务器MYSQL 数据库安装配置

    一.到官网下载MYSQL 打开官网地址:www.mysql.com, 选择 DOWNLOADS,进入到MySQL的下载页面,在页面的底部有一个MySQL Community Edition, 并且下面 ...

  2. Oracle EBS 新增 OAFM 个数

    在 $INST_TOP/ora/10.1.3/opmn/conf/opmn.xml中 找到 <process-type id="oafm" module-id="O ...

  3. 缓存那些事-zz

    https://tech.meituan.com/cache_about.html 前言 一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到 ...

  4. 红帽7配置samba文件共享服务

    samba软件主要功能是为客户机提供共享使用的文件夹. 使用的协议是SMB(TCP 139).CIFS(TCP445). 所需的软件包:samba 系统服务:smb 1.安装samba服务 ~]#yu ...

  5. Linux中 /proc/[pid] 目录各文件简析

    Linux 内核提供了一种通过 proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc 文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系 ...

  6. 转:jQuery插件开发全解析

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  7. 转:winform 打包自动安装数据库

    vs2005 打包,并自动安装SQL数据库.创建部署项目    1.   在“文件”菜单上指向“添加项目”,然后选择“新建项目”.    2.   在“添加新项目”对话框中,选择“项目类型”窗格中的“ ...

  8. ELF文件结构描述

    ELF目标文件格式最前部ELF文件头(ELF Header),它包含了描述了整个文件的基本属性,比如ELF文件版本.目标机器型号.程序入口地址等.其中ELF文件与段有关的重要结构就是段表(Sectio ...

  9. 测试dos攻击对openflow中flow_table溢出的影响

    环境准备 环境 ubuntu16.04 mininet pox scapy 安装mininet sudo apt-get update sudo apt-get upgrade git clone g ...

  10. 团队作业——Alpha冲刺 9/12

    团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:修复编辑界面与弹窗界面合并中出现的BUG 明日任务:希望完成编辑界面所有接口交互的功能 郭剑南 今日任务:优化图像预处理所有功能的函数代码 ...