- LVS 是Linux Virtual Server的简称,在实际环境中经常作为B/S结构的网络应用中的负载均衡器来使用,工作在7层网络模型中的,网络层,也就是通常说的IP层,由于数据的处理是在Linux内核态完成的,所以相对反向代理服务器来说,性能一般会高一些;
- TUN 是IP Tunneling ,IP隧道的简称,它将调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
基本LVS TUN 模式配置
具体设置如下:
拓扑:
调度器:ip :172.25.21.1/24
VIP :172.25.21.100/32
RS1: IP:172.25.21.2/24
Turl0 :172.25.21.100
RS2:IP:172.25.21.3/24
Turl0 :172.25.21.100
对调度器进行操作:
添加VIP
ip addr add 172.25.21.100/32 dev eth0
添加策略:
ipvsadm -C
ipvsadm -A -t 172.25.21.100:80 -s rr
ipvsadm -a -t 172.25.21.100:80 -r 172.25.21.2 -i
ipvsadm -a -t 172.25.21.100:80 -r 172.25.21.3 -i
对真实服务器进行操作:
RS1:
执行:
modprobe ipip # 在加载好ipip模块后就会有默认的tunl0隧道。
注,如果没有在此处手动加载,那么使用ifconfig tunl0 时,会自动加载ipip隧道模块。
使用 ifconfig查看。没有tun0 ,加参数-a 时,查看可以看到tun0
添加tunl0:
[root@Server2 network-scripts]# cat /etc/sysconfig/network-scripts/ifcfg-tunl0
DEVICE=tunl0
IPADDR=172.25.21.100
NETMASK=255.255.55.0
ONBOOT=yes
NAME=tunl0
编辑/etc/sysctl.conf 进行arp 包的传输选择:
[root@Server2 network-scripts]# vim /etc/sysctl.conf
添加如下内容:
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
再执行:
echo '1' > /proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/tunl0/arp_announce
echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
echo '0' > /proc/sys/net/ipv4/conf/tunl0/rp_filter
echo '0' > /proc/sys/net/ipv4/conf/all/rp_filter
添加tunl0后
启动 http服务:
编辑默认发布文件:
RS2 的操作与RS1相同
- 注:
- arp_ignore=1 表示对于网络上发来的arp广播包,realserver的lo端口将会丢弃,因为如果做出应答,根据arp协议,相当于通告网络上其它主机VIP对应的Mac地址是realserver的Mac地址,而不是LB的Mac地址,这样客户端上就会绕过lvs,直接与后端的realserver通信,负载调度就失去了意义;
- arp_announce:
realserver 一般至少两个端口 两个ip,eth0 有ip,lo:0也绑定了一个vip,根据arp协议,
arp请求包中必须包含源主机的IP地址和Mac地址,对方收到请求包后,记录下该源地址和Mac地址,建立一对一的映射,那么对于这种多IP的情况,realserver发送arp请求报的时候该如何取舍,将哪个ip作为源地址?
参数arp_anonunce 正好是用来解决这个问题的,arp_announce=2 官方表述为使用最适当的本地地址,其实就是将eth0上的ip作为源地址,如果将vip作为源地址,对方就会将vip与realserver的mac地址映射起来,导致请求包都发给realserver,而不经过lvs.
在客户端进行测试:
执行如下:
操作成功
LVS TUN + keepalived
- Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
进行keepalived 的安装
先进压缩包的获取,解压后
进入解压后的目录进行安装
执行:./configure --prefix=/usr/local/keepalived/ --with-init=SYSV
查看是否报错,然后进行依赖性的解决
如安装:openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel
执行如下:
yum install openssl-devel libnl3-devel ipset-devel iptables-devel libnfnetlink-devel -y
获取libnfnetlink-devel 的安装包 进行安装
安装完成
执行make
然后执行 make install
对文件加可执行权限
/usr/local/keepalived/etc/rc.d/init.d/keepalived
/usr/local/keepalived/etc/sysconfig/keepalived
/usr/local/keepalived/sbin/keepalived
再进行链接的建立
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
至此,安装完成
安装完成配置完成keepalived之后
进行编辑,编辑/etc/keepalived/keepalived.cf
编辑内容如下:
! Configuration File for keepalived
2
3 global_defs { # # 全局配置
4 notification_email {
5 root@localhost # 邮箱地址
6 }
7 notification_email_from keepalived@localhost
8 smtp_server 127.0.0.1
9 smtp_connect_timeout 30 # 连接的响应时间
10 router_id LVS_DEVEL
11 vrrp_skip_check_adv_addr
12 # vrrp_strict # 必须注释此处,否则启动程序后会默认在 iptables的策略中DROP所有的数据包
13 vrrp_garp_interval 0
14 vrrp_gna_interval 0
15 }
16
17 vrrp_instance VI_1 {
18 state MASTER # 类型:MASTER 表示为主设备
19 interface eth0 # 接口
20 virtual_router_id 21 # 虚拟路由ID 范围:1~255
21 priority 100 # 优先级,用来决定主备,数字越大优先级越高
22 advert_int 1
23 authentication { # 验证方式
24 auth_type PASS
25 auth_pass 1111
26 }
27 virtual_ipaddress { # VIP 虚拟IP 地址,这里不需要在外对设备进行设置
28 172.25.21.100 # 启动 keepalived 后会自动添加
29 }
30 }
31
32 virtual_server 172.25.21.100 80 { # 虚拟服务器 IP
33 delay_loop 6
34 lb_algo rr # 调用的算法 rr round-robin
35 lb_kind TUN # LVS 模式 TUN模式,与ipvsadm 的 -i 相对应
36 # persistence_timeout 50
37 protocol TCP
38
39 real_server 172.25.21.2 80 {
40 weight 1 # 权重
41 TCP_CHECK {
42 connect_timeout 3
43 retry 3
44 delay_before_retry 3
45 }
46 }
47
48 real_server 172.25.21.3 80 {
49 weight 1
50 TCP_CHECK {
51 connect_timeout 3
52 retry 3
53 delay_before_retry 3
54 }
55 }
56 }
在备用调度器上的编辑与在主调度器上的基本相同,修改主备类型即可:
Keepalived 的操作到此完成,启动后会自动生成LVS策略
如主调度器上:
在HTTP服务器端与基本NAT模式配置操作一致
在客户端进行测试:
成功,可轮流调度后端服务器的内容
若是任主调度器宕机,后被调度器也会第一时间顶替上去,保证用户的体验
示例:
人工down掉主调度器
客户端没有反映,只是直接使用了备用的调度器:此处MAC地址,为备用调度器MAC地址
注;
若是主调度器再次启动,则会与备用调度器争夺主调度器的位置,由于其优先级高,所以会成功,而备用调度器则会再次待机