keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。它的作用是通过layer3, 4 & 5交换机制来检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中。
layer3是ip/tcp协议ip层,当keepalived使用layer3工作方式时会定期ping真实服务器的ip,当某台服务器的ipPing不同时,将会被踢除服务器群组。
layer4是ip/tcp协议的tcp层,它通过检测服务器端口状态来检测服务器,如当keepalived没有检测到apache的80端口时,就会将这台服务器踢除集群
layer5是ip/tcp协议的应用层。它根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。它是一个开源的软件,可以实现LINUX平台下的简单负载均衡。 优点:
1 、开源,免费
2、在网上能找到一些相关技术资源
3、具有软件负载均衡的一些优点
缺点:
1、具有开源产品常有的缺点,最核心的就是没有可靠的支持服务,没有人对其结果负责
2、功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等。
3、开启隧道方式需重编译内核
4、配置复杂
5、只支持LINUX ,如果应用还包括WINDOWS、SOLIRIS等就不行了。
lvs的有DR、NAT、TUN、FULLNAT四种模式
lvs DR模式: 客户发送一个请求给VIP;VIP 收到这请求后会跟LVS设置的LB算法选择一个LB 比较合理的真实服务器,然后把此请求的MAC地址修改为真实服务器的MAC地址。DR 模式要求VIP 和 所有的真实服务器在同一个网段,也就是在用过LAN里面。不然广播后所有的包都会丢掉,同时所有的真实服务器都必须绑定VIP的IP地址。
lvs NAT模式:客户发送请求给vip后,vip会根据LB算法选一个真实服务器处理请求,处理完后发送给lvs之后再传给客户。NAT模式走的是switch 或pub 不需要修改MAC 所以,不需要VIP 和真实服务器在同一个网段内。
lvs TUN模式:把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。
lvs full-nat模式:fullnat无非就是nat,但DIP和RIP之间可以经过路由进行转发。当请求到来时,源目IP分别为CIP和VIP。到达调度器后,还是由ipvs挑选一台主机,但由于DIP和RIP并不在同一个网段,所以ipvs会将请求的报文源目IP分别改为DIP和RIP。RS收到报文后,就会将响应报文发给DIP,这是毋庸置疑的。调度器在收到报文,通过在内部追踪nat表以后,将响应报文的源目IP分别改为VIP和CIP,于是报文就发给客户端。这种源目IP都进行修改的LVS类型就是fullnat。
下面是keepalived+lvs(DR)的简单配置
实验环境:rhel6.5 selinux and iptables disabled
实验主机:
lvs-MASTER 172.25.254.2 lvs-BACKUP 172.25.254.3 realserver 172.25.254.4 172.25.254.5
lvs主机的配置:
yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm yumi install pvsadm kernel-devel openssl-devel libnl-devel gcc tar zxf keepalived-1.2.20.tar.gz cd keepalived-1.2.20
指定安装路径编译:
./configure --prefix=/usr/local/keepalived
出现以下几个yes即可
make && make install
建立必要的软连接:
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/keepalived/etc/keepalived /etc/ ln -s /usr/local/keepalived/sbin/keepalived /sbin/ ln -s /usr/local/keepalived/bin/genhash /bin/
配置keepalived:
vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { 2838371898@qq.com #指定接受报警的邮箱,可以有多个 } notification_email_from keepalived@server2.example.com #发送邮件的地址 smtp_server 127.0.0.1 #smtp server 地址 smtp_connect_timeout 30 #smtp超时时间 router_id LVS_DEVEL #load balancer 的标识 ID,用于 email 警报 } vrrp_instance VI_1 { state MASTER #设定lvs主备机状态,备机为BACKUP interface eth0 #HA 监测网络接口 virtual_router_id 51 #主备机的id必须相同 priority 100 #设定优先级,数字越高优先级有高,主机优先级要高于 备机 advert_int 1 #主备机通信间隔时间 authentication { auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种 auth_pass 1111 #主备机必须一致 } virtual_ipaddress { 172.25.254.100 #设定虚拟ip,可多个 } } virtual_server 172.25.254.100 80 { #通过端口定义虚拟服务器,80为apache端口 delay_loop 6 #每隔 6 秒查询 realserver 状态 lb_algo rr #lvs调度算法为论询 lb_kind DR #lvs为直连模式
# persistence_timeout 50 #设定连接保持时间 protocol TCP #指定转发协议
real_server 172.25.254.4 80 { #定义真实服务器 weight 1 #配置权重 TCP_CHECK { #设置真实服务器检查为tcp查询 connect_timeout 3 #设定超时时间 nb_get_retry 3 #重试次数 delay_before_retry 3 #重试间阁 } } real_server 172.25.254.5 80 { #另一台真实服务器用以实习负载均衡 weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
真实服务器部分:
为真实服务器添加虚拟IP
ip addr add 172.25.254.100/32 dev eth0
安装arp防火墙
yum install arptables_jf.x86_64 -y
为真实服务器的虚拟ip建立ARP列表使得真实服务器忽略所有来自虚拟ip的请求,使得只有lvs机才能接受虚拟ip的请求。并把原先包含虚拟ip的arp回应改为包含真实服务器的ip
arptables -A IN -d 172.25.254.100 -d -j DROP arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.4
测试:
停止server2节点备机server3将接管
停止server4的httpd服务访问虚拟ip将只能访问server5的主页
本文出自 “12097560” 博客,请务必保留此出处http://12107560.blog.51cto.com/12097560/1907660
原文地址:http://12107560.blog.51cto.com/12097560/1907660