8月13日学习笔记 LVS

一.描述以及工作原理

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地址刚好是自己的 后端服务器,那么通过选路,将数据包最终发送给后端服务器

二.组成以及相关术语

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地址

三.三种工作模式

1. *LVS-NAT模式

2. *LVS-DR模式

3. Lvs-Tun模式(隧道模式)

四.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为cip

NAT模型的特性

1. Rs应该是私有地址,Rs网关必须指向DIP

2. DIP和RIP必须在同一个网段内

3. 请求和响应报文都应该经过Director Server,高负载场景中Director Server容易成为性能瓶颈

4. 支持端口映射

5. Rs可是使用任意操作系统

6. 缺陷,对Ds压力会比较大,请求和响应都需要经过ds,

五.NAT模式实战-环境准备

1. 环境规划

2. 给NAT主机增加一张网卡

命名为ens37,自动或者手工获取ip均可, 理论上nat对应ds服务器应该有两张网卡(vip,dip)vip对外服务,需 要使用公网ip,dip内网局域网,使用虚拟机使用仅主机模式,也可以用 桥接模式和nat模式都可以

3. 步骤

1. 配置两个网卡和两个ip地址,正常来说应该配置两个不同的网段的 ip,一个对外的vip,一个对内的dip,现在主要使用nat的网络模 式,可以配置桥接模式对外,Nat对内,教师机不方便配置桥接模 式,所以都是配置的nat模式,但是一定要分清楚哪个ip是vip,哪个 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服务器

13.清单

六.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

七.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

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

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

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

3.添加三行数据

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

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

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

6.自动化程度越高越好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/400632.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

杭州网络安全等保测评——数据守护者的金盾牌️

在数字化转型疾驰的杭州&#xff0c;网络疆域的每一次拓展都伴随着安全风险的增长。如何在创新与安全之间找到黄金平衡点&#xff1f;《杭州等保测评&#xff1a;守护网络安全的坚实屏障》一文&#xff0c;深入探索这座智慧城市如何依托等保测评体系&#xff0c;构建起一道道安…

【已EI检索会议】第五届新材料与清洁能源国际学术会议(ICAMCE 2024)

重要信息 会议官网&#xff1a;2024.icceam.com 接受/拒稿通知&#xff1a;投稿后1周内 收录检索&#xff1a;EI, Scopus 会议召开视频 见刊封面 EI检索页面 Scopus 检索页面 相关会议 第六届新材料与清洁能源国际学术会议&#xff08;ICAMCE 2025&#xff09; 大会官网&…

机器学习常用包numpy篇(二)数组属性与基本操作

目录 前言 数组属性 1.数组转置 2.数组元素的数据类型 3.数组元素的虚部 4.数组元素的实部 5.数组包含的元素个数 6.数组元素的字节数 7.数组元素的总字节 8.数组维度 9.数组形状 10.每个维度中步进的字节数组 11.数组维度和形状 数组基本操作 1.重设形状 2.数…

【vue3|第23期】Vite + Vue3: 深入理解public和assets文件夹的作用与使用

日期&#xff1a;2024年8月14日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

GBJ406-ASEMI无人机专用GBJ406

编辑&#xff1a;ll GBJ406-ASEMI无人机专用GBJ406 型号&#xff1a;GBJ406 品牌&#xff1a;ASEMI 封装&#xff1a;GBJ-4 批号&#xff1a;2024 现货&#xff1a;50000 最大重复峰值反向电压&#xff1a;600V 最大正向平均整流电流(Vdss)&#xff1a;4A 功率(Pd)&am…

“从零开始的HTML 表格”——WEB开发系列09

HTML 表格是一种用于在网页上组织和显示信息的结构性元素&#xff0c;它能够将数据以行和列的形式呈现&#xff0c;帮助用户更清晰地理解数据关系。表格在展示统计数据、产品列表、日程安排等方面非常实用。 一、HTML 表格的基本结构 HTML 表格用 ​​<table>​​ 标签来…

day36——homework

二、基于UDP的TFTP文件传输 1&#xff09;tftp协议概述 简单文件传输协议&#xff0c;适用于在网络上进行文件传输的一套标准协议&#xff0c;使用UDP传输 特点&#xff1a; 是应用层协议 基于UDP协议实现 数据传输模式 octet&#xff1a;二进制模式&#xff08;常用&am…

MySQL源码安装与MySQL基础学习

1、安装MySQL ​ 本次安装使用的是绿色硬盘版本&#xff0c;无需额外安装依赖环境&#xff0c;比较简单 修改相关配置文件&#xff1a; 设置环境变量&#xff0c;声明/宣告MySQL命令便于系统识别&#xff1a; 初始化数据库&#xff1a; 设置系统识别&#xff0c;进行操作&…

Java基础之隐式类型转换

类型转换 基本数据类型表示范围大小排序&#xff1a; 在变量赋值及算术运算的过程中&#xff0c;经常会用到数据类型转换&#xff0c;其分为两类&#xff1a; 隐式类型转换 显式类型转换 1 隐式类型转换 情形1&#xff1a;赋值过程中&#xff0c;小数据类型值或变量可以直…

八股文学习总结

八股文学习总结 文章目录 八股文学习总结一、总体概况二、Java基础三、集合四、JUC五、JVM六、MYSQL七、Redis八、MQ九、计网十、OS十一、附上我记的笔记 一、总体概况 八股文也看了好多天了&#xff0c;我对八股文基本上考察哪些点也都有了印象&#xff0c;主要的分为Java基础…

Spring-AOP实现后置、返回、异常和环绕通知

后置通知 在切入点的目标方法执行后&#xff08;无论有异常抛出没的&#xff09;&#xff0c;都会执行这个通知方法! 如果想要在通知方法里访问到目标方法返回的结果&#xff0c;可以用返回通知 返回通知 是在目标方法执行之后没有异常&#xff0c;并且返回结果后才执行通知…

【自用】Python爬虫学习(七):selenium网页自动化操作

Python爬虫学习&#xff08;七&#xff09; selenium介绍selenium基础用法selenium其他自动化操作selenium动作链与iframe的处理selenium无可视化界面与反检测实现 selenium介绍 selenium是一个广泛使用的开源自动化测试框架&#xff0c;主要用于Web应用程序的功能测试。它支持…

机器学习速成第二集——监督学习之分类(理论部分)!

目录 分类算法的种类 分类问题的应用场景 模型选择与评估 结论 如何在不同数据集中选择最适合的监督学习分类算法&#xff1f; 监督学习中集成模型与单一模型相比有哪些具体的优势和劣势&#xff1f; 优势&#xff1a; 劣势&#xff1a; 在处理高维稀疏数据时&#xf…

Kubernetes-K8S

Kubernetes由于单词太长&#xff0c;省略掉中间8个字母简称为K8S。它介于应用服务和服务器之间。能够通过策略协调和管理多个服务&#xff0c;只需要一个YAML文件配置。定义应用的部署顺序等信息&#xff0c;自动部署应用到各个服务器&#xff0c;还可以自动扩容缩容。 架构原理…

K8S资源之Service

概念 将一组 Pods 公开为网络服务的抽象方法。 ClientIP 模型 集群内访问类型。 命令行 # 暴露端口 kubectl expose deployment my-dep-nginx --port8000 --target-port80Yml文件 apiVersion: v1 kind: Service metadata:labels:app: my-dep-nginxname: my-dep-nginx spe…

【张】#12 enum 枚举

enum 枚举定义格式&#xff1a; enum <类型名> {<枚举常量表> }; 枚举其实就是一个整数 enum example {Aa,Bb10,Cc //给Bb赋值为10后&#xff0c;Cc的值会变成11 }; 枚举变量只能使用枚举值&#xff0c;枚举可以赋值给整型&#xff0c;整型不能赋值给枚举 #inc…

Django | 从中间件的角度理解跨站请求伪造(Cross-Site Request Forgey)[CSRF攻击]

文章目录 切入点案例测试views.py测试代码templates模板下的html文件配置路由运行服务 出现CSRF报错解决CRSF报错再次运行服务 查看结果 切入点 某些恶意网站上包含链接、表单按钮或者]avaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作 Gj…

HTML+CSS进阶用法(上)——平面转换、渐变、空间转换

欢迎来到CSS变换的世界&#xff0c;这里充满了创意和可能性。在本篇博客中&#xff0c;我们将一起学习如何使用transform属性来实现各种平面和空间转换效果&#xff0c;包括位移、旋转、缩放&#xff0c;以及如何通过渐变和动画来增强我们的网页设计。无论你是初学者还是有经验…

并发编程(第二天)

interrupt 方法详解 打断 sleep&#xff0c;wait&#xff0c;join 的线程 这几个方法都会让线程进入阻塞状态 打断 sleep 的线程, 会清空打断状态打断正常运行的线程 打断正常运行的线程, 不会清空打断状态打断 park 线程 打断 park 线程, 不会清空打断状态 如果打断标记已经…

【Python】线性规划模型(笔记)

线性规划的作用 求一个线性目标函数在线性可行域内的最值问题 线性规划的典型应用 配送运输问题&#xff1a;选大车还是小车生产规划问题&#xff1a;每种原料各买多少几何切割问题&#xff1a;切割长宽各多少买卖利润问题&#xff1a;最多能挣多少钱… 线性规划的本质 问…