1. 程式人生 > 實用技巧 >redis一主二從+三哨兵配置

redis一主二從+三哨兵配置

場景:一臺服務上搭建redis主從複製

前提:伺服器上的redis是通過寶塔安裝的,安裝路徑為/www/server/redis/

1. cd /www/server/redis && cp redis.conf redis_6380.conf  
2. vim redis_6380.conf 更改以下幾項:  
pidfile /var/run/redis_6380.pid  
port 6380  
dbfilename dump_6380.rdb  
3. cd /www/server/redis && cp start.pl start_6380.pl  
4. 設定啟動指令碼 cd /etc/init.d && cp redis redis-6380  
5. vim redis-6380 內容如下:
#!/bin/sh
# chkconfig: 2345 56 26
# description: Redis Service
# Provides:          Redis
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts Redis
# Description:       starts the BT-Web
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

CONF="/www/server/redis/redis_6380.conf"
REDIS_PORT=$(cat $CONF |grep port|grep -v '#'|awk '{print $2}')
if [ "$REDIS_PASS" != "" ];then
        REDIS_PASS=" -a $REDIS_PASS"
fi
if [ -f "/www/server/redis/start_6380.pl" ];then
        STAR_PORT=$(cat /www/server/redis/start_6380.pl)
else
        STAR_PORT="6380"
fi
EXEC=/www/server/redis/src/redis-server
PIDFILE=/var/run/redis_6380.pid

redis_start(){
        echo "Starting Redis server..."
        nohup sudo -u redis $EXEC $CONF >> /www/server/redis/logs.pl 2>&1 &
        echo ${REDIS_PORT} > /www/server/redis/start_6380.pl
        sleep 1.5
        if [ "${REDIS_PID}" ]; then
                echo "${REDIS_PID}" > ${PIDFILE}
        fi
}
redis_status(){
        if [ "${REDIS_PID}" ]; then
                echo "redis is running..."
        else
                echo "redis is stopped..."
        fi
}
redis_stop(){
        if [ "${REDIS_PID}" ]; then
                echo "${REDIS_PID}" > ${PIDFILE}
        fi
}
redis_status(){
        REDIS_PID=$(ps -ef|grep redis-server|grep -v "grep"|grep -v "root"|awk '{print $2}')
        if [ "${REDIS_PID}" ]; then
                echo "redis is running..."
        else
                echo "redis is stopped..."
        fi
}
redis_stop(){
        echo "Stopping ..."
        $CLIEXEC shutdown
        sleep 1
        pkill -9 redis-server
        rm -f ${PIDFILE}
        echo "Redis stopped"
}

case "$1" in
        start)
                redis_start
                ;;
        stop)
                redis_stop
                ;;
        status)
                redis_status
                ;;
        restart|reload)
                redis_stop
                sleep 0.3
                redis_start
                ;;
        *)
                echo "Please use start or stop as first argument"
                ;;
esac
  1. 執行service redis-6380 start啟動另一個redis例項
  2. 配置主伺服器中的redis.conf檔案,在redis.conf中新增以下幾項:
(1) 將bind 127.0.0.1 註釋或改為bind 0.0.0.0  
(2) 開啟守護程序 daemonize yes  
(3) 設定訪問密碼 requirepass password  
(4) 記憶體策略 maxmemory-policy volatile-lru/allkeys-lru
  1. 配置從服務中的redis.conf檔案,在redis_6380.conf中新增以下幾項:
(1) slaveof 192.168.5.22 6379  
(2) masterauth password  
(3) slave-read-only yes
  1. 重複上面的步驟再搭建一個埠為6381的redis例項
  2. 哨兵sentinel.conf檔案配置,需要更改以下幾項(預設使用redis自帶的sentinel.conf):
(1)port 26379 //要跟redis例項的埠區分開  
(2)sentinel monitor mymaster 127.0.0.1 6379 2 //master的ip和埠
  1. 啟動哨兵(正確的啟動順序:主-->從-->哨兵)
cd /www/server/redis/ && ./src/redis-sentinel sentinel.conf
  1. 啟動之後進行測試,將redis主伺服器下線,看哨兵能否進行故障轉移即可