本篇介绍lvs负载均衡器,并使用keepalived增强lvs的稳定性。
目录
一、负载均衡模型简介
一个tomcat服务器最多为几千个并发客户端服务,当客户端超过这个数时就需要用到负载均衡,负载均衡就是后端有多个服务器,当新的客户端来时为它分配一个固定的后端服务器服务。
1.1 逻辑模型简介
VIP:虚拟服务器地址(域名解析后的ip地址,例如www.baidu.com经过DNS解析后的ip地址,是唯一的)。
DIP:负载均衡转发源的网络地址。1)和RIP通信:使用ARP协议获取RIP的MAC地址。
RIP:后端真实的服务器ip地址。为了实现高并发通常有多个。
CIP:客户端ip地址。
宏观拓扑图如下图所示:
负载均衡器只做转发,不做三次握手,实际通信是CIP和RIP之间的通信。

1.2 动态NAT模式实现
负载均衡器通过NAT方式重定向后端服务器ip地址实现负载均衡。
具体实施图如下图所示:
缺点:所有数据都要经过负载均衡器,带宽限制。

1.3 四层DR(直接路由)模式实现
为了解决上面所有收发的所有数据都经过负载均衡器导致的带宽不足,使用四层DR模式解决,后端服务器直接发送给客户端。
负载均衡器:将受到的CIP_VIP格式转换成CIP_VIP:RIP_MAC格式。
后端服务器:VIP与负载均衡的VIP相同,后端VIP位于内网中,对外不可见;后端服务器与负载均衡器位于同一局域网中,物理距离被限制。

1.4 隧道(ip嵌套ip)模式实现
为了解决后端服务器由于在同一内网中的物理距离限制,使用类似VPN的方式解决。详细如下:

1.5 隐藏VIP(对于后端服务器)的方法
由于后端服务器在后端,所有前端的负载均衡器不应该对VIP进行回应,只负责转发,所以需要进行隐藏。
在linux下,/proc/sys/net/ipv4/conf/*IF*/中可以对内核的网络功能进行配置
arp_ignore(ARP响应级别)设置为1,这是因为要隐藏VIP,不能将VIP地址告诉arp广播,只有当mac地址匹配时才会响应,若为0,当arp广播过来时会将本机所有网卡的ip地址发送出去,达不到隐藏的效果;
arp_announce(ARP通告级别)设置为2,设置为0时,会将本计算机上所有网卡上的ip地址发送出去;设置为2时,仅当匹配到网卡上的某个ip地址时会将这个ip地址发送出去,达到了隐藏效果。
详细如下:
注意:一块网卡可以配置多个ip地址。

二、lvs原理
lvs已经集成在linux操作系统内核中,所以不需要安装,但是需要安装ipvsadm对内核进行配置。
lvs监控配置

后端服务器添加

三、lvs-DR模型实验
3.1 实验环境介绍
准备3台虚拟机,一台作为lvs负载均衡器,两台作为后端服务器。
| 虚拟机名 | 负载均衡中角色 | ip地址 | 安装的软件 | eth0 | 网络配置 | 说明 |
| node01 | LVS | eth0:192.168.182.140 eth0:0(即VIP):192.168.182.100 | ipvsadm | DIP | eth0:0 VIP | 配置ipvsadm |
| node02 | RS01 | eth0:192.168.182.141 lo:0(即VIP):192.168.182.100 | http 80 | RIP | lo:0 VIP | 启动httpd |
| node03 | RS02 | eth0:192.168.182.142 lo:0(即VIP):192.168.182.100 | http 80 | RIP | lo:0 VIP | 启动httpd |
3.2 实验步骤
1、虚拟机配置
创建3台虚拟机,使用NAT模式与物理机连接,虚拟网关为192.168.182.1,物理机ip地址(vmnet8)为192.168.182.2,三台虚拟机的eth0地址如上表所示,完成后能相互ping通。
2、配置lvs的VIP
其中,/24为子网掩码,表示24个1。
第二句是配置负载均衡的转发功能,如果为0,当收到的ip地址与自己的不匹配就会丢弃;为1时不丢弃,会查路由表然后转发出去。
ifconfig eth0:0 192.168.182.100/24
echo 1 > /proc/sys/net/ipv4/ip_forward
3、后端服务器RS的响应配置(RS01、RS02)
配置arp响应,命令如下:
注意:/proc中的配置文件修改时不要使用vi修改,最好使用echo 覆盖,为临时操作,重启失效。
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
4、后端服务器RS的VIP配置(RS01、RS02)
为两台后端服务器配置VIP,该地址为负载均衡器lvs的ip地址(VIP)。
注意:子网掩码为四个255是因为如果为3个255,那么后端服务器发送出去的目的地址192.168.182.xxx(客户端的ip)与子网掩码与运算后为192.168.182.0为自己的ip地址,发送不到客户端。
ifconfig lo:0 192.168.182.100 netmask 255.255.255.255
5、后端服务器上启动httpd(RS01、RS02)
安装httpd
yum install httpd -y
配置httpd的index主页
vi /var/www/html/index.html
# index.html中输入以下内容,即填写自己的ip地址,下面为第一台RS
from 192.168.182.141
启动httpd
service httpd start
这时,使用物理机浏览器输入192.168.182.141或192.168.182.142就可以看到主页的内容,而192.168.182.100没有配置所以访问失败。
6、负载均衡器lvs配置
安装ipvsadm
yum install ipvsadm -y
配置负载均衡器
监控地址为192.168.182.100的80端口,轮询调度,命令如下:
ipvsadm -A -t 192.168.182.100:80 -s rr
查看配置情况
ipvsadm -ln
为负载均衡器配置后端服务器
第一个ip地址为负载均衡器的ip,第二个为后端服务器的ip地址,在此有两个后端服务器,添加两条
ipvsadm -a -t 192.168.100:80 -r 192.168.141:80 -g
ipvsadm -a -t 192.168.100:80 -r 192.168.142:80 -g
这时,用ipvsadm -ln 可以看到配置的情况。
7、测试
在本地浏览器输入192.168.182.100刷新会出现不同的后端服务器回应。
注意:第一次的时候,我用192.168.182.140作为VIP,与负载均衡器的eth0(DIP)一样,导致在负载均衡器自我收发,发送不到后端服务器,访问不成功。
四、keepalived增强lvs稳定性实现
lvs虽然能实现负载均衡,但是如果lvs故障则整个系统瘫痪,风险较大。
解决方法:使用多个lvs提高稳定性,使用keepalived保持存活。
实验模型:在第三节的基础上增加一台虚拟机(node04)作为lvs,这时2台作为lvs(node01、node04),2台作为后端服务器(node02、node03)
实验示意图如下:

安装keepalived
yum install keepalived
配置keepalived(node01中)
vi /etc/keepalived.conf
! Configuration File for keepalived
# 邮箱配置,当出现故障时会发送邮件给运维
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# vrrp协议配置,相当于lvs
vrrp_instance VI_1 {
state MASTER # 配置为主lvs
interface eth0 # 使用哪个网卡发送
virtual_router_id 51 # 组id,两个必须设置成一样,表示位于同一组中
priority 100 # 权重值,主lvs使用最大,备用的lvs要小于主lvs
advert_int 1 # 组播信息发送间隔,两个必须设置成一样
authentication { # 设置验证信息,两个必须设置一样
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 配置vip,相当于第三节中的ifconfig eth0:0 192.168.182.100/24
192.168.182.100/24 dev eth0 label eth0:0
}
}
# vip的配置,相当于ipvsadm -A -t 192.168.182.100:80 -s rr
virtual_server 192.168.182.100 80 { # 配置成vip的地址和端口
delay_loop 6
lb_algo rr
lb_kind DR # 使用DR模型
nat_mask 255.255.255.0
persistence_timeout 0 # 超时时间,为了显示实验切换效果,设置为0
protocol TCP
# 后端服务器的配置
real_server 192.168.182.141 80 { # 修改为后端服务器的配置
weight 1
HTTP_GET { # http请求默认主页
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.182.142 80 { # 修改为后端服务器的配置
weight 1
HTTP_GET { # http请求默认主页
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
配置keepalived(node04中)
node04中的配置与node01中的配置几乎一样,只有两个地方不一样如下(截取部分配置):
# vrrp协议配置,相当于lvs
vrrp_instance VI_1 {
state BACKUP # 第一处不同!配置为备用lvs
interface eth0
virtual_router_id 51
priority 50 # 第二处不同!备用的lvs要小于主lvs
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.182.100/24 dev eth0 label eth0:0
}
}
启动keepalived服务(node01和node04)
service keepalived start
测试
首先,在master上查看eth0的ip地址:ip addr,会显示虚拟ip;
在本地浏览器输入192.168.182.100刷新会出现不同的后端服务器回应。
724



被折叠的 条评论
为什么被折叠?



