lvs+keepalived实现

系统版本:
centos7.x
测试环境:
lvs1 192.168.60.151
lvs2 192.168.60.152
rs1 192.168.60.161
rs2 192.168.60.162
目的:
测试lvs负载均衡功能,DR模式。
DR模式原理简介:
lvs+keepalived实现

dr模式中,负载调度器只负责调试请求,而真实服务器响应请求并将响应直接返回给客户,不再经由负载调度器。
dr模式中要求调度器和服务器必须在物理上有一个网卡通过不分断的局域网相连,vip地址为调度器和服务器(realserver)共享,调度器的vip对外可见,用于接收虚拟服务的请求;所有的服务器(lvs)把vip配置在各自的Non-Arp网络设备上(在这里是lo:0),对外不可见,只是用于处理目标地址为vip的网络请求。
dr模式中调度器收到IP报文后,将数据帧中的mac修改为根据相应算法选出的一台服务器(realserver)的mac地址,再将修改后的数据帧在局域网上发送。服务器接收到该报文后,解包后发现目标地址vip在本地网络设备上,服务器处理这个报文,然后将响应报文直接返回给客户。


在lvs1和lvs2上执行下列操作:
1.安装keepalived和ipvsadm

yum install -y keepalived ipvsadm

2.配置keepalived
修改配置文件如下:
--------------------------------------------------------------------
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.60.150
}
}

virtual_server 192.168.60.150 80 {
delay_loop 6
lb_algo rr #调度算*询
lb_kind DR #工作模式DR
persistence_timeout 50
protocol TCP

real_server 192.168.60.161 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.60.162 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
}

-----------------------------------------------------------------------------
lvs2的配置基本与lvs1一致
只需修改下面两个
state MASTER --> state BACKUP
priority 100 --> priority 90

3.开启内核转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
也可修改内核配置文件,使其永久生效。
vi /etc/sysctl.conf  
net.ipv4.ip_forward = 1
使配置文件生效
sysctl -p.

4.启动keepalived的即可
systemctl
通过ip add 查看vip是否已经绑定到了lvs1上。

至此lvs配置完成,下面在realserver上进行相应配置。
在两台realserver上执行下列操作
1.安装所需要的软件包
此次测试真实服务器上的应用为nginx,在两台realserver上的安装nginx.
yum install -y nginx
为了验证负载是否生效,将两台服务器的/usr/share/nginx/html/index.html中分别写入不同内容以作区分。
rs1:
echo "this is rs1." > /usr/share/nginx/html/index.html
rs2:
echo "this is rs2." > /usr/share/nginx/html/index.html
启动nginx
nginx 或systemctl start nginx

2.配置网络项
配置vip到本地回环网口
vip='192.168.60.150'
ip addr add $vip dev lo:0
增加到vip的路由
ip route add $vip dev lo:0
修改内核参数禁用lo上的arp协议
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


验证:
1. 访问http://$vip, 确认是否能正常看到index.html的内容
2. 多次访问看是否能得到不同的内容,以确认请求是否被转到了不同的realserver上。
3. 停掉任一个realserver的nginx,模拟故障;确认keepalived是否能正确的将故障的realserver移出可用服务器,不再转发请求到该服务器。
4. 停掉lvs2上的keepalived的模拟故障,再访问http://$vip,看服务器是否正常提供服务。正常则vip在主故障后自动飘到了备机上。否则,HA功能不生效。