LVS:Linux virtual server将用户请求的报文转发给后端服务器,根据用户请求的ip+端口号,进行处理
LVS与iptables不能同时使用;
LVS以规则方式进行检查:
ipvsadm:用户空间,管理集群服务的命令行工具
ipvs:内核
转发的标准:调度方法(调度中的算法,计算机制)---》schedule method
当用户请求的是IP+22端口,于是进入PREROUTING,直接进入本地(通过INPUT),因为它不是请求的集群服务;
当用户请求的ip+80端口,判断为集群服务,于是内核ipvs进行转发,提供调度功能;
一个调度器只为一个集群服务提供调度功能;
调度器前端提供服务的ip:VIP,virtual ip(面向互联网客户端)
web服务ip:RIP,rs ip
调度器转发给服务端的ip:DIP(面向real server)
客户端的ip:CIP,client ip
LVS类型:
NAT:地址转换(目标地址转换)----》多目标的DNAT
DR:直接路由,direct routing
TUN:隧道
NAT:
集群节点(real server ip)的ip网段必须和DIP是同一网段
RIP通常是私有地址,仅用于各集群节点间的通信
调度器(director)位于client和real server之间,并负责处理进出的所有通信(director有两张网卡)
real server必须将网管指向DIP
支持端口映射(客户端请求的80,real server可以返回8080的端口进行数据报文传输)
real server可以使用任意操作系统
较大规模应用场景中,director易成为系统瓶颈
ipvsadm:
管理集群服务
添加:-A -t|u|f service-address [-s scheduler](调度算法默认为wlc)
-t:tcp协议的集群服务
-u:udp协议的集群服务
-f:防火墙标记firewallmark(FWM)
service-address:mark number
修改:-E
删除:-D -t|u|f service-address
#ipvsadm -A -t 172.16.100.1:80 -s rr
管理集群服务中的RS
添加:-a -t|u|f service-address -r service-address [-g|i|m] [-w weight]
service-address:事先定义好的某集群服务
-r service-address:某RS的地址,在nat模型当中可以使用ip+port实现端口映射
[-g|i|m] [-w weight]:表示LVS类型
-g:DR模型(默认为DR模型)
-i:TUN
-m:NAT
-w:指定权重
修改:-e
删除:-d
-t|u|f service-address -r service-address
#ipvsadm -a -t 172.16.100.1 -r 192.168.10.8 -m
#ipvsadm -a -t 172.16.100.1 -r 192.168.10.9 -m
查看:
-L或者-l
-n:数字格式,显示IP+端口号(主机地址和端口)
--stats:统计数据信息
--rate:用来输出速率信息(cps:connection per seconds)
--timeout:用于输出超时时间值(显示tcp、tcpfin、udp的会话超时时长)
--daemon
-c:--connection显示当前连接数(-L连用)
-C:删除所有集群服务,情况ipvs规则
保存规则:
-S:#ipvsadm -S > /path/to/somefile
载入此前的规则:
-R:#ipvsadm -R < /path/to/somefile
接下来示例演示NAT类型LVS:
确保iptables和ipvs不能同时启动,准备工作3台虚拟机,其中:
一台作为director(VIP、DIP),两张网卡
一台real server(RS1),主机模式
一台real server(RS2),主机模式
将两台real server的网关指向director的ip,具体配置如下:
director:
eth0:(VIP)
ip:192.168.31.100 gateway:192.168.31.1 netmask:255.255.255.0
eth1:(DIP)
ip:192.168.248.128 gateway:192.168.248.1 netmask:255.255.255.0
RS1:
ip:192.168.248.129 gateway:192.168.248.128 netmask:255.255.255.0
RS2:
ip:192.168.248.130 gateway:192.168.248.128 netmask:255.255.255.0
首先配置RS两台上面的web服务作为测试,为方便观察采用的调度算法为rr轮询:
RS1具体操作如下:(RS1虚拟机选为主机模式)
service iptables stop
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
yum -y install httpd
echo "RS1.my.com" > /var/www/html/index.html
service httpd start:确保服务政策启动
curl http://localhost
RS1.my.com
同理RS2具体操作:
service iptables stop
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
yum -y install httpd
echo "RS2.my.com" > /var/www/html/index.html
service httpd start:确保服务政策启动
curl http://localhost
RS2.my.com
RS1.my.com
##################################################################################
director配置操作如下:
将eth0(ip:192.168.31.100 gateway:192.168.31.1 netmask:255.255.255.0)联网方式为桥接
将eth1(ip:192.168.248.128 gateway:192.168.248.1 netmask:255.255.255.0)联网方式为主机模式
ping 192.168.248.129
ping 192.168.248.130
确保能够ping通RS两台web服务器的ip
确保能够访问两台RS的页面
接下来开始配置director:
service iptables stop
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
yum -y install ipvsadm
由于该测试类型为NAT,于是还得配置:
echo 1 > /proc/sys/net/ipv4/ip_forward--->打开转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
于是开始建立集群:
ipvsadm -A -t 192.168.31.100:80 -s rr
ipvsadm -a -t 192.168.31.100:80 -r 192.168.248.129 -m
ipvsadm -a -t 192.168.31.100:80 -r 192.168.248.130 -m
[root@test ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.31.100:80 rr
-> 192.168.248.129:80 Masq 1 0 0
-> 192.168.248.130:80 Masq 1 0 0
至此集群服务就建立好了,只需要在浏览器中输入
http://192.168.31.100即可查看到RS1以及RS2的站点内容(刷新页面即可轮询站点内容RS1、RS2交替出现)
详细成功截图见下班后上传--