设为首页 收藏本站
查看: 581|回复: 0

[经验分享] Redis + keepalived 主从设置与搭建

[复制链接]

尚未签到

发表于 2017-12-21 16:08:32 | 显示全部楼层 |阅读模式
  Redis+keepalived安装及配置:
  1.ip规划:
  服务器
  Ip地址
  VIP
  应用软件
  Redis主
  192.168.1.102
  192.168.1.120
  Redis+
  keepalived
  Redis备
  192.168.1.103
  Redis+
  keepalived
  2.服务器基础配置安装
  先安装好基础装机环境,具体参考  服务器基础环境配置 文档
  redis安装:
  1.#下载redies安装包
  wget http://download.redis.io/releases/redis-3.2.0.tar.gz  tar -xf redis-3.2.0.tar.gz
  2.#编译安装  
  cd redis-3.2.0
  make
  3.#添加相关文件及命令
mkdir /usr/local/redis/bin/ -p

cd src

cp redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel /usr/local/redis/bin/

cd ..

cp redis.conf /etc/

  4.#添加启动脚本
echo '#chkconfig: 2345 10 90

#description: Start and Stop redis

REDISPORT=6379

EXEC=/usr/local/redis/bin/redis-server

REDIS_CLI=/usr/local/redis/bin/redis-cli

PIDFILE=/var/run/redis.pid

CONF="/etc/redis.conf"

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

if [ "$?"="0" ]

then

echo "Redis is running..."

fi

;;

stop)

if [ ! -f $PIDFILE ]

then

echo "$PIDFILE does not exist, process is not running"

else

PID=$(cat $PIDFILE)

echo "Stopping ..."

$REDIS_CLI -p $REDISPORT SHUTDOWN

while [ -x ${PIDFILE} ]

do

echo "Waiting for Redis to shutdown ..."

sleep 1

done

echo "Redis stopped"

fi

;;

restart|force-reload)

${0} stop

${0} start

;;

*)

echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2

exit 1

esac

' > /etc/init.d/redis

  添加执行权限:
  chmod +x /etc/init.d/redis
  5.#设置开机自启动
  chkconfig --add redis
  chkconfig redis on
  6.#创建redis状态日志
  mkdir /var/log/redis/
  touch /var/log/redis/redis.log
  Keepalived安装:
  1.获取安装包
  wget http://www.keepalived.org/software/keepalived-1.2.20.tar.gz
  2.解压安装
  tar -xf keepalived-1.2.20.tar.gz
  cd keepalived-1.2.20
  yum -y install openssl openssl-devel
  ./configure && make && make install
  3.文件配置
  mkdir /etc/keepalived
  mkdir /usr/local/keepalived/scripts/ -p
  cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
  cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
  cp /usr/local/sbin/keepalived /usr/sbin
  cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
  4.添加开机自启动
  chmod +x /etc/init.d/keepalived
  chkconfig --add keepalived
  chkconfig keepalived on
  以上操作主从都要执行
  
  
  
  redis +keepalived配置:
  1.配置redis master高可用配置文件:
vim  /etc/keepalived/keepalived

! Configuration File for keepalived

global_defs {

router_id redis103

}

vrrp_script chk_redis

{

script "/usr/local/keepalived/scripts/redis_check.sh 127.0.0.1 6379" #监控脚本

interval 2                                   #监控时间

timeout 2                                   #超时时间

fall 3

}

vrrp_instance redis {

state BACKUP # master set to SLAVE also

interface eth0

lvs_sync_daemon_interface eth0

virtual_router_id 202

priority 150                                      #权重值

nopreempt # no seize,must add

advert_int 1

authentication { #all node must same

auth_type PASS                                 #加密

auth_pass 1111                                 #密码

}

virtual_ipaddress {

192.168.1.120                                     #VIP

}

track_script {

chk_redis

}

notify_master "/usr/local/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.103 6379"

notify_backup "/usr/local/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.103 6379"

notify_fault /usr/local/keepalived/scripts/redis_fault.sh

notify_stop /usr/local/keepalived/scripts/redis_stop.sh

}

  2.配置slave高可用配置文件(可从线上拷贝再做修改)
[iyunv@www scripts]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

    router_id redis104

}

vrrp_script chk_redis

{

     script "/usr/local/keepalived/scripts/redis_check.sh 127.0.0.1 6379"                                            #监控脚本

     interval 2                                     #监控时间

     timeout 2                                      #超时时间

     fall 3                                    #

}

vrrp_instance redis {

     state BACKUP                                      #设置为BACKUP

     interface eth0                                #监控网卡

     lvs_sync_daemon_interface eth0                      #

     virtual_router_id 202

     priority  100                                    #权重值

     nopreempt # no seize,must add

     advert_int 1

     authentication {   #all node must same

         auth_type PASS                               #加密

         auth_pass 1111                            #密码与102的相同

     }

     virtual_ipaddress {

   192.168.1.120                                     #  VIP  

     }

     track_script {

         chk_redis

     }

     notify_master "/usr/local/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.1.102 6379"

     notify_backup "/usr/local/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.1.102 6379"

     notify_fault /usr/local/keepalived/scripts/redis_fault.sh

     notify_stop /usr/local/keepalived/scripts/redis_stop.sh

}

  
  3.masterslave上创建监控脚本:
  1).配置master脚本文件(可从线上拷贝再做修改)
  脚本目录 /usr/local/keepalived/scripts
  以下用于监控Redis的脚本
  /usr/local/keepalived/scripts/redis_check.sh
[iyunv@www scripts]# cat redis_check.sh

#!/bin/bash

ALIVE=`/usr/local/redis/bin/redis-cli -h $1 -p $2 PING`

LOGFILE="/var/log/keepalived-redis-check.log"

echo "[CHECK]" >> $LOGFILE

date >> $LOGFILE

if [ $ALIVE == "PONG" ]; then :

   echo "Success: redis-cli -h $1 -p $2 PING $ALIVE" >> $LOGFILE 2>&1

    exit 0

else

    echo "Failed:redis-cli -h $1 -p $2 PING $ALIVE " >> $LOGFILE 2>&1

    exit 1

fi

  以下负责运作的关键脚本:
  notify_master /usr/local/keepalived/scripts/redis_master.sh
  notify_backup /usr/local/keepalived/scripts/redis_backup.sh
  notify_fault /usr/local/keepalived/scripts/redis_fault.sh
  notify_stop /usr/local/keepalived/scripts/redis_stop.sh
  因为Keepalived在转换状态时会依照状态来呼叫:
  当进入Master状态时会呼叫notify_master
  当进入Backup状态时会呼叫notify_backup
  当发现异常情况时进入Fault状态呼叫notify_fault
  当Keepalived程序终止时则呼叫notify_stop
  首先,在Redis Master上创建notity_master与notify_backup脚本:
[iyunv@www scripts]# cat redis_master.sh

#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli -h $1 -p $3"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[master]" >> $LOGFILE

date >> $LOGFILE

echo "Being master...." >> $LOGFILE 2>&1

echo "Run SLAVEOF cmd ... " >> $LOGFILE

$REDISCLI SLAVEOF $2 $3 >> $LOGFILE  2>&1

#echo "SLAVEOF $2 cmd can'texcute ... " >> $LOGFILE

sleep 10               #延迟10秒以后待数据同步完成后再取消同步状态

echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE

$REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1

[iyunv@www scripts]# cat redis_backup.sh

#!/bin/bash

REDISCLI="/usr/local/redis/bin/redis-cli"

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[BACKUP]" >> $LOGFILE

date >> $LOGFILE

echo "Beingslave...." >> $LOGFILE 2>&1

echo "RunSLAVEOF cmd ..." >> $LOGFILE 2>&1

$REDISCLI SLAVEOF $2 $3 >> $LOGFILE

sleep 100 #延迟100秒以后待数据同步完成后再取消同步状态

exit(0)

  接着,在Redis Slave上创建notity_master与notify_backup脚本(因为是双主脚本和slave一致):
  然后在Master与
[iyunv@www scripts]# cat redis_fault.sh

#!/bin/bash

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[fault]" >> $LOGFILE

date >> $LOGFILE

[iyunv@www scripts]# cat redis_stop.sh

#!/bin/bash

LOGFILE="/var/log/keepalived-redis-state.log"

echo "[stop]" >> $LOGFILE

date >> $LOGFILE

  给脚本都加上可执行权限:
  $ sudo chmod +x /etc/keepalived/scripts/*.sh
  2).Redis配置文件说明/etc/redis.conf:
  参考文档 redis配置文件参数详解
  3).设置环境变量:
  echo“export PATH=$PATH:/usr/local/redis/bin” >> /root/.bash_profile
  source/root/.bash_profile
  4).重启服务:
  /etc/init.d/keepalivedrestart
  /etc/init.d/redisrestart
  redis测试:
  脚本创建完成以后,我们开始按照如下流程进行测试:
  1.启动Master上的Redis
  $ /etc/init.d/redis start
  2.启动Slave上的Redis
  $ /etc/init.d/redis start
  3.启动Master上的Keepalived
  $ /etc/init.d/keepalived start
  4.启动Slave上的Keepalived
  $ /etc/init.d/keepalived start
  5.尝试通过VIP连接Redis:
  $ redis-cli -h 192.168.1.120 INFO
  role:master
  $ redis-cli -h 192.168.1.102 INFO
  role:master
  $ redis-cli -h 192.168.1.103 INFO
  role:slave  
  连接成功,Slave也连接上来了。
  6.尝试插入一些数据:
  $ redis-cli -h 192.168.1.120 SET Hello Redis
  OK
  从VIP读取数据
  $ redis-cli -h 192.168.1.120 GET Hello
  "Redis"
  从Master读取数据
  $ redis-cli -h 192.168.1.102 GET Hello
  "Redis"
  从Slave读取数据
  $ redis-cli -h 192.168.1.103 GET Hello
  "Redis"
  下面,模拟故障产生:
  将Master上的Redis进程杀死:
  $ killall -9 redis-server
  查看Master上的Keepalived日志
  $ tailf /var/log/keepalived-redis-state.log
  同时Slave上的日志显示:
  $ tailf /var/log/keepalived-redis-state.log
  然后我们可以发现,Slave已经接管服务,并且担任Master的角色了。
  $ redis-cli -h 192.168.1.120 INFO
  $ redis-cli -h 192.168.1.104 INFO
  role:master
  然后我们恢复Master的Redis进程
  $ /etc/init.d/redis start
  查看Master上的Keepalived日志
  $ tailf /var/log/keepalived-redis-state.log
  同时Slave上的日志显示:
  $ tailf /var/log/keepalived-redis-state.log

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426532-1-1.html 上篇帖子: redis两种持久化方式的优缺点 下篇帖子: 用redis来实现Session保存的一个简单Demo
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表