Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置

 

【前言】

      在博文《智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置》中介绍了Nginx的安装及相关配置的信息,由于篇幅原因不能用一篇博文描述完,这篇接着为大家分享其中的一个非常重要的模块Keepalived的安装及相关配置。

【研究之路】

    一、郑重声明        

        本篇博文的前导博文为《智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置》,严重建议大家在看完前导博文的基础上再来看这篇博文;

    二、我眼中的Keepalived

        1、刚开始接触Keepalived的时候感觉一脸懵逼,感觉无从下手,从网上查阅资料普及这方面知识开始,好在这个技术已经十分成熟,网上有很轻松可以找到很多参考资料,在研究的过程中对它的理解越加的深刻,同时也联想到之前自己看过一些高可靠的资料;

       2、逐渐在脑海中勾勒出一幅图,而这个线索是我对一个问题的思考不断摸索出来:

          (1)过程:如何保证高可靠

                 如果宕机了怎么样在不受影响的情况下自动切换上去?

                 Keepalived的恰巧解决了这个问题

           用图来展示   

   

    三、安装之路

       1、Keepalived安装前需要的环境:wget、gcc、opensll、zlib、popt-devel(其中前四个已在Nginx安装配置中讲解过,在此只将popt-devel)

 

         (1)popt-devel 用于从外网上下载插件

 

             ①检查系统中是否已经安装popt,使用命令man popt 若出现下图popt相关描述则说明系统中已经安装popt 若报系统找不到命令说明popt未安装      

                 

             ②若popt未安装则进行安装,安装命令: yum install –y popt-devel

              Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第1张图片

 

        2、Keepalived的安装及配置:
          (1)进入一个目录(随便一个目录即可,用来存放下载的Keepalived的包,在此以/root目录为例)命令:cd /root

 

          (2)下载最新稳定版本(目前最新版本为keepalived-1.3.4通过官网http://www.keepalived.org/softwar命令:wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz

             

          (3)解压keepalived-1.3.4.tar.gz 命令: tar -zxvf keepalived-1.3.4.tar.gz

            Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第2张图片

          (4)进入刚解压的目录 命令:cd keepalived-1.3.4

           

          (5)进行相关配置(后半部分指定安装目录)命令:./configure -prefix=/usr/local/keepalived-1.3.4

           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第3张图片

                   若出现问题:

                   

 

                   解决办法:

 

                        a.对rpm进行清理 命令: yum clean all

                           

                        b.重新安装openssl 命令: yum install -y openssl openssl-devel

                           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第4张图片

                        c.重新执行命令:./configure -prefix=/usr/local/keepalived-1.3.4

                           

          (6)编译和安装 命令:make && make install

                   Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第5张图片

          (7)建立服务启动脚本,以便使用service命令控制 命令:

                  cp /root/keepalived-1.3.4/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

                  

         (8)由于安装使用非默认路径(本教程中使用的/usr/local/keepalived-1.3.4)故需修改相关路径,保证keepalived能正常启动;文件 /etc/init.d/keepalived 大约15行位置将. /etc/sysconfig/keepalived 修改为. /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived     

                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第6张图片

          (9)配置环境变量(将keepavlied主程序所在路径导入到环境变量PATH中)命令: vi /etc/profile 加入相关内容export PATH=/usr/local/keepalived-1.3.4/sbin:$PATH(其中# add keepalived path为注释)     

                  

                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第7张图片

          (10)用命令:source /etc/profile 使修改的环境变量生效  

                         

                    用命令: export 进行检查:        

                    

          (10)建立可执行文件链接 命令: ln -s /usr/local/keepalived-1.3.4/sbin/keepalived /usr/sbin/

                    

 

          (11)修改keepalived配置文命令: vi /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf

 

                    参考文章: 架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层配置文件keepalived.conf详解

                       Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第8张图片

 

          (12)编写配置文件中涉及到的监控Nginx脚本;(本教程以目录是在/usr/local/keepalived-1.3.4 下创建nginx_check.sh为例)

 

               ①创建文件命令:vi /usr/local/keepalived-1.3.4/nginx_check.sh

                  

               ②编写内容并保存: 

                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第9张图片    

                  脚本如下也可直接使用(nginx_check.sh):         

nxPidNum=`ps -C nginx --no-header |wc -l`
keepalivedPidNum=`ps -C keepalived --no-header |wc -l`             
if [ $nxPidNum -eq 0 ];then                             
    /usr/local/nginx-1.10.3/sbin/nginx  
    sleep 3  
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then  
       killall keepalived                     
    elif [$keepalivedPidNum -eq 0 ];then
       service keepalived start
    fi  
elif [ $keepalivedPidNum -eq 0 ];then
    service keepalived start
fi

               ③进入到相应目录下将监控Nginx编写的脚本提升权限为可执行文件,本例以/usr/local/keepalived-1.3.4 目录下的nginx_check.sh为例;命令: chmod +x nginx_check.sh 再检查看文件是否变颜色,变颜色则说明为可执行文件

                   

          (13)修改相应文件,设置正确启动参数命令:vi /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived 修改的路径为安装路径下的配置文件修改内容: KEEPALIVED_OPTIONS="-D -f /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf" 

                   Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第10张图片

 

          (14)将修改好的keepalived拷贝到/etc/etc/sysconfig 目录下 命令:

 

                    cp /usr/local/keepalived-1.3.4/etc/sysconfig/keepalived /etc/sysconfig/

                    

 

          (15)测试:

 

               ①启动 命令: service keepalived start      

                   

               ②查看keepalived运行状态,命令: service keepalived status

                   Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第11张图片       

              ③停止keepalived 命令: service keepalived stop      

                  

 

         (16)遇到问题和解决方案:

 

              ①    问题:启动服务失败

                     Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第12张图片

 

              ②    查找方案:

 

                     A.查看状态

                           

                     B.查看keepalived配置文件 默认是在/var/log/messages中命令: tail -f  /var/log/messages

                           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第13张图片

                     C.提示应该是配置文件的问题,核实配置文件,发现网卡写错了 

                           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第14张图片

                     D.检查本机网卡的命令:ip addr 改正后即可

                           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第15张图片

 

          (17)扩展:对Keepalived的日志输出进行指定(非必做步骤):
              ①原因: 以前配置keepalived时候所有的日志都是写入到/var/log/message下的,由于message的日志太多了而keepalived的日志又很那分离出来。
              ②操作步骤:

 

                     A.修改/etc/sysconfig目录下的keepalived文件,命令: vi /etc/sysconfig/keepalived,将KEEPALIVED_OPTIONS修改为KEEPALIVED_OPTIONS="-f /usr/local/keepalived-1.3.4/etc/keepalived/keepalived.conf -D -d -S 0"

                          Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第16张图片

                     B.修改/etc下的rsyslog.conf文件,命令: vi /etc/rsyslog.conf,进行如下的修改需要注意的是重定位的日志目录/var/log下没问题,其他目录会有问题

                          Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第17张图片

                     C.重启系统的日志服务 命令: service rsyslog restart

                           

 

              ③测试:

 

                     A.将Keepalived服务重启

                           

                     B.查看文件是否存在,若存在则说明日志修改成功 命令: vi /var/log/keepalived.log

                           Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第18张图片

 

              ④参考文章:
                  keepalived日志
                  修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径

 

    四、Keepalived+Nginx联合实现高可靠,反向代理验证

          1、配置Nginx配置文件,224和229除IP不同外其他都相同

               Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第19张图片

 

          2、Keepalived的配置文件都相同,和上面讲解Keepalived相同
          3、进行相关的验证:
          (1)    Keepalived+Nginx实现虚拟IP+反向代理验证:

 

               ①实验效果图:

                Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第20张图片

 

 
               ②将224和229上的Nginx和Keepalived都启动起来

 

                  检验命令: ps -ef | grep nginx 和ps -ef | grep keepalived

                  

 

               ③用浏览器进行相关访问

 

                   访问: http://192.168.22.145:8899/a/logs/

 

                   Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第21张图片

 

                  访问: http://192.168.22.145:8899/b/cas/login

                    Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第22张图片

 

               ④注意若访问不通则进行以下排查:
              A.访问Nginx被代理的真实网站地址是否通,在本教程中为http://192.168.21.17:8011/logs/ 和http://192.168.22.203:8888/cas/login 若不通则说明应用服务有问题进行排查,一般原因:a.服务器的防火墙和本地防火墙是否关闭或开放相应的端口 b.网站本身是否启动
              B.访问Nginx是否能正确代理到,在本教程(以Keepalived主节点229所在Nginx上为例)中为http://192.168.22.229:8899/b/cas/login 和http://192.168.22.229:8899/a/logs/ 若有问题则一般原因有:a.Nginx服务未启动或修改配置文件后未重新启动Nginx b.Nginx配置文件写的有问题 c.Nginx所在服务器和客户机的防火墙是否关闭或所监听的端口是否开放
      C.若AB两步均没有问题,但是访问http://192.168.22.145:8899/a/logs/ 或http://192.168.22.145:8899/b/cas/login 还有问题则说明Keepalived存在问题 一般原因有:a.主和从的keepalived是否都关闭 检验方法在下面的(2)步会提到 b.Keepalived的配置文件是否有问题 c.Keepalived所在服务器的防火墙是否关闭
          (2)Keepalived心跳检测验证(Keepalived 的高可用特性验证)[注:以下查看日志方式若将keepalived的日志配置重定向也可在指定的位置看更具有针对性,下面演示为了满足通用性还以在message中看为例]
                   A.在(1)步骤基础上来做,先用命令(tail -f /var/log/messages)分别查看229和224上的日志文件如下:

 

                            229的日志

                            Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第23张图片

                            224的日志

                            Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第24张图片

 

                   B.将229的Keepalived挂掉(在此由于Keepalived的检测Nginx的脚本中让Nginx不断启动在此用停止Keepalived的方式来229节点出故障)
               ①在229上将Keepalived停掉
                  停止命令: service keepalived stop

 

                  查看状态命令: service keepalived status

                   

 

               ②查看229和224上的配置文件

 

                  229上的日志文件:

                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第25张图片

                  224上的日志文件:

                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第26张图片

 

               ③测试网站发现依然可以正常访问
                   http://192.168.22.145:8899/a/logs/
                   http://192.168.22.145:8899/b/cas/login
               ④将229上的keepalived重新启动 命令: service keepalived start
                   
               ⑤分别查看229和224上的keepalived的日志
                  229上日志---重新成为主节点
                  Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置_第27张图片
                  224上的日志---重新成为备份节点
                  
               ⑥测试网站仍可以正常访问
                   http://192.168.22.145:8899/a/logs/
                   http://192.168.22.145:8899/b/cas/login

 

    五、Keepalived+Nginx总结

        1、利用Keepalived心跳检测及虚拟IP机制实现系统的高可用,利用Nginx实现反向代理。

 

        2、可以扩展的地方:
            (1)应用服务器如果是集群形式的话也可以用Nginx来做负载,这样来分压。

 

            (2)如果Nginx正常的话224上的备份Keepalived和Nginx就处于闲置状态解决办法: 

                   ①采用DNS轮循(参考:LVS专题: LVS+Keepalived并使用DNS轮询实现Director的高可用和负载均衡 和DNS部署(四)之lvs+keepalived+bind架构高可用负载均衡DNS系统);

                   ②如果不做DNS轮循的话可以让224做些其他的事情来利用起来资源。

【总结】

     1、经过一路的探索,收获许多;

     2、多动手,多去验证,带着一颗好奇的心去做事。

你可能感兴趣的:(●【项目实战】,#,【智能一代云平台】,●,架构之路,#,【Nginx】,Nginx进阶)