LVS工作模式及配置

实现集群
从硬件上实现:
1、F5
2、BIG-IP
从软件实现:
1、LVS(工作在tcp/ip的第四层)
2、haproxy
3、ngnix(工作在第七层)
4、varnish

LVS 简介
LVS ,即 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群,是LB集群的一个实现。

LVS的四种模式
1、DR
2、nat
3、ip-tun
4、full-nat

LVS的相关术语
DR:Director Server 指的是前端负载均衡器节点,控制器、调度器
RS:Real Server 后端真实的工作服务器,后台提供服务的主机
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址,控制器上对外开放的ip
DIP:Director Server IP 主要用于和内部主机通讯的IP地址,控制器上连接后端服务器的ip
RIP:Real Server IP 后端服务器的IP地址
CIP:Client IP 访问客户端的IP地址,客户端ip

工作原理
lvs附着于netfilter,有五个内置的钩子函数
PREROUTING—>INPUT(流向内部)
PREROUTING—>FORWARD—>POSTROUTING(转发)
OUTPUT—> POSTROUTING(流向外部)
在这里插入图片描述
1.当用户向负载均衡调度器发起请求,调度器将请求发往至内核空间
2.PREROUTING链首先会受到用户请求,判断目标ip确定是本机ip,将数据包发往INPUT链
3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对。如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,将新的数据包发往POSTROUTING链
4.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

lvs工作于INPUT
PREROUTING—>INPUT(lvs在此强行改变数据流向)—> POSTROUTING

lvs组成(两部分)
1、ipvs(ip virrual server):一段代码,工作在内核,是真正生效实现调度的代码,是工作在内核中的netfilter input钩子函数上
2、ipvsadm:工作在用户空间,负责为ipvs内核框架编写规则,是工作在用户空间的命令行工具,写具体的规则,用于管理集群服务

一、DR模式(Direct Routing)
在这里插入图片描述
它通过修改请求报文的目标mac地址进行转发
1.保证前端路由器将目标IP为VIP的请求报文发送给director(静态绑定 arptables 修改rs主机内核的参数)
2.rs的rip可以使用私有地址,但也可以使用公网地址
3.请求报文经由director调度,但响应的报文一定不能经由director
4.rs跟director必须在同一物理网络中(同一物理网络不等于同网段)
5.RS网关不能指向dip
数据流向:
(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
© IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

配置实验
1、配置
VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址,即实验中配置的172.25.23.100
DIP:Director Server IP 主要用于和内部主机通讯的IP地址,即实验中配置的172.25.23.1,即调度器的内网ip
RIP:Real Server IP 后端服务器的IP地址,后端主机的内网ip,即172.25.23.2和172.25.23.3
CIP:Client IP 访问客户端的IP地址,即用户客户机的ip,此处用真机进行访问,即172.25.23.23

1)基于软件的配置
准备三台虚拟机,server1做调度器,server2,server3做后端服务器

server1					server2					server3
内网ip			172.25.23.1				172.25.23.2				172.25.23.3
vip				172.25.23.100			172.25.23.100			172.25.23.100
配置				调度器						阿帕奇						阿帕奇

配置:

在server1上
1)配置yum源

cd /etc/yum.repos.d/
vim rhel-source.repo 
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.23.250/rhel6.5
	enabled=1
	gpgcheck=0
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

	[LoadBalancer]
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.23.250/rhel6.5/LoadBalancer	
	enabled=1
	gpgcheck=0
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

2)给另两台主机发送配置好的yum源

yum install openssh-clients -y
scp /etc/yum.repos.d/rhel-source.repo root@172.25.23.2:/etc/yum.repos.d/   ##yum源发给另外两台服务器
scp /etc/yum.repos.d/rhel-source.repo root@172.25.23.3:/etc/yum.repos.d/	

3)配置ipvsadm

yum install ipvsadm -y		##安装ipvsadm
	ipvsadm -l					##查看编写规则
	lsmod
	lsmod|grep ip_vs
	ip addr add 172.25.23.100/24 dev eth0			##给网卡添加内网地址
	ipvsadm -A -t 172.25.23.100:80 -s rr			##在lvs中为http协议添加一个vip为100的server,并设置调度方式为Round Robin,即轮询。添加一个集群服务
	#	-A  ##添加
	#	-E	##修改
	#	-t 	##tcp
	#	-u	##udp
	#	-s	##指定调度算法		
	ipvsadm -a -t 172.25.23.100:80 -r 172.25.23.2:80 -g	##访问100时,转向23.2服务器。给一个集群服务添加一条RS规则
	ipvsadm -a -t 172.25.23.100:80 -r 172.25.23.3:80 -g	##访问100时,转向23.3服务器
	#	-a	##添加
	#	-e	##修改
	#	-d	##删除
	#	-g	##dr模式直接路由gatway
	ipvsadm -l
	#	-c	##列出当前所有的connection
    # 	--stats	##列出统计数据
    #	--rate	##速率数据
	/etc/init.d/ipvsadm save				##保存规则
	ipvsadm -l

在server2(后端服务器)
1)配置阿帕奇i

yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html/
vim index.html
	server2
/etc/init.d/httpd restart

2)网卡添加内网地址

ip addr add 172.25.23.100/32 dev eth0##给网卡添加内网地址

3)arp规则

yum search arptables
yum install arptables_jf.x86_64 -y		##安装arp防火墙软件
arptables -L					##查看
arptables -A IN -d 172.25.23.100 -j DROP	##写arp规则,询问到此主机100时,访问被丢弃
arptables -A OUT -s 172.25.23.100 -j mangle --mangle-ip-s 172.25.23.2	##访问100以23.2返回
arptables -L
/etc/init.d/arptables_jf save			##保存规则

在server3 (后端服务器)

yum install openssh-clients -y
yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html/
vim index.html
	server3
/etc/init.d/httpd restart
ip addr add 172.25.23.100/32 dev eth0		##给网卡添加内网地址
yum install arptables_jf.x86_64 -y
arptables -A IN -d 172.25.23.100 -j DROP
arptables -A OUT -s 172.25.23.100 -j mangle --mangle-ip-s 172.25.23.3
arptables -L
/etc/init.d/arptables_jf save	

测试:真机充当客户机

curl 172.25.23.100	##访问

测试效果,在server1上
ipvsadm -L
可以看到轮询
真机上
arp -an|fgrep 100 ##查看访问到那个主机网卡
2)基于内核的配置
##配置内核参数
##arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作。这两个参数很重要,特别是在LVS的DR场景下,它们的配置直接影响到DR转发是否正常

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应
0: 如果路由向我的一个网络接口发送广播,请求的是本机上的其他接口,就告知它(默认值)
1:只响应目的IP地址为接收网卡上的本地地址的arp请求,如果路由向我的一个网络接口发送广播,请求的是本机上的其他接口,就拒绝它
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址
0: 一旦我接入一个网络,就向这个网络内的所有主机通告自己所有的网络接口信息,不隐藏(默认值)
1:一旦我接入一个网络,就将接入网络这一个接口的信息通告其他主机,本机上的其他接口信息可以通告也可以不通告
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址,一旦我接入一个网络,就将接入网络这一个接口的信息通告其他主机,本机上的其他接口信息绝对不通告出去

在serve1上

ipvsadm -C
ip addr add 172.25.23.100/24 dev eth0
ipvsadm -A -t 172.25.23.100:80 -s rr
ipvsadm -a -t 172.25.23.100:80 -r 172.25.23.2:80 -g
ipvsadm -a -t 172.25.23.100:80 -r 172.25.23.3:80 -g

在server2

sysctl -a |grep arp_ignore			##修改内核参数
sysctl -a |grep arp_announce		##修改内核参数
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.lo.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.lo.arp_announce=2
ip addr add 172.25.23.100/32 dev eth0	

在server3上

sysctl -a |grep arp_ignore
sysctl -a |grep arp_announce
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.lo.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.lo.arp_announce=2
ip addr add 172.25.23.100/32 dev eth0	

2、对服务器进行健康状态检查
server1是调度器,临时服务器,server2和server3是后端服务器

server1(调度器)上
1)修改yum源

vim rhel-source.repo
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.23.250/rhel6.5
	enabled=1
	gpgcheck=0
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

	[LoadBalancer]
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.23.250/rhel6.5/LoadBalancer
	enabled=1
	gpgcheck=0
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

	[HighAvailability]
	name=Red Hat Enterprise Linux $releasever - $basearch - Source
	baseurl=http://172.25.23.250/rhel6.5/HighAvailability	##
	enabled=1
	gpgcheck=0
	gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
yum clean all 
yum repolist

2)安装软件
##此处ldirectord-3.9.5-3.1.x86_64.rpm需要从真机复制过来,如果没有需要下载

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf
	 25 virtual=172.25.23.100:80		##访问地址
	 26         real=172.25.23.2:80 gate	##后端服务器
	 27         real=172.25.23.3:80 gate	##后端服务器
	 28         fallback=127.0.0.1:80 gate	##本机
	 29         service=http
	 30         scheduler=rr
	 31         #persistent=600
	 32         #netmask=255.255.255.255
	 33         protocol=tcp
	 34         checktype=negotiate
	 35         checkport=80
	 36         request="index.html"
	 37         #receive="Test Page"
	 38         #virtualhost=www.x.y.z

ipvsadm -l
ipvsadm -C			##需要刷新一下策略
/etc/init.d/ldirectord restart	##重启
ipvsadm -l			##查看服务器运行状态

3)配置http服务
#给server1安装阿帕器,当后端服务器故障后,server1临时顶替工作

yum install httpd -y
/etc/init.d/httpd start
cd /var/www/html/
vim index.html
	server1
/etc/init.d/httpd restart	

实验效果
当server2服务器stop后,客户机(真机)curl 172.25.23.100,一直是server3服务器在工作,当server2,server3同时stop后,server1顶替工作,
用到命令:

server2上
/etc/init.d/httpd stop
/etc/init.d/httpd start
server3上
/etc/init.d/httpd stop
/etc/init.d/httpd star
真机
curl 172.25.23.100	

在server1上
ipvsadm -l
可以看到此时哪台服务器在工作
三 、NAT模式
在这里插入图片描述
多目标的DNAT:通过修改请求报文的目标IP地址(同时可能会修改目标端口),至挑选出某RS的RIP地址实现转发
1.RS和DIP应该使用私网地址,且RS的网关要指向DIP
2.请求和响应报文都要经由director转发,极高负载的场景中,director可能会成为系统瓶颈
3.RS可以使用任意OS
4.RS的RIP和Director的DIP必须要在同一IP网络:RS的网关要指向DIP
数据流向:
(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
©. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值