LVS多模式集群攻略!

NAT模式下的lvs集群

lvs-nat概念:修改请求报文的目标IP,多目标IP的DNAT,本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发

最终实现效果:
1.Director 服务器采用双网卡,一个是桥接网卡连接外网,一个是仅主机网卡与后端Web服务器相连
2.Web服务器采用仅主机网卡与director相连
3.Web服务器网关指向192.168.0.100
4.后端web服务器不需要连接外网

准备工作

工作前提准备:

  1. VMware的网卡设置:一个网卡设置仅主机模式,网段为192.168.0.0/24 另一个网卡设置仅主机模式,网段为172.25.254.0/24
  2. 准备四台环境干净的虚拟机
  3. 防火墙及其selinux都处于关闭状态

流程原理图:
在这里插入图片描述

具体步骤

客户机

		  IP:172.25.254.200/24
		  gateway:172.25.254.100

lvs

[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  

服务器1

[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

服务器2

[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模式下的lvs集群

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

在这里插入图片描述

LVS

[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 

服务器1

[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

服务器2

[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

LVS持久链接

我们使用客户机上网的时候,有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们使用sh算法,但是sh算法比较简单粗暴,可能会导致调度失衡,为了解决这一问题,我们设置持久链接来解决

解决方案

  • 在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上
  • 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到同一台RS上。
  • 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上

语法格式:ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]] 默认360秒

# 在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值