LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的。有许多比较著名网站和组织都在使用LVS架设的集群系统,所以学好LVS很重要。
通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS的主要特点有:
LVS有四种模式,根据LVS的高效可分为DR模式、TUN模式、NAT模式和FULLNAT模式。前三种没有坑攻击能力,FULLNAT有抗攻击能力。生产中一般使用的都是NAT模式和DR模式,当然,也并不是说其他模式并不会使用,还是要根据实际的生产场景来决定选择什么样的方案。
个人体会:先别急着动手做四种模式的实验,先把大体原理和它们工作的流程搞清楚,这样做起实验来才知道敲的命令是干什么的,千万不要糊里糊涂的干,这样纯粹是浪费时间。
TCP/IP四层模型和OSI七层模型
TCP/IP模型各个层次的功能和协议
TCP/IP与OSI最大的不同在于OSI是一个理论上的网络通信模型,而TCP/IP则是实际运行的网络协议。
RS1
Client -----> Director ------> ------> Client
RS2
总的来说:IP地址没变 MAC地址改变
过程:
这块要注意的是在网络里,数据包都是先以mac地址(第二层)为目标进行传输的,到达目的地后,一层一层往上解包,进行匹配,第三层匹配ip,第四层匹配端口,等等….只要有一层不匹配,这个包都会被扔掉,或者拒绝
接下来配置:
Director:先修改yum源,baseurl要改镜像挂载点,这都是镜像里的文件,默认不读,要主动写进去
配置VIP
ip addr add 172.25.55.100/24 dev eth1
ip addr #查看是否添加
yum install ipvsadm -y
ipvsadm -ln ##列出ipvsadm策略
ipvsadm -A -t 172.25.55.100:80 -s rr ##添加策略 指定vip 172.25.55.100:80,-t指tcp,-s rr 指定轮询
ipvsadm -a -t 172.25.55.100:80 -r 172.25.55.2:80 -g
##将虚拟ip映射到真实的ip,-r指定realserver -t指定tcp协议 -g指dr模式
ipvsadm -a -t 172.25.55.100:80 -r 172.25.55.3:80 -g
ipvsadm -ln
/etc/init.d/ipvsadm save ##保存,关机再开机后还存在
ip addr add 172.25.55.100/24 dev eth1
ip addr
为防止客户端在访问vip时直接访问到realserver,在realserver设置一定的策略
yum install arptables_jf -y
/etc/init.d/httpd start
arptables -nL
arptables -A IN -d 172.25.55.100 -j DROP ##访问realserver的100ip时的请求直接丢弃
arptables -A OUT -s 172.25.55.100 -j mangle --mangle-ip-s 172.25.55.2 #realserver发出的信息全部转为他的真实ip
arptables -nL
/etc/init.d/arptables_jf save
ip addr add 172.25.70.100/24 dev eth1
ip addr
yum install arptables_jf -y
arptables -nL
arptables -A IN -d 172.25.55.100 -j DROP
arptables -A OUT -s 172.25.55.100 -j mangle --mangle-ip-s 172.25.55.3
arptables -nL
/etc/init.d/arptables_jf save
yum install ldirectord-3.9.5-3.1.x86_64.rpm
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf
/etc/init.d/ipvsadm stop
/etc/init.d/ldirectord start
ipvsadm -ln
vim /etc/httpd/conf/httpd.conf #将httpd端口改为80
/etc/init.d/httpd restart
ipvsadm -ln
cd /var/www/html/
vim index.html
写入:server1--正在维护中
当server2和server3都关闭时 就完蛋了 就维护。。。
client ------> Director ----->封装一层外包----->client
总的来说:调度器收到的IP数据包封装在一个新的IP数据包中,转交给应用服务器,然后实际服务器的返回数据会直接返回给用户。
TUN模式特点:
RIP、VIP、DIP全是公网地址
RS的网关不会也不可能指向DIP
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
不支持端口映射
RS的系统必须支持隧道
配置:
添加VIP
ip addr add 172.25.20.100/24 dev eth0
ip addr
ipvsadm -C
ipvsadm -A -t 172.25.20.100:80 -s rr
#-A:增加 ipvsadm 在内核列表中增加一个新的调度服务,也可以理解为添加一主机
#-t|-u指定IP地址和端口,t表示TCP协议,u表示UDP协议。
ipvsadm -a -t 172.25.20.100:80 -r 172.25.20.2 -i
ipvsadm -a -t 172.25.20.100:80 -r 172.25.20.4 -i
# -a 增加一个IP地址来参与响应请求服务。
#-r 指定参与响应请求的IP地址和端口。
#-g 表示DR模式
#-i 表示TUN模式
#-m 表示NAT模式
#-w 指定权重,供那些加权算法参考,如1、2、3。
#-e 编辑指定的真实服务器。
#-d 删除指定的真实服务器。
ipvsadm -ln 查看
对后端服务器server2进行操作
vim /etc/sysconfig/network-scripts/ifcfg-tunl
modprobe ipip 在加载好ipip模块后就会有默认的tunl0隧道。
DEVICE=tunl0
IPADDR=172.25.20.100
NETMASK=255.255.55.0
ONBOOT=yes
NAME=tunl0
访问的MAC地址是调度器的地址
注意的是:
在client端访问的时候只能访问server2 然后就连接不了
因为没有把net.ipv4.conf.tunl0.rp_filter = 1 改为0
开启了rp_filter参数,并配置为1,则系统会严格校验数据包的反向路径
请求数据包进的网卡和响应数据包出的网卡不是同一个网卡,这时候系统会判断该反向路径不是最佳路径,而直接丢弃该请求数据包
client--->Dirctor(转换IP)--->RS--->Dirctor(转换IP)--->client
总的来说:通过转换ip连接客户端和服务端
首先client 发送请求[package] 给VIP, VIP 收到package后,会根据LVS设置的LB算法选择一个合适的realserver,然后把package的DSTIP修realserver的IPrealserver 收到这个package后判断dst IP 是自己,就处理这个package ,处理完后把这个包发送给LVS ,VIPLVS 收到这个package 后把sorce IP改成VIP的IP,dst IP改成 client IP然后发送给client
配置:
实验环境:
lvs调度器:
server1:172.25.20.1 VIP:172.25.254.111
realserver:
server2:172.25.20.2 开启apache服务
server4:172.25.20.4 开启apache服务
在server1中:
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
modprobe iptable_nat #加载模块
ipvsadm -A -t 172.25.254.111:80 -s rr
ipvsadm -a -t 172.25.254.111:80 -r 172.25.20.2:80 -m
ipvsadm -a -t 172.25.254.111:80 -r 172.25.20.4:80 -m
在server2中
vim /etc/sysconfig/network
GATEWAY=172.25.20.1
FullNAT: 除了DR/NAT/TUNNEL之外IPVS下的新的包转发模式,解决了DR/NAT/TUNNEL中的一些缺点(如不能跨vlan或者跨vlan成本太高,服务搭建较复杂,不易运维等)
原理:
1 client主机(cip)将请求发往前端的负载均衡器(vip),请求报文源地址是CIP,目标地址为VIP。负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
2 RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给client主机(cip)。