redis 哨兵部署

一、架构分布

一主两从三哨兵

主:  10.1.0.71
从: 10.1.0.72 10.1.0.73

哨兵:10.1.0.71 10.1.0.72 10.1.0.73

二、安装redis

三台机器同步操作:

1、安装依赖环境

yum -y install tcl tcl-devel gcc gcc-c++ jemalloc-devel

2、下载编译软件包

wget http://download.redis.io/releases/redis-3.2.8.tar.gz 

tar xf redis-3.2.8.tar.gz 
cd redis-3.2.8 
make && make  install

3、基本配置

mkdir -pv /etc/redis
mkdir -pv /var/lib/redis/6379
mkdir -pv /var/lib/redis/sentinel-26379

4.1、配置redis 配置

vim /etc/redis/6379.conf

bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 5110
timeout 30
tcp-keepalive 300
daemonize yes
supervised no
pidfile "/var/run/redis_6379.pid"
loglevel notice
logfile "/var/log/redis_6379.log"
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
dir "/var/lib/redis/6379"
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 7812500kb
maxmemory-policy allkeys-lru
appendonly no
appendfilename "appendonly.aof"
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

注意:redis从服务器多一行配置

slaveof 10.1.0.71 6379

4.2、配置哨兵配置

vim /etc/redis/sentinel-26379.conf     

protected-mode yes
bind 0.0.0.0
port 26379
daemonize yes
pidfile "/var/run/sentinel_26379.pid"
loglevel notice
logfile "/var/log/sentinel_26379.log"
dir "/var/lib/redis/sentinel-26379"

sentinel monitor mymaster 10.1.0.71 6379 1
sentinel down-after-milliseconds mymaster 5000
# Generated by CONFIG REWRITE
sentinel failover-timeout mymaster 60000
sentinel config-epoch mymaster 17
sentinel leader-epoch mymaster 26

5.1、配置redis服务启动脚本

vim /etc/init.d/redis_6379 

#!/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/6379.conf"
REDISPORT="6379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO


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
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

5.2、配置redis-sentinel启动脚本

vim /etc/init.d/redis_sentinel_26379 

#!/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/sentinel_26379.pid
CONF="/etc/redis/sentinel-26379.conf"
REDISPORT="26379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO


case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
            echo "$PIDFILE exists, process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF --sentinel
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

注意:如果配置有修改,请修改相关配置

6、启动服务、配置开机启动

/etc/init.d/redis_6379    start
/etc/init.d/redis_sentinel_26379 start

chkconfig redis_6379 on
chkconfig redis_sentinel_26379 on

三、哨兵相关管理命令

info sentinel:获取监控的所有主节点的基本信息。
sentinel masters:获取监控的所有主节点的详细信息。
sentinel master mymaster:获取监控的主节点 mymaster 的详细信息。
sentinel slaves mymaster:获取监控的主节点 mymaster 的从节点的详细信息。
sentinel sentinels mymaster:获取监控的主节点 mymaster 的哨兵节点的详细信息。
sentinel get-master-addr-by-name mymaster:获取监控的主节点 mymaster 的地址信息,前文已有介绍。
sentinel is-master-down-by-addr:哨兵节点之间可以通过该命令询问主节点是否下线,从而对是否客观下线做出判断。

增加/移除对主节点的监控
sentinel monitor mymaster2 192.168.92.128 16379 2:与部署哨兵节点时配置文件中的 sentinel monitor 功能完全一样,不再详述。
sentinel remove mymaster2:取消当前哨兵节点对主节点 mymaster2 的监控。


强制故障转移
sentinel failover mymaster:该命令可以强制对 mymaster 执行故障转移,即便当前的主节点运行完好。

results matching ""

    No results matching ""