lvs配置使用
lvs工作原理:
待补充
三种模式:
NAT、DR、TUN、FULLNAT
nat:
访问流程CIP>>VIP>>DIP>>RIP
入站要进行DNAT,出站SNAT,入站出战都要经过LVS,可以修改端口
LVS内专用术语:
CIP:client ip
VIP:virtual ip
DIP:drector ip
RIP:real server ip
dr:默认模式,应用比较广泛
通过更改数据包的MAC地址实现数据包的转发,只接收入站请求,不能改端口,LAN内使用
所有节点要与LVS处于同一个局域网
tun:不改变数据包内容,只封装一个IP头,只接收入站请求,出战不走LVS,LAN/WAN下使用,不能改端口
ipvsadm管理工具
LVS调度算法
固定调度算法:rr,wrr,dh,sh
rr:轮询(round robin)
wrr:加权轮询(weight round robin)
dh:目标地址散列调度算法 (destination hash)
sh:源地址散列调度算法(source hash)
动态调度算法:wlc,lc,lblc,lblcr
lc:最少连接数(least-connection)
wlc:加权最少连接数(weight least-connection)
环境准备
主机 | DIP/CIP | VIP |
---|---|---|
m01 | 10.0.0.61 | |
lb01 | 10.0.0.5 | 10.0.0.31 |
lb02 | 10.0.0.6 | 10.0.0.31 |
web01 | 10.0.0.7 | |
web02 | 10.0.0.8 |
安装LVS
- 1、为lb主机安装ipvsadm,ipvs的管理工具
yum install -y ipvsadm
命令参数:
-A, --add-service: 为ipvs虚拟服务器添加一个虚拟服务,即添加一个需要被负载均衡的虚拟地址。虚拟地址需要是ip地址,端口号,协议的形式。
-E, --edit-service: 修改一个虚拟服务。
-D, --delete-service: 删除一个虚拟服务。
-C, --clear: 清除所有虚拟服务。
-R, --restore: 从标准输入获取ipvsadm命令。一般结合下边的-S使用。
-S, --save: 从标准输出输出虚拟服务器的规则。可以将虚拟服务器的规则保存,在以后通过-R直接读入,以实现自动化配置。
-a, --add-server: 为虚拟服务添加一个real server(RS)
-e, --edit-server: 修改RS
-d, --delete-server: 删除
-L, -l, --list: 列出虚拟服务表中的所有虚拟服务。可以指定地址。添加-c显示连接表。
-Z, --zero: 将所有数据相关的记录清零。这些记录一般用于调度策略。
--set tcp tcpfin udp:修改协议的超时时间。
--start-daemon state:设置虚拟服务器的备服务器,用来实现主备服务器冗余。(注:该功能只支持ipv4)
--stop-daemon: 停止备服务器。 - 2、配置虚拟ip-VIP
ip addr add 10.0.0.31/24 dev eth0 label eth0:0
ip addr add 10.0.0.32/24 dev eth0 label eth0:0
- 3、手工配置LVS
ipvsadm -C #清空所有规则
ipvsadm -A -t 10.0.0.31:80 -s rr
-A 添加一个虚拟服务
-t 指定虚拟ip
-s 指定使用算法
[root@lb01 ~]# ipvsadm -A -t 10.0.0.31:80 -s rr
[root@lb01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.31:80 rr
添加真实服务器(-g参数设置LVS工作模式为DR模式,-w设置权重)
ipvsadm -a -t 10.0.0.31:80 -r 10.0.0.7 -g -w 1
ipvsadm -a -t 10.0.0.31:80 -r 10.0.0.8 -g -w 2
[root@lb01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.0.0.31:80 rr
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 2 0 0
- 4.RS绑定VIP
web01:
ip addr add 10.0.0.31/32 dev lo label lo:0
route add -host 10.0.0.31 dev lo
注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播
地址与IP地址也一样
这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;
sysctl.conf文件写入这下面四行的主要目的就是访问10.0.0.31的数据包,只有调度器会响应,其他主机都不做任何响应,这样防止地址冲突的问题。
[root@web01 ~]# vim /etc/sysctl.conf
#手动写入如下4行内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
做好arp抑制
sysctl -p #使/etc/sysctl.conf立即生效,或者直接重启服务器
最后测试访问