开发者学堂课程【LVS负载均衡实战:LVS的NAT模型实战应用】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/553/detail/7634
LVS的NAT模型实战应用
一、实现图:
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