LVS的NAT模型实战应用
目录:
一、具体来实现LVS
二、实现图
三、作业
一、具体来实现LVS
第一种NAT模型:NAT模型要想实现,去搭建一个网络拓扑。NAT模型通常认为LVS服务器两个网卡,一个连接外网,一个连接内网。
这边有一个客户端,他请求到VIP,LVS服务器有两个地址一个是VIP另一个是DIP,后端有两个Virtual Server,拓扑结构大体来看需要四个机器,对于LVS服务器来说,配置IP规则时主要是有两条命令,一个是A(定义集群服务,功能是定义到底是基于哪个协议来实现LVS,后面要写上服务器的地址)
ipvsadm命令
管理集群服务:增、改、删
增、改:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]删除:
ipvsadm -D -t|u|f service-address
service-address:
-t|u|f:
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc
后端是web服务做VIP的tcp80端口,当你访问时会转到后端的web服务器所以要写上t代表TCP协议
定义完之后,VIP用什么端口号?调度算法是什么?缺后端的virtual service?
所以需要配合另外一个命令——ipvsadm,-a要增加上面的集群服务-t是TCP,-u是UDP后面要跟上服务器的地址(ip地址加端口号),在这个集群服务中告诉当前的集群服务谁是server,r就是server后面跟上它的地址。如果有两个server,这条命令要敲两遍。
ipvsadm工作模式有四种,要用哪种模式要通过[-g|i|m]来区分:
管理集群上的RS:增、改、删
增、改:ipvsadm -ale -t|u|f service-address -r server-address [-g|i|m][-w weight]
删:ipvsadm -d -t uf service-address -r server-address
server-address:
rip[:port]如省略port,不作端口映射
选项:
lvs类型:
-g:gateway,dr类型,默认
-i:ipip,tun类型
m: masquerade, nat类型
-w weight:权重
二、实现图:
1.这有两台机器,一个6.9拖过去当做客户端,另外三台机器分别充当service、LVS服务器以及web服务器。
把LVS地址改为192.168.30.200
网卡自动获取改为手工指定:
DEVICE=eth1
BOOTROTO=none
IPADDR=172.20.0.200
PREFIX=16
2.然后重新启动服务systemctl restart network
3.返回Centos7.4看地址,生效了。这个服务器要启用ip_forward:echo net.ipv4.ip_forward=1>> /etc/sysctl.conf
生效:sysctl -p
sysctl-a |grep ip_f
关闭防火墙:iptables -vnL
getenforce
4.接下来搭客户端
左边的机器当客户端桥接网卡,改地址:IPADDR=172.20.0.123
PREFIX=16
service network restart
service network restart
ip a
ping172.20.0.200(curl不行,没网站)
把后面两台主机(17,27)装两个服务
17:
\>
route -n
vieo
添加GETAWAY=192.168.30.200
systemctl restart network
yum install httpd -y
y
改主机名:hostnamectl set-hostname RS1
echo RS1 > /var/www/html/index.html
重新启动:systemctl start httpd
正常情况下两个网站的内容一模一样,为了看到效果必须把网页改成不一样
27:
vieo
添加GETAWAY=192.168.30.200
systemctl restart network
yum install httpd -y
y
改主机名:hostnamectl set-hostname RS2
echo RS2 > /var/www/html/index.html
重新启动:systemctl start httpd
ss -ntl
5.在LVS服务器中直接去访问后端的两个搭好的web服务器,能看到它们的页面
curl 192.168.30.17
curl 192.168.30.27
缺调度,直接从后端访问是不行的
6.定义ipvs规则
在上面装ipvs包
在192.168.30.200中写
yum install ipvsadm
ipvsadm -A -t 172.20.0.200:80 -s rr
ipvsadm -nL
ipvsadm -Ln
iptables - vnL
ipvsadm -Ln
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17 -m要和前面对应
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.27 -m集群服务可以调动的目标组机
ipvsadm -Ln看成功没
7.测试,在172.20.0.123中写
curl 172.20.0.200
curl 172.20.0.200
curl 172.20.0.200允许
在后端192.168.30.17上它看到的日志是谁,也CIP发出的请求
tail -f /var/log/httpd/access_log
8.在172.20.0.123中
ping 172.20.0.200不起作用,发布的是TCP80,只有访问TCP80才转发
9.实现了NAT模式
如果中间加个路由器,相当于内部有两个网络
10.在centos6.9中加路由器
自定义一个网卡(VMnet6)centos7.4也一样
地址改为192.168.0.200
加网关GATEWAY=192.168.0.201
vieo
systemctl restart network
ip a
route
中间这个路由器应该有两个网卡
11.加路由,加默认网关
route -add default gw 192.168.0.200
vim /etc/sysctl conf把数字0变为1
sysctl -p生效数字
getenforce Enforcing
iptables -vnL
setenforce 0
vi /etc/sysconfig/selinux
把SELINUX=enforcing改为disabled
12.在centos7.4中调度算法
ip a
tcpdum -i eth0 -nn看内网
curl 172.20.0.200
curl 172.20.0.200
curl 172.20.0.200成功
13.改端口,在192.168.30.17
vi /etc/httpd/conf/httpd.conf
改成8080
systemctl restart httpd
14.改服务器调度的地址
ipvsadm -e -t 172.20.0.200:80 -r 192.168.30.17:8080 -m直接改不行,要先删除
ipvsadm -d -t 172.20.0.200:80 -r 192.168.30.17:80
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17:8080 -m
15.加权重,改调度算法
ipvsadm -E -t 172.20.0.200:80 -s wrr
ipvsadm -d -t 172.20.0.200:80 -r 192.168.30.17:8080删除
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17:8080 -m -w 3重加权重,没定义默认是一,来测试一下,当访问时是3:1
16.原地址哈希:
源地址哈希算法:只要客户端是同一个ip地址,永远访问的是同一个servers.只要是同一个ip客户端永远往一个固定的server来调度。现在往一个方向调度,就要换成sh算法,
ipvsadm -E -t 172.20.0.200.80 -s sh
ipvsadm -Ln
17.目标地址哈希:
将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如宽带运营商
只要访问的目标地址是固定的,永远往固定上去调度,要想实现功能,先模拟,创建十个页面,从test1到test10
cd /var/www/html
ls
for i in {1..10};do echo test$i on RS1 >test$i.html ;done
ls生成十个文件
cat test1.html
在另一台主机上同上,把RS1改为RS2
去访问这些主机,把命令sh改为dh
ipvsadm -E -t 172.20.0.200.80 -s dh
调度时:curl 172.20.0.200/test1.html是RS1,全是RS1
不同的目标地址调度到不同的主机上
先把权重比例删除,不要权重,比例为1:1再调度还是RS1,有可能是记住了
重启ipvsadm .service
systemctl restart ipvsadm .service
ipvsadm -Ln
再重启reboot,让它丢了再缓存,重启后所有的规则全丢了
重启完毕后,通了重加
ipvsadm -Ln
ipvsadm -A -t 172.20.0.200:80 - s dh
ipvsadm -a -t 172.20.0.200:80 - r 192.168.30.17:8080 -m
ipvsadm -a -t 172.20.0.200:80 - r 192.168.30.27:80 -m
ipvsadm -Ln
再调度
curl 172.20.0.200/test1.html一旦调度到1上永远是1
三、作业:
实验:实现NAT模式的LVS
主要是需要在LVS上加路由器,指向web,中间的路由器指向172.20.0.123
步骤:
1.LVS上
ip_forward=1
route add default gw 192.168.0.201
ipvsadm -A -t 172.20.0.200:80 -s wrr
ipvsadm -a -t 172.20.0.200:80 -r 192.168.17:8080 -m
ipvsadm -a -t 172.20.0.200:80 -r 192.168.27:80 -m
2.router上
ip_forward=1
route add de gw 192.168.0.200