LVS概述
lvs(linux virtual server)为解决高并发场景下服务器负载瓶颈的一种负载均衡手段。基于四层的负载均衡,可以达到400多万的并发量,远高于haproxy及nginx。
1.nat模式
nat模式特点:
1.调度器必须有两块网卡,DIP和RIP必须在同一网段中,RS的网关地址必须指向DR的内网卡IP地址
2.调度器在接收客户端的请求的时候,修改的是目标IP,在给客户端返回数据的时候,修改的是源IP
3.支持端口映射
4.请求和响应报文都经由调度器转发:高负载场景中,dircetor可能成为瓶颈
实验步骤:
前提:real server 安装httpd 服务并配置index.html区分node1和node2
1.安装ipvsadm
yum install -y ipvsadm
2.分别为调度器和Rserver配置vip dip rip 并将rip的网关设置为dip
3.开启路由转发,将vip的数据包经由内核转发到dip上(从input直接丢到output链):
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 加载,使得配置文件立即生效
4.配置ipvsadm 规则
添加集群:
ipvsadm -A -t 192.168.220.128:80 -s rr # 使用80端口,调度模式为轮询
添加后端服务器
ipvsadm -a -t 192.168.220.128:80 -r 172.16.2.101 -m # 添加101real server 模式为nat
ipvsadm -a -t 192.168.220.128:80 -r 172.16.2.101 -m # 添加102real server
5.保存配置
ipvsadm -S -n> /etc/sysconfig/ipvsadm
6.测试
2.dr模式
dr模式特点:
1.real server和调度器都需要配置vip节点,其中 real server 中的vip不能宣告arp请求,确保vip报文通过调度器发往realserver,其中调度器将报文直接发送到挑选的real server 上并不更改tcp/ip 头部。
2.real server 接收到请求后 报文的源地址为cip 目的地址为vip ,因为服务器在lo接口上配置了vip,因此可以对报文进行 处理,经过内核转发到lo接口上进行处理,处理完毕后必须从lo接口出去,做IP转发到本地网卡,后进行路由到客户端。
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。
arp_ignore参数常用的取值主要有0,1,2,3~8较少用到:
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:保留未使用
8:不回应所有的arp请求
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。(比如系统准备通过网卡发送一个数据包a,这时数据包a的源IP和目的IP一般都是知道的,而根据目的IP查询路由表,发送网卡也是确定的,故源MAC地址也是知道的,这时就差确定目的MAC地址了。而想要获取目的IP对应的目的MAC地址,就需要发送arp请求。arp请求的目的IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢? 可能第一反应会以为肯定是数据包a的源IP地址,但是这个也不是一定的,arp请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce的作用)
arp_announce参数常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。
实验步骤:
前提:real server 安装httpd 服务并配置index.html区分node1和node2
1.安装ipvsadm
yum install -y ipvsadm
2.在配置vip及rip之前,需要将real server中的arp_ignore和arp_announce配置进行修改,以防争抢vip
#arp_ignore=1 只响应目的地址为本机网卡的arp请求
#arp_announce=2 响应从lo接口接收,从lo接口发送出 进行路由
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
3.分别为调度器和Rserver配置vip dip rip 并将rip的网关设置为dip
4.开启路由转发,将vip的数据包经由内核转发到dip上(从input直接丢到output链):
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 加载,使得配置文件立即生效
5.配置ipvsadm 规则
添加集群:
ipvsadm -A -t 192.168.220.127:80 -s rr # 使用80端口,调度模式为轮询
添加后端服务器
ipvsadm -a -t 192.168.220.127:80 -r 192.168.220.129 -g # 添加101real server 模式为dr
ipvsadm -a -t 192.168.220.127:80 -r 192.168.220.130 -g # 添加102real server
6.保存配置
ipvsadm -S -n> /etc/sysconfig/ipvsadm
7.测试