目录
一 主从复制高可用
#主从复制存在的问题:
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