一 主从复制高可用

  1. #主从复制存在的问题:
  2. #1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master
  3. #2 主从复制,只能主写数据,所以写能力和存储能力有限

二 架构说明

可以做故障判断,故障转移,通知客户端(其实是一个进程),客户端直接连接sentinel的地址

1 多个sentinel发现并确认master有问题
2 选举触一个sentinel作为领导
3 选取一个slave作为新的master
4 通知其余slave成为新的master的slave
5 通知客户端主从变化
6 等待老的master复活成为新master的slave

三 安装配置

  1. 1 配置开启主从节点
  2. 2 配置开启sentinel监控主节点(sentinel是特殊的redis
  3. 3 应该是多台机器
  1. #配置开启sentinel监控主节点
  2. mkdir -p redis4/conf redis4/data redis5/conf redis5/data redis6/data redis6/conf
  3. vi sentinel.conf
  4. port 26379
  5. daemonize yes
  6. dir data
  7. protected-mode no
  8. bind 0.0.0.0
  9. logfile "redis_sentinel.log"
  10. sentinel monitor mymaster 127.0.0.1 6379 2
  11. sentinel down-after-milliseconds mymaster 30000
  12. sentinel parallel-syncs mymaster 1
  13. sentinel failover-timeout mymaster 180000
  14. docker run -p 26379:26379 --name redis_26379 -v /home/redis4/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis4/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
  15. docker run -p 26378:26379 --name redis_26378 -v /home/redis5/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis5/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
  16. docker run -p 26377:26379 --name redis_26377 -v /home/redis6/conf/sentinel.conf:/etc/redis/sentinel.conf -v /home/redis6/data:/data -d redis redis-sentinel /etc/redis/sentinel.conf
  17. redis-sentinel sentinel.conf
  18. info
  19. 配置会重写,自动发现slave

  1. sentinel monitor mymaster 127.0.0.1 6379 2
  2. sentinel down-after-milliseconds mymaster 30000
  3. sentinel parallel-syncs mymaster 1
  4. sentinel failover-timeout mymaster 180000
  5. sentinel monitor <master-name> <ip> <redis-port> <quorum>
  6. 告诉sentinel去监听地址为ip:port的一个master,这里的master-name可以自定义,quorum是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效
  7. sentinel auth-pass <master-name> <password>
  8. 设置连接masterslave时的密码,注意的是sentinel不能分别为masterslave设置不同的密码,因此masterslave的密码应该设置相同。
  9. sentinel down-after-milliseconds <master-name> <milliseconds>
  10. 这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30
  11. sentinel parallel-syncs <master-name> <numslaves>
  12. 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
  13. sentinel failover-timeout <master-name> <milliseconds>
  14. failover-timeout 可以用在以下这些方面:
  15. 1. 同一个sentinel对同一个master两次failover之间的间隔时间。
  16. 2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
  17. 3.当想要取消一个正在进行的failover所需要的时间。
  18. 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
  1. 1 搭一个一主两从
  2. #创建三个配置文件:
  3. #第一个是主配置文件
  4. daemonize yes
  5. pidfile /var/run/redis.pid
  6. port 6379
  7. dir "/opt/soft/redis/data"
  8. logfile 6379.log
  9. #第二个是从配置文件
  10. daemonize yes
  11. pidfile /var/run/redis2.pid
  12. port 6378
  13. dir "/opt/soft/redis/data2"
  14. logfile 6378.log
  15. slaveof 127.0.0.1 6379
  16. slave-read-only yes
  17. #第三个是从配置文件
  18. daemonize yes
  19. pidfile /var/run/redis3.pid
  20. port 6377
  21. dir "/opt/soft/redis/data3"
  22. logfile 6377.log
  23. slaveof 127.0.0.1 6379
  24. slave-read-only yes
  25. #把三个redis服务都启动起来
  26. ./src/redis-server redis_6379.conf
  27. ./src/redis-server redis_6378.conf
  28. ./src/redis-server redis_6377.conf
  29. 2 搭建哨兵
  30. # sentinel.conf这个文件
  31. # 把哨兵也当成一个redis服务器
  32. 创建三个配置文件分别叫sentinel_26379.conf sentinel_26378.conf sentinel_26377.conf
  33. # 当前路径下创建 data1 data2 data3 个文件夹
  34. #内容如下(需要修改端口,文件地址日志文件名字)
  35. port 26379
  36. daemonize yes
  37. dir ./data3
  38. protected-mode no
  39. bind 0.0.0.0
  40. logfile "redis_sentinel3.log"
  41. sentinel monitor mymaster 127.0.0.1 6379 2
  42. sentinel down-after-milliseconds mymaster 30000
  43. sentinel parallel-syncs mymaster 1
  44. sentinel failover-timeout mymaster 180000
  45. #启动三个哨兵
  46. ./src/redis-sentinel sentinel_26379.conf
  47. ./src/redis-sentinel sentinel_26378.conf
  48. ./src/redis-sentinel sentinel_26377.conf
  49. # 登陆哨兵
  50. ./src/redis-cli -p 26377
  51. # 输入 info
  52. # 查看哨兵的配置文件被修改了,自动生成的
  53. # 主动停掉主redis 6379,哨兵会自动选择一个从库作为主库
  54. redis-cli -p 6379
  55. shutdown
  56. #等待原来的主库启动,该主库会变成从库

四 客户端连接

  1. import redis
  2. from redis.sentinel import Sentinel
  3. # 连接哨兵服务器(主机名也可以用域名)
  4. # 10.0.0.101:26379
  5. sentinel = Sentinel([('10.0.0.101', 26379),
  6. ('10.0.0.101', 26378),
  7. ('10.0.0.101', 26377)
  8. ],
  9. socket_timeout=5)
  10. print(sentinel)
  11. # 获取主服务器地址
  12. master = sentinel.discover_master('mymaster')
  13. print(master)
  14. # 获取从服务器地址
  15. slave = sentinel.discover_slaves('mymaster')
  16. print(slave)
  17. ##### 读写分离
  18. # 获取主服务器进行写入
  19. # master = sentinel.master_for('mymaster', socket_timeout=0.5)
  20. # w_ret = master.set('foo', 'bar')
  21. # slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
  22. # r_ret = slave.get('foo')
  23. # print(r_ret)

Redis系列之——Redis-Sentinel的更多相关文章

  1. Redis系列(二):Redis的数据类型及命令操作

    原文链接(转载请注明出处):Redis系列(二):Redis的数据类型及命令操作 Redis 中常用命令 Redis 官方的文档是英文版的,当然网上也有大量的中文翻译版,例如:Redis 命令参考.这 ...

  2. Redis系列(一):Redis的简介与安装

    原文链接(转载请注明出处):Redis系列(一):Redis的简介与安装 什么是 Redis Redis 是一个使用ANSI C 编写的开源.支持网络协议.基于内存.可选持久性的键值对数据库,它是一个 ...

  3. Redis系列一 Redis安装

    Redis系列一    Redis安装 1.安装所使用的操作系统为Ubuntu16.04 Redis版本为3.2.9 软件一般下载存放目录为/opt,以下命令操作目录均为/opt root@ubunt ...

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

    一. Sentinel 高可用环境准备 1.1 Sentinel 集群环境 环境 说明 操作系统版本 CentOS  7.4.1708  IP地址 172.168.18.200 网关Gateway 1 ...

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

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

  6. 深入剖析Redis系列: Redis集群模式搭建与原理详解

    前言 在 Redis 3.0 之前,使用 哨兵(sentinel)机制来监控各个节点之间的状态.Redis Cluster 是 Redis 的 分布式解决方案,在 3.0 版本正式推出,有效地解决了 ...

  7. redis系列:redis介绍与安装

    前言 这个redis系列的文章将会记录博主学习redis的过程.基本上现在的互联网公司都会用到redis,所以学习这门技术于你于我都是有帮助的. 博主在写这个系列是用的是目前最新版本4.0.10,虚拟 ...

  8. Redis系列之----Redis的两种持久化机制(RDB和AOF)

    Redis的两种持久化机制(RDB和AOF) 什么是持久化    Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望 ...

  9. 【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构

    redis 是使用 C 语言编写的,但是 C 语言是没有字典这个数据结构的,因此 C 语言自己使用结构体来自定义一个字典结构 typedef struct redisDb src\server.h 中 ...

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

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

随机推荐

  1. 在linux上启动arthas报“Can not find java process”

    发生背景 完整报错信息: [***@localhost ~]$ java -jar arthas-boot.jar [INFO] JAVA_HOME: /usr/lib/jvm/java-1.8.0- ...

  2. PHP如何获取短网址跳转之前的网址?

    现在有很多的短网址应用,点击就跳转到缩短之前的网址了,那今天我们就来看一下,PHP如何**短网址跳转之前的网址,其实也很简单,就是用php的get_headers 函数,取得Response Head ...

  3. CF1829H Don't Blame Me题解

    题意: 给定一个长度为 \(n\) 的数组,选择它的一个子序列(不一定要连续的),问有多少种选法使得它们 AND 的值的二进制表示法中有 \(k\) 个 \(1\). 思路: 这个题就是一个简单的 D ...

  4. 【Linux】部署Nginx

    1.先安装gcc-c++编译器 yum install gcc-c++ yum install -y openssl openssl-devel 2.再安装pcre包 yum install -y p ...

  5. 【SpringBoot】注解

    Controller - @RestController - @RequestMapping("/path") Controller内方法 @GetMapping("/p ...

  6. Hexo博客yilia主题使用cnzz统计网站访问量

    使用友盟第三方的统计插件,网址:http://www.umeng.com/ 进入网站先注册账号然后根据下列图片进入添加站点. 添加站点,自己搭建的博客,需要统计访问量的网站(这里加入我的博客网站),然 ...

  7. Vue详解----一篇带你从头领悟到尾,享受飞升的感觉

    脚手架文件结构 """ ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ...

  8. 【微信小程序的开发】初步认识

    目录 项目结构 页面组成 json配置文件 ​ app.json ​ project.config.json ​ sitemap.json ​ 每个页面的json ​ 实例 wxml ​ 标签名称 ​ ...

  9. Django跨域问题解决方案: django-cors-headers安装与配置

    django-cors-headers安装与配置 官方文档:https://pypi.org/project/django-cors-headers/ 安装 pip install django-co ...

  10. TypeChat源码分析:基于大语言模型的定制化 AI Agent 交互规范

    TypeChat源码分析:基于大语言模型的定制化 AI Agent 交互规范 本文深入介绍了微软最近发布的 TypeChat 项目,该项目允许开发者定义大语言模型返回的响应结构.通过分析源代码,探讨了 ...