redis sentinel 高可用(HA)方案部署,及python应用示例
简介
介绍 redis sentinel(哨兵)集群的部署,配置一主两从的redis集群,并通过 python 程序实例讲解通过 redis sentinel 访问集群
什么是哨兵(Sentinel)模式
Redis sentinel 为 Redis 集群提供了高可用解决方案,在集群出现故障的时候自动故障转移,保证集群的可用性
功能
- 监控:检查主从实例否是正常工作
- 通知:当 redis 实例出现错误的时候,可以使用程序(用 api 接口)通知管理员
- 自动故障转移:在主服务器发生故障时,哨兵开启故障转移处理,提升一台从服务器成为主服务器,其他的从服务器被重新配置使用新的主服务器,当应用程序连接时使用新的地址配置
- 配置信息:哨兵提供了认证和服务发现,客户端连接到哨兵去获取当前redis 主服务器地址,如果发生故障转移,哨兵将会汇报新的服务器地址
分布式系统
哨兵是一套分布式系统,它被设计成多个哨兵进程合作运行
- 当多个哨兵认为 master 故障的时候,集群就会认定主服务器故障
- 即使只有一个哨兵,它也能工作,系统具有较高的健壮性
哨兵,redis 实例,客户端在一起构成了一个大的分布式系统
配置方法
安装 3 台 redis 服务器,一主两从
- 下载 redis 3.2 版本
- 第1台修改 port: 10001
- 第2台修改 port: 10002
- 第3台修改 port: 10003
运行 redis 服务
# 首先设定第一个服务器为 master
redis-server /path/to/server1.conf # 第二个为 slave
redis-server /path/to/server2.conf # 第三个为 slave
redis-server /path/to/server3.conf
创建三份配置文件
创建三份哨兵的配置文件
# 第1个哨兵配置,端口为 10011
port 10011
sentinel monitor mymaster 127.0.0.1 10001 2
sentinel down-after-milliseconds mymaster 60000
sentinel auth-pass mymaster 1
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
# 第2个哨兵配置,端口为 10012
port 10012
sentinel monitor mymaster 127.0.0.1 10001 2
sentinel down-after-milliseconds mymaster 60000
sentinel auth-pass mymaster 1
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
# 第3个哨兵配置,端口为 10013
port 10013
sentinel monitor mymaster 127.0.0.1 10001 2
sentinel down-after-milliseconds mymaster 60000
sentinel auth-pass mymaster 1
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
哨兵配置说明
- 需要制定要监控的主服务器,给每一个要监控的主服务器一个不同的名字
- 从服务器可以自动发现,不需要指定
- 哨兵可以自动更新从服务器的配置
- 发生故障转移,从服务器被提升为主服务器的时候,或者新的哨兵被发现的时候,配置会被自动重写
哨兵配置格式与参数含义
配置格式:sentinel <选项的名字> <主服务器的名字> <选项的值>
- down-after-milliseconds: sentinel 任务服务器已经下线的毫秒数,redis 服务器没有在给定的毫秒数之内返回sentinel的Ping命令回复, 哨兵主观认为服务器已经下线(SDOWN),此时并不会进行故障转移,当足够数量的哨兵将服务器标志为主观下线时, 服务器被标记为客观下线(ODOWN),执行故障转移
- parallel-syncs: 在执行故障转移时,最多可以有多少个从服务器同时从新的主服务器进行同步,数字越小,完成故障转移需要的时间越长
运行哨兵
redis-server /path/to/sentinel1.conf --sentinel redis-server /path/to/sentinel2.conf --sentinel redis-server /path/to/sentinel2.conf --sentinel
python 访问通过哨兵访问 redis 集群
安装 python redis 客户端
pip install redis
示例程序
#!/usr/bin/env python
from redis.sentinel import Sentinel # 连接哨兵服务器
sentinel = Sentinel([('127.0.0.1', 10011),
('127.0.0.1', 10012),
('127.0.0.1', 10013)],
socket_timeout=0.1) # 获取主服务器地址
sentinel.discover_master('mymaster')
# 输出:('127.0.0.1', 10001) # 获取从服务器地址
sentinel.discover_slaves('mymaster')
# 输出:[('127.0.0.1', 10001), ('127.0.0.1', 10002), ('127.0.0.1', 10003)] # 获取带密码的主服务器进行访问
master_pass = sentinel.master_for('mymaster', password=1, socket_timeout=0.1) # 获取不带密码的主服务器进行写入
master = sentinel.master_for('mymaster', socket_timeout=0.1) master.set('foo', 'bar') # 获取从服务器进行读取(默认是round-roubin)
slave = sentinel.slave_for('mymaster', socket_timeout=0.1)
slave.get('foo')
# 输出:bar
redis sentinel 高可用(HA)方案部署,及python应用示例的更多相关文章
- Zabbix 6.0:原生高可用(HA)方案部署
Blog:博客园 个人 本部署文档适用于CentOS 8.X/RHEL 8.X/Anolis OS 8.X/AlmaLinux 8.X/Rockey Linux 8.X. 原生的HA方案终于来了 相比 ...
- Redis Sentinel 高可用方案
redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- 【转载】Redis Sentinel 高可用服务架构搭建
作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
- Redis Sentinel 高可用实现说明
背景: 前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...
- Redis Sentinel高可用架构
Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...
- Redis Sentinel 高可用部署实践集群
一.Redis Sentinel 介绍 1.Sentinel 数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...
- Redis的高可用(HA)
本文参考 [https://www.jianshu.com/p/501c9c3b1b36] [https://www.jianshu.com/p/3b9054d3894b] 八大特性 1.速度快 正常 ...
随机推荐
- GO 和 KEGG 的区别 | GO KEGG数据库用法 | 基因集功能注释 | 代谢通路富集
一直都搞不清楚这两者的具体区别. 其实初学者搞不清楚很正常,因为它们的本质是相通的,都是对基因进行归类注释的数据库. 建议初学者自己使用一下这两个数据库,应该很快就能明白其中的区别. (抱歉之前没讲清 ...
- 『Re』知识工程作业_主体识别
作业要求 环境路径 类似于这样的,一共50篇文档, 均为中文文档,是法院判决书的合集. 程序 程序如下,我完全使用正则表达式来实现功能, import re import glob import co ...
- 『Networkx』常用方法
这是一个用于分析'图'结构的包,由于我只是用到了浅显的可视化功能,所以这个介绍会对其使用浅尝辄止. 解决matplotlib中文字体缺失问题, from pylab import mpl mpl.rc ...
- quartz---的Cron表达式
quartz---的Cron表达式 CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔, ...
- 【vue系列】elementUI 穿梭框右侧获取当前选中项的值的思路
最近 做了一个需求 在查询结果的表格中,选取(可多选)一些值,获取到保单号后,打开一个elementUI的穿梭框,然后获取到所有业务员,选取一些业务员后,将上一步获取到的保单号传递给业务员. 画个示意 ...
- Linq的简介和基础知识学习
学习LINQ之前,我们要知道LINQ是干什么,解决什么问题的,怎样学习? 一.LINQ简介 1.什么是LINQ? 什么是LINQ?LINQ中文翻译为语言集成查询(Language Integrated ...
- zabbix的深入了解
一,Zabbix Web操作深入 1.1 Zabbix Web下的主机和模版以及监控项的添加方式 (1)创建一个模版 我们所有的功能几乎都是在模版中定义的 我们再点进新创建的模版查看 模版里几乎可以设 ...
- jquery条形码生成器
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- Flask初级(七)flash模板循环,判断
Project name :Flask_Plan templates:templates static:static 继续前面的代码 修改Flask_Plan.py @app.route('/') d ...
- Linux内核分析-Linux内核如何装载和启动一个可执行程序
ID:fuchen1994 实验要求: 理解编译链接的过程和ELF可执行文件格式,详细内容参考本周第一节: 编程使用exec*库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态 ...