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

curl http://192.168.248.129

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

curl http://192.168.248.129

curl http://192.168.248.130

确保能够访问两台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交替出现)

详细成功截图见下班后上传--