keepalived+lvs实现lvs的高可用

http://www.tuicool.com/articles/Bv6ZNz


keepalived+lvs实现lvs的高可用

keepalived的介绍:

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

142244757.png

keepalived启动后会有三个进程

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

子进程:VRRP子进程

子进程:healthchecker子进程

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


为什么要用keepalived+lvs?

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

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

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

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

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

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

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

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

实验环境:

OS:Centos 6.4(redhat 6.4)

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

实验拓扑图: 

123622331.png

拓扑图的规划:

 

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@jie1 ~]# yum -y install keepalived ipvsadm

2、修改配置文件

[root@jie1 ~]# cd /etc/keepalived/
[root@jie1 keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     root@localhost  #设置报警邮件地址,即收件人地址
   }
   notification_email_from admin@localhost  #设置邮件的发送地址
   smtp_server 127.0.0.1   #设置smtp server的ip地址
   smtp_connect_timeout 30 #设置连接smtp server的超时时间
   router_id LTT   #表示运行keepalived服务器的一个标识,名字可以随便取,名字会显示在发邮件时邮件的主题信息
}
vrrp_instance IN_1 {
    state MASTER   #指定keepalived的角色,此服务为master
    interface eth0  #指定监测网络的接口
    virtual_router_id 22 #虚拟路由的标识
    priority 100   #定义优先级,数字越大优先级越高,1-255之间
    advert_int 1   #设置同步检查的时间间隔,单位是秒
    authentication { #设置验证类型
        auth_type PASS  #验证类型为PASS
        auth_pass aaaa  #验证的密码
    }
    virtual_ipaddress {
        172.16.22.100    #设置虚拟IP
    }
}
virtual_server 172.16.22.100 80 {  #定义虚拟服务器,需指定虚拟ip和端口
    delay_loop 6    #设置健康检查时间,单位为秒
    lb_algo wrr     #设置负载调度算法,此处为加权轮叫算法
    lb_kind DR      #设置LVS实现负载均衡的模式
    nat_mask 255.255.0.0 #设置子网掩码
    protocol TCP      #设置转发协议的类型
    real_server 172.16.22.1 80 {  #定义realserver,需指定ip和端口
        weight 1     #指定权重
        HTTP_GET {  #设置检测后端realserver的方式为获取http协议报文
            url {
              path /
              status_code 200  #状态码为200则证明后端服务器是在线的
           }
            connect_timeout 3  #设置超时时间
            nb_get_retry 3    #设置超时时候重试几次
            delay_before_retry 3 #在重试的时候的时间间隔
        }
    }
    real_server 172.16.22.2 80 {
        weight 1
        HTTP_GET {
            url {
              path /
                status_code 200
           }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
[root@jie1 keepalived]# scp keepalived.conf 172.16.22.2:/etc/keepalived/
  #把配置文件copy到backup服务器上

3、开启服务 

[root@jie1 keepalived]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@jie1 keepalived]# chkconfig --add keepalived
[root@jie1 keepalived]# chkconfig keepalived on

Backup:

1、安装

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

2、修改配置文件

[root@jie2 ~]# cd /etc/keepalived/
[root@jie2 keepalived]# vim keepalived.conf   #此配置文件是从Master服务器上copy过来,只需小小改动
    state BACKUP  #把这里原先的MASTER改成BACKUP
    priority 99   #把这里原先的100改成99

3、开启服务 

[root@jie2 keepalived]# service keepalived start
Starting keepalived:                                       [  OK  ]
[root@jie2 keepalived]# chkconfig --add keepalived
[root@jie2 keepalived]# chkconfig keepalived on

apache1:

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

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

2、建立测试网页文件

[root@jie3 ~]# cd /var/www/html/
[root@jie3 html]# cat index.html #建一个测试网页
<h1>this is apache1</h1>

3、开启服务

[root@jie3 html]# service httpd start
Starting httpd:                 [  OK  ]
[root@jie3 html]# chkconfig --add httpd
[root@jie3 html]# chkconfig  httpd on

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

[root@jie3 html]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@jie3 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@jie3 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@jie3 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@jie3 html]# ifconfig lo:1 172.16.22.100 broadcast 172.16.22.100 netmask 255.255.255.255 up
[root@jie3 html]# route add -host 172.16.22.100 dev lo:1

apache2:

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

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

2、建立测试网页文件 

[root@jie4 ~]# cd /var/www/html/
[root@jie4 html]# cat index.html #建一个测试网页
<h1>this is apache2</h1>

3、开启服务 

[root@jie4 html]# service httpd start
Starting httpd:                 [  OK  ]
[root@jie4 html]# chkconfig --add httpd
[root@jie4 html]# chkconfig  httpd on

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

[root@jie4 html]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@jie4 html]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@jie4 html]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@jie4 html]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@jie4 html]# ifconfig lo:1 172.16.22.100 broadcast 172.16.22.100 netmask 255.255.255.255 up
[root@jie4 html]# route add -host 172.16.22.100 dev lo:1

此致所有安装已经完成。

二、相关的测试:

查看相关的vip和ipvs规则 

134019409.png

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

apache1可以访问

134134155.png

apache2可以访问

134220170.png

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

停掉Master的keepalived服务,vip和ipvs规则切换到Backup服务器上

135046248.png

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

[root@jie3 html]# service httpd stop
Stopping httpd:                                            [  OK  ]
[root@jie2 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.22.100:80 wrr
  -> 172.16.22.4:80               Route   1      0          0

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

[root@jie3 html]# service httpd start
Starting httpd:                 [  OK  ]
[root@jie2 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight 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的高可用已经完成,可以自动的故障转移,还可以根据后端realserver的状态,自动的修改 其规则



keepalived理论工作原理

keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

 

  Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器

 

  发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

 

  Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

 

  Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

 

vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值