当前位置: 首页 > news >正文

LVS原理及相关配置

1. 描述以及工作原理
1. 什么是 LVS
        linux virtural server 的简称,也就是 linxu 虚拟机服务器,这是一个 由章文嵩博士发起的开源项目,官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分,使用lvs 可以达到的技术目标是:通过 linux 达到负载均衡技术和linux 操作系统实现一个高性能高可用的 linux 服务器集群,他具有良好的可靠性,可延展性和可操作性,从而以低廉的成本实现最优的性能,Lvs 是一个实现负载均衡集群开源软件项目,lvs 从逻辑上可以分为调度层,server集群层,和共享存储
      免费,开源,四层负载均衡
2. LVS 调度算法
1. 静态调度算法 Fixed Scheduling Method
1. 轮询
RR 轮询 **
      调度器通过 " 轮叫 " 调度算法将外部请求按顺序轮流分配到集群中的真 实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮询
WRR 加权轮询 **
      调度器通过 " 加权轮叫 " 调度算法根据真实服务器的不同处理能力来调度访问请求。 这样可以保证处理能力强的服务器处理更多的访问流量。调度器 可以自动问询真实服务器的负载情况,并动态地调整其权值
3. 目标地址 hash
DH 目标地址 hash**
算法也是针对目标 IP 地址的负载均衡,但它是一种静态映射算法,通过一个散列(Hash )函数将一个目标 IP 地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP 地址,作为散列键 (Hash Key )从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
4. 源地址 hash
SH 源地址 hash**
    算法正好与目标地址散列调度算法相反,它根据请求的源 IP 地址,作 为散列键(Hash Key )从静态分配的散列表找出对应的服务器,若该服务器是 可用的且未超载,将请求发送到该服务器,否则返回空。
     它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP 地址换成请求的源 IP 地址外,它的算法流程与目标地址散列调度算法的基本相似。在实际应用中,源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中,它们可以保证整个系统的唯一出 入口。
2. 动态调度算法 Dynamic Scheduling Method 动态调度方法
1. Lc 最少链接
     调度器通过 " 最少连接 " 调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。 如果集群系统的真实服务器具有相近的系统性能,采用" 最小连接 " 调度算法可以较好地均衡负载。、
2. wlc 加权最少链接、
     在集群系统中的服务器性能差异较大的情况下,调度器采用 " 加权最少链接" 调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. sed 最少期望延迟
     基于 wlc 算法,举例说明: ABC 三台机器分别权重 123 ,连接数也分别是123 name 如果使用 WLC 算法的话一个新请求 进入时他可能会分给ABC 中任意一个,使用 SED 算法后会进行这样一个运算
A:(1+1)/2
B:(1+2)/2
C:(1+3)/3
根据运算结果,把连接交给 C
4. nq 从不排队调度算法
    无需列队,如果有台 realserver 的连接数 =0 就直接分配过去,不需要进行sed 运算
5. lblc 基于本地最少链接
     " 基于局部性的最少链接 " 调度算法是针对目标 IP 地址的负载均衡,目前主要用于Cache 集群系统。该算法根据请求的目标IP 地址找出该 目标 IP 地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用" 最少链接 " 的原则选出一个可用的服务器,将请求发送到该服务器。
6. lblcr 带复制的基于本地的最少链接
      " 带复制的基于局部性最少链接 " 调度算法也是针对目标 IP 地址的负载均衡,目前主要用于Cache 集群系统。它与LBLC 算法的不同 之处是它要维护从一个 目标 IP 地址到一组服
务器的映射,而 LBLC 算法维护从一个目标 IP 地址到一台服务器的映射。该算法根据请求的目标IP 地址找出该目标 IP 地址对应的服务器组,按" 最小连接 " 原则从服务器组中选出一台服务器, 若服务器没有超载,将请求发送到该服务器;若服务器超载,则按" 最小连接 " 原则从这个集群中选出一 台服务器 ,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改, 将最忙的服务器从服务器组中删除,以降低复制的程度。
3. LVS 的工作原理
1. 当用户向负载均衡调度器( director server )发起请求,调度器将请求发往内核空间
2. prerouting 链首先会接受到用户请求,判断目标 ip 确定是本机 ip ,将数据包发往input
3. IPVS 是工作在 input 链上的,当用户请求到达 input 时, ipvs 会将用户请求和自己定义好的集群服务器进行比对,如果用户请求就是定义的集群服务,那么此时ipvs 会强行修改数据包里的目标 ip 地址以及端口,并将新的数据包发往POSTROUTING 链,
4. POSTROUTING 链接收到数据包后,发现目标 ip 地址刚好是自己的后端服务器,那么通过选路,将数据包最终发送给后端服务器
2. 组成以及相关术语
1. 组成
1. ipvs
ip virtual server,一段代码工作在内核空间,ipvs,是真正生效实现
调度的代码(累死nginx中的proxy_pass),
2. ipvsadm
另一段是工作在用户空间,ipvsadm,负责为ipvs内核框架编写规则,定义
谁是集群服务,谁是后端真正的服务器(real server)类似nginx中的
upstrean
3. lvs 组成 =ipvsipv( 内核,负载均衡调度代码 )+sadm ipvs 管理器,负责均衡提供集群后端服务等信息)
2.术语
1. DS DIrector Server 前端负责均衡节点(负载均衡服务器)
2. RS real server 后端真实工作服务器( web 服务器)
3. vip 向外部直接面向用户请求,作为用户请求的目标 ip 地址(负载均衡的ip地址,提供给用户)
4. DIP Director Server Ip 和内部主机通讯的 ip 地址(负责与 Real Server 交互的内部Ip
5. RIP Real Server Ip 后端服务器 ip 地址
6. CIP client IP 访问客户端 ip 地址
3. 三种工作模式
1. *LVS-NAT 模式
2. *LVS-DR 模式
3. Lvs-Tun 模式(隧道模式)
4.NAT 模式的工作原理
1. 用户请求 ds ,此时请求的报文会先到内核空间 prerouting 链,此时报文 ip为 cip ,目标 ip vip
2. prerouting 检测发现数据包目标 ip 是本机,将数据包送到 input
3. ipvs 对比数据包请求的服务是否为集群服务,如果是,修改数据包的目标ip 地址为后端服务器的 IP 地址,然后将数据包发送给 POSTROUTING链,此时报文ip cip ,目标 ip rip
4. POSTROUTING 通过选路,将数据发送给 Real Server
5. RealServer 对比发现目标 ip 为自己的 ip ,开始构建响应报文发回给Director Server此时报文的源 ip RIP ,目标 ip CIP
6. Derector Server 在响应客户端前,会将源 ip 地址修改为自己的 VIP ,然后响应给客户端,目标ip cip ,此时报文源 IP VIP ,目标 ip cipNAT模型的特性
1. Rs 应该是私有地址, Rs 网关必须指向 DIP
2. DIP RIP 必须在同一个网段内
3. 请求和响应报文都应该经过 Director Server ,高负载场景中 DirectorServer容易成为性能瓶颈
4. 支持端口映射
5. Rs 可是使用任意操作系统
6. 缺陷,对 Ds 压力会比较大,请求和响应都需要经过 ds
5.NAT 模式实战 - 环境准备
2. NAT 主机增加一张网卡,命名为 ens37 ,自动或者手工获取 ip 均可,理论上nat 对应 ds 服务器应该有两张网卡( vip dip vip 对外服务,需要使用公网ip dip 内网局域网,使用虚拟机使用仅主机模式,也可以用桥接模式和nat 模式都可以

3. 步骤 1. 配置两个网卡和两个ip地址,正常来说应该配置两个不同的网段的ip,一个对外的vip,一个对内的dip,现在主要使用nat的网络模式,可以配置桥接模式对外,Nat对内,教师机不方便配置桥接模式,所以都是配置的nat模式,但是一定要分清楚哪个ipvip,哪个ip是dip,在物理主机上都要能够ping通。

2. 克隆主机,生成net模式的机器

3. 设置主机名称 nat.yuanyu.zhangmin
[root@nat ~]# hostname
nat.yuanyu.zhangmin
4. 更改 ip 地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="7a2bb575-3b9c-4206-9dd7-e87372b68952"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=10.1.1.100
NETMASK=255.255.255.0
GATEWAY=10.1.1.2
DNS1=8.8.8.8
DNS2=114.114.114.114
5. 额外添加一张网卡,选择对外提供服务的桥接模式或者 nat 模式,选
择桥接模式( ip 不同)
6. 查看所有网卡
[root@nat ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc
noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd
00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:6f:6e:0a brd
ff:ff:ff:ff:ff:ff
inet 10.1.1.100/24 brd 10.1.1.255 scope global
ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe6f:6e0a/64 scope link
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:6f:6e:14 brd
ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope
global ens36
valid_lft forever preferred_lft forever
inet6 240e:878:8fa:6069:20c:29ff:fe6f:6e14/64
scope global mngtmpaddr dynamic
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe6f:6e14/64 scope link
valid_lft forever preferred_lft forever

7. 修改网卡配置文件

[root@nat ~]# vim /etc/sysconfig/networkscripts/ifcfg-ens36
TYPE="Ethernet"
BOOTPROTO="none"
NAME="ens36"
UUID="606c3bb5-ae86-42fa-95e1-d9766c3d4ab9"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.0.100
NETMASK=255.255.255.0
8. 时间同步
[root@nat ~]# yum -y install ntpdate
[root@nat ~]# yum -y install ntp
[root@nat ~]# ntpdate cn.ntp.org.cn
[root@nat ~]# systemctl start ntpd
[root@nat ~]# systemctl enable ntpd
9. 停用其他服务
# 停用selinux
setenforce 0
sed -i '/SELINUX=enforcing/cSELINUX=disabled'
/etc/selinux/config
#停用防火墙
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
# 停用NetworkManage
systemctl stop NetworkManager
systemctl disable NetworkManager &>/dev/null
10. 添加 web 服务器( web01 10.1.1.200 web02 10.1.1.201
# 设置主机名称
# 关闭防火墙
# 固定ip地址
# 关闭SELinux
# 关闭NetworkManager
# 安装nginx
# 修改index.html文件
# 时间同步
# 启动服务
11. 配置 dns 服务器
1. yuanyu.zhangmin
web01.yuanyu.zhangmin x.x.x.200
Web02.yuanyu.zhangmin x.x.x.201
nat.yuanyu.zhangmin
x.x.x.100
Ds.yuanyu.zhangmin
x.x.x.110
# 修改主机名称
# 固定ip
# 关闭防火墙
# 关闭SELinux
# 关闭NetManager
# 安装bind的
yum -y install bind
# 配置主配置文件
vim /etc/named.conf
# 配置zones文件
vim /etc/named.rfc...zones
# 配置zone文件
vim /var/named/...zone
# 同步时间
# 启动服务
12. 配置 client 客户测试机
# 临时指定dns服务器
# 永久指定dns服务器

6.NAT 模式搭建实战
1. nat 服务器配置
1. Itvs. Ip vartual server 已经是内核应用,无法修改
2. ipvsadm 这个工具管理服务
# 安装ipvsadm
[root@nat ~]# yum -y install ipvsadm
# 清空以往的规则
[root@nat ~]# ipvsadm -C
# 查看规则
[root@nat ~]# ipvsadm -L -n
# 新增规则
[root@nat ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
# 添加主机
[root@nat ~]# ipvsadm -a -t 192.168.0.100:80 -r
10.1.1.200:80 -m
[root@nat ~]# ipvsadm -a -t 192.168.0.100:80 -r
10.1.1.201:80 -m
# 设置ip转发
[root@nat ~]# vim /etc/sysctl.conf
============================================
net.ipv4.ip_forward=1
============================================
# 设置生效
[root@nat ~]# sysctl -p
net.ipv4.ip_forward = 1
2. web 服务器网关配置
[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 10.1.1.100
[root@web02 ~]# route del default
[root@web02 ~]# route add default gw 10.1.1.100
7.DR 模式的搭建实战
配置 vip 网卡
1. 在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上
2. vmware 的虚拟主机资源管理器找到虚拟主机,右键菜单,设置
3. 添加新的网卡,自定义为刚才创建的桥接模式网卡
4. 此时在虚拟主机中使用 ifconfig 无法找到新的网卡
5. ip a 能够查看到新的 ens36 网卡,没有路由
6. 编辑网卡配置
TYPE="Ethernet"
BOOTPROTO="none"
NAME="ens36"
UUID="fdbcb12c-33b6-4d7d-93bb-3b5380c4fb30"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.10.100
7. 重启 network 服务
[root@ds01 ~]# systemctl restart network
添加规则
[root@ds01 ~]# # 配置ipvs规则
[root@ds01 ~]# ipvsadm -A -t 192.168.10.100:80 -s rr
[root@ds01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight
ActiveConn InActConn
TCP 192.168.10.100:80 rr
[root@ds01 ~]# # 添加rs web01 web02 添加规则
[root@ds01 ~]# ipvsadm -a -t 192.168.10.100:80 -r
10.1.1.200:80 -m
[root@ds01 ~]# ipvsadm -a -t 192.168.10.100:80 -r
10.1.1.201:80 -m
[root@ds01 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight
ActiveConn InActConn
TCP 192.168.10.100:80 rr
-> 10.1.1.200:80 Masq 1 0
0
-> 10.1.1.201:80 Masq 1 0
0
ip 转发
[root@ds01 ~]# vim /etc/sysctl.conf
##########################################
net.ipv4.ip_forward=1
#############################################
[root@ds01 ~]# sysctl -p
net.ipv4.ip_forward = 1
临时修改 web01 web02 的网 , 网关必须指向 dip (调度服务 器的对内的 ip
[root@web01 ~]# route del default
[root@web01 ~]# route add default gw 10.1.1.100
[root@web01 ~]# # 临时修改网关
# 这也要求了rs ip和 dip要在同一个网段,因为dip是要作为网关存在的
vs-nat 模式的优点配置简单,缺点是请求和响应都必须经过 ds ,容易称为性能瓶颈
希望有这样的模式,请求的时候使用 input 链进行负载均衡,响应的时候就不要经过ds ,直接由 rs 响应给客户端
nat 模式的时候,请求 vip ,接收 vip 的响应
构想 请求 vip ,接受 rip 响应,这是不允许 lvs-dr 模式
vip 请求 rip 响应
NAT 脚本
# ds脚本
#!/bin/bash
#配置网卡
echo TYPE="Ethernet" >> /etc/sysconfig/networkscripts/ifcfg-ens36
echo BOOTPROTO="none" >> /etc/sysconfig/networkscripts/ifcfg-ens36
read -p "router name:" router_name
echo NAME='"$rount_name"' >> /etc/sysconfig/networkscripts/ifcfg-ens36
uuidkey=$( uuidgen )
echo UUID='"$uuidkey"' >> /etc/sysconfig/networkscripts/ifcfg-ens36 >> /etc/sysconfig/networkscripts/ifcfg-ens36
echo DEVICE='"$rount_name"' >> /etc/sysconfig/networkscripts/ifcfg-ens36
echo ONBOOT="yes" >> /etc/sysconfig/network-scripts/ifcfgens36
echo IPADDR=192.168.10.100 >> /etc/sysconfig/networkscripts/ifcfg-ens36
systemctl restart network
#安装ipvsadm
yum list installed|grep ipvsadm
if[ $? -ne 0 ];then
yum -y install ipvsadm
fi
#配置规则
read -p "vip:" vip
read -p "port:" port
read -p "rule:" s
ipvsadm -A -t $vip:$port -s $s
# ip forward
echo "net.ipv4.ip_forward=1" >/etc/sysctl.conf
sysctl -p
# rs脚本
#!/bin/bash
read -p "dip:" dip
# 设置网关
route del default
route add defualt gw $dip
DR 模式
1. 性能更优,回路不再经过 ds
2.ds rs 为了保证用户响应,都要求配置统一的 vip
3. 由于 rs 是直接响应 client ,网关一定不能设置 ds dip
4. rs vip 进行抑制,让 ds vip 接收请求, rs vip 不接受请求
5.rs vip 绑定点 lo 回路网卡上
1. ds ens33 上挂一个 vip 10.1.1.102
[root@dr03 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu
1500
inet 10.1.1.101 netmask 255.255.255.0 broadcast
10.1.1.255
inet6 fe80::20c:29ff:fe38:97fb prefixlen 64
scopeid 0x20<link>
ether 00:0c:29:38:97:fb txqueuelen 1000
(Ethernet)
RX packets 153 bytes 16165 (15.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 144 bytes 15826 (15.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0
collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 64 bytes 5568 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 5568 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0
collisions 0
[root@dr03 ~]# ifconfig ens33:0 10.1.1.102 broadcat
10.1.1.102 netmask 255.255.255.255 up
broadcat: 未知的主机
ifconfig: `--help' gives usage information.
[root@dr03 ~]# ifconfig ens33:0 10.1.1.102 broadcast
10.1.1.102 netmask 255.255.255.255 up
[root@dr03 ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu
1500
inet 10.1.1.101 netmask 255.255.255.0 broadcast
10.1.1.255
inet6 fe80::20c:29ff:fe38:97fb prefixlen 64
scopeid 0x20<link>
ether 00:0c:29:38:97:fb txqueuelen 1000
(Ethernet)
RX packets 399 bytes 38090 (37.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 300 bytes 32758 (31.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0
collisions 0
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu
1500
inet 10.1.1.102 netmask 255.255.255.255
broadcast 10.1.1.102
ether 00:0c:29:38:97:fb txqueuelen 1000
(Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 64 bytes 5568 (5.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 64 bytes 5568 (5.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0
collisions 0
[root@dr03 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue
state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc
pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:38:97:fb brd ff:ff:ff:ff:ff:ff
inet 10.1.1.101/24 brd 10.1.1.255 scope global ens33
valid_lft forever preferred_lft forever
inet 10.1.1.102/32 brd 10.1.1.102 scope global ens33:0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe38:97fb/64 scope link
valid_lft forever preferred_lft forever
[root@dr03 ~]# route add -host 10.1.1.102 dev ens33:0
# 10.1.1.101 dip
# 10.1.1.102 vip 在rs上的vip和这个vip相同
2. 设置规范
# 安装ipvsadm
yum -y install ipvsadm
$ 设置规则
ipvsadm -A -t 10.1.1.102:80 -s rr
ipvsadm -a -t 10.1.1.102:80 -r 10.1.1.200 -g
ipvsadm -a -t 10.1.1.102:80 -r 10.1.1.201 -g
# rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端
口
# -m nat -g gateway
设置 rs 主机
1. lo 接口上绑定 vip
[root@web01 ~]# ifconfig lo:0 10.1.1.102 broadcast
10.1.1.102 netmask 255.255.255.255 up
2. 设置主机路由
[root@web01 ~]# route add -host 10.1.1.102 dev lo:0
3. 抑制 rs 接收请求
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
4. 生成脚本,对 web02 使用
ifconfig lo:0 10.1.1.102 broadcast 10.1.1.102 netmask
255.255.255.255 up
route add -host 10.1.1.102 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
5. 测试使用,查看状态
[root@dr03 ~]# ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts
OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 10.1.1.102:80 1 6
0 360 0
-> 10.1.1.200:80 0 0
0 0 0
-> 10.1.1.201:80 1 6
0 360 0
[root@dr03 ~]#
dr 模式的脚本
ds 脚本
#!/bin/bash
#在ens33上挂载一个ip地址
read -p "vip:" vip
read -p "mac:" mac
read -p "num" num
ifconfig $mac:$num $vip broadcast $vip netmask
255.255.255.255
# 主机路由
route add -host $vip dev $mac:$num
#安装ipvsadm
yum list installed|grep ipvsadm
if [ $? -ne 0 ] ; then
yum -y install ipvsadm
fi
#配置规则(不需要设置ip_forword)
ipvsadm -C
read -p "rule:" rule
read -p "port:" port
ipvsadm -A -t $vip:$port -s $rule
read -p "rip1:" rip1
ipvsadm -a -t $vip:$port -r $rip1 -g
read -p "rip2:" rip2
ipvsadm -a -t $vip:$port -r $rip2 -g
rs 脚本
#!/bin/bash
#在ens33上挂载一个ip地址
read -p "vip:" vip
read -p "mac:" mac
read -p "num" num
ifconfig $mac:$num $vip broadcast $vip netmask
255.255.255.255
# 主机路由
route add -host $vip dev $mac:$num
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

相关文章:

LVS原理及相关配置

1. 描述以及工作原理 1. 什么是 LVS linux virtural server 的简称&#xff0c;也就是 linxu 虚拟机服务器&#xff0c;这是一个 由章文嵩博士发起的开源项目&#xff0c;官网是 http://www.linuxvirtualserver.org,现在 lvs 已经是 linux 内核标 准的一部分&#xff0c;使用…...

webrtc一对一视频通话功能实现

项目效果 实现原理 关于原理我就不做说明&#xff0c;直接看图 WebRTC建立的时序图 系统用例逻辑 搭建环境 turn服务器&#xff1a;Ubuntu24.04搭建turn服务器 mkcert的安装和使用&#xff1a;配置https访问 必须使用https协议&#xff0c; 由于浏览器的安全策略导致的&am…...

通道(channel)传递数据的例子写一个

当然&#xff01;以下是一个简单的 Go 程序示例&#xff0c;展示了如何使用通道&#xff08;channel&#xff09;在两个 goroutine 之间传递数据。示例代码 go package mainimport ("fmt""time" )// 发送数据到通道的 goroutine func sendData(ch chan int…...

Vue3+Echarts+饼图环形图

记得给容器宽高 <div id"leftChartguawang" style"height: 28vh"></div> 配置函数 const leftChartguawang () > {const chartBox echarts.init(document.getElementById(leftChartguawang))let datas [[{ name: 居民节能建筑, value…...

Python while编程题目|AI悦创Python一对一教学辅导

你好&#xff0c;我是悦创。 以下是十道有创意的while循环编程题目&#xff0c;每道题目都有一定的难度&#xff0c;适合锻炼编程逻辑和思维能力。 题目1&#xff1a;旋转字符串 描述&#xff1a;给定一个字符串&#xff0c;每次循环将字符串的第一个字符移到末尾&#xff0…...

C语言 | Leetcode C语言题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue nums[pivot];int newPivot left;swap(&nums[pivot], &a…...

Docker③_VMware虚拟机和Docker的备份与恢复

目录 1. VMware虚拟机的快照备份 1.1 VMware本机的快照备份 1.2 VMware快照备份到另一电脑 2. Docker知识点 2.1 Docker镜像和容器的关系 2.2 Docker的存储卷 2.3 Docker命令简介 2.4 删除Anylink镜像 3. Docker备份和恢复 3.1 确定要回滚的容器和版本 3.2 备份当前…...

【EMC专题】ESD抑制器简要介绍

在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…...

贷齐乐系统最新版SQL注入(绕过WAF可union select跨表查询)

目录 标题&#xff1a;贷齐乐系统最新版SQL注入&#xff08;绕过WAF可union select跨表查询&#xff09; 内容&#xff1a; 一&#xff0c;环境部署 二&#xff0c;源码分析 三&#xff0c;sql注入 总结&#xff1a; [回到顶部]&#xff08;#article_top&#xff09; 一&am…...

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比!

『大模型笔记』虚拟机(Virtual Machine,VM)与Docker对比! 文章目录 一. 虚拟机(Virtual Machine,VM)与Docker对比!1. 定义这两种技术2. 工作原理3. 关于如何选择适合工作负载的技术的指导二. 参考文献Docker 只是一个轻量级的虚拟机吗?虽然二者确实有一个共同点,即 虚…...

基于SpringBoot+Vue框架的租车管理系统

文章目录 一、项目介绍二、项目类型三、技术栈介绍1.客户端技术栈2.服务端技术栈 四、项目创新点五、项目功能介绍1.客户端功能2.服务端功能 六、项目的主要截图页面如下展示1.客户端展示2.服务端展示 七、项目源码 一、项目介绍 ​大家好&#xff0c;我是执手天涯&#xff0c;…...

HAProxy基本配置及参数实操

目录 ​编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …...

go-zero中间件的使用

一、自定义中间件 1、在api中在服务中定义一个中间件,名字随便取 type PostDemoReq {Name string json:"name" validate:"required" // 姓名Age int64 json:"age" validate:"required,gte1,lte130" // 年龄// optional 表示可选,omi…...

六、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色优化超时和线程

实现通过ESP32S3连接Wi-Fi并使用Web页面控制WS2812灯珠的颜色&#xff0c;可以使用ESP32的WebServer库来创建一个简单的Web界面。通过这个界面&#xff0c;可以动态地控制灯珠的显示效果。 针对 五、ESP32-S3上使用MicroPython点亮WS2812智能LED灯珠并通过web控制改变灯珠颜色…...

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…...

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。UIAbility组件是系统调度的基本单元&#xff0c;为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…...

神经网络的数学原理

前言:Hello大家好,我是小哥谈。人工智能技术的发展与成功应用已经成为21世纪科技领域最大的新现象。然而,科学地理解人工智能原理已经超出了现有科学体系的范畴。显然,人工智能是人类科学技术发展的必然结果,人工智能科学也将是人类科学进步与发展必然实现的目标🌈 …...

Java设计模式-抽象工厂模式-一次性理解透

1. 抽象工厂模式简介 抽象工厂设计模式是创建型模式之一。抽象工厂模式与工厂模式几乎相似&#xff0c;只是它更像工厂中的工厂。 如果您熟悉Java 中的工厂设计模式&#xff0c;或看过上一篇我写的“java简单工厂模式”&#xff0c;您会注意到我们有一个工厂类。此工厂类根据…...

day16-测试自动化之selenium的PO模式

一、PO模式介绍 PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 一般分为六个版本&#xff0c;现在大部分企业都用的V4版本&#xff0c;三层结构…...

Springboot+freemarker大段文本内容动态修改输出,所见即所得

场景&#xff1a;给领导导出数据时&#xff0c;需要给出一个针对专业名词的解释说明&#xff0c;因此会存在有大批量的、大段的文本内容。如果直接写在代码里面&#xff0c;没啥大问题&#xff0c;但是大量的拼接替换、格式样式、后续修改维护等&#xff0c;都不是很方便。如果…...

Kali Linux网络问题解决与静态IP配置技巧

很多用户在使用 Kali Linux 时会遇到无法联网的问题&#xff0c;尤其是在 VMware 虚拟机中。这种情况相当常见&#xff0c;一般都是没有配置DNS服务器或者网卡配置文件的IP和虚拟网络编辑器的IP不一致所导致的&#xff0c;下面我们将探讨如何在 Kali Linux 中配置 DNS 服务和设…...

网络状态码-经验笔记

网络状态码-经验笔记 引言 在网络通信中&#xff0c;HTTP&#xff08;Hypertext Transfer Protocol&#xff09;状态码是服务器向客户端&#xff08;通常是Web浏览器&#xff09;发送响应时所包含的重要信息之一。 这些状态码指示了客户端请求的结果。 了解并正确使用这些状态…...

c++ 实现 actor 框架

服务端&#xff1a;https://github.com/xukeawsl/coro_actor 客户端&#xff1a;https://github.com/xukeawsl/coro_actor_client...

应对猫咪掉毛挑战,希喂、小米热门宠物空气净化器实测功效PK

随着养宠人群的增多&#xff0c;铲屎官们的需求日益增长&#xff0c;市场上出现了很多品牌的宠物空气净化器。然而&#xff0c;产品质量参差不齐&#xff0c;给消费者选择带来不少困难。劣质宠物空气净化器不仅无法有效去除宠物毛发、皮屑、异味及空气中的有害微粒&#xff0c;…...

0002 保险会计及其特殊性

保险会计是将会计理论专门应用于保险公司的专业会计领域&#xff0c;它是会计学的一个重要分支。作为一个分支&#xff0c;保险会计具有独特的特性&#xff0c;这些特性主要表现在以下几个方面&#xff1a; 产品的无形性&#xff1a;保险产品本质上是一种无形的商品&#xff0c…...

ChatTTS:终极文本转语音工具,支持API!

ChatTTS&#xff1a;终极文本转语音工具&#xff0c;支持API&#xff01; 文本转语音&#xff08;TTS&#xff09;系统的发展已经取得了长足的进步。从最初的机械化、平坦的声音&#xff0c;到如今听起来令人惊讶的人声&#xff0c;ChatTTS作为这一领域的新成员&#xff0c;旨…...

VUE和Element Plus

1.VUE 1.下载和配置环境 使用vue编程&#xff0c;我们需要使用到的编程软件是vs code&#xff0c;还需要使用node.js&#xff0c;这个的作用就类似于JDK&#xff0c;当我们都下载好之后&#xff0c;winR键打开命令提示符&#xff0c;我们在这里可以查看版本&#xff0c; npm…...

Python学习笔记(五)

""" 演示tuple元组的定义和操作 """# 元组一旦定义完成&#xff0c;就不可修改 # 定义元组 # t1 (1, "Hello", True) # t2 () # 定义空元组 # t3 tuple() #定义空元组 # print(f"t1的类型是&#xff1a;{type(t1)}, 内容是&…...

Linux企业级应用(一)构建企业级Linux应用平台:全面指南

文章目录 构建企业级Linux应用平台&#xff1a;全面指南前言1. Linux企业级应用简介2. 构建企业级网站应用平台使用LNMP架构构建Web服务器部署MySQL数据库主从复制与读写分离 3. 实施虚拟化技术部署KVM虚拟化平台使用LVS和Keepalived实现负载均衡与高可用性 4. 文件系统与分布式…...

LeetCode112 路径总和

前言 题目&#xff1a; 112. 路径总和 文档&#xff1a; 代码随想录——路径总和 编程语言&#xff1a; C 解题状态&#xff1a; 成功解答&#xff01; 思路 比较简单的一个思路是遍历所有的路径&#xff0c;求和后再查找目标值。但是&#xff0c;最好的方法是一边遍历&#x…...

互联网推广加盟/搜索引擎优化seo

一、Step download timeout (120 seconds) 这是一个经常会遇到的问题&#xff0c;解决得办法走以下步骤&#xff1a; 1、 修改run time setting中的请求超时时间&#xff0c;增加到600s,其中有三项的参数可以一次都修改了&#xff0c;HTTP-request connect timeout&#xff0…...

惠州网站策划建设/淘宝引流推广平台

主要用到的几个JQUERY函数&#xff1a; li:nth-child(2) 第二张图的意思&#xff1b; attr() 方法设置或返回被选元素的属性值。 setInterval() 方法可按照指定的周期&#xff08;以毫秒计&#xff09;来调用函数或计算表达式。 先看代码 <!DOCTYPE html PUBLIC "-//W…...

个人网站效果图咋做/昆明百度关键词优化

水下光通信系统是一种利用光作为信息传输媒介的通信系统&#xff0c;通常应用于水下环境中。要使用Matlab建立水下光通信系统&#xff0c;需要首先了解光学传输理论和水下环境的特点&#xff0c;例如水下传输介质的折射率、水的吸收系数等。然后可以利用Matlab编写程序&#xf…...

重庆建设科技培训中心官方网站/厦门seo公司

gitHub API地址 https://developer.github.com/v3/repos/commits/#parameters 我们打开如下地址 https://developer.github.com/v3/issues/comments/ 可以看到 List comments on an issue点进去可以跳转到 GET /repos/:owner/:repo/issues/:number/comments owner 代表用户…...

网站制作 那种语言好/快速排名seo

Maven 简介Maven是基于项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的软件项目管理工具。 目前&#xff0c;绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是&#xff0c;Ant 的项目管理工具&#xff08;…...

网站 模板 侵权/湖北seo关键词排名优化软件

多种表示地球地貌的方法。此示例中的数据取自美国商务部海洋及大气管理局 (NOAA) 国家地理数据中心,数据通告编号为 88-MGG-02。 关于地貌数据 数据文件 topo.mat 包含地貌数据。topo 是海拔高度数据,topomap1 是海拔高度的颜色图。 load topo topo topomap1 % load data …...