1、什么是LVS?
linux virtual service,linux虚拟服务,使用多台服务器一起工作来提高服务的访问和处理性能
通过LVS提供的负载均衡技术和linux系统实现一个高性能、高可用的服务器集群,它具有良好的可靠性、可扩展性和可操作性,成本低廉的特性
负载均衡:软件实现、硬件实现
负载均衡设备:
2、lvs的工作模式
(1)nat模式 :通过网络 地址转换访问服务(最多同时支持20台服务器)
(2)tun模式:通过IP隧道访问服务
(3)dr模式:(direct )直接调度访问服务, 直接路由,
即调度服务器与真实服务器都有一块网卡连在同一个物理网段上。
LVS 是 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:
- 负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP【通常把这个IP 称为虚拟IP/VIP】
- 服务器池(server pool):一组真正执行client 请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS
- 共享存储(shared stored):它为 server pool 提供了一个共享的存储区,很容易让服务器池拥有相同的内容,提供相同的服务[不是很理解]
4、LVS的NAT 模式:
图中eth0 和 eth1 不要桥接,用交换机sw1连接
图中eth0 和 eth1 不要桥接,用交换机sw2连接
server1/2 是后端服务器/真实服务器 用来提供服务
Director Server:调度服务器
RIP:实际是指真实服务器的IP地址
DIP:调度服务器地址,与外面连接的地址是调度地址:172.16.10.10
VIP:虚拟IP
CIP:客户端IP地址
进入防火墙之后 进行地址转换
iptables命令详解:
1.filter 定义数据包中允许或者不允许的策略
2.nat 定义地址转换的
3.mangle功能:修改报文原数据 即:修改TTL
在做NAT和DNAT的时候,目标地址转换必须在路由之前转换 。所以 我们必须在外网而后内网的接口处进行设置关卡 。
这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
iptables定义规则的方式:
格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION
-t table :3个filter nat mangle
COMMAND:定义如何对规则进行管理
chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的
CRETIRIA:指定匹配标准
-j ACTION :指定如何进行处理
比如:不允许172.16.0.0/24的进行访问。
iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
当然你如果想拒绝的更彻底:
iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT
iptables -L -n -v #查看定义规则的详细信息
Director Method:(调度方法)
RR:轮循调度
WRR:加权轮循调度。根据硬件配置的好坏来设置权值
LC:最小连接数调度。连接数量最少,就将用户的访问分配到那台服务器,让其为用户提高服务。
WLC:加权最小连接调度
LBLC:基于地址的最小连接数调度。若后端服务器负荷已满,则就会将用户请求分配给另一台连接数最小的那台服务器
DH:目标地址散列算法,以目标地址为关键字来查找一个静态hash表来选择RS
SH:源地址散列算法,以源地址为关键字来查找一个静态的hash表来选择RS
用到 LVS服务最多的前三种 : WEB服务,数据库, 邮件。
LVS的NAT模式配置
(1) 防火墙服务器配置:
两个网卡 eth0:10.0.2.201 netmask:255.255.0.0
eth1:192.168.10.5 netmask:255.255.0.0
添加网卡要poweroff再添加
启用路由转发(net.ipve.ip_forward=1 )
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
配置 NAT(目的地址转换)
# iptables -t nat -A PREROUTING -d 10.0.2.201 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.6
# iptables -F
# service iptables save
(2) Director服务器配置:(调度服务器)
两块网卡 eth0: 192.168.10.6 netmask:255.255.0.0
eth1:172.16.10.3 netmask:255.255.0.0
eth1的配置文件:
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /eth1 然后将DEVICE=eth1注释掉UUID 修改MAC地址
配置网关 eth0的gateway:192.168.10.5 eth1不用配置网关
配置调度表
# yum install ipvsadm
如果无法install,就进入挂载点下的Packages下 # ls |grep ipvsadm
# ipvsadm -A -t 192.168.10.6:80 -s rr # -A 添加调度服务器 添加调度地址
# ipvsadm -a -t 192.168.10.6:80 -r 172.16.10.1:80 -m # 真实服务器 -a 添加 -m 指net模式
# ipvsadm -a -t 192.168.10.6:80 -r 172.16.10.2:80 -m # 真实服务器
# service ipvsadm save #
# service ipvsadm start
# ipvsadm -L -n # -L -n 查看调度表 Masq 表示NAT模式 Activeconn 活动的连接数量
# ipvsadm -L -n --stats # Conns连接数量 INPkts 进来的数据包 OUTPkts出去的数据包
# watch -n 1 ipvsadm -L -n --stats # watch 每隔一秒钟显示一次。动态观察
调度服务器由于进行了配置,
就会将收到的数据包的目标IP地址转换为真实服务器的IP地址。(server1 ,server2,server3...)
(3 ) 真实服务器/后端服务器 (RS - real server)
配置IP地址 server1:172.16.10.1 netmask : 255.255.0.0
server2:172.16.10.2 netmask : 255.255.0.0
这两台RS服务器都要进行下列配置
配置网关 gateway:172.16.10.3 (调度服务器eth1的IP)
目前配两台真实服务器,为client 提供web服务:
#yum install http*
# vim /etc/httpd/conf/httpd.conf
-->将#去掉。可以自己定义如:www.zll.com 也可以不修改只把#去掉就可以了。
# cd /var/www/html
# vim index.html ---> hello!ZLL
启动相应服务 service httpd start
清空防火墙 iptables -F
测试:# curl 172.16.10.1
(4) 客户端:
IP地址:10.0.2.200 (防火墙的eth0 ip必须要和客户端IP在同一个网段)
测试: # curl 10.0.2.201 (防火墙eth0的ip )
或:在浏览器输入:10.0.2.201
若看到在RS服务器配置的index.html的内容,则成功
(5 ) lvs的持久性连接
1、socket:
2、cookie:保存用户的相关信息.cookie数据保存在客户端。
cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session
3、session:保存用户提交的表单,选择之类的。session数据保存在服务器端
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面 应当使用COOKIE
(1)PCC(persistent client connecttions)方式:将来自于同一个客户端对所有端口的请求,
始终定向到上次选择的RS,缺点是不能实现不同的服务请求访问不同的RS。
# ipvsadm -A -t 10.0.5.150:0 -s rr -p 600
# ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.151 -m
# ipvsadm -a -t 10.0.5.150:0 -r 10.0.5.152 -m
(2)PPC(persistent port connecttions)方式:将来自于同一个客户端对同一个集群服务的请求
,始终定向到上次选定的RS
# ipvsadm -A -t 10.0.5.150:80 -s rr -p 600
# ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.151:80 -m
# ipvsadm -a -t 10.0.5.150:80 -r 10.0.5.152:80 -m
(3)PNMPP(persistent Netfilter Marked Packet Persistence):持久防火墙标记连接,
根据iptables的标记规则,将相关的服务标记为同一类别的请求
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 80
-j MARK --set-mark 10 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 443
-j MARK --set-mark 10 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 21
-j MARK --set-mark 20 (0-->99)
# iptables -t mangle -A PREROUTING -d 10.0.5.150 -p tcp --dport 20
-j MARK --set-mark 20 (0-->99)
# ipvsadm -A -f 10 -s wrr -p 600 10标记的 使用wrr算法 600秒
# ipvsadm -A -f 20 -s wrr -p 600
# ipvsadm -a -f 10 -r 10.0.5.151 -m -w 2 -m表示nat模式 -w 权重为2
# ipvsadm -a -f 10 -r 10.0.5.152 -m -w 3
# ipvsadm -a -f 20 -r 10.0.5.153 -m -w 2
# ipvsadm -a -f 20 -r 10.0.5.154 -m -w 3