8.13

核心:内核中的ipvs,ipvsadm

1、安装ipvsadm

[root@nat ~]# yum -y install ipvsadm

2、配置规则

查看所有的规则,如果已经配置好规则,重启之后也就没有了

[root@nat ~]# ipvsadm -L -n

1、配置vip网卡

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

查看自己本机WLAN所属网卡

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

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

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

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

查看所有网络

[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:f5:ea:0a brd ff:ff:ff:ff:ff:ff

inet 10.0.0.10/24 brd 10.0.0.255 scope global noprefixroute ens33

valid_lft forever preferred_lft forever

inet6 fe80::3598:4e0:b43d:ccc8/64 scope link noprefixroute

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:f5:ea:14 brd ff:ff:ff:ff:ff:ff

inet 192.168.11.83/23 brd 192.168.11.255 scope global noprefixroute dynamic ens36

valid_lft 7147sec preferred_lft 7147sec

inet6 fe80::8de7:6bd9:74a1:8f60/64 scope link noprefixroute

valid_lft forever preferred_lft forever

4、编辑网卡配置

[root@nat ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens36

[root@nat ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36

TYPE=Ethernet

BOOTPROTO=none

IPADDR=192.168.10.101

NAME=ens36

UUID=d4cfa5ab-7c2a-4fab-b329-396b9b38b1bf

DEVICE=ens36

ONBOOT=yes

5、重启网络服务

[root@nat ~]# systemctl restart network

6、本机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 -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.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 InActConn

TCP 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 -p

net.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-ens36

read -p "router name:" router_name

echo 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

#安装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:" rule

read -p "rip1:" rip1

read -p "rip2:" rip2

ipvsadm -A -t vip:port -s $rule

ipvsadm -a -t vip:port -r rip1:port -m

ipvsadm -a -t vip:port -r rip2:port -m

#ip转发

echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf

sysctl -p

#rs 脚本

#!/bin/bash

设置网关

read -p "dip:" dip

ip route del default

ip 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 rr

ipvsadm -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 -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 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_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

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 up

route add -host 10.0.0.101 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

2、测试

访问vip地址

[root@dr ~]# ipvsadm -Ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 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 --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes

-> RemoteAddress:Port

TCP 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:" 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 ipvsadmm

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

(2)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

练习:对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、自动化程度越高越好

相关推荐
Komorebi.py25 分钟前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh30 分钟前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
中云DDoS CC防护蔡蔡1 小时前
微信小程序被攻击怎么选择高防产品
服务器·网络安全·微信小程序·小程序·ddos
HPC_fac130520678162 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
速盾cdn3 小时前
速盾:CDN是否支持屏蔽IP?
网络·网络协议·tcp/ip
yaoxin5211234 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
内核程序员kevin4 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
PersistJiao5 小时前
Spark 分布式计算中网络传输和序列化的关系(一)
大数据·网络·spark
黑客Ash8 小时前
【D01】网络安全概论
网络·安全·web安全·php
->yjy8 小时前
计算机网络(第一章)
网络·计算机网络·php