查看“Redis Sentinel高可用架构”的源代码
←
Redis Sentinel高可用架构
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==信息== 192.168.30.94 192.168.30.95 192.168.30.96 ==第一步 主从搭建== [[Redis主从复制]] ==第二步 sentinel== === 配置sentinel=== <pre> #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 </pre> [https://gist.github.com/mathieue/4707757 sentinel启动脚本] ===测试sentinel=== <pre> 可见有两个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) </pre> ==常用命令API == <pre> 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" </pre> == sentinel clent == <pre> 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加入集群。 </pre> ==优化== [https://gist.github.com/mathieue/4707757 sentinel启动脚本 centos6.x] <pre> sentinel 配置文件 也要学课本 优化一下 dir 目录什么的 不能 /tmp 主从也是一样要加 Redis常见问题 最大内存问题:要设置好最大内存,以防不停的申请内存,造成系统内存都被用完。 Fork进程问题:'vm.overcommit_memory = 1'这一个选项要加到系统的配置中,防止fork因内存不足而失败。 密码问题:需要设置复杂一些,防止暴力破解。 </pre> ==问题 == <pre> 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 </pre> == 参考== https://github.com/wojiushixiaobai/redis-sentinel redis-sentinel [https://www.cnblogs.com/bigdevilking/p/9595557.html goodRedis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)] [https://blog.51cto.com/kerry/2341308 redis主从设置以及通过Sentinel(哨兵)实现的高可用] 使用php访问redis的sentinel [https://github.com/jamescauwelier/PSRedis jamescauwelier/PSRedis] 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 [https://redis.io/topics/sentinel-clients sentinel-clients] 在此可以查看到的 只是一开始是我google 然后再返回官网看的 这顺序不太对 哈哈 下次改 https://redis.io/clients#php [http://blog.csdn.net/drizzt0878/article/details/73826088 Redis Sentinel安装部署与常用操作] [http://navyaijm.blog.51cto.com/4647068/1745569 vip(not keepalived) sentinel redis高可用架构] [https://segmentfault.com/q/1010000000663948 用 redis-sentinel 做 redis 集群,如何实现当master挂掉后,不用修改程序中的配置] [http://blog.csdn.net/yinmingjuncn/article/details/26278385 使用jedis访问redis的sentinel] [http://www.cnblogs.com/zhoujinyi/p/5570024.html Redis 复制、Sentinel的搭建和原理说明 有执行脚本] [http://www.fblinux.com/?p=157 redis主从复制+sentinel集群] [http://debugo.com/redis-sentinel/ Redis Sentinel配置小记] [https://my.oschina.net/dchuang/blog/666827 twemproxy + redis + sentinel 实现redis集群高可用] [http://m.blog.csdn.net/geniuslinchao/article/details/51646235 Laravel 5的redis哨兵(sentinel)支持] [http://redisdoc.com/topic/sentinel.html ] [http://blog.jobbole.com/107941/ Redis 主从配置心得及其高可用方案] [http://www.cnblogs.com/jaycekon/p/6237562.html 深入浅出Redis-redis哨兵集群] [http://www.jianshu.com/p/42ee966f96e5 Redis Sentinel(哨兵)部署] [http://www.shixinke.com/redis/redis-3-cluster-and-php-redis-cluster 使用redis3.0搭建redis集群及php操作redis集群] [https://github.com/huyanping/redis-sentinel huyanping/redis-sentinel] [http://blog.csdn.net/boonya/article/details/64122370 Redis通过配置修改密码] http://redis.cn/ [http://www.voidcn.com/blog/c295477887/article/p-6195412.html 关于redis的主从、哨兵、集群] [https://my.oschina.net/dchuang/blog/666827 twemproxy + redis + sentinel 实现redis集群高可用] [http://blog.jiguang.cn/redis-twemproxy-benchmark/ Redis 存储分片之代理服务Twemproxy 测试] [http://www.yunweipai.com/archives/18728.html Redis高可用架构最佳实践] [http://www.cnblogs.com/zhoujinyi/p/5585723.html Redis Sentinel 高可用实现说明] [http://redisbook.com/ Redis 设计与实现] [[category:ops]]
返回至
Redis Sentinel高可用架构
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息