培训第二十七天(lvs_nat模式与lvs_dr模式配置)

news/2024/9/22 17:25:31/

上午

 核心:内核中的ipvs,ipvsadm1、安装ipvsadm[root@nat ~]# yum -y install ipvsadm2、配置规则查看所有的规则,如果已经配置好规则,重启之后也就没有了[root@nat ~]# ipvsadm -L -n

1、配置vip网卡

(1)在编辑虚拟网络中创建桥接模式的网卡,并且桥接到有网的适配器上。

查看自己本机WLAN所属网卡

在VM创建桥接模式网卡,将外部连接设置为WLAN所属网卡

2、添加新的网卡,自定义为刚才创建的桥接模式网卡。

在本虚拟机中重新添加一块网络适配器,并设置网络连接为刚设置的桥接模式的网卡

3、此时在虚拟主机中使用ifconfig无法找到新的网卡,ip a能够查看到新的ens36网卡。

 查看所有网络[root@nat ~]# ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:f5:ea:0a brd ff:ff:ff:ff:ff:ffinet 10.0.0.10/24 brd 10.0.0.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::3598:4e0:b43d:ccc8/64 scope link noprefixroute valid_lft forever preferred_lft forever3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:f5:ea:14 brd ff:ff:ff:ff:ff:ffinet 192.168.11.83/23 brd 192.168.11.255 scope global noprefixroute dynamic ens36valid_lft 7147sec preferred_lft 7147secinet6 fe80::8de7:6bd9:74a1:8f60/64 scope link noprefixroute valid_lft forever preferred_lft forever4、编辑网卡配置[root@nat ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36[root@nat ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36TYPE=EthernetBOOTPROTO=noneIPADDR=192.168.10.101NAME=ens36UUID=d4cfa5ab-7c2a-4fab-b329-396b9b38b1bfDEVICE=ens36ONBOOT=yes5、重启网络服务[root@nat ~]# systemctl restart network6、本机cmd测试192.168.10.101ip是否可以正常使用

2、添加规则

 配置ipvs规则[root@nat ~]# ipvsadm -A -t 192.168.10.101:80 -s rr # -A 选项表示添加一个新的服务。# -t 192.168.10.101:80 指明了要处理的服务是目标地址为 192.168.10.101 ,端口为 80 的 TCP 服务。# -s rr 表示使用轮询(Round Robin)的调度算法。[root@nat ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.10.101:80 rr添加rs web01 web02 添加规则[root@nat ~]# ipvsadm -a -t 192.168.10.101:80 -r 10.0.0.11:80 -m# -a 选项用于添加一个真实服务器(Real Server)到指定的服务中。# -t 192.168.10.101:80 表示要添加真实服务器的服务是目标地址为 192.168.10.101 ,端口为 80 的 TCP 服务。# -r 10.0.0.11:80 指明了要添加的真实服务器的地址为 10.0.0.11 ,端口为 80 。# -m 表示使用 NAT(Network Address Translation,网络地址转换)模式。[root@nat ~]# ipvsadm -a -t 192.168.10.101:80 -r 10.0.0.12:80 -m[root@nat ~]# ipvsadm -Ln # -L 选项表示列出(List)规则。# -n 选项表示以数字形式显示地址和端口,而不进行 DNS 解析,这样可以提高显示速度和准确性。IP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  192.168.10.101:80 rr-> 10.0.0.11:80                 Masq    1      0          0         -> 10.0.0.12:80                 Masq    1      0          0  # “TCP 192.168.10.101:80 rr” 表示这是一个 TCP 协议的服务,地址为 192.168.10.101,端口为 80,使用的调度算法是轮询(rr)# “-> 10.0.0.11:80 Masq 1 0 0” 表示后端的一个真实服务器地址为 10.0.0.11,端口为 80,采用网络地址转换(Masq)模式,权重为 1,当前活跃连接数为 0,非活跃连接数为 0。# “-> 10.0.0.12:80 Masq 1 0 0” 则是另一个后端真实服务器的配置信息,地址为 10.0.0.12,端口为 80,同样是网络地址转换模式,权重为 1,活跃和非活跃连接数均为 0。此时访问vip还无法访问到web01和web02

3、ip转发

 [root@nat ~]# vim /etc/sysctl.conf net.ipv4.ip_forward=1# net.ipv4.ip_forward=1 这个配置的作用是启用系统的 IP 转发功能。# 当设置为 1 时,表示允许系统在不同的网络接口之间转发 IP 数据包。[root@nat ~]# sysctl -pnet.ipv4.ip_forward = 1# 使在 /etc/sysctl.conf 中所做的更改立即生效,而无需重新启动系统。此时访问vip还无法访问到web01和web02

4、修改网关

临时修改web01和web02的网关,网关必须指向dip(调度服务器的对内的ip)

 要求rs的ip和dip要在同一个网段,因为dip是作为rs网关存在的[root@web01 ~]# ip route del default # 删除系统中的默认路由[root@web01 ~]# ip route add 10.0.0.0/24 via 10.0.0.10# 添加一条新的路由规则# 对于目标网络为 10.0.0.0/24 的数据包,将通过网关 10.0.0.10 进行转发[root@web02 ~]# ip route del default[root@web02 ~]# ip route add 10.0.0.0/24 via 10.0.0.10此时访问vip可以访问到web01和web02

lvs-nat模式的优点是配置简单,缺点是请求和响应都必须经过ds,容易性能瓶颈

现在,希望请求时使用input链进行负载均衡,响应时不经过ds,直接由rs响应给客户端

在nat模式时,请求vip,接收vip响应。

构想 :请求vip,接收rip响应,这是不允许 使用lvs-dr模式

5、NAT模式脚本

 # ds脚本#!/bin/bash#配置网卡echo TYPE=Ethernet  >> /etc/sysconfig/network-scripts/ifcfg-ens36 echo BOOTPROTO=none >> /etc/sysconfig/network-scripts/ifcfg-ens36 echo IPADDR=192.168.10.101  >> /etc/sysconfig/network-scripts/ifcfg-ens36read -p "router name:" router_nameecho NAME='"$router_name"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 uuid=$( uuidgen )echo UUID='"$uuidgen"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 echo DEVICE='"$router_name"'  >> /etc/sysconfig/network-scripts/ifcfg-ens36 echo ONBOOT=yes  >> /etc/sysconfig/network-scripts/ifcfg-ens36 #重启网络服务systemctl restart network#安装ipvsadmyum list installed|grep ipvsadmif [ $? —ne 0 ];thenyum -y install ipvsadmfi#配置规则read -p "vip:" vipread -p "port:" portread -p "rule:" ruleread -p "rip1:" rip1read -p "rip2:" rip2ipvsadm -A -t $vip:$port -s $ruleipvsadm -a -t $vip:$port -r $rip1:$port -mipvsadm -a -t $vip:$port -r $rip2:$port -m#ip转发echo "net.ipv4.ip_forward=1" > /etc/sysctl.confsysctl -p
 #rs 脚本#!/bin/bash# 设置网关read -p "dip:" dipip route del defaultip route add default via $dip

6、DR模式

(1)性能更优,回路不再经过ds

(2)ds和rs为了保证用户响应,都要求配置统一的vip

(3)由于rs是直接响应client,网关一定不能设置为ds的dip

(4)对rs的vip进行抑制,让ds的vip接收请求,rs的vip不接受请求

7、设置dr主机

 1、在ds的ens33上挂一个vip10.0.0.101[root@dr ~]# ifconfig ens33:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.255.255 up# ifconfig 是用于配置网络接口的命令。# ens33:0 是创建的虚拟接口名称。# 10.0.0.101 是为该虚拟接口分配的 IP 地址。# broadcast 10.0.0.101 指明了广播地址为 10.0.0.101 。# netmask 255.255.255.255 表示子网掩码为 255.255.255.255 ,这实际上是一个单点广播地址,通常用于特定的网络配置场景。# up 表示启用该网络接口。[root@dr ~]# route add -host 10.0.0.101 dev ens33:0# 将目标主机地址为 10.0.0.101 的数据包通过网络接口 ens33:0 进行发送# 10.0.0.101 dip# 10.0.0.13 vip  在rs上的vip和这个vip相同2、设置规范# 安装ipvsadm[root@dr ~]# yum -y install ipvsadm.x86_64 # 设置规则ipvsadm -A -t 10.0.0.101:80 -s rripvsadm -a -t 10.0.0.101:80 -r 10.0.0.11 -g# -a 选项表示添加(Add)一个真实服务器到已存在的服务中。# -t 10.0.0.101:80 指明了要添加真实服务器的服务是目标地址为 10.0.0.101 ,端口为 80 的 TCP 服务。# -r 10.0.0.11 表示要添加的真实服务器地址为 10.0.0.11 。# -g 表示使用直接路由(Direct Routing)模式。ipvsadm -a -t 10.0.0.101:80 -r 10.0.0.12 -g[root@dr ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  10.0.0.101:80 rr-> 10.0.0.11:80                 Route   1      0          0         -> 10.0.0.12:80                 Route   1      0          0 # rs不再需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口# -m nat -g gateway

下午

1、设置rs主机

(1)在lo接口上绑定vip

 [root@web01 ~]# ifconfig lo:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.255.255 up# ifconfig 是用于配置网络接口的命令。# lo:0 是创建的虚拟接口名称。# 10.0.0.101 是为该虚拟接口分配的 IP 地址。# broadcast 10.0.0.101 指明了广播地址为 10.0.0.101 。# netmask 255.255.255.255 表示子网掩码为 255.255.255.255 ,这实际上是一个单点广播地址,通常用于特定的网络配置场景。# up 表示启用该网络接口。

(2)设置主机路由

 [root@web01 ~]# route add -host 10.0.0.101 dev lo:0[root@web01 ~]# ifconfig

(3)抑制rs的vip接受请求

 echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore :将本地回环接口(lo)的 arp_ignore 参数设置为 1。当收到 ARP 请求时,如果目标 IP 不是本地接口的地址,则不回应。# echo 2 > /proc/ssys/net/ipv4/conf/lo/arp_announce :将本地回环接口的 arp_announce 参数设置为 2。在发送 ARP 报文时,尽可能使用能被其他主机路由到达的本地接口的 IP 地址。# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore :将所有网络接口的 arp_ignore 参数设置为 1。# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce :将所有网络接口的 arp_announce 参数设置为 2。# 限制某些情况下的 ARP 响应# 1.不理睬非本机ip请求,2优先其他主机路由也就是如果其他主机路由可以到达本地,让他们走远路过来本地

(4)生成脚本,对web02使用

 [root@web01 ~]# vim arp.sh ifconfig lo:0 10.0.0.101 broadcast 10.0.0.101 netmask 255.255.225.255 uproute add -host 10.0.0.101 dev lo:0echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce

2、测试

访问vip地址

 [root@dr ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  10.0.0.101:80 rr-> 10.0.0.11:80                 Route   1      1          0         -> 10.0.0.12:80                 Route   1      2          0         [root@dr ~]# ipvsadm -Ln --statsIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes-> RemoteAddress:PortTCP  10.0.0.101:80                       3       14        0     2661        0-> 10.0.0.11:80                        1       10        0     2477        0-> 10.0.0.12:80                        2        4        0      184        0

3、dr模式脚本

(1)dr脚本

 #!/bin/bash# 在ens33上挂载一个ip地址read -p "vip:" vipread -p "mac:" macread -p "num:" numifconfig $mac:$num $vip broadcast $vip netmask 255.255.255.255# 主机路由route add -host $vip dev $mac:$num# 安装ipvsadmyum list installed|grep ipvsadmmif [ $? —ne 0 ];thenyum -y install ipvsadmfi# 配置规则(不需要设置ip_forword)ipvsadm -Cread -p "rule:" ruleread -p "port:" portipvsadm -A -t $vip:$port -s $ruleread -p "rip1:" rip1ipvsadm -a -t $vip:$port -r $rip1 -gread -p "rip2:" rip2ipvsadm -a -t $vip:$port -r $rip2 -g

(2)rs脚本

 #!/bin/bash# 在ens33上挂载一个ip地址read -p "vip:" vipread -p "mac:" macread -p "num:" numifconfig $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_ignoreecho 2 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 1 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 2 > /proc/sys/net/ipv4/conf/all/arp_announce

练习:对mysql的3306服务进行负载均衡

1、配置mysql主机 x.x.x.21,命名为master_mysql.xxx.xxx,激活并且添加数据库test

2、在test中添加表student id int 主键,自增,name 字符串类型 非空,grade 字符串 非空,domi varchar 非空

3、添加三行数据

编号姓名班级宿舍
1001孙颖莎云计算1班1002
1002大头云计算2班1003
1003小胖云计算2班1004

3、配置mysql从服务,备份mysqlx.x.x.22的mysql服务,使用gtids同步事务

4、lvs对两台mysql主机进行rr负载均衡

5、使用python写一个脚本通过lvs ds主机读取mysql中的数据

6、自动化程度越高越好


http://www.ppmy.cn/news/1509061.html

相关文章

HarmonyOS.FA开发流程

开发环境配置 1、DevEco Studio的安装 2、DevEcoStudio模拟运行工程&#xff1a;运行Tools->Device Manager&#xff0c;使用已认证的HW开发者联盟帐号Login&#xff08;在DP平台申请测试者权限&#xff09;&#xff0c;点击"允许"授权&#xff0c;选择一个设备运…

vscode + cmake + ninja + ARMCC 配置stm32开发环境(构建篇)

vscode cmake ninja ARMCC 配置stm32开发环境&#xff08;构建篇&#xff09; 1. 前置环境 1.1 cmake安装 从CMake官网上下载CMake安装包进行安装CMake。CMake官网 安装完成之后&#xff0c;使用cmd查看cmake是否添加进入环境变量。 1.2 LLVM套件安装 从LLVM的github…

EasyExcel实现100w数据导入导出

EasyExcel实现100w数据导入导出 他山之石&#xff0c;可以攻玉 参考文章链接&#xff1a;百万数据的导入导出解决方案 个人功能实现github代码地址&#xff1a;batchExcelData-import-export 前置准备 Java17 SpringBoot3 100w数据生成SQL CREATE TABLE student_info (id …

C++ list【常用接口、模拟实现等】

1. list的介绍及使用 1.1 list的介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。 2.list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前…

Micrometer Tracing和Zipkin实现链路追踪

一、为什么使用链路追踪 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&#xff0c;链路中的任何一环出现高延时或错误都会引起整个…

小红书js逆向x-s之补环境

请求参数分析 数据文件在homefeed里&#xff0c;直接复制header参数在Convert curl commands 生成python代码跑一下 &#xff08;注意curlconverter生成的respond的输入参数里有一个是json&#xff0c;这个是不对的&#xff0c;需要改为data&#xff09; 结果发现报错&…

FPGA可以解决哪些问题?

FPGA 允许在单个芯片中实现大量数字逻辑&#xff0c;其运行速度相对较高&#xff0c;并且只需很少或不需要在 CPU 内核上运行的传统顺序程序即可完成其工作。 这种数字逻辑可以实现任何东西&#xff0c;从简单的UART到由数十个CPU内核组成的架构&#xff0c;每个CPU内核都运行自…

Cisco交换机SSH使用RSA公钥免密登录(IOS与Nexus,服务器以RHEL8为例)

目录 需求实验步骤0. 实验环境1. Linux2. CiscoIOS基础设置保存密钥登陆测试 3. CiscoNexus基础配置保存密钥登陆测试 需求 在实际工作中&#xff0c;常会遇到自动化的需求&#xff0c;那么在自动采集、配置等对网络设备的自动化需求中&#xff0c;不可避免的会遇到需要登录-&…