qingkuangs 发表于 2018-12-30 13:25:02

通过keepalived实现LVS的高可用

通过keepalived实现LVS的高可用
Keepalived是实现LVS的高可用的工具,它在linux中模拟了一个类似路由中的VRRP协议;它的在linux中的工作机制和VRRP协议几乎一样!因此在了解keepalived时,先了解一下路由器中的VRRP协议!
在路由中VRRP协议保证了内网中用户访问外网络的可靠性,不会因为一个路由器出了问题,而使得内网无法和外网进行通信,导致一些服务器无法连上互联网,使其业务中断!由此可见的出VRRP的重要性!要实现VRRP协议至少要有两个路由,一个为主,另一个为备;主路由器主要提供为内网用户连接互联网,而备路由器则是用于替换主路由器!当主路由出了故障,备份路由要即时替代主路由器实现内网与外网连接,而此时的备路由器就成为了主路由,如果出故障的主路由器修复好了又上线,它还会成为主路由器,备份路由器又被打回原形了,依然是备份路由器!
而在路由中,VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由和多个Backup路由器组成,也就是一个主路由器和多个备份由器组成。备份组中路由器是有优先级的,这就是备份路由如何实现成为主路由,主路由上线又如何成为主路由的原因!优先级高的越有可能成为Master路由器。VRRP优先级的取值范围为0到255,可配置的范围是1到254,0为系统保留给特殊用途来使用的,255则是系统保留给IP地址拥有者。
备份组功能上相同于一台虚拟路由器,它具有IP地址。局域网内的主机仅需要知道这个虚拟路由器的IP地址,并简单配置就能实现访问外网的可靠性!如图:
http://blog.运维网.com/attachment/201305/214705924.png
当Master出了故障,它的优先级会降低,从而使得Backup的优先级高于Master,Backup成为主路由,其虚拟路由的IP会飘逸到Backup,通过Backup连接外网!
其实,路由器通过抢占和非抢占方式实现工作的,非抢占将是Master路由没有出现故障,Backup的优先级再高也不能成为Master;而抢占则是谁的优先级高,谁成为Master。
备份组中的路由器也有认证方式;md5、simpl(简单字符认证),更够更有效实现安全上网。
VRRP的定时器:VRRP通告报文时间间隔定时器:VRRP备份组中的Master路由器发VRRP报文,通知备份组内的路由器自己工作是否正常。
VRRP抢占延迟时间定时器:为了避免备份组内的成员频繁进行主备状态转成,让Backup有足够时间搜集必要的信息,Backup路由器收到优先级低于本地优先级的通告本文后,不会立即抢占成为Master,而是等待一定时间--抢占延迟时间后,才会对外发送VRRP通告报文取代原来的Master路由器。
每个备份组都有自己的ID,通过不同的ID号来判断备份组;同一个备份主还可以通过不同的ID,路由器的不同类型来实现多主共存。比如:一个备份组ID为50且有两个路由器,router1和router2,这里定义router1为Master,而router2为Backup,虚拟IP为172.16.15.1,用户经过172.16.15.1访问外网;而同一备份组设置的ID为51且router1为Backup,router2为Master,虚拟IP为172.16.15.3,用户通过172.16.15.3也能访问外网,这样就实现了多主共存了,且可以更有效的利用资源!
VRRP的工作机制就是这样,keepalived也是如此;不过keepalived在linux中不是实现Master路由器和Backup路由器的高可用,它是实现调度器,也就是director的高可用的!
要说director,不妨先说一下负载均衡的LVS模式:
LVS实现了更智能,更人性化的服务器负载均衡,它能根据不同服务器的性能,分发不同的用户请求,还能有效的排除故障服务器,并通知管理员!LVS模式为何能有效的,科学的实现用户请求分发的呢?其实,LVS在同一类服务器前端,应用了一个调度器(director),用户只需将请求发送到director,让director帮忙请求即可,director在通过调度算法来分配用户请求给服务器,然后众多服务器在去响应分配来的请求!如下示意图:
http://blog.运维网.com/attachment/201305/214725866.png
试想一下,如果director无法工作了,出故障了,后果会如何?那绝对是致命的,因此,我们应当实现director的高可用。何为高可用?高可用就是:平均在线时长/(平均在线时长+故障维修时长),其值越大高可用性能越强,所有故障维修时长越短越好,为了实现director的高可用,在给其添加一个director,当主director除了故障,让备用的director代替主director来工作;因此就要用到keepalived来实现!
通过Keepalived实现LVS的高可用性:
配置前提:
四台主机,两台作为realserver,分别为RS1、RS2,两台作为director;realserver要关闭arp功能!这里操作均在虚拟机上完成!使用的软件包分别为ipvsadm-1.24-13.el5.i386.rpm、 keepalived-1.2.7-5.el5.i386.rpm
说明:DIR1、DIR2均按装有keepalived,ipvsadm,DIR1为Master,DIR2为Backup,其IP分配如下:
RS1:IP=172.16.15.1
RS2:IP=172.16.15.2
DIR1: IP=172.16.15.3
DIR2: IP=172.16.15.4
VIP=172.16.15.100
RS1:
# yum install httpd
# echo “RS1.jun.com” >> /var/www/html/index.html
# serive httpd start
# sysctl -w net.ipv4.conf.eth0.arp_announce=2
# sysctl -w net.ipv4.conf.all.arp_announce=2
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# ifconfig lo:0 172.16.15.100 broadcast 172.16.15.100 netmask 255.255.255.255 up
# route add -host 172.16.15.100 dev lo:0RS2:
# yum install httpd
# echo “RS2.jun.com” >> /var/www/html/index.html
# service httpd start
# sysctl -w net.ipv4.conf.eth0.arp_announce=2
# sysctl -w net.ipv4.conf.all.arp_announce=2
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
# ifconfig lo:0 172.16.15.100 broadcast 172.16.15.100 netmask 255.255.255.255 up
# route add -host 172.16.15.100 dev lo:0DIR1:
# yum --nogpgcheck --localinstall keepalived-1.2.7-5.el5.i386.rpm ipvsadm
# vim /etc/keepalived/keepalived.conf
vrrp_script chk_schedown {               #模式实现keepalived故障情况
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {                         #定义备份组
state MASTER                                 #其备份组为Master
interface eth0
virtual_router_id 50                         #定义备份组的ID
priority 101                                 #优先级定义
advert_int 1
authentication {                           #认证方式
auth_type PASS                               #基于简单字符认证
auth_pass keepalive
}
track_interface {
eth 0
}
virtual_ipaddress {                        #定义VIP的地址
172.16.15.100/16 dev eth0 label eth0:0       #附属在eth0:0上
}
track_script {
chk_schedown
}
virtual_server 172.16.15.100 80 {            #VIP启动的服务
delay_loop 6
lb_algo wlc                                  #调度算法为wlc
lb_kind DR
nat_mask 255.255.0.0
persistence_timeout 50                     #持久连接的超时时长
protocol TCP
real_server 172.16.15.1 80 {      #定义realserver服务器,RS1
weight 2
HTTP_GET {                        #通过HTTP_GET实现健康状况检查
url {
path /
status_code 200                     #网页成功响应号为200,作为探测机制
}
connect_timeout 2                         #探测连接时长
nb_get_retry 3                            #探测次数
delay_beforce_retry 1                     #延迟时长
}
}
real_server 172.16.15.2 80 {            #定义RS2
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_beforce_retry 1
}
}
# service keepalived start
# scp /etc/keepalived/keepalived.conf 172.16.15.2:/etc/keepalived/keepalived.conf DIR2:
# # yum --nogpgcheck --localinstall keepalived-1.2.7-5.el5.i386.rpm ipvsadm
# vim /etc/keepalived/keepalived.conf修改如下内容,其他配置与DIR1一样:
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
}
# service keepalived start用浏览器访问172.16.15.100结果如图:
http://blog.运维网.com/attachment/201305/215735317.png
每次刷新会根据调度算法,出现不同的内容!
在DIR1上实现测试,创建一个文件down,模拟director故障!
# cd /etc/keepalived
# touch down在DIR2上可用看到eth0:0的IP,及ipvs规则,如下图:
http://blog.运维网.com/attachment/201305/220146538.png
http://blog.运维网.com/attachment/201305/220205828.png
用Keepalived实现web的高可用:
说明:DIR1与DIR2都要成为web服务器,且必须配有keepalived,要有两个备份组,这两个备份组互为备份!
DIR1:
# yum --nogpgcheck --localinstall keepalived-1.2.7-5.el5.i386.rpm ipvsadm httpd
# echo "DIR1.jun.com" >> /var/www/html/index.html
# service httpd start
# vim /etc/keepalived/keepalived.conf
vrrp_script chk_httpd {                               #定义的httpd脚本执行过程
script "killall -0 httpd"                           #试探性杀死httpd
interval 2                                           #每隔多长时间检查一次httpd服务
weight -2                                           #检查服务不在是将优先级-2
fall 2                                              #检查两次
rise 1                                              #检查一次成功即启动服务
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1{                                  #定义备份组VI_1
interface eth0
state MASTER #设定为Master
priority 101                                     #优先级为101
virtual_router_id 51                              #id为51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.15.100/16 dev eth0 label eth0:0
}
track_script {
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master"       #通过调用notify.sh脚本
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
vrrp_instance VI_2 {                              #定义备份组VI_2
interface eth0
state BACKUP#定为BACKUP
priority 100                                 #优先级为101
virtual_router_id 52                            #id为52,这个id一定不能与第一个备份组的id一样
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.15.101/16 dev eth0 label eth0:1         #定义虚拟IP,虚拟IP也与第一个备份组的IP不一样
}
track_script {
chk_httpd
chk_schedown
}
notify_master "/etc/keepalived/notify.sh master eth0:1"
notify_backup "/etc/keepalived/notify.sh backup eth0:1"
notify_fault "/etc/keepalived/notify.sh fault eth0:1"DIR2:
# yum --nogpgcheck --localinstall keepalived-1.2.7-5.el5.i386.rpm ipvsadm httpd
# echo "DIR2.jun.com" >> /var/www/html/index.html
# service httpd start
# scp /etc/keepalived/keepalived.conf 172.16.15.4:/etc/keepalived/
# vim /etc/keepalived/keepalived.conf只需修改VI_1中:
state BACKUP
priority 100
只需修改VI_2中:
state MASTER
priority 101


  



页: [1]
查看完整版本: 通过keepalived实现LVS的高可用