Redis-Server 集群指南
一、前置条件
1、服务器清单(主从):
|
|
2、服务器拓扑图
![](/documentation/raw/master/snapshot/deploy/redis/cluster.jpg)
二、Redis MASTER(主机)配置
创建主机的服务启动脚本
/etc/init.d/redis-session
、/etc/init.d/redis-site
12sudo touch /etc/init.d/redis-sessionsudo touch /etc/init.d/redis-siteredis-session
脚本如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#!/bin/sh## redis - this script starts and stops the redis-server daemon## chkconfig: - 85 15# description: Redis is a persistent key-value database# processname: redis-server# config: /etc/redis/redis.conf# config: /etc/sysconfig/redis# pidfile: /var/run/redis.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0redis="/usr/local/bin/redis-session"prog=$(basename $redis)REDIS_CONF_FILE="/etc/redis/session.conf"[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redislockfile=/var/lock/redis/sessionstart() {[ -x $redis ] || exit 5[ -f $REDIS_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $redis $REDIS_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {stopstart}reload() {echo -n $"Reloading $prog: "killproc $redis -HUPRETVAL=$?echo}force_reload() {restart}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"exit 2esacredis-site
脚本如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102#!/bin/sh## redis - this script starts and stops the redis-server daemon## chkconfig: - 85 15# description: Redis is a persistent key-value database# processname: redis-server# config: /etc/redis/redis.conf# config: /etc/sysconfig/redis# pidfile: /var/run/redis.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0redis="/usr/local/bin/redis-site"prog=$(basename $redis)REDIS_CONF_FILE="/etc/redis/site.conf"[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redislockfile=/var/lock/redis/sitestart() {[ -x $redis ] || exit 5[ -f $REDIS_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $redis $REDIS_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilereturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {stopstart}reload() {echo -n $"Reloading $prog: "killproc $redis -HUPRETVAL=$?echo}force_reload() {restart}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"exit 2esac添加启动服务
1234sudo chkconfig --add redis-sessionsudo chkconfig --add redis-sitesudo chkconfig --level redis-site onsudo chkconfig --level redis-session on启动服务
12sudo service redis-session startsudo service redis-site start验证服务是否启动
三、Redis SLAVE(从机)配置
启动从机前请确保
MASTER
已正常启动并能在从机中使用redis-cli
访问input:
12# 访问 redis-session 的 master 主机redis-cli -h 172.17.121.33 -p 6379output:
1redis 172.17.121.33:6379>input:
12# 访问 redis-site 的 master 主机redis-cli -h 172.17.121.33 -p 1221output:
1redis 172.17.121.33:1221>创建从机的服务启动脚本
/etc/init.d/redis-session
、/etc/init.d/redis-site
12sudo touch /etc/init.d/redis-sessionsudo touch /etc/init.d/redis-siteredis-session
脚本如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122#!/bin/sh## redis - this script starts and stops the redis-server daemon## chkconfig: - 85 15# description: Redis is a persistent key-value database# processname: redis-server# config: /etc/redis/redis.conf# config: /etc/sysconfig/redis# pidfile: /var/run/redis.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0redis="/usr/local/bin/redis-session"redis_port=6379monitor_host=172.17.121.34monitor_port=26379cluster_name="portal-session"prog=$(basename $redis)REDIS_CONF_FILE="/etc/redis/session.conf"[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redislockfile=/var/lock/redis/sessionstart() {[ -x $redis ] || exit 5[ -f $REDIS_CONF_FILE ] || exit 6echo -n $"Starting $prog: "daemon $redis $REDIS_CONF_FILEretval=$?echo[ $retval -eq 0 ] && touch $lockfilestatus=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $2}'| awk -F'=' '{print $2}'`if [ "$status"x = "ok"x ]; thenecho "Cluster is ok"master_host=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $3}'| awk -F '=' '{print $2}'| awk -F ':' '{print $1}'`master_port=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $3}'| awk -F '=' '{print $2}'| awk -F ':' '{print $2}'`echo $"Get the cluster master $master_host:$master_port"echo -n $"Mount to the master $master_host:$master_port: "result=`redis-cli -p $redis_port slaveof $master_host $master_port`echo $resultelseecho "Cluster has dead, this slave will run in standalone mode"fireturn $retval}stop() {echo -n $"Stopping $prog: "killproc $prog -QUITretval=$?echo[ $retval -eq 0 ] && rm -f $lockfilereturn $retval}restart() {stopstart}reload() {echo -n $"Reloading $prog: "killproc $redis -HUPRETVAL=$?echo}force_reload() {restart}rh_status() {status $prog}rh_status_q() {rh_status >/dev/null 2>&1}case "$1" instart)rh_status_q && exit 0$1;;stop)rh_status_q || exit 0$1;;restart|configtest)$1;;reload)rh_status_q || exit 7$1;;force-reload)force_reload;;status)rh_status;;condrestart|try-restart)rh_status_q || exit 0;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"exit 2esac当服务启动时,代码片段
123456789101112131415status=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $2}'| awk -F'=' '{print $2}'`if [ "$status"x = "ok"x ]; thenecho "Cluster is ok"master_host=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $3}'| awk -F '=' '{print $2}'| awk -F ':' '{print $1}'`master_port=`redis-cli -h $monitor_host -p $monitor_port info sentinel|grep $cluster_name| awk -F ',' '/status/ {print $3}'| awk -F '=' '{print $2}'| awk -F ':' '{print $2}'`echo $"Get the cluster master $master_host:$master_port"echo -n $"Mount to the master $master_host:$master_port: "result=`redis-cli -p $redis_port slaveof $master_host $master_port`echo $resultelseecho "Cluster has dead, this slave will run in standalone mode"fi会查询当前的集群状态,将从机的
redis
挂载到集群中去
redis-site
脚本雷同 session , 这里不再赘述
|
|
添加启动服务
1234sudo chkconfig --add redis-sessionsudo chkconfig --add redis-sitesudo chkconfig --level redis-site onsudo chkconfig --level redis-session on启动服务
12sudo service redis-session startsudo service redis-site start验证服务是否启动
四、启动 REDIS
监控
- 确保监控正确安装配置,详细步骤请参考[这里](/
/blob/master/deploy/redis/monitor.md)
创建主机的服务启动脚本
/etc/redis/redis-monitor
redis-monitor
脚本内容如下:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#!/bin/sh## redis - this script starts and stops the redis-server daemon## chkconfig: - 85 15# description: Redis is a persistent key-value database# processname: redis-server# config: /etc/redis/sentinel.conf# pidfile: /var/run/sentinel.pid# lockfile: /var/lcok/sentinel# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0# define the exec progromREDIS_EXEC="/usr/local/bin/redis-monitor"REDIS_CONF_FILE="/etc/redis/sentinel.conf"PROG=$(basename $REDIS_EXEC)# if /etc/sysconfig/redis exists,use this config env[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redisLOCKFILE=/var/lock/redis/sentinelstart() {[ -x $REDIS_EXEC ] || exit 5[ -f $REDIS_CONF_FILE ] || exit 6echo -n $"Starting $PROG: "nohup $REDIS_EXEC /etc/redis/sentinel.conf --sentinel > /var/log/redis/monitor.log 2>&1 &echo [ OK ] && touch $LOCKFILEreturn}stop() {pid=`ps -ef|grep $REDIS_EXEC|grep -v grep|awk '{print $2}'`if [ ! $pid ]; thenecho $"$PROG is stoped"elseecho -n $"Stopping $PROG: "kill -9 $pidecho [ OK ] && rm -f $LOCKFILEfireturn}rh_status() {status $PROG}rh_status_q() {rh_status >/dev/null 2>&1}restart() {stopstart}exit_a(){echo $"$PROG is running"exit 0}exit_b(){echo $"$PROG is stopped"exit 0}case "$1" instart)rh_status_q && exit_a$1;;stop)rh_status_q || exit_b$1;;restart|configtest)$1;;status)rh_status;;*)echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"exit 2esac配置及启动
monitor
服务123sudo chkconfig --add redis-monitorsudo chkconfig --level 345 redis-monitor onsudo service redis-monitor start
五、验证集群状态
使用管理员用户登陆到
MASTER
,查看当前集群状态查看
session
集群状态**input:**
1redis-cli -h 127.0.0.1 -p 6379 info Replication**output:**
12345# Replicationrole:masterconnected_slaves:2slave0:172.17.121.32,6379,onlineslave1:172.17.121.31,6379,online查看
site
集群状态**input:**
1redis-cli -h 127.0.0.1 -p 1221 info Replication**output:**
12345# Replicationrole:masterconnected_slaves:2slave0:172.17.121.32,1221,onlineslave1:172.17.121.31,1221,online
使用管理员用户登陆到
SLAVE
,查看当前集群状态(示例中使用172.17.121.33)查询
session
集群状态input:
1redis-cli -h 127.0.0.1 -p 6379 info Replicationoutput:
12345678910# Replicationrole:slavemaster_host:172.17.121.33master_port:6379master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_priority:100slave_read_only:1connected_slaves:0查看
site
集群状态input:
1redis-cli -h 127.0.0.1 -p 1221 info Replicationoutput:
12345678910# Replicationrole:slavemaster_host:172.17.121.33master_port:1221master_link_status:upmaster_last_io_seconds_ago:3master_sync_in_progress:0slave_priority:100slave_read_only:1connected_slaves:0
使用管理员登陆到
MONITOR
机上查看集群状态
input:
1redis-cli -h 127.0.0.1 -p 26379 info sentineloutput:
1234567# Sentinelsentinel_masters:2sentinel_tilt:0sentinel_running_scripts:0sentinel_scripts_queue_length:0master0:name=portal-session,status=ok,address=172.17.121.33:6379,slaves=2,sentinels=1master1:name=portal-site,status=ok,address=172.17.121.33:1221,slaves=2,sentinels=1可查看到当前的集群状态