首页 > 数据库 >redis哨兵Sentinel

redis哨兵Sentinel

时间:2023-08-29 14:59:31浏览次数:42  
标签:mymaster slave redis 哨兵 sentinel master Sentinel

目录

一 主从复制高可用

#主从复制存在的问题:
1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master---->哨兵做高可用
2 主从复制,只能主写数据,所以写能力和存储能力有限----->使用集群解决


# 高可用:服务对外高度可用
	高可用 四个9   99.99%
    
高可用:它通常是指,通过设计减少系统不能提供服务的时间。

二 哨兵

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

原理

# 哨兵:sentinel 翻译过来的--->原理如下
1 多个sentinel发现并确认master有问题
2 选举触一个sentinel作为领导(raft算法)
3 选取一个slave作为新的master
4 通知其余slave成为新的master的slave
5 通知客户端主从变化
6 等待老的master复活成为新master的slave


# 哨兵:是一个进程--->启动使用redis-sentinel启动,有自己的配置文件,启动后,可以客户端连接(redis-cli),查看哨兵状态

三 安装配置

https://www.cnblogs.com/liuqingzheng/articles/17324392.html

# 配置哨兵:(一主两从架构--->运行多个哨兵-->一般奇数个(3个))

#1 配置哨兵配置文件:
port 26379
daemonize yes
dir /root/lqz/redis-6.2.9/data
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel.log"

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000

# 2 配置3个配置文件,监听端口不一样(正常应该放在3台机器上)

# 3 启动哨兵
#启动三个哨兵
./src/redis-sentinel sentinel_26379.conf
./src/redis-sentinel sentinel_26380.conf
./src/redis-sentinel sentinel_26381.conf


# 4 演示故障
    -把主库停止
    -查看自动故障切换
    -启动起原来主库,变成了从
  

四 python 操作哨兵

import redis
from redis.sentinel import Sentinel

# pip install redis
"""
1、通过访问Sentinel服务的方式,获取redis的master、slave节点信息
2、向master redis写入数据
3、从slave redis读取数据
"""
# 连接哨兵服务器(主机名也可以用域名)
# 8.130.125.9:26379
sentinel = Sentinel([('8.130.125.9', 26379),
                     ('8.130.125.9', 26380),
                     ('8.130.125.9', 26381)
         ],
                    socket_timeout=5)

print(sentinel)
# 获取主服务器地址
master = sentinel.discover_master('mymaster')
print(master)

# 获取从服务器地址
slave = sentinel.discover_slaves('mymaster')
print(slave)



##### 读写分离
# 获取主服务器进行写入
master = sentinel.master_for('mymaster', socket_timeout=0.5)
# 写入一个字符串键是foo,值是bar
w_ret = master.set('foo', 'bar') # 输出:True

# slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
# r_ret = slave.get('foo')
# print(r_ret)  # 输出:bar

标签:mymaster,slave,redis,哨兵,sentinel,master,Sentinel
From: https://www.cnblogs.com/zjyao/p/17664741.html

相关文章

  • 一台服务器上部署 Redis 伪集群
    哈喽大家好,我是咸鱼今天这篇文章介绍如何在一台服务器(以CentOS7.9为例)上通过redis-trib.rb工具搭建Rediscluster(三主三从)redis-trib.rb是一个基于Ruby编写的脚本,其功能涵盖了创建、管理以及维护Redis集群的各个方面值得注意的是,随着时间的推移,一些较新版本的Redi......
  • redis主从复制
    目录一什么是主从复制1.1主从复制:一主一从,一主多从1.2特点1.3Redis主从复制的作用二主从原理2.1主库是否要开启持久化(一般情况要开启)3.2方式一3.3方式二:配置文件方式一什么是主从复制redis单实例--->容易产生机器故障;容量瓶颈;QPS(每秒查询率)瓶颈1.1主从复制:一主一......
  • redis分布式锁,setnx+lua脚本的java实现
    1前言在现在工作中,为保障服务的高可用,应对单点故障、负载量过大等单机部署带来的问题,生产环境常用多机部署。为解决多机房部署导致的数据不一致问题,我们常会选择用分布式锁。目前其他比较常见的实现方案我列举在下面:基于缓存实现分布式锁(本文主要使用redis实现)基于数据库实......
  • 连接redis后 ,报错: ERR wrong number of arguments for ‘hset‘ command“怎么解决
    原因:ERRwrongnumberofargumentsfor‘hset‘command触发代码 解决方法:可能是java不匹配我本地3.2版本的redis,我换一个更大版本的redis就解决了 ......
  • redis持久化
    目录一持久化1.1什么是持久化1.2持久化的实现方式二rdb方案2.1使用2.2RDB问题三AOF3.1AOF介绍3.2#AOF的三种策略3.3AOF重写实现方式AOF重写配置:自动触发时机(两个条件同时满足):重写流程aof配置7.3混合持久化一持久化1.1什么是持久化redis的所有数据保存在内存中,对数......
  • Redis简介
    文章目录一、Redis是什么?二、Redis优缺点?三、Redis应用场景四、Redis安装和使用五、Redis为什么这么快?1、为什么采用单线程2、Redis的I/O多路复用一、Redis是什么?Redis(RemoteDictionaryServer:远程字典服务)是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于......
  • redis高级用法:慢查询、pipline与事务、发布订阅、bitmap位图、HyperLogLog、GEO地理位
    目录一高级用法之慢查询1.1生命周期1.2两个配置1.2.1slowlog-max-len1.2.2slowlog-max-len1.3设置慢查询1.5作用二pipline与事务2.1什么是pipeline(管道)2.2python客户端实现pipline2.3与原生操作对比2.4使用建议2.5原生redis操作操作事务三发布订阅3.1角色3.2模......
  • redis数据类型和使用命令
    目录一通用命令1.1通用命令1.2数据结构和内部编码1.3单线程架构,二字符串类型2.1字符串键值结构2.2常用命令三hash类型3.1哈希值结构3.2常用命令3.3hashvsstring四列表类型4.1列表特点常用命令五集合类型5.1特点5.2常用命令六有序集合类型6.1特点6.2常用命令......
  • Redis介绍跟安装配置
    目录一redis介绍1.1redis是什么1.2redis的特点二centos上安装redis三redis启动方式3.1最简启动3.2动态参数启动(了解)3.3配置文件启动一redis介绍1.1redis是什么开源:早起版本2w3千行基于键值对的存储系统:字典形式多种数据结构:字符串,hash,列表,集合,有序集合高性能,功......
  • redis客户端操作
    目录一redis客户端操作二redis使用场景一redis客户端操作#客户端链接 redis-cli-h地址-p端口#非交互式的 res=subprocess.getoutput('systemctlstartmysqld')res=subprocess.getoutput('systemctlstopmysqld')res=subprocess.getoutput('redis-clige......