1 哨兵
1.1 python 操作哨兵
1 哨兵
-主库用来写
-从库用来读
-主库挂了--》整个系统就不能写数据了
1 主从复制,主节点发生故障,需要做故障转移,可以手动转移:让其中一个slave变成master---》哨兵 高可用
2 主从复制,只能主写数据,所以写能力和存储能力有限--》集群
哨兵---》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 操作哨兵
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)