架构:
典型的lvs + keepalived + realserver涉及到4台服务器和5个ip。
realserver ip1,用来提供集群服务,安装如tomcat,squid,nginx
realserver ip2,用来提供集群服务,安装如tomcat,squid,nginx
lvs master lvs-ip1:
lvs backup lvs-ip2:
安装ipvsadm(ipvsadm只是一个管理工具,lvs模块本身在2.6之后,就集成在内核中了,ipvsadm甚至可以不安装,安装只不过是为了查询lvs的一些状态),keepalived(keepalived可以配置lvs的调度规则)
lvs VIP,用于在lvs-ip1和lvs-ip2之间来回切换VIP。
keepalived:是vrrp虚拟路由冗余协议的实现。推荐用抢占式,即master在故障恢复后,能够从新成为master,vip会漂移回来。
配置:
-
lvs master:
/etc/keepalived/keepalived.conf
vrrp_instance VI_1{
state MASTER #备用服务器上为 BACKUP,抢占式
interface eth0 #绑定vip的网卡为eth0,根据自己的服务器来设置
virtual_router_id 81 #一个vrrp组的ID,所有参与vrrp组的服务器必须一致
priority 100 #备用服务器上必须小于master的权重,如99,80等
advert_int 1 #master与backup之间依靠组播报文来通告状态。master每隔1秒钟发生组播报文(因此,master和backup的网卡必须开启multicast组播功能)到vrrp组,如果backup状态的路由器没有在设定的时间间隔,默认3个时间间隔即3s,内收到组播报文,则认为master失效,会将backup优先级最高的设为master,接管vip(即,将vip绑定在自己的网卡上),同时对外通告arp报文,这样,其他节点就会更新自身的arp缓存,通过vip指向正确的服务器。当master恢复后,接管vip,发送组播报文,bakcup收到组播报文,发现报文的权重比自己的权重大,恢复成backup,并摘除vip。authentication { #组播报文采用密码方式进行认证,也可以采用md5方式
auth_type PASS
auth_pass 123456789
}
virtual_ipaddress {
192.168.100.100
}
}
virtual_server 192.168.100.100 8080 {
delay_loop 10 #lvs自带检活机制,每隔10秒查询realserver状态
lb_algo rr
lb_kind DR #lvs是linux的一个模块,keepalived指定用lvs的DR模式作为负载均衡模式
persistence_timeout 60 #会话保持功能,同一IP的连接60秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态,也可以用http协议,如protocol HTTPreal_server 192.168.100.80 8080 {
weight 100
TCP_CHECK { #也可以是HTTP_CHECK,http check更完善,有时候,tcp 端口能够telnet,但是http层面不能服务,就会遗漏告警,比如http的index被删除了,tcp 端口可以telnet,但是http get访问失败,所以http check更好些
keepalived可以在三层,四层,七层进行realserver的检活。三层是icmp包,四层是tcp port是否正常,七层是具有应用的配置如url 返回非200
#(10秒无响应超时)
connect_timeout 10
nb_get_retry 3 #检活3次
delay_before_retry 3 #每次检活间隔3s
connect_port 8080 #检活端口是8080
}
HTTP_GET {
url {
path /index.html
status_code 200
}
nb_get_retry 3
delay_before_retry 3
connect_timeout 5
}
}real_server 192.168.100.90 8080 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
LVS BACKUP:
/etc/keepalived/keepalived.conf
仅仅有几个地方要改:
state backup
priority 50
realserver:
由于多个realserver要绑定vip,为了防止ip冲突,需要在realserver上关闭arp通告,arp应答。
#/bin/bash
vip=192.168.100.100
#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端
echo “1” >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/lo/arp_announce
echo “1” >/proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” >/proc/sys/net/ipv4/conf/all/arp_announce
将如上script添加到rc.local里,开机自动即可。