您的位置:首页 > 数据库 > Redis

Redis+Keeplived实现高可用

2017-06-23 17:41 337 查看
博文说明【前言】:
本文将通过个人口吻介绍Redis+Keeplived实现高可用的相关知识,在目前时间点【2017年6月23号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作及学习中如发现本文内容与实际情况有所偏差,将会完善该博文内容。
本文为我编写的部署文档(word格式)中关于redis部分的内容复制粘贴而来,因此会存在一些格式问题,因不影响阅读和理解,也没有改的必要了,这样反而便于大家慢下来理解。发表此处,一来是有方便自己查看,二来是给广大网友参考,谢谢大家阅读。

正文:

Redis配置信息
Redis部署使用两台服务器,实现Redis+keepalived,提供redis服务高可用,当主redis进程或服务器宕机之后,备redis进程或服务器继续提供服务。服务器配置信息如下所示:
主机名/IP端口用途
JZSHPT-APP5/10.133.214.156379Redis主服务器-master
JZSHPT-APP6/10.133.214.166379Redis从服务器-salve
一:Redis主服务器搭建-redis-master

1、安装redis

JZSHPT-APP5:/soft # tar -zxf redis-3.2.1.tar.gz -C /usr/localJZSHPT-APP5:/soft # cd /usr/local/redis-3.2.1/JZSHPT-APP5:/usr/local/redis-3.2.1 # makeJZSHPT-APP5:/usr/local/redis-3.2.1 # cd src &&make installJZSHPT-APP5:/usr/local # mv /usr/local/redis-3.2.1/ /usr/local/redis1)redis配置文件修改JZSHPT-APP5:/usr/local# vim /usr/local/redis/redis.conf修改文件相关内容为:#bind 127.0.0.1protected-mode noport 6379daemonizeyespidfile/usr/local/redis/redis.pidlogfile"/usr/local/redis/redis.log"dbfilename dump6379.rdbdir /usr/local/redis/2)redis启动脚本编写JZSHPT-APP5:/usr/local/redis# vim /etc/init.d/redisd#!/bin/sh#chkconfig345 86 14#descriptionStartup and Shutdown script for Redis-3.2.1progdir=/usr/local/redis/srcprogname=redis-serverdaemon=$progdir/$prognameconfig=/usr/local/redis/redis.confpidfile=/usr/local/redis/redis.piddesc="redisdaemon"scriptname=/etc/init.d/redisdstart(){ if test -x $daemon; then echo -e "Starting$desc:$progname" if $daemon $config then echo -e "Start OK!!!" else echo -e "Startfailed!!!" fi else echo -e "Couldn't find RedisServer($daemon)" fi } stop(){ if test -e $pidfile; then echo -e "Stopping$desc:$progname" if kill `cat $pidfile` then echo -e "stop OK!!!" else echo -e "Stop failed!!!" fi else echo -e "No Redis Server($daemoon)running" fi} restart(){ echo -e "Restarting$desc:$progname" stop start } status(){ ps aux | grep $progname} case$1 in start) start ;; stop) stop ;; restart)restart ;; status) status ;; *) echo"Usage:$scriptnme{start|stop|restart|status}" >&2 exit 1 ;;esacexit0 JZSHPT-APP5:/usr/local/redis #chmod +x /etc/init.d/redisd JZSHPT-APP5:/usr/local/redis #chkconfig --add redisd

2、安装Keepalived

安装keepalived前请自行安装解决依赖关系(可能会涉及的软件包为libopenssl-devel、zlib-devel、ipvsadm内核模块等)JZSHPT-APP5:/soft # tar -zxf keepalived-1.2.23.tar.gz JZSHPT-APP5:/soft # cd keepalived-1.2.23/JZSHPT-APP5:/soft/keepalived-1.2.23 # ./configure--prefix=/usr/local/keepalived/JZSHPT-APP5:/soft/keepalived-1.2.23 # make &&make install1)keepalived配置文件编辑JZSHPT-APP5:~# mkdir -p /etc/keepalived/{scripts,log}JZSHPT-APP5:~ # vim /usr/local/keepalived/etc/keepalived/! Configuration File for keepalived global_defs { router_idRedis1_DEVEL} vrrp_script chk_redis { script"/etc/keepalived/scripts/redis_check.sh" interval2 timeout2 fall 3} vrrp_instance VI_1 { stateMASTER interfaceeth0 virtual_router_id 51 nopreempt priority200 advert_int5 authentication { auth_typePASS auth_pass redis } virtual_ipaddress { 10.133.214.50 } track_script { chk_redis } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh}2)keepalived启动脚本配置JZSHPT-APP5:~ # cp /soft/keepalived-1.2.23/keepalived/etc/init.d/keepalived.suse.init/etc/init.d/keepalived.suseJZSHPT-APP5:~ # cp/usr/local/keepalived/sbin/keepalived /usr/local/sbin/JZSHPT-APP5:~ # cp /usr/local/keepalived/etc/keepalived/keepalived.conf/etc/keepalived/3)定义监控脚本JZSHPT-APP5:~ # vim/etc/keepalived/scripts/redis_check.sh#!/bin/sh###/etc/keepalived/scripts/redis_check.shALIVE=`/usr/local/bin/redis-cli PING`if [ "$ALIVE" == "PONG" ]; then echo $ALIVE exit 0else echo $ALIVE exit 1fi4)定义状态切换为master时执行的脚本JZSHPT-APP5:~ # vim/etc/keepalived/scripts/redis_master.sh#!/bin/sh###/etc/keepalived/scripts/redis_master.shREDISCLI="redis-cli"LOGFILE="/etc/keepalived/log/redis-state.log"pid=$$echo "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]">> $LOGFILEecho "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]Run 'SLAVEOF 10.133.214.16 6379'" >> $LOGFILE$REDISCLI SLAVEOF 10.133.214.16 6379 >>$LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver] wait 10 sec for data sync from oldmaster" >> $LOGFILEsleep 10 echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver] data rsync from old mater ok...">> $LOGFILEecho "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] Run slaveof no one,close master/slave">> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] wait other slave connect....">> $LOGFILE5)定义状态切换为backups时执行的脚本JZSHPT-APP5:~ # vim/etc/keepalived/scripts/redis_backup.sh#!/bin/bash###/etc/keepalived/scripts/redis_backup.shREDISCLI="redis-cli"LOGFILE="/etc/keepalived/log/redis-state.log"pid=$$ echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master]" >> $LOGFILEecho "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] Being slave state..." >> $LOGFILE2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] wait 10 sec for data sync from oldmaster" >> $LOGFILEsleep 10echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] data rsync from old mater ok...">> $LOGFILEecho "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]Run 'SLAVEOF 10.133.214.16 6379'" >> $LOGFILE$REDISCLI SLAVEOF 10.133.214.16 6379 >>$LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver] slave connect to 192.18.3.21ok..." >> $LOGFILE6) 定义状态切换为stop时执行的脚本JZSHPT-APP5:~ # cp/etc/keepalived/scripts/redis_backup.sh /etc/keepalived/scripts/redis_stop.sh7) 定义状态切换为fault时执行的脚本JZSHPT-APP5:~ # cp/etc/keepalived/scripts/redis_backup.sh /etc/keepalived/scripts/redis_fault.sh

3、安装rsyslog实现keepalived日志分离

1)安装rsyslog软件包JZSHPT-APP5:/soft # rpm -ivhrsyslog-5.10.1-0.7.49.x86_64.rpm2)修改rsyslog配置文件JZSHPT-APP5:/soft # vim /etc/rsyslog.conf140 #*.*;mail.none;news.none -/var/log/messages141 *.*;mail.none;news.none;local0.none -/var/log/messages153 #local0,local1.* -/var/log/localmessages154 local0.* -/var/log/keepalived.log155 local1.* -/var/log/localmessages156 local2,local3.* -/var/log/localmessages157 local4,local5.* -/var/log/localmessages158 cal6,local7.* -/var/log/localmessages3)修改rsyslog启动脚本配置文件根据/etc/init.d/syslog中的三个启动选项,修改该文件内的”SYSLOG_DAEMON”选项JZSHPT-APP5:/soft # vim /etc/sysconfig/syslog40 #SYSLOG_DAEMON="syslog-ng"41 SYSLOG_DAEMON="rsyslogd" 4)修改Keepalived启动脚本选项JZSHPT-APP5:/soft # vim /etc/init.d/keepalived.suse17 DAEMON_OPT="-d "18 DAEMON_OPT="-d -D -S 0"5)启动rsyslog服务JZSHPT-APP5:/soft # /etc/init.d/syslog restart

4、启动Redis和Keepalived

JZSHPT-APP5:~ # /etc/init.d/redisd startJZSHPT-APP5:~ # /etc/init.d/keepalived.suse start

[b]二:Redis从服务器搭建-redis-slave[/b]

1、安装redis

JZSHPT-APP6:/soft # tar -zxf redis-3.2.1.tar.gz -C /usr/localJZSHPT-APP6:/soft # cd /usr/local/redis-3.2.1/JZSHPT-APP6:/usr/local/redis-3.2.1 # makeJZSHPT-APP6:/usr/local/redis-3.2.1 # cd src &&make installJZSHPT-APP6:/usr/local # mv /usr/local/redis-3.2.1/ /usr/local/redis1)redis配置文件修改
JZSHPT-APP6:/usr/local# vim /usr/local/redis/redis.conf修改文件相关内容为:#bind 127.0.0.1protected-mode noport 6379daemonizeyespidfile/usr/local/redis/redis.pidlogfile"/usr/local/redis/redis.log"dbfilename dump6379.rdbdir /usr/local/redis/2)redis启动脚本编写JZSHPT-APP6:/usr/local/redis# vim /etc/init.d/redisd#!/bin/sh#chkconfig345 86 14#descriptionStartup and Shutdown script for Redis-3.2.1progdir=/usr/local/redis/srcprogname=redis-serverdaemon=$progdir/$prognameconfig=/usr/local/redis/redis.confpidfile=/usr/local/redis/redis.piddesc="redisdaemon"scriptname=/etc/init.d/redisdstart(){ if test -x $daemon; then echo -e "Starting$desc:$progname" if $daemon $config then echo -e "Start OK!!!" else echo -e "Startfailed!!!" fi else echo -e "Couldn't find RedisServer($daemon)" fi } stop(){ if test -e $pidfile; then echo -e "Stopping$desc:$progname" if kill `cat $pidfile` then echo -e "stop OK!!!" else echo -e "Stop failed!!!" fi else echo -e "No Redis Server($daemoon)running" fi} restart(){ echo -e "Restarting$desc:$progname" stop start } status(){ ps aux | grep $progname} case$1 in start) start ;; stop) stop ;; restart)restart ;; status) status ;; *) echo"Usage:$scriptnme{start|stop|restart|status}" >&2 exit 1 ;;esacexit0 JZSHPT-APP6:/usr/local/redis #chmod +x /etc/init.d/redisd JZSHPT-APP6:/usr/local/redis #chkconfig --add redisd

2、安装Keepalived

安装keepalived前请自行安装解决依赖关系(可能会涉及的软件包为libopenssl-devel、zlib-devel、ipvsadm内核模块等)JZSHPT-APP6:/soft # tar -zxf keepalived-1.2.23.tar.gz JZSHPT-APP6:/soft # cd keepalived-1.2.23/JZSHPT-APP6:/soft/keepalived-1.2.23 # ./configure--prefix=/usr/local/keepalived/JZSHPT-APP6:/soft/keepalived-1.2.23 # make &&make install1)keepalived配置文件编辑JZSHPT-APP6:~ # mkdir -p /etc/keepalived/{scripts,log}JZSHPT-APP6:~ # vim /usr/local/keepalived/etc/keepalived/! Configuration File for keepalived global_defs { router_idRedis2_DEVEL} vrrp_script chk_redis { script"/etc/keepalived/scripts/redis_check.sh" interval 2 timeout2 fall 3} vrrp_instance VI_1 { state BACKUP interfaceeth0 virtual_router_id 51 priority200 advert_int5 authentication { auth_typePASS auth_pass redis } virtual_ipaddress{ 10.133.214.50 } track_script { chk_redis } notify_master /etc/keepalived/scripts/redis_master.sh notify_backup /etc/keepalived/scripts/redis_backup.sh notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh}2)keepalived启动脚本配置JZSHPT-APP6:~ # cp /soft/keepalived-1.2.23/keepalived/etc/init.d/keepalived.suse.init/etc/init.d/keepalived.suseJZSHPT-APP6:~ # cp /usr/local/keepalived/sbin/keepalived/usr/local/sbin/JZSHPT-APP6:~ # cp/usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/3)定义监控脚本JZSHPT-APP6:~ # vim/etc/keepalived/scripts/redis_check.sh#!/bin/sh###/etc/keepalived/scripts/redis_check.shALIVE=`/usr/local/bin/redis-cli PING`if [ "$ALIVE" == "PONG" ]; then echo $ALIVE exit 0else echo $ALIVE exit 1fi4)定义状态切换为master时执行的脚本JZSHPT-APP6:~ # vim/etc/keepalived/scripts/redis_master.sh#!/bin/sh###/etc/keepalived/scripts/redis_master.shREDISCLI="redis-cli"LOGFILE="/etc/keepalived/log/redis-state.log"pid=$$echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]" >> $LOGFILEecho "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]Run 'SLAVEOF 10.133.214.15 6379'" >> $LOGFILE$REDISCLI SLAVEOF 10.133.214.15 6379 >>$LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver] wait 10 sec for data sync from oldmaster" >> $LOGFILEsleep 10 echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver] data rsync from old mater ok...">> $LOGFILEecho "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] Run slaveof no one,closemaster/slave" >> $LOGFILE$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] wait other slave connect....">> $LOGFILE5)定义状态切换为backups时执行的脚本JZSHPT-APP6:~ # vim/etc/keepalived/scripts/redis_backup.sh#!/bin/bash###/etc/keepalived/scripts/redis_backup.shREDISCLI="redis-cli"LOGFILE="/etc/keepalived/log/redis-state.log"pid=$$ echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master]" >> $LOGFILEecho "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] Being slave state..." >>$LOGFILE 2>&1echo "`date+'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master] wait 10 sec for data sync from oldmaster" >> $LOGFILEsleep 10echo "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[master]data rsync from old mater ok..." >> $LOGFILEecho "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]Run 'SLAVEOF 10.133.214.15 6379'" >> $LOGFILE$REDISCLI SLAVEOF 10.133.214.15 6379 >>$LOGFILE 2>&1echo "`date +'%Y-%m-%d:%H:%M:%S'`|$pid|state:[slaver]slave connect to 10.133.214.15 ok..." >> $LOGFILE6) 定义状态切换为stop时执行的脚本JZSHPT-APP6:~ # cp/etc/keepalived/scripts/redis_backup.sh /etc/keepalived/scripts/redis_stop.sh7) 定义状态切换为fault时执行的脚本JZSHPT-APP6:~ # cp /etc/keepalived/scripts/redis_backup.sh/etc/keepalived/scripts/redis_fault.sh

3、安装rsyslog实现keepalived日志分离

1)安装rsyslog软件包JZSHPT-APP5:/soft # rpm -ivhrsyslog-5.10.1-0.7.49.x86_64.rpm2)修改rsyslog配置文件JZSHPT-APP5:/soft # vim /etc/rsyslog.conf140 #*.*;mail.none;news.none -/var/log/messages141 *.*;mail.none;news.none;local0.none -/var/log/messages153 #local0,local1.* -/var/log/localmessages154 local0.* -/var/log/keepalived.log155 local1.* -/var/log/localmessages156 local2,local3.* -/var/log/localmessages157 local4,local5.* -/var/log/localmessages159 cal6,local7.* -/var/log/localmessages3)修改rsyslog启动脚本配置文件根据/etc/init.d/syslog中的三个启动选项,修改该文件内的”SYSLOG_DAEMON”选项JZSHPT-APP5:/soft # vim /etc/sysconfig/syslog40 #SYSLOG_DAEMON="syslog-ng"41 SYSLOG_DAEMON="rsyslogd" 4)修改Keepalived启动脚本选项JZSHPT-APP5:/soft # vim /etc/init.d/keepalived.suse17 DAEMON_OPT="-d "18 DAEMON_OPT="-d -D -S 0"5)启动rsyslog服务JZSHPT-APP5:/soft # /etc/init.d/syslog restart

4、启动Redis和Keepalived

JZSHPT-APP6:~ # /etc/init.d/redisd startJZSHPT-APP6:~ # /etc/init.d/keepalived.suse start

结尾:
感谢阅读,祝有收获的一天,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  keepalived redis