redis哨兵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
posted @ 2023-08-29 14:43  星空看海  阅读(16)  评论(0编辑  收藏  举报