Redis Sentinel高可用架构

来自linux中国网wiki
Evan讨论 | 贡献2019年10月14日 (一) 13:52的版本 (导入1个版本)
跳到导航 跳到搜索

信息

192.168.30.94
192.168.30.95
192.168.30.96

第一步 主从搭建

Redis主从复制

第二步 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启动脚本

测试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启动脚本 centos6.x


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

参考

goodRedis哨兵模式(sentinel)部署记录(主从复制、读写分离、主从切换)

redis主从设置以及通过Sentinel(哨兵)实现的高可用

使用php访问redis的sentinel

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

sentinel-clients

在此可以查看到的 只是一开始是我google 然后再返回官网看的 这顺序不太对 哈哈 下次改 https://redis.io/clients#php


Redis Sentinel安装部署与常用操作 vip(not keepalived) sentinel redis高可用架构

用 redis-sentinel 做 redis 集群,如何实现当master挂掉后,不用修改程序中的配置

使用jedis访问redis的sentinel

Redis 复制、Sentinel的搭建和原理说明 有执行脚本

redis主从复制+sentinel集群

Redis Sentinel配置小记 twemproxy + redis + sentinel 实现redis集群高可用

Laravel 5的redis哨兵(sentinel)支持

[1]

Redis 主从配置心得及其高可用方案

深入浅出Redis-redis哨兵集群

Redis Sentinel(哨兵)部署

使用redis3.0搭建redis集群及php操作redis集群

huyanping/redis-sentinel

Redis通过配置修改密码

http://redis.cn/

关于redis的主从、哨兵、集群

twemproxy + redis + sentinel 实现redis集群高可用

Redis 存储分片之代理服务Twemproxy 测试

Redis高可用架构最佳实践

Redis Sentinel 高可用实现说明

Redis 设计与实现