keepalived+lvs实现lvs的高可用

keepalived的介绍:      

keepalived是借用VRRP协议来实现高可用性的,VRRP协议是解决单点故障,使路由器和层三交换机实现冗余功能。

keepalived+lvs实现lvs的高可用_第1张图片

keepalived启动后会有三个进程

父进程:内存管理,子进程管理等等

子进程:VRRP子进程

子进程:healthchecker子进程

从图上可以看出,两个子进程都被系统WatchDog看管,两个子进程各自操作自己的事,healthchecker子进程负责检查各自服务器的健康程度,例如HTTPLVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态

 

为什么要用keepalived+lvs

lvs是一个在四层上实现后端realserver的负载均衡的集群,lvs遗留下两个问题,一个是lvs的单点故障; 第二个是lvs不能检测后端realserver的健康状态检查。

解决lvs的单点故障就用到了高可用集群:

、可以是heartbeat+ldirectord这种重量级的;

、可以是keepalived+lvs这种轻量级的解决方案。(本博客主要写keepalived+lvs轻量级的解决方案),

解决lvs不能检测后端realserver的健康状态也后很多种方法:

、可以在lvs上写脚本ping后端realserverip地址,ping几次发现ip地址ping不通则在ipvs规则里面删除,当 后端服务器可以ping了,则把后端realserver添加到ipvs规则里面。

、可以在lvs上写脚本请求后端realserver的测试几次网页文件,查看状态码是否为200,不是则在ipvs规则 里面清楚,当测试网页返回的状态吗是200之后,则把后端realserver添加到ipvs规则里面

、以上两种方法都是依赖于脚本,keepalived的出现解决了不依赖于脚本,也可以对后端realserver的健康状态 检查,keepalived的配置文件里面可以自行生成ipvs的规则,并且自行检测后端realserver的状态,当后端realserver 不能提供服务了,keepalived会自行将其在ipvs规则里面删除,当后端realserver可以提供服务了,又自行的在ipvs 规则里面添加。

实验环境:

OSCentos 6.5

yum:

[centos]

name=sohu-centos

baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch

gpgcheck=1

enable=0

gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6

[epel]

name=sohu-epel

baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/

enable=1

gpgcheck=0

实验拓扑图: 

keepalived+lvs实现lvs的高可用_第2张图片

拓扑图的规划:


IP 地址

软件

Master

172.16.22.1(VIP 172.16.22.100)

keepalived+ipvsadm

Backup

172.16.22.2(VIP 172.16.22.100)

keepalived+ipvsadm

apache1

172.16.22.3(VIP 172.16.22.100)

httpd

apache2

172.16.22.4(VIP 172.16.22.100)

httpd

注:Master  Backup 上面安装 ipvsadm 主要是为了查看 ipvs 的规则

一、安装配置操作

Master

1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装keepalived)

[root@localhost ~]# yum -y installkeepalived ipvsadm

2、修改配置文件

[root@localhost ~]# cd/etc/keepalived/

[root@localhost keepalived]# vimkeepalived.conf

! Configuration File for keepalived

global_defs {

  notification_email {

     root@localhost  #设置报警邮件地址,即收件人地址

   }

  notification_email_from admin@hyd  #设置邮件的发送地址

   smtp_server 127.0.0.1  #设置smtp serverip地址

  smtp_connect_timeout 30#设置连接smtp server的超时时间

   router_idLTT   #表示运行keepalived服务器的一个标识,名字可以随便取,名字会显示在发邮件时邮件的主题信息

}

vrrp_instance IN_1 {

    state MASTER  #指定keepalived的角色,此服务为master

    interface eth0  #指定监测网络的接口

    virtual_router_id22#虚拟路由的标识

    priority 100  #定义优先级,数字越大优先级越高,1-255之间

    advert_int 1  #设置同步检查的时间间隔,单位是秒

    authentication{ #设置验证类型

        auth_typePASS  #验证类型为PASS

        auth_passaaaa  #验证的密码

    }

   virtual_ipaddress {

        172.16.22.100   #设置虚拟IP

    }

}

virtual_server 172.16.22.10080#定义虚拟服务器,需指定虚拟ip和端口

    delay_loop 6   #设置健康检查时间,单位为秒

    lb_algowrr     #设置负载调度算法,此处为加权轮叫算法

    lb_kind DR      #设置LVS实现负载均衡的模式

    nat_mask 255.255.0.0#设置子网掩码

    protocolTCP      #设置转发协议的类型

    real_server 172.16.22.180#定义realserver,需指定ip和端口

        weight 1    #指定权重

        HTTP_GET{  #设置检测后端realserver的方式为获取http协议报文

            url {

              path/

             status_code 200  #状态码为200则证明后端服务器是在线的

           }

            connect_timeout3  #设置超时时间

           nb_get_retry 3    #设置超时时候重试几次

           delay_before_retry 3#在重试的时候的时间间隔

        }

    }

    real_server 172.16.22.280 {

        weight 1

        HTTP_GET {

            url {

              path/

                status_code200

           }

           connect_timeout 3

           nb_get_retry 3

           delay_before_retry 3

        }

    }

}

[root@localhost keepalived]# scpkeepalived.conf 172.16.22.2:/etc/keepalived/

  #把配置文件copybackup服务器上

3、开启服务 

[root@localhost keepalived]# servicekeepalived start

Startingkeepalived:                                       [  OK  ]

[root@localhost keepalived]# chkconfig--add keepalived

[root@localhost keepalived]# chkconfigkeepalived on

Backup

1、安装

[root@hyd ~]# yum -y install keepalived ipvsadm

2、修改配置文件

[root@hyd ~]# cd /etc/keepalived/

[root@hyd keepalived]# vim keepalived.conf   #此配置文件是从Master服务器上copy过来,只需小小改动

    state BACKUP #把这里原先的MASTER改成BACKUP

    priority 99  #把这里原先的100改成99

3、开启服务 

[root@hyd keepalived]# service keepalived start

Startingkeepalived:                                       [  OK  ]

[root@hyd keepalived]# chkconfig --add keepalived

[root@hyd keepalived]# chkconfig keepalived on

apache1

1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装)

[root@hyd1 ~]# yum -y install httpd

2、建立测试网页文件

[root@hyd1 ~]# cd /var/www/html/

[root@hyd1 html]# cat index.html #建一个测试网页

this is apache1

3、开启服务

[root@hyd1 html]# service httpd start

Startinghttpd:                 [  OK  ]

[root@hyd1 html]# chkconfig --add httpd

[root@hyd1 html]# chkconfig httpd on

4、修改内核参数和配置vip

[root@hyd1 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

[root@hyd1 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@hyd1 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@hyd1 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up

[root@hyd1 html]# route add -host 172.16.22.100 dev lo:1

apache2

1、安装(博主这里用rpm包安装,各位朋友可以用源码编译安装)

[root@hyd2 ~]# yum -y install httpd

2、建立测试网页文件 

[root@hyd2 ~]# cd /var/www/html/

[root@hyd2 html]# cat index.html #建一个测试网页

this is apache2

3、开启服务 

[root@hyd2 html]# service httpd start

Startinghttpd:                 [  OK  ]

[root@hyd2 html]# chkconfig --add httpd

[root@hyd2 html]# chkconfig httpd on

4、修改内核参数和配置vip 

[root@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@hyd2 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

[root@hyd2 html]# echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

[root@hyd2 html]# echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

[root@hyd2 html]# ifconfig lo:1 172.16.22.100 broadcast172.16.22.100 netmask 255.255.255.255 up

[root@hyd2 html]# route add -host 172.16.22.100 dev lo:1

此致所有安装已经完成。

二、相关的测试:

查看相关的vip和ipvs规则 

keepalived+lvs实现lvs的高可用_第3张图片

测试后端realserver是否可以访问:

apache1可以访问

keepalived+lvs实现lvs的高可用_第4张图片

apache2可以访问

keepalived+lvs实现lvs的高可用_第5张图片

而且是根据wrr算法,平均负载到realserver 

停掉Masterkeepalived服务,vipipvs规则切换到Backup服务器上

keepalived+lvs实现lvs的高可用_第6张图片

停掉apache1的服务,看ipvs的规则是否清除,显示已经清楚规则

[root@hyd1 html]# service httpd stop

Stoppinghttpd:                                            [  OK  ]

[root@hyd ~]# ipvsadm -L -n

IPVirtualServer version 1.2.1 (size=4096)

ProtLocalAddress:PortSchedulerFlags

  -> RemoteAddress:Port           ForwardWeightActiveConnInActConn

TCP  172.16.22.100:80 wrr

  -> 172.16.22.4:80               Route  1      0         0

开启apache1的服务,ipvs自动将其又添加上

[root@hyd1 html]# service httpd start

Starting httpd:                 [  OK  ]

[root@hyd ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP  172.16.22.100:80 wrr

  -> 172.16.22.3:80               Route   1     0          0      

  -> 172.16.22.4:80               Route   1     0          0

此致,keepalived实现lvs的高可用已经完成,可以自动的故障转移