一、LVS负载均衡搭建(linux virtual server)(DR模型)
LVS是一个虚拟的服务器集群系统
- 补充知识:
/proc目录下的文件只能echo覆盖,不能vi打开,因为vi相当于office,打开一个文件的同时会创建一个虚拟的文件。
一块物理网卡上可以设置多个虚拟IP地址。
1)上上图中两份协议:
①响应级别:
默认都是0,外面不知道几个网卡啥的,内部大家互相之间都知道,这就叫对外隐藏,对内可见的隐藏VIP方法。
0:代表只要客户端请求任意一块网卡上的IP,就全部响应(你对着网卡1说我要2卡,也会响应)
1:代表客户端问到对应的网卡的IP上才会响应(你问1说要2,不知道)
②通告级别:
0:通上电就把全部卡的全部IP全发出去
1:你问对应的卡的IP才告诉响应
2:因为一张卡上可以有多个IP,假设卡1有两个IP,卡2有一个,卡1有一个公开的IP,一个隐藏IP(这个IP可能是与别的网络通信的,不是你的这个网络),卡2是公开的IP,你问1的时候会告诉1的公开IP,隐藏IP不会说,问卡1说找卡2,无可奉告
2)网卡
上图中lo为本机的虚拟网卡,etho为物理网卡,物理网卡插在主板上,虚拟网卡是在内核中分配的空间接口,ip为localhost也就是127.0.0.1,本机的tomcat上面的页面想测试,打开浏览器输入localhost:8080,数据发到内核中发现是LO的网卡的IP是本机所以直接返回去找tomcat对应端口,根本不走虚拟网卡,而虚拟网卡也不知道。
隐藏VIP的实现:在内核的LO接口中再新增一个VIP,更改两份协议的参数(不告诉别人)。
3) - 搭建
现在的Linux系统的内核中默认自带LVS负载均衡模块,叫IPVS内核模块(所以不需要安装什么模块,只需要安装一个和这个内核模块交互的接口,ipvsadm,用户空间的软件)
以上为搭建步骤 - 实验手册
步骤:
1)在node01中(作为LVS负载均衡服务器)
ifconfig eth0:8 192.168.150.100/24 配置eth0网卡的2子接口虚拟地址为192.168.150.100,/24代表三个255一个0,因为一个255代表8个1,所以3*8的1,为24,设置子网掩码255.255.255.0。
上面是简写,全写为:
ifconfig eth0:8 192.168.150.100 netmask 255.255.255.0
ifconfig etho:8 down为撤销删除
2)在node02中(先改内核,然后配置VIP,因为VIP需要隐藏,防止直接发送了)
cd /proc/sys/net/ipv4/conf/
cd eth0
cat arp_ignore
echo 1 > arp_ignore
cat arp_ignore
echo 2 > arp_announce
cat arp_announce
cd …
cd all
echo 1 > arp_ignore
echo 2 > arp_announce
ifconfig lo:2 192.168.150.100 netmask 255.255.255.255 (这步不能简写!配置IP)
3)在node03中(同上)
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /pro/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:8 192.168.150.100 netmask 255.255.255.255
到目前为止网络层搭建结束
4)在node02和node03中,搭建RIP
安装httpd
yum install httpd -y(是一个静态的webserver,类似tomcat,重启后会失效)
service http start (启动httpd,默认为80端口)
vi /var/www/html/index.html:
from 192.168.150.1x(node02中就是192.168.150.12,自己的IP)保存
windows的浏览器中(写不写:80都一样,默认80端口):
5)在node01中(安装LVS模块调用工具):
ipvsadm工具的使用在上文中有个图进行了详细说明
yum install ipvsadm -y
ipvsadm -A -t 192.168.150.100:90 -s rr
ipvsadm -ln (查看配置了的入口调度,rr代表轮询的)
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w l
ipvsadm -ln 查看一下
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w l
ipvsadm -ln 查看一下
如图已经负载均衡了
验证:
浏览器还是192.168.150.100,不断刷新发现html页面上的文字是两台server不同发出的,每次请求不一定是一台。
看跟lvs是否握手了:
netstat -natp
结论:看不到socket连接
在node02中看是否握手:
netstat -natp
出现socket连接,每次随机端口
在node01中:
ipvsadm -lnc 查看lvs服务器偷窥的连接
图解:
pro:协议
expire:事件
state:FIN_WAIT(四次分手之后随机等待一会),若为SYN_RECV则是发现了发来的数据包、回去的数据包,再次确认的包没收到 (这种情况基本上lvs都记录了,证明lvs没事,网络层出问题了,比如到了现在这样给ifconfig lo:2 down了,就会出现SYN_RECV)
source:浏览器的源地址
virtual:访问的那个规则
destination:负载到哪