5-redis高级-哨兵

[1 哨兵](#1 哨兵)
[1.1 python 操作哨兵](#1.1 python 操作哨兵)

1 哨兵

python 复制代码
# 主从---》一主多从
	-主库用来写
    -从库用来读
    -主库挂了--》整个系统就不能写数据了
    
#主从复制存在的问题:
 1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master---》哨兵 高可用
 2 主从复制,只能主写数据,所以写能力和存储能力有限--》集群


# 高可用:服务的高度可用性  公司追求 4个9
	

哨兵---》sentinal---》监控主库变化---》如果主库挂了--》自动选择一个从库---》做故障切换---》把从库升级为主库---》还能对外提供服务



# 架构
	3个redis服务---》3台机器
    3个sentinal---》3台机器
    
    启动3个redis-server进程
    启动3个redis-sentinal进程
    
    
# 搭建步骤
	- 先搭建一主两从
    
# 第一步:搭建一主两从
daemonize yes
pidfile /var/run/redis.pid
port 6379
dir "/root/redis/data"
logfile "6379.log"

#第二个是从配置文件
daemonize yes
pidfile /var/run/redis2.pid
port 6378
dir "/root/redis/data"
logfile "6378.log"
slaveof 127.0.0.1 6379
slave-read-only yes

#第三个是从配置文件
daemonize yes
pidfile /var/run/redis3.pid
port 6377
dir "/root/redis/data"
logfile "6377.log"
slaveof 127.0.0.1 6379
slave-read-only yes
# 第二步:启动三个哨兵--》监控一主两从的关系
port 26379
daemonize yes
dir ./data3
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel79.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

port 26380
daemonize yes
dir ./data3
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel80.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

port 26381
daemonize yes
dir ./data3
protected-mode no
bind 0.0.0.0
logfile "redis_sentinel81.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


redis-sentinel ./sentinel_6379.conf
redis-sentinel ./sentinel_6380.conf
redis-sentinel ./sentinel_6381.conf


#第三步:等待主库挂掉
# 第四步:自动切换主库
# 第五步:以后原来的主库启动,会变为从库

1.1 python 操作哨兵

python 复制代码
import redis
from redis.sentinel import Sentinel

# 连接哨兵服务器(主机名也可以用域名)
sentinel = Sentinel([('127.0.0.1', 26379),
                     ('127.0.0.1', 26380),
                     ('127.0.0.1', 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)
print('master----',master)
w_ret = master.set('foo', 'bar')

slave = sentinel.slave_for('mymaster', socket_timeout=0.5)
print('slave----',slave)
r_ret = slave.get('foo')
print(r_ret)
相关推荐
油丶酸萝卜别吃5 小时前
MySQL B+ 树查询全过程详解
数据库·mysql
leisoo80975 小时前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
Exclusive_Cat5 小时前
MySQL回表机制解析与优化策略
数据库·sql
circuitsosk5 小时前
向量数据库选型与性能压测:Milvus、Pinecone、Chroma在真实业务下的对比
数据库·python·pinecone·milvus·向量数据库·chroma
影寂ldy5 小时前
SQL 索引(Index)完整笔记
数据库·笔记·sql
切糕师学AI5 小时前
从压缩到查询:PostgreSQL中JSON数据的存储与处理实践
数据库·postgresql·json
渣渣盟5 小时前
当 Redis 写入成为性能瓶颈时,如何利用 异步批量 Sink 将吞吐量从 1w QPS 提升到 10w+?
数据库·redis·php
SelectDB6 小时前
Apache Doris 2026 Roadmap:AI 成为主流负载后数据基础设施的演进方向
数据库
SelectDB6 小时前
瓴岳科技洋钱罐 SelectDB Hive 透明加速:湖仓一体化探索分析平台升级实践
数据库
SelectDB6 小时前
飞轮科技 SelectDB Enterprise 4.0.5:企业级实时分析与 AI 数据底座的安全治理实践
数据库