lvs(LB集群的一个实现)
如今反向代理的软件有:
lvs(工作在四层)
haproxy
nginx(工作在七层)
varnish
当今主流的应用是:lvs和nginx,主要是因为varnish有局限性,varnish是工作在内存的 ,所以到是反向代理的数量是有瓶颈的。haproxy用的比较少。
lvs附着与netfilter
五个内置的钩子函数
PREROUTING----->INPUT(流向内部)
PREROUTING----->FORWARD------>POSTROUTING(转发)
OUTPUT-------->POSTROUTING(流向外部)
lvs工作与INPUT
PREROUTING------>INPUT(lvs在此强行改变数据的流向)------>POSTROUTING
lv是由两部分组成的
ipvs(ip virtual server):一段代码(工作在内核)是真正生效实现调度的代码 ipvsadm(工作在用户空间,负责为ipvs内核框架编写规则)
反向代理的DR模式:
操作步骤:
在server1上:
1.配置yum源:
在配置iso6.5 yum源的基础上加上LoadBalancer yum源:
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source] name=Red Hat Enterprise Linux $releasever - $basearch - Source baseurl=http://172.25.6.250/iso6.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.6.250/iso6.5/LoadBalancer enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
将yum源的配置发往另外两台主机:
scp rhel-source.repo root@172.25.6.3:/etc/yum.repos.d/rhel-source.repo
scp rhel-source.repo root@172.25.6.2:/etc/yum.repos.d/rhel-source.repo
2.安装ipvsadm软件:
yum install ipvsadm -y
安装过程的截图:
3.给网卡上加上另外一条ip此ip负责接收请求
ip addr add 172.25.6.100/24 dev eth0
此时可以看到eth0网卡上已经加上了此ip。
4.配置ipvs的规则:
ipvsadm -A -t 172.25.6.100:80 -s rr ###意思就是访问172.25.6.100:80端口的信息做轮询处理
ipvsadm -a -t 172.25.6.100:80 -r 172.25.6.2:80 -g
ipvsadm -a -t 172.25.6.100:80 -r 172.25.6.3:80 -g ###这两句的意思是将访问172.25.6.100的信息轮询到172.25.6.2 和172.25.6.3:80端口上
5.查看ipvsadm的规则:
ipvsadm -l
在server2上配置如下:
1.配置yum源:这个步骤和之前配置server1上的yum源是一样的
2.配置网卡上的ip地址:
ip adder add 172.25.6.100/32 dev eth0
ip addr show
上面显示已经加上了。
3.下载arptables
yum install arptables -y
arptables -A IN -d 172.25.6.100 -j DROP ###不回应二层的arp请求
arptables -A OUT -s 172.25.6.100 -j mangle --mangle-ip-s 172.25.6.2 ##将接受172.25.6.100的请求的数据用172.25.6.2回应
4.下载httpd用来测试:
yum install httpd -y
[root@server2 html]# vim /var/www/html/index.html
文件内容:server2
在server3上的配置和server2上的配置是只是最后在server3的index.html里面写的内容不一样,其他一样的
测试:在真机上
curl 172.25.6.100
每次curl到不同的机器表示实验结果是正确的
在server1上查看轮询的结果:
ipvsadm -l
可以看到在这七次的curl中4次命中了server23次命中了server3