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

[经验分享] keepalived+redis高可用性实现

[复制链接]

尚未签到

发表于 2015-11-19 15:26:05 | 显示全部楼层 |阅读模式

  • 软件安装和搭建规划

    • 搭建规划:
      选取ip为169.254.19.4的机器为master(主服务器)
      选取ip为169.254.19.5的机器为slave(备用服务器)
      两台机器用keepalived来保持高可用连接

    • 安装redis,先用winscp将redis-2.6.16.tar.gzkeepalived-1.2.7.tar.gz拷贝到两台机器的/usr/soft/目录下,按照以下步骤安装好软件 DSC0000.jpg DSC0001.jpg DSC0002.jpg DSC0003.jpg DSC0004.jpg DSC0005.jpg
    • 修改部分基础配置,启动服务器测试: DSC0006.jpg DSC0007.jpg DSC0008.jpg
    • 安装keepalived ,先安装前置软件包:
    openssl-devel
        popt-devel
    配置yum源后直接执行 yum -y install openssl-devel yum -y install popt-devel
    DSC0009.jpg DSC00010.jpg

    • 执行 ./configure  --sysconfdir=/etc  --with-kernel-dir=/usr/src/kernel/`uname -r` 编译keepalived指定配置文件在/etc目录下安装目录在/usr/src/kernel/`uname -r` DSC00011.jpg DSC00012.jpg
    • 重启keepalived时发现有问题: DSC00013.jpg
        执行cp /usr/local/sbin/keepalived /usr/sbin/解决问题
      DSC00014.jpg
    • DSC00015.jpg

  • keepalived实现redis高可用的原理和配置
      169.254.19.4:master(主服务器)
      169.254.19.5:slave(备用服务器)
      169.254.19.188:vip(虚拟ip)
      此处要交由keepalived来处理,需要两台机器分别设定同一虚拟ip,不用手动去设,    keepalived配好了就行,此处先规划
      设计思路:
        1.
    Master与Slave均运作正常时, Master负责只支持服务,不做持久化,Slave负责同    步    复制数据,持久化,如快照等方式。
        2.如果Master挂掉,Slave正常时, 由Slave接管服务成为master,同时关闭主从复制    功能,本实验此时就没有了从服务器了,不过实际生产环境中仍然可以配置其他    slave。
        3.重新启动Master,使之恢复正常,则从Slave同步数据到master,同步数据之后关    闭    主从复制功能,恢复Master身份,并从slave接管服务,而slave还原到原来的状    态,恢复Slave身份,负责同步数据和持久化。
        4.上述为一个完整的循环。


    • 配置/etc/keepalived/keeepalived.conf
    • DSC00016.jpg
    • 通过上述配置可以知道需要写一些shell脚本来实现需求,其实keepalived是一个很灵活的探听心跳并管理集群机器的框架,很多东西可以灵活配置和嵌套其他东西来实现,比如上图配有配置global属性,没有配置邮件推送,需要自己设计shell脚本来协助完成功能,复杂的情况可以再加上python来实现,接下来就是写shell脚本了
    • shell脚本相对不复杂,但是新手也不是很容易写,网上看来的,这里稍微解释一下,需要了解详细的需要自己自学shell脚本:
    /etc/keepalived文件夹下新建scripts文件夹来存放sh脚本
    1. vi redis_check.sh 脚本在masterslave都要配置且内容如下:
    #!/bin/bash
    ALIVE=`/usr/local/bin/redis-cli PING`
    if [ "$ALIVE" == "PONG" ]; then
    echo $ALIVE
    exit 0
    else
    echo $ALIVE
    exit 1
    fi
    DSC00017.jpg
    2.1 vi redis_master.sh主服务器redis_master.sh配置如下:
    #!/bin/bash
    REDISCLI="/usr/local/bin/redis-cli"
    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 169.254.19.5 6379 >> $LOGFILE  2>&1
    sleep 10
    echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
    $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
    DSC00018.jpg
    2.2vi redis_master.sh 从服务器redis_master.sh配置如下:
    #!/bin/bash
    REDISCLI="/usr/local/bin/redis-cli"
    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 169.254.19.4 6379 >> $LOGFILE  2>&1
    sleep 10
    echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE
    $REDISCLI SLAVEOF NO ONE >> $LOGFILE 2>&1
    其实可以发现主服务器和从服务器的配置就是ip配的不一样,其余都一样,因为主从服务器的位置是任意转换的,对等的,因此作用不在阐述,上述忘了讲sleep的作用了,sleep是线程沉睡下,让服务器有足够的时间来同步数据
    DSC00019.jpg
      3.1 vi  redis_backup.sh主服务器redis_backup.sh配置如下:
      #!/bin/bash
      REDISCLI="/usr/local/bin/redis-cli"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[backup]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being slave...." >> $LOGFILE 2>&1
      sleep 15
      echo "Run SLAVEOF cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF 169.254.19.5 6379 >> $LOGFILE  2>&1
    DSC00020.jpg
      3.2 vi  redis_backup.sh从服务器redis_backup.sh配置如下:
      #!/bin/bash
      REDISCLI="/usr/local/bin/redis-cli"
      LOGFILE="/var/log/keepalived-redis-state.log"
      echo "[backup]" >> $LOGFILE
      date >> $LOGFILE
      echo "Being slave...." >> $LOGFILE 2>&1
      sleep 15
      echo "Run SLAVEOF cmd ..." >> $LOGFILE
      $REDISCLI SLAVEOF 169.254.19.4 6379 >> $LOGFILE  2>&1
    DSC00021.jpg
      可以看出backup.sh的主服务器和从服务器上是基本一样的,除了ip不一致,但是个    人觉得主服务器的backup.sh没多大意义,待有时间可以测试去掉看有什么影响
      
      4.vi redis_fault.sh redis_fault.sh配置如下:
      #!/bin/bash
      LOGFILE=/var/log/keepalived-redis-state.log
      echo "[fault]" >> $LOGFILE
      date >> $LOGFILE
    DSC00022.jpg
      5.vi  redis_stop.sh redis_stop.sh配置如下:
      #!/bin/bash
      LOGFILE=/var/log/keepalived-redis-state.log
      echo "[stop]" >> $LOGFILE
      date >> $LOGFILE
    DSC00023.jpg
      配置完成后执行chmod +x /etc/keepalived/scripts/*.sh 给上述shell脚本加可执行权限 DSC00024.jpg

    • 配置完成后分别启动两台服务器的redis和keepalived ,执行:
    redis-cli -h 169.254.19.188 info查看结果
    DSC00025.jpg
    在主服务器上执行killall -9 redis-server后再执行redis-cli -h 169.254.19.188 info,查看结果 DSC00026.jpg
    再启动主服务器redis-server redis.conf
    DSC00027.jpg
    查看日志如下:
    Master:
    DSC00028.jpg DSC00029.jpg

    • 实验成功

  • 常见错误排查

    • 主从服务器配置连不上
    可能是redis设置了密码导致同步不了
      b)  其他错误排查
    没遇到其他问题,但是建议从keepalived.conf和几个脚本文件考虑排查问题·


             版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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-141260-1-1.html 上篇帖子: IPVS TUN +keepalived 配置 下篇帖子: Nginx+keepalived双主负载均衡架构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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