LVS(虚拟集群Linux Virtual Server)
LVS-NAT:地址转换,数据包来回都要经过NAT转换,所以Director Server(即LVS服务器)将成为系统瓶颈。使用NAT模式将需要两个不同网段的IP,一个IP接受外部请求服务,一般为外网ip,此IP称为VIP,一个IP与后realserver同一地址段,负责相互通信,称为DIP。后端realserver的网关地址需指向DIP。同时需开启linux内核的数据包转发功能。
LVS-TUN:隧道 ,LVS/TUN与 LVS/DR 类似。只是在报文外面再加一层IP封装,整个过程比LVS/DR模式多一次报文的封装/解封过程。LVS/DR只支持本地网络,LVS/TUN却可以跨机房。
LVS-DR: 直接路由,此种方式是最常用的方式,
所有的Director和RealServer都在同一个物理网络中(交换机)并且都只有一块网卡。
常用的几种调度:
1. 轮叫调度 rr 所有real_server轮流
2. 加权轮叫 wrr 按照性能比例,好的多分,差的少分
3. 最少链接 lc 给链接数少的分
4. 加权最少链接 wlc 按照性能比例,好的多分,差的少分,链接数也要保持比例
5. 基于局部性的最少连接调度算法 lblc
6. 复杂的基于局部性最少的连接算法 lblcr
7. 目标地址散列调度算法 dh
8. 源地址散列调度算法 sh
用DR模式配置(必须同一网段)
首先准备构建集群的三台设备
direct_server:192.168.254.17
real_server1:192.168.254.18
real_server2:192.168.254.19
拟定vip为:192.168.254.250
direct_server:
# yum -y install ipvsadm
# yum -y install httpd*
# ipvsadm -C
# ipvsadm -A -t 192.168.11.250: -s rr
# ipvsadm -a -t 192.168.11.250: -r 192.168.11.138: -g
# ipvsadm -a -t 192.168.11.250: -r 192.168.11.140: -g
# ifconfig ens33: 192.168.11.250 broadcast 192.168.11.250 netmask 255.255.255.255 up 在ens33的子网卡添加一个虚拟ip,保证服务可以访问到VIP;
# route add -host 192.168.11.250 dev ens33:
添加一个路由通过ens33来访问Vip 192.168.254.250
# vim /dev/sysconfig/ipvsadm 随便编辑一下
# ipvsadm -Ln --stats -L显示内核虚拟服务器表
--zero 清空流量 -n 输出IP地址和端口的数字形式
/# -a添加 -t 添加一个虚拟IP的tcp 协议
/# -C:–clear 清除内核虚拟服务器表中的所有记录
/# -A添加一个虚拟IP -s调度器
/# -r real_server -g DR模式
/# ens33:0 是子网卡,设置第二个ip
/# broadcast 广播
/# ipvsadm文件缺失后会导致ipvsadm start失败
real_server:
# yum -y install httpd*
# ifconfig lo: 192.168.11.250 broadcast 192.168.11.250 netmask 255.255.255.255 up
# route add -host 192.168.11.250 dev lo:
/#loopback网卡,默认地址127.0.0.
# echo "">/proc/sys/net/ipv4/conf/lo/arp_ignore
# echo "">/proc/sys/net/ipv4/conf/lo/arp_announce
# echo "">/proc/sys/net/ipv4/conf/all/arp_ignore
# echo "">/proc/sys/net/ipv4/conf/all/arp_announce
# vim /etc/www/html/index.html
<h1>this is (或者140) host</h1>
# systemctl start httpd.service
测试:
用第四台虚拟机
# curl 192.168.11.250 出现下图情况即成功
也可以windows装curl包后,在命令行输入上述命令测试
arp_ignore:定义接收到ARP请求时的响应级别
0:默认,只用本地配置的有响应地址都给予响应
1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
arp_announce:定义将自己的地址向外通告时的级别
0:默认,表示使用配置在任何接口的任何地址向外通告
1:尽量仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告
tun隧道模式
lvs-server:
ifconfig tunl0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.0 up
route add -host 192.168.254.250 dev tunl0
ipvsadm -A -t 192.168.254.250: -s rr
ipvsadm -a -t 192.168.254.250: -r 192.168.254.18 -i
ipvsadm -a -t 192.168.254.250: -r 192.168.254.19 -i
real server:
ifconfig tunl0 192.168.254.250 netmask 255.255.255.255 broadcast 192.168.254.250 up
route add -host 192.168.254.250 dev tunl0
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/tunl0/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "" >/proc/sys/net/ipv4/conf/tunl0/rp_filter
echo "" > /proc/sys/net/ipv4/conf/all/rp_filter
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。
如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),
如果反向路径不同,则直接丢弃该数据包。