赞
踩
lvs-nat概念:修改请求报文的目标IP,多目标IP的DNAT,本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
最终实现效果:
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向192.168.0.100
4.后端web服务器不需要连接外网
工作前提准备:
流程原理图:
IP:172.25.254.200/24
gateway:172.25.254.100
[root@lvs1 ~]# vmset.sh eth0 172.25.254.100 lvs1
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@lvs1 ~]# vmset.sh eth1 192.168.0.100 lvs
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs1 ~]# nmcli connection reload
[root@lvs1 ~]# nmcli connection up eth1
lvs中打开内核路由
[root@lvs1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@lvs1 ~]# sysctl -p
安装lvs软件
[root@lvs1 ~]# dnf install ipvsadm -y
编写策略
[root@lvs1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
# 查看
[root@lvs1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload
[root@webserver ~]# nmcli connection up eth0
修改网关
安装web服务:
[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd
[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver2
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload
[root@webserver2 ~]# nmcli connection up eth0
修改网关
安装web服务:
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd
在客户机上测试
DR模式:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行
转发
源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
源IP/PORT,以及目标IP/PORT均保持不变
流程原理图:
IP:172.25.254.200/24
gateway:172.25.254.100
sh脚本:
#!/bin/bash rm -fr /etc/NetworkManager/system-connections/$1.nmconnection cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF [connection] id=$1 type=ethernet interface-name=$1 [ipv4] address1=$2/24,172.25.254.2 method=manual dns=114.114.114.114; EOF chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection nmcli connection reload nmcli connection up $1 hostnamectl hostname $3 cat > /etc/hosts <<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 $2 $3 EOF
[root@route ~]# vmset.sh eth0 172.25.254.100 route
[root@route ~]# vmset.sh eth1 192.168.0.100 route
[root@route ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@route ~]# nmcli connection reload
[root@route ~]# nmcli connection up eth1
因脚本问题,修改eth1的网卡配置
打开内核路由功能
[root@route ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@route ~]# sysctl -p
[root@lvs1 ~]# vmset.sh eth1 192.168.0.50 lvs
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs1 ~]# nmcli connection reload
[root@lvs1 ~]# nmcli connection up eth1
添加vip,采用环回,注意环回的掩码需要使用32位
[root@lvs1 ~]# ip a a 192.168.0.200/32 dev lo
安装lvs软件
[root@lvs1 ~]# dnf install ipvsadm -y
编写策略
[root@lvs1 ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -m
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -m
[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload
[root@webserver ~]# nmcli connection up eth0
修改网关
安装web服务:
[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd
修改rip,使RS主机VIP不对外响应
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
添加vip,采用环回,注意环回的掩码需要使用32位
[root@webserver ~]# ip a a 192.168.0.200/32 dev lo
安装web服务:
[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd
[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver2
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload
[root@webserver2 ~]# nmcli connection up eth0
修改网关
修改rip,使RS主机VIP不对外响应
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
添加vip,采用环回,注意环回的掩码需要使用32位
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo
安装web服务:
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver2 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd
在客户机上进行测试
[root@client ~]# for i in {1..10} > do > curl 192.168.0.200 > done werbserver2 192.168.0.20 webserver 192.268.0.10 werbserver2 192.168.0.20 werbserver2 192.168.0.20 webserver 192.268.0.10 werbserver2 192.168.0.20 werbserver2 192.168.0.20 webserver 192.268.0.10 werbserver2 192.168.0.20 werbserver2 192.168.0.20 [root@client ~]#
轮询中可能遇到的问题:
以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出
现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
MARK target (可用于给特定的报文打标记,) --set-mark value
打标记语法: iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
基于标记定义服务的语法: ipvsadm -A -f NUMBER [options]
[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.100 -p tcp -m multiport --dports
80,443 -j MARK --set-mark 66
[root@lvs ~]# ipvsadm -A -f 66 -s rr
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.101 -g
[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.102 -g
测试结果:
[root@node10 ~]# curl -k https://192.168.0.100
webserver1 - 192.168.0.10
[root@node10 ~]# curl -k https://192.168.0.100;curl 192.168.0.100
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
我们使用客户机上网的时候,有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们使用sh算法,但是sh算法比较简单粗暴,可能会导致调度失衡,为了解决这一问题,我们设置持久链接来解决
语法格式:ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]] 默认360秒
# 在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。