实现redis高可用主从之sentinel

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现redis高可用主从之sentinel相关的知识,希望对你有一定的参考价值。

sentinel作用

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

实施环境

系统环境:centos7
redis版本:4.0.8
主服务器IP:192.168.20.101 6379
从服务器IP:192.168.20.99 6379
主服务器sentinel端口:26379
从服务器sentinel端口:26379

安装redis

[root] # wget http://download.redis.io/releases/redis-4.0.8.tar.gz
[root] # tar zxvf redis-4.0.8.tar.gz
[root] # cd redis-4.0.8
[root] # make
[root] # mkdir -p /usr/local/redis
[root] # cp /usr/local/src/redis-4.0.8/src/redis-server /usr/local/redis/
[root] # cp /usr/local/src/redis-4.0.8/src/redis-cli /usr/local/redis/
[root] # cp /usr/local/src/redis-4.0.8/redis.conf /usr/local/redis/
[root] # cd /usr/local/redis
[root] # vim /usr/local/redis/redis.conf

修改以下四项:

bind 0.0.0.0 #接受所有来自于可用网络接口的连接
daemonize yes #启用后台守护进程
protected-mode no #禁用保护模式
requirepass 123456 #设置密码

[root] # vim /etc/init.d/redis
#!/bin/sh
# description: Start and Stop redis
#PATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/redis/redis-server     
REDIS_CLI=/usr/local/redis/redis-cli     
PIDFILE=/var/run/redis_6379.pid
CONF="/usr/local/redis/redis.conf"     
AUTH="123456"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        if [ "$?"="0" ] 
        then 
              echo "Redis is running..."
        fi 
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $REDIS_CLI -p $REDISPORT SHUTDOWN
                while [ -x ${PIDFILE} ]
               do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
   restart|force-reload)
        ${0} stop
        ${0} start
        ;;
  *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
        exit 1
esac
[root] # chmod 755 /etc/init.d/redis #可执行
[root] # chkconfig --add redis #添加系统服务
[root] # vim /etc/rc.local

在文件末尾添加以下内容

service redis start #开机启动

开启redis服务

[root] # service redis start

技术分享图片
查看进程

[root] # ps aux | grep redis

技术分享图片

配置redis主从

  • 主(master):192.168.20.101

    • 添加以上redis配置
  • 从(slave):192.168.20.99

    • 添加以上redis配置
    • 添加以下配置

      slaveof 192.168.20.101 6379
      masterauth 123456

查看主从信息

[root] # cd /usr/local/redis
[root] # ./redis-cli -a 123456
[root] > info replication
  • 主(master)

技术分享图片

  • 从(slave)

技术分享图片

  • 验证

技术分享图片
技术分享图片
技术分享图片
技术分享图片
主-停止redis
技术分享图片
从-变主
技术分享图片
从-保存数据,迁移数据到主redis
技术分享图片
主-重启redis服务
技术分享图片
从-重新切换成从redis
技术分享图片
从-又成为只读redis服务
技术分享图片

配置高可用redis主从

[root] # cp /usr/local/src/redis-4.0.8/sentinel.conf /usr/local/redis/ #复制sentinel配置文件
[root] # vim /usr/local/redis/sentinel.conf

修改如下配置

daemonize yes
protected-mode no
sentinel monitor mymaster 192.168.20.101 6379 1
sentinel down-after-milliseconds mymaster 1000
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster 123456

详细配置及解释见redis中文网

[root] # netstat -lap |grep 26379

技术分享图片

[root] # ./redis-cli -h 192.168.20.101 -p 26379
[root] # >info

技术分享图片

kill主redis进程
技术分享图片

自动切换成功
技术分享图片

以上是关于实现redis高可用主从之sentinel的主要内容,如果未能解决你的问题,请参考以下文章

实现redis高可用主从之sentinel

Redis高可用专栏之Sentinel模式

架构师修炼之路Redis 哨兵机制 ( Sentinel ) : 实现高可用Redis 哨兵机制 ( Sentinel ) : 实现高可用...

Redis——高可用之哨兵sentinel配置与启动及主从服务宕机与恢复

使用Sentinel机制实现Redis高可用主从复制

redis-sentinel主从复制高可用