1. 程式人生 > >實現redis高可用主從之sentinel

實現redis高可用主從之sentinel

redis sentinel redis主從 redis高可用

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