Redis Sentinel高可用架构
跳到导航
跳到搜索
目录
信息
192.168.30.94 192.168.30.95 192.168.30.96
第一步 主从搭建
第二步 sentinel
配置sentinel
#Redis1上的redis-sentinel配置文件 mkdir -p /data/redis/data chown -R redis:redis /data/redis/data mkdir -p /data/logs/redis/ chown -R redis:redis /data/logs/redis/ cat >/etc/redis/sentinel.conf<<EOF port 26379 daemonize yes logfile /data/logs/redis/redis-sentinel.log dir "/data/redis/data" #dir "/tmp" sentinel monitor mymaster 192.168.30.94 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel auth-pass mymaster 1234 EOF cp -r /etc/redis/ /etc/redisbak/ #Redis2和Redis3上的redis-sentinel配置文件与Redis1上的redis-sentinel配置文件内容相同。 #有$1 不能用cat # redis-sentinel /etc/redis/sentinel.conf & echo '#!/bin/bash ### BEGIN INIT INFO # Provides: redis sentinel # Required-Start: $all # Required-Stop: $all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Starts redis sentinel # Description: Starts redis sentinel using start-stop-daemon ### END INIT INFO # Source function library . /etc/rc.d/init.d/functions NAME=redis-sentinel BIN=/usr/local/bin/redis-sentinel SENTINEL_PID=/data/redis/redis-sentinel.pid #SENTINEL_PID=/data/logs/redis/redis-sentinel.pid CMD=$1 start() { echo "Starting $NAME ..." exec 2>&1 $BIN /etc/redis/sentinel.conf & echo $! > "${SENTINEL_PID}"; } stop() { #PID=`cat $SENTINEL_PID` echo "Stopping $NAME ($PID) ..." pkill $NAME #killproc $NAME -QUIT #kill $PID } restart() { echo "Restarting $NAME ..." stop start } case "$CMD" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage $0 {start|stop|restart}" esac' >/etc/init.d/sentinel chmod +x /etc/init.d/sentinel
测试sentinel
可见有两个slave 3个 sentinel 节点 evan@evanpc:~$ redis-cli -h 192.168.30.94 -a 12345 -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 master0:name=mymaster,status=ok,address=192.168.30.94:6379,slaves=2,sentinels=3 95 96 也如上 高可用测试 关掉 master 94 redis 这时候 96 为master 在96 set 一下 在 96 也可以 get 成功 evan@evanpc:~$ redis-cli -h 192.168.30.96 -a dkmhw3xdghlrd -p 6379 set BB bb OK evan@evanpc:~$ redis-cli -h 192.168.30.96 -a dkmhw3xdghlrd -p 6379 get BB "bb" evan@evanpc:~$ redis-cli -h 192.168.30.95 -a dkmhw3xdghlrd -p 6379 get BB "bb" evan@evanpc:~$ redis-cli -h 192.168.30.96 -a dkmhw3xdghlrd -p 6379 set BBB bbb OK evan@evanpc:~$ redis-cli -h 192.168.30.96 -a dkmhw3xdghlrd -p 6379 get BBB "bbb" evan@evanpc:~$ redis-cli -h 192.168.30.95 -a dkmhw3xdghlrd -p 6379 get BBB "bbb" evan@evanpc:~$ redis-cli -h 192.168.30.94 -a dkmhw3xdghlrd -p 6379 get BBB (nil)
常用命令API
redis-cli -a dkmhw3xdghlrd -p 6379 INFO Replication redis-cli -h 192.168.30.89 -a 12345 -p 6379 info Sentinel 注意 这个命令有错 redis-cli -h 192.168.30.89 -a 12345 -p 6379 INFO | grep slave redis-cli -h 192.168.30.89 -a 12345 -p 26379 redis-cli -h 192.168.30.94 -a 12345 -p 26379 sentinel get-master-addr-by-name mymaster killall redis-sentinel redis-server redis-server /etc/redis/6379.conf && redis-sentinel /etc/redis/sentinel.conf & >sentinel masters >sentinel master mymaster HA功能就是这个实现的 26379> sentinel get-master-addr-by-name mymaster 1) "192.168.30.94" 2) "6379"
sentinel clent
192.168.30.62 如下有错 是因为没有配置主节点密码 192.168.30.89:26379> info Sentinel # Sentinel master0:name=mymaster,status=sdown,address=192.168.30.88:6379,slaves=0,sentinels=1 redis-server /etc/redis/6379.conf redis-sentinel /etc/redis/sentinel.conf & 客户端可以将 Sentinel 看作是一个只提供了订阅功能的 Redis 服务器,你不可以使用 PUBLISH 命令向这个服务器发送信息,但你可以用 SUBSCRIBE 命令或者 PSUBSCRIBE 命令, 通过订阅给定的频道来获取相应的事件提醒。 一个频道能够接收和这个频道的名字相同的事件。 比如说, 名为 +sdown 的频道就可以接收所有实例进入主观下线(SDOWN)状态的事件。 在redis2.8以上版本已经不需要手动切换了, 1,当master挂掉后会随机切换一个slave为新的master。 2,当老的master重新启动后会自动成为slave加入集群。
优化
sentinel 配置文件 也要学课本 优化一下 dir 目录什么的 不能 /tmp 主从也是一样要加 Redis常见问题 最大内存问题:要设置好最大内存,以防不停的申请内存,造成系统内存都被用完。 Fork进程问题:'vm.overcommit_memory = 1'这一个选项要加到系统的配置中,防止fork因内存不足而失败。 密码问题:需要设置复杂一些,防止暴力破解。
问题
info replication 是到了89 但是数据不能同步到 88 and 71 如果sentinel 进程挂了呢 好像在centos7 上 redis 有时用脚本启动不起来 有时进程会自己挂了呢 #sentinel实例监听的端口 port 26379 #告诉sentinel监控这个名为mymaster的master,它的监听地址是127.0.0.1,并且设置failing sentinel为2,表示当有2台sentinel探测到该实例失败时,该实例进入O_DOWN状态。 sentinel monitor mymaster 127.0.0.1 6379 2 #redis实例多少毫秒不可达sentinel,sentinel则认为该实例的状态转变为S_DOWN,但是这个状态还不足以启动automatic failover机制。只有足够多的实例认为该实例是S_DOWN状态,这时该实例进入O_DOWN状态, sentinel down-after-milliseconds mymaster 30000 #在sentinel检测到O_DOWN后,是否对这台redis启动failover机制 sentinel can-failover mymaster yes #在failover时,我们可以设置允许多少slave同时可以连接新的master。该值越低,完成failover的进程花费的时间越多,如果对从数据要求不是很及时,你可能不需要所有的从在同一时间同步到新的主(同步到新主,意味着数据重传),你确定在宕机时只有一个从可达则设置为1(如果这样的话其它的从还能用老的数据来干活 sentinel parallel-syncs mymaster 1 #设置failover的超时时间是多少毫秒 sentinel failover-timeout mymaster 900000
参考
https://github.com/wojiushixiaobai/redis-sentinel redis-sentinel
goodRedis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)
redis主从设置以及通过Sentinel(哨兵)实现的高可用
使用php访问redis的sentinel
http://www.huyanping.cn/redis-sentinel%E9%AB%98%E5%8F%AF%E7%94%A8%E6%96%B9%E6%A1%88%E5%AE%9E%E8%B7%B5/ redis-sentinel高可用方案实践
这个应该可以作为备用 https://github.com/huyanping/redis-sentinel
在此可以查看到的 只是一开始是我google 然后再返回官网看的 这顺序不太对 哈哈 下次改 https://redis.io/clients#php
Redis Sentinel安装部署与常用操作
vip(not keepalived) sentinel redis高可用架构
用 redis-sentinel 做 redis 集群,如何实现当master挂掉后,不用修改程序中的配置
Redis 复制、Sentinel的搭建和原理说明 有执行脚本
Redis Sentinel配置小记 twemproxy + redis + sentinel 实现redis集群高可用
使用redis3.0搭建redis集群及php操作redis集群