LVS集群---二

1.LVS工作模式和相关命令

1.1LVS集群工作模式

    • lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
    • lvs-dr:操纵封装新的MAC地址(直接路由)
    • lvs-tun:隧道模式

1.1.1 LVS的NAT模式

lvs-nat:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和

PORT实现转发

(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP

(2)请求报文和响应报文都必须经由lvs服务器转发,lvs服务器易于成为系统瓶颈

(3)支持端口映射,可修改请求报文的目标PORT

(4)VS必须是Linux系统,RS可以是任意OS系统

1.1.2 IP隧道

  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是

说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址。

  1. RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的

报文源IP。

  1. DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而

RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP

  1. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成

  2. 不支持端口映射

  3. RS的OS须支持隧道功能

一般来说,隧道模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近

折返给客户端。在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结

果取回,最后将结果返回给用户。

1.1.3直接路由

直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN

模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道

直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部

进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源

IP/PORT,以及目标IP/PORT均保持不变

DR模式的特点:

  1. Director和各RS都配置有VIP

  2. 确保前端路由器将目标IP为VIP的请求报文发往Director

    • 在前端网关做静态绑定VIP和Director的MAC地址
    • 在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP

arptables -A OUT -s VIP -j mangle --mangle-ip-s RIP

在RS上修改内核参数以限制arp通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

  1. RS和Director要在同一个物理网络

  2. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

  3. 不支持端口映射(端口不能修改)

  4. 无需开启 ip_forward

  5. RS可使用大多数OS系统

1.1.4 LVS工作模式总结和比较

地方 NAT TUN DR
优点 端口转换 WAN 性能最好
缺点 性能瓶颈 服务器支持隧道模式 不支持跨网段
真实服务器要求 any Tunneling Non-arp device
支持网络 private(私网) LAN/WAN(私网/公网) LAN(私网)
真实服务器数量 low (10~20) High (100) High (100)
真实服务器网关 lvs内网地址 Own router(网工定义) Own router(网工定义)

2.ipvsadm工具

2.1ipvsadm工具选项说明

-A: 添加虚拟服务器

-D: 删除整个虚拟服务器

-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)

-a: 添加真实服务器(节点服务器)

-d: 删除某一个节点

-t: 指定VIP地址及TCP端口

-r: 指定RIP地址及TCP端口

-m: 表示使用NAT群集模式

-g: 表示使用DR模式

-i: 表示使用TUN模式

一w: 设置权重(权重为0时表示暂停节点)

-p 60: 表示保持长连接60秒

-l: 列表查看 LVS虚拟服务器(默认为查看所有)

-n: 以数字形式显示地址、端口等信息,常与"-l"选项组合使用。ipvsadm -ln
#管理集群服务

ipvsadm -A|E -t|u|f service-address -s scheduler -p \[timeout] -M netmask --pe persistence_engine -b sched-flags

ipvsadm -D -t|u|f service-address #删除

ipvsadm --C #清空

ipvsadm --R #重载,相当于ipvsadm-restore

ipvsadm -S -n #保存,相当于ipvsadm-save
#管理集群中的RS

ipvsadm -a|e -t|u|f service-address -r server-address -g\|i\|m -w weight

ipvsadm -d -t|u|f service-address -r server-address

ipvsadm -L|l options

ipvsadm -Z -t\|u\|f service-address
选项:

lvs类型:

-g: gateway, dr类型,默认

-i: ipip, tun类型

-m: masquerade, nat类型

-w weight:权重

例子:

ipvsadm -A -t 12.0.0.1:80 -s rr

ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m

yum install ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.LVS DR模式部署

3.1原理解释

客户机发起请求,经过调度服务器(lvs),经过算法调度,去访问真实服务器(RS)

由于不原路返回,客户机不知道,真实主机的ip地址,

所以只能通过调度服务器的外网ip(vip)去反回报文信息。

第一次访问完整(不考虑实际问题)

客户端---->外网地址12.0.0.100 12.0.0.100---->客户端

#12.0.0.18-----客户端 客户端会直接丢弃

对每台真实服务器配置外网地址 12.0.0.100

12.0.0.100------>客户端

问题1

IP 地址冲突的

路由器发送ARP请求(广播)

ARP---->广播去找ip地址解析成mac地址

默认使用调度服务器上的外网地址(vip地址)响应,

在真实服务器上修改内核参数

使真实服务器只对自己服务器上的真实IP地址响应ARP解析。

第二次再有访问请求

问题2

路由器上绑定了 真实服务器1的mac信息,

#请求到达真实服务器

在真实服务器上修改内核参数

只对所有服务器真实网卡上的地址进行反馈,解析

3.2实际操作

#环境简介

DR 服务器:192.168.91.100

web 服务器1:192.168.91.101

web 服务器2:192.168.91.103

vip(虚拟回环):192.168.91.188

客户端:192.168.91.200

3.2.1配置负载调度器

systemctl stop firewalld.service

setenforce 0

root@localhost \~#systemctl stop firewalld.service

root@localhost \~#setenforce 0

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

root@localhost \~#yum install ipvsadm.x86_64 -y
#安装服务

#配置虚拟IP地址(VIP:192.168.91.188)

root@localhost network-scripts#cp ifcfg-ens33 ifcfg-ens33:0
#配置虚拟网卡,若为隧道模式ifcfg-tunl0

root@localhost network-scripts#vim ifcfg-ens33:0
#删除dns与网关,注意子网

NAME=ens33:0

DEVICE=ens33:0

IPADDR=192.168.91.188

NETMASK=255.255.255.255

root@localhost network-scripts#systemctl restart network

root@localhost network-scripts#ifup ifcfg-ens33:0
#启动网卡

root@localhost network-scripts#ifconfig ifcfg-ens33:0

#调整/proc响应参数

root@localhost network-scripts# vi /etc/sysctl.conf

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

root@localhost network-scripts#sysctl -p
#刷新配置
#调整/proc响应参数 对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

#配置负载分配策略

root@localhost \~#modprobe ip_vs

root@localhost \~#cat /proc/net/ip_vs
#加载模块

root@localhost network-scripts#ipvsadm-save >/etc/sysconfig/ipvsadm

root@localhost network-scripts#systemctl start ipvsadm.service

root@localhost network-scripts#ipvsadm -C

root@localhost \~#ipvsadm -A -t 192.168.91.188:80 -s rr

root@localhost \~#ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.101:80 -g

root@localhost \~#ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.103:80 -g
#添加真实服务器-a 指定VIP地址及TCP端口-t 指定RIP地址及TCP端口 -r 指定DR模式-g

root@localhost network-scripts#ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP localhost.localdomain:http rr

-> 192.168.91.101:http Route 1 0 0

-> 192.168.91.103:http Route 1 0 0

root@localhost network-scripts#ipvsadm-save >/etc/sysconfig/ipvsadm
#保存设置

3.2.2节点服务器

节点1

root@localhost \~#systemctl stop firewalld.service

root@localhost \~#setenforce 0

root@localhost \~#yum install httpd -y

root@localhost \~#systemctl start httpd

root@localhost \~#cd /etc/sysconfig/network-scripts/

root@localhost network-scripts#cp ifcfg-lo ifcfg-lo:0

root@localhost \~#ifconfig lo:0 192.168.91.188 32

root@localhost \~#ifconfig lo:0 192.168.91.188 255.255.255.255

root@localhost network-scripts#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码

DEVICE=lo:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0

root@localhost network-scripts#route add -host 192.168.91.188 dev lo:0
#设置路由

root@localhost network-scripts#route -n
#开机执行命令,或者写入 /etc/profile 文件

root@localhost network-scripts#vim /etc/rc.d/rc.local

/usr/sbin/route add -host 192.168.91.188 dev lo:0

root@localhost network-scripts#chmod +x /etc/rc.d/rc.local

root@localhost network-scripts#ll /etc/rc.d/rc.local

-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local

root@localhost network-scripts#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

root@localhost network-scripts#sysctl -p

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

节点2

root@localhost \~#systemctl stop firewalld.service

root@localhost \~#setenforce 0

root@localhost \~#yum install httpd -y

root@localhost \~#systemctl start httpd

root@localhost \~#cd /etc/sysconfig/network-scripts/

root@localhost network-scripts#cp ifcfg-lo ifcfg-lo:0

root@localhost network-scripts#vim ifcfg-lo:0

#修改回环网卡名,IP地址,子网掩码

DEVICE=lo:0

IPADDR=192.168.91.188

NETMASK=255.255.255.255

NETWORK=127.0.0.0

root@localhost network-scripts#route add -host 192.168.91.188 dev lo:0
#设置路由

root@localhost network-scripts#route -n
#开机执行命令,或者写入 /etc/profile 文件

root@localhost network-scripts#vim /etc/rc.d/rc.local

/usr/sbin/route add -host 192.168.91.188 dev lo:0

root@localhost network-scripts#chmod +x /etc/rc.d/rc.local

root@localhost network-scripts#ll /etc/rc.d/rc.local

-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local

root@localhost network-scripts#vim /etc/sysctl.conf
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

root@localhost network-scripts#sysctl -p

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

相关推荐
YOU OU4 小时前
Redis基础常识与命令
数据库·redis·缓存
Scott9999HH4 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
Yana.nice5 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海5 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
Database_Cool_6 小时前
OLTP 和 OLAP 区别详解:分析型数据库和事务型数据库怎么选(附阿里云 AnalyticDB MySQL 选型指南)
数据库·mysql·阿里云
爱写代码的阿森7 小时前
鸿蒙三方库 | harmony-utils之KvUtil键值型数据库操作详解
数据库·华为·harmonyos·鸿蒙·huawei
马优晨7 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
andxe7 小时前
安科士 AndXe 技术博客:400G QSFP112 SR4 光模块|AI 算力与超算短距互联最优方案
网络·人工智能·光模块·光通信