一、lvs概述
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。当用户从外部访问公司的外部负载均衡服务器,用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某一台Web服务器。
lvs的核心组件:
ipvsadm:策略编写工具, 用于管理集群服务及集群服务上的RS等
ipvs:工作于内核上的程序, 可根据用户定义的集群实现请求转发
常见术语:
VS:Virtual Server,虚拟服务
RS:Real Server,后端请求处理服务器
CIP:Client IP,客户端IP
VIP:Director Virtural IP,负载均衡虚拟IP
DIP:Director IP 负载均衡器IP
RIP:Real Server IP,后端请求处理服务器IP
lvs常见的几种模式:
NAT模式
DR模式
TUNNEL模式
FULLNAT模式
其中DR模式是最稳定最常用的模式
二、安装lvs策略编辑工具
yum install ipvsadm.x86_64 -y
ipvsadm常见的参数
-l | 列出当前策略 |
---|---|
-h | 列出编辑策略的方法 |
-A | 添加虚拟服务 |
-t | 指定虚拟IP |
-s | 指定调度器 |
-a | 添加真实服务 |
-r | 指定真实服务的IP |
-g | 选择DR模式 |
-i | 选择TUNNEL模式 |
-C | 清除规则 |
启动ipvsadm服务
需要新建一个策略文件
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
三、添加策略
DR模式
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.30:80 -g
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.40:80 -g
重启ipvsadm服务
四、给调度器以及后端主机添加VIP
ip addr add 192.168.0.100/32 dev ens33
客户端向调度器VIP请求数据,调度后台30,40主机轮询回应,但是当后台主机向客户端返回数据时,客户端不认识30或40这两个IP,所以需要在后台主机上加VIP
五、TUNNEL模式
清楚之前设置的策略
ipvsadm -C
导入隧道模式所需要的模块
modprobe ipip
用命令ip a
可以看到多了一个类似于网卡的东西
添加策略:
ipvsadm -A -t 192.168.0.100:80 -s rr
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.30:80 -i
ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.40:80 -i
添加虚拟IP:
ip addr add 192.168.0.100/32 dev tunl0
激活tunl0
ip link set up tunl0
关闭反向过滤规则:若开启了反向过滤规则会对流入的数据包进行反向路径校验,不符合规则会将数据包丢弃
sysctl -a | grep rp_filter
将上述命令中的为1的规则都改为0
六、lvs+keepalived
这个组合可以实现高可用以及后端的健康检查
需要配置一个备用调度器
源码安装keepalived
tar zxf keepalived-2.0.20.tar.gz
./configure --prefix=/usr/local/keepalived --with-init=systemd
yum install gcc -y
yum install openssl-devel -y
./configure --prefix=/usr/local/keepalived --with-init=systemd
make && make install
更改配置文件:
vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.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.0.100
}
}
virtual_server 192.168.0.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 192.168.0.30 80 {
TCP_CHECK{
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.0.40 80 {
TCP_CHECK{
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
同样,在备用调度器上做上述相同的操作,只是在配置文件中有两处不同的更改
这种方式不需要手动添加VIP,当开启keepalived服务后,会自动添加,并且当主调度器挂了以后主调度器中的VIP会自动移除,备用调度器中自动添加VIP。当后端主机有一个挂了以后会被自动的提出集群组中。