Redis-Sentinel
# 让redis的主从复制高可用 1 搭一个一主两从 #创建三个配置文件: #第一个是主配置文件 daemonize yes pidfile /var/run/redis.pid port 6379 dir "/opt/soft/redis/data" logfile “6379.log” #第二个是从配置文件 daemonize yes pidfile /var/run/redis2.pid port 6378 dir "/opt/soft/redis/data2" logfile “6378.log” slaveof 127.0.0.1 6379 slave-read-only yes #第三个是从配置文件 daemonize yes pidfile /var/run/redis3.pid port 6377 dir "/opt/soft/redis/data3" logfile “6377.log” slaveof 127.0.0.1 6379 slave-read-only yes #把三个redis服务都启动起来 ./src/redis-server redis_6379.conf ./src/redis-server redis_6378.conf ./src/redis-server redis_6377.conf 2 搭建哨兵 # sentinel.conf这个文件 # 把哨兵也当成一个redis服务器 创建三个配置文件分别叫sentinel_26379.conf sentinel_26378.conf sentinel_26377.conf # 当前路径下创建 data1 data2 data3 个文件夹 #内容如下(需要修改端口,文件地址日志文件名字) port 26379 daemonize yes dir ./data3 protected-mode no bind 0.0.0.0 logfile "redis_sentinel3.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 #启动三个哨兵 ./src/redis-sentinel sentinel_26379.conf ./src/redis-sentinel sentinel_26378.conf ./src/redis-sentinel sentinel_26377.conf # 登陆哨兵 ./src/redis-cli -p 26377 # 输入 info # 查看哨兵的配置文件被修改了,自动生成的 # 主动停掉主redis 6379,哨兵会自动选择一个从库作为主库 redis-cli -p 6379 shutdown #等待原来的主库启动,该主库会变成从库
客户端连接
import redis from redis.sentinel import Sentinel # 连接哨兵服务器(主机名也可以用域名) # 10.0.0.101:26379 sentinel = Sentinel([('10.0.0.101', 26379), ('10.0.0.101', 26378), ('10.0.0.101', 26377) ], 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) # w_ret = master.set('foo', 'bar') # slave = sentinel.slave_for('mymaster', socket_timeout=0.5) # r_ret = slave.get('foo') # print(r_ret)