Keepalived+lvs

Keepalived+lvs

  Keepalived服务开启的进程:一个父进程;两个子进程 。其中:

(1)父进程监控子进程:通过watchdog向子进程发送socket信息,确认子进程状态,若某端时间内未收到子进程的socket响应,父进程将重启子进程;

(2)两个子进程:VRRP和Hostcheck。其中VRRP检测高可用;Hostcheck:采用IPVS实 现对后端负载的健康检查。

(3)VRRP协议:虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP)。解决静态路由的单点故障问题(若发生单点故障,该结点的服务则被中断),该机制下主结点(MASTER)只进行转发;其余多个备机(BACKUP)接收;当MASTER发生宕掉时,BACKUP接收不到MASTER广播的ARP通告,备机之间进行优先级来选举(selection协议)出当前MASTER,继续“主发备接”;当原来的MASTER恢复正常时,再进行优先级选举MASTER,而原本的MASTER的优先级本来已为最高,所以MASTER将接管服务,继续转发。实现服务器的高可用。

(4)后端负载检查方式有:MISC_CHECK--脚本检查、TCP(四层)、HTTP——CHECK(五层[ios五层模型])、SSL_GET(五层)。

一、Keepalived---------服务器端(server1、server3)

<1>软件安装

1.tar  zxf  keepalived-1.2.20.tar.gz    ##源码安装

2.解压后生产源码包,需要先源码编译

  cd  keepalived-1.2.20

 ./configure  --prefix=/usr/local/keepalived      ##指定安装路径

 make  &&  make install      ##编译成功后,进行下载

3. ln  -s  /usr/local/keepalived/sbin/keepalived  /sbin

  ln  -s  /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

  ln  -s  /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d

  ln  -s  /usr/local/keepalived/etc/keepalived/ /etc

 chmod  +x /usr/local/keepalived/etc/rc.d/init.d/keepalived

<2>配置--node1:172.25.90.1(node2:172.25.90.3)

提示:以下配置括弧内是备机与主机的不同之处,请注意备机的配置。

1.cd /etc/keepalived

 vim  keepalived.conf              ##主配置文件

主要配置如下:

! ConfigurationFile for keepalived

global_defs {

notification_email {                     #接收警报的 email 地址,可以添加多个

root@localhost

}

notification_email_from keepalived@server1    #设置邮件的发送地址

smtp_server 127.0.0.1                            #设置 smtp server 地址

smtp_connect_timeout 30      #设置连接 smtp 服务器超时时间

router_id LVS_DEVEL

}

      vrrp_instance VI_1 {

                   state  MASTER  

       ##选择node1为主结点(state  BACKUP ##设定node2为备机)

                   interface  eth0     ##选择接入点eth0

                   virtual_router_id  51

                   Priority  100    

       ##数值越大优先级越高,为MASTER(热备结点优先级低于主结点优先级即可,即<100)

                   advert_int 1                 ##心跳检测时间

                   authentication  {

               auth_type  PASS

               auth_pass  1111

                         }

             virtual_ipaddress {                            ##定义虚拟地址,即vip

                     172.25.90.190

                     }

                     }

       virtual_server 172.25.90.190  80 {   ##服务:vip的80端口

             delay_loop 6                             ##对realserver的检查频率

                   lb_algo rr                          ##后端负载采用轮询算法

                   lb_kind DR          ##选择DR模式,注意该模式下服务器不能监听8084端口

          #persistence_timeout 50            ##持续连接时间          

 ##不开启表示不进行持续连接,可当作无缓存,详细内容见下文

                  protocolTCP                              ##TC协议

       real_server 172.25.90.2  80 {         ##定义后端负载Rs,选择httpd服务

               weight1                ##权值,可根据负载性能设定,性能越好,权值可设置越大

                 TCP_CHECK {           ##定义健康检查

                   connect_timeout3         ##连接超时时间

                  nb_get_retry3                     ##重试次数

                  delay_before_retry3      ##重试间隔

                     }

              }

          real_server 172.25.90.4  80 {       

                 weight 1

              TCP_CHECK {

                         connect_timeout 3

                         nb_get_retry 3

                   delay_before_retry3

                     }

              }

}

:wq

2.开启服务测试配置

 (1)先开启主结点的keepalived服务:/etc/init.d/keepalived  start

 (2)使用命令:tail  -f /var/log/message   ##查看日志信息检查服务配置是否正确

   如下图结果显示:

(3)主结点配置正确,即可开启备机的keepalievd服务。一般来说也可以先开启备机,再开启主结点服务,但此情况下,主结点开启后,集群结点先进行优先级比较,由于主结点的优先级较高,主结点将接管vip,而接管过程极有可能发生损失。

二、负载端------172.25.90.2与172.25.90.4操作均如下,也可参考博客<lvs>

<1>服务器端选择了lvs的DR模式,因此后端负载需要有虚拟IP:

1.ip addr  add  172.25.90.190 dev  eth0           ##添加虚拟ip

2.添加策略

   arptables  -A IN  -d  172.25.90.190 -j  DROP   (nserer2、server4)

arptables -A  OUT  -s 172.25.90.190  -j  mangle --mangle-ip-s  172.25.90.2  #server2端

arptables -A  OUT  -s 172.25.90.190  -j  mangle --mangle-ip-s  172.25.90.4  

#server4端

 /etc/init.d/arptables     save        ##保存策略至/etc/sysconfig/arptables

3./etc/init.d/arptables  start          ##开启服务,具体原理参考博客<lvs>

4./etc/init.d/httpd  start               ##一般先开启负载服务,再开启keepalievd服务

三、测试

<1>启动负载端httpd服务

<2>先启动主结点keepalievd服务;再启动备机服务

<3>测试结果

 (1)物理机:多次使用命令:curl  172.25.90.190;或使用浏览器多次访问vip(1722.25.90.190)来查看是否可实现负载均衡----上述过程采用的轮询算法。

服务器端:使用ip  addr 命令来查看vip的挂载点是否在主结点(server1)上

提示:若出现连接超时,请检查负载端arp策略及httpd服务以及监听端口;若显示内容表示网络不可连接,请检查负载端的是否有添加vip虚拟地址;重新配置后,建议先清空客户端对vip的arp缓存,使用命令:arp  -d  vip(如:arp  -d  172.25.90.190)

(2)关闭主结点服务(server1),查看备结点是否可以接管vip

服务器端:ip  addr

客户端:curl  172.25.90.190、arp  -an  192.25.90.190 ##查看响应客户请求的主机

(3)开启主结点服务,查看主结点是否会自动接管服务,测试方法同上:


四、附加:可持续连接时间persistence_timeout   50

    这个选项对于动态网页是非常有用的,为集群系统中 session 共享提供了一个很好的解决方案。有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话保持时间。需要注意的是,这个会话保持时间,是最大无响应超时时间,也就是说用户在操作动态页面时,如果在 50 秒内没有执行任何操作,那么接下来的操作会被分发到另外节点,但是如果一直在操作动态页面,则不受 50 秒的时间限制。

    如ftp服务的使用,我们在使用ftp服务时,一定希望同一ip的请求发送至同一结点;若服务器不与客户端进行持续连接,当客户端有请求时,服务器(keepalievd)将一直进行协议磋商,不能及时选举出某个结点(同一个结点)去调度负载,降低服务性能。此时,就可以使用可持续连接功能,实现过程如下:

1.客户端----(server2、server4)

 yum  install  vsftpd -y

 vim  /var/ftpd/pub/file            ##/var/ftpd/pub为ftp默认发布目录

  /etc/init.d/vsftpd  start

2.服务器端----(server1、server3)

 vim  vim/etc/keepalived/keepalived.conf

虚拟ip与realserver配置如下,监听21端口,其余配置见上文:

virtual_server 172.25.90.190 21 {

           delay_loop 6

           lb_algo rr

             lb_kind DR

             persistence_timeout 50        ##进行持续连接

           protocolTCP

             real_server 172.25.90.2 21 {

              weight 1

            TCP_CHECK {

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

       }

       }

   real_server 172.25.90.4 21 {

       weight 1

           TCP_CHECK {

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

        }

      }

:wq

3./etc/init.d/keepalived  reload    

 ##若服务本是开启状态,则只需重载即可,重启服务相当于先断开再连接,该过程有一定的损失。

<3>测试:

客户端:lftp  172.25.90.190        

##查看是否可以进入发布目录,且可持续连接,即实际访问的是同一后端负载

Keepalived+nginx

   keepalived本身不支持nginx,但可以以调用脚本方式来实现keepalived与nginx的整合。

   提示:Keepalived+nginx的整合不要求后端负载绑定虚拟ip,由nginx实现对后端负载的调度,也不需要使用命令aptables,可以选择关闭该服务。

一、服务器端----serer1、server3

<1>nginx实现

1.源码安装,操作步骤如下,具体内容可参见博客<nginx>

(1)tar  zxf  nginx-1.12.0.tar.gz

(2)vim /root/nginx-1.12.0/src/core/nginx.h

   修改版本显示:14               #define NGINX_VER      "nginx"

(3)vim  /root/nginx-1.12.0/auto/cc/gcc

     注释掉调试:172    #CFLAGS="$CFLAGS-g"

(4)cd  /root/nginx-1.12.0        ##进行源码编译及安装

     ./configure --prefix=/usr/local/nginx

     编译时会i发现由软件依赖性:yum  install gcc-c++  pcre-devel  zlib-devel  -y

     解决软件依赖性后,继续编译

(5)make  &&  make install

2.配置

   cd /usr/local/nginx/conf

   vim nginx.conf

在http{}模块添加upstream子模块:

http {

        upstream westos {

                server 172.25.90.2:80;          ##后端负载,监听80端口

                server 172.25.90.4:80;

                             }

......

HTTP子模块部分添加内容:

server {

               listen  80;

               server_name  172.25.90.190;             ##一般为域名,此处设置为vip方便测试

                 location /  {                  

               proxy_pass  http://westos;

                  }

               }

}

    :wq

##访问域名根目录时,通过proxy代理转至upstream模块,实现调度后端负载

3.cd  /usr/local/nginx/sbin

  ./nginx -t                              ##检查配置文件是否有语法错误

4.开启服务测试:./nginx           ##开启服务

  客户端访问172.25.90.190       ##检查后端负载

5.测试结果正确时关闭服务,进行keepalived配置

  nginx     -s stop

<2>Keepalived配置,不再与lvs整合,所以不需要配置realserver

1.cd  /etc/keepalived

  vim keepalived.conf              ##主配置文件

  主要配置如下:

      vrrp_instanceVI_1 {

                   state MASTER  

       ##选择server1为主结点(state  BACKUP  ##设定server3为备机)

                   interface eth0     ##选择接入点eth0

                   virtual_router_id  51

                   Priority   100    

       ##数值越大优先级越高,为MASTER(热备结点优先级低于主结点优先级即可)

             advert_int 1                     ##心跳检测时间

             authentication {

                auth_type PASS

                auth_pass 1111

             }

             virtual_ipaddress {                            ##定义虚拟地址,即vip

                      172.25.90.190/24          ##子网掩码可以设置   

                      }

              }

:wq

2.测试,启动keepalived服务,命令ip  addr查看虚拟ip是否绑定在MASTER(server1)上。

<3>keepalived与nginx整合:keepalived本身不维护nginx,不像与lvs可以实现无缝连接,我们可以选择调用脚本方式来实现keepalived与nginx整合

   nginx实现调度后端负载,实现负载均衡、也可实现对负载的健康检查;keepalived调度nginx服务,即实现nginx服务的高可用。客户端访问vip,MASTER(也是由keepalived定义)的keepalived服务调度nginx服务,此处可以做一次联动控制:由keepalived启动nginx服务;当nginx服务宕掉时,keepalived必须能够及时检测到,因此keepalived需要定时对nginx服务进行检测,即定时执行脚本,保证nginx服务保持正常;当nginx服务故障,即不能正常启动时,vip迁移实现高可用。

1.vim  /mnt/nginx_check.sh        ##编辑脚本

  #!/bin/bash

  curl http://127.0.0.1//index.html -o /dev/null -s ||/usr/local/nginx/sbin/nginx

  if [ $? -ne 0 ];then

  /etc/init.d/keepalived  stop &> /dev/null

  fi

  :wq

##curl  http://127.0.0.1//index.html表示访问本地服务;-o  /dev/null -s将访问显示内容导  入dev/null并保持静默,其返回值为0;开启nginx服务,启动成功时返回值为0,所以总 的返回值为0时表示nginx服务自动开启成功。

##若不为0,表示nginx启动失败,则将keepalived服务关闭,并且不返回结果 

2.chmod+x nginx_check.sh         ##加可执行权限

3.因为在脚本中以编辑了nginx服务自启。所以应保证未执行脚本前nginx服务是关闭的。

4.keepalived配置:加入脚本检测,实现与nginx联动 

 vim /etc/keepalived/keepalived.conf        ##主配置文件

 ! Configuration File for keepalived

vrrp_scriptnginx_check {                          ##定义联动脚本

        script /mnt/nginx_check.sh           ##指定脚本位置

        interval 2                                    ##每两秒检测一次

        }

global_defs{

   notification_email {

        root@localhost                     ##检测结果通知本地用户

}

   notification_email_from keepalived@server1

   smtp_server 127.0.01

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   vrrp_strict

}

vrrp_instanceVI_1 {

    state MASTER                            ##server1(server3端:state  BACKUP)

    interface eth0

    virtual_router_id 51

    priority 100                                ##server1(sver3端:小于100即可)

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.90.190

        }

    track_script {

        nginx_check

        }

}

:wq

二、nginx后端负载配置(serverr2、server4)

vim /var/www/html/index.html         ##编辑首页内容

......                                           ##可任意编辑,建议首页内容尽量保持不同以便测试

:wq

    /etc/init.f/httpd  start                  ##开启httpd服务

三、测试

  保证nginx服务是关闭状态,检测keepalived对ngnx服务的启动控制:

  /usr/local/nginx/sbin/nginx  -s stop       ##关闭服务

  /etc/init.d/keepalived  start       ##先开启主结点服务,再开启备机的服务

  后端负载开启httpd服务(server2、server4)

(1)集群结点端使用命令ip  addr 检查vip是否与主结点绑定

(2)客户端访问172.25.90.190或使用命令curl  172.25.90.190,检查nginx服务是否正常      开启

(3)MASTER端(server1):先手动宕掉nginx服务,客户端继续访问vip,查看nginx服务是否正常;集群结点使用ip  addr命令查看vip绑定点,来确定keepalived是否对脚本有重复检测和执行功能

(4)由上图结果可知,手动宕掉nginx服务后,keepalived可以启动nginx服务,在MASTER(vip仍在server1)执行:mv  /usr/local/nginx/sbin/nginx  /opt ;

 killall -9  nginx

可理解为nginx服务发生故障,ip  addr命令检查vip是否迁移,检查keepalived的高可用。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值