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 执行故障转移,即便当前的主节点运行完好。