管理集群工具之LVS

news/2024/5/20 21:47:59

管理集群工具之LVS

集群概念

  • 将很多机器组织在一起,作为一个整体对外提供服务
  • 集群在扩展性、性能方面都可以做到很灵活
  • 集群分类
    • 负载均衡集群:Load Balance
    • 高可用集群:High Availability
    • 高性能计算:High Performance Computing

LVS

  • LVSLinux Virtual ServerLinux虚拟服务器
  • 实现负载均衡集群
  • 作者:章文嵩。国防科技大学读博士期间编写
  • LVS的工作模式
    • NAT:网络地址转换
    • DR:路由模式
    • TUN:隧道模式
  • 术语
    • 调度器:LVS服务器
    • 真实服务器:提供服务的服务器
    • VIP:虚拟地址,提供给用户访问的地址
    • DIR:指定地址,LVS服务器上与真实服务器通信的地址
    • RIP:真实地址,真实服务器的地址
  • 常见的调度算法,共10个,常用的有4个
    • 轮巡rr:真实服务器轮流提供服务(一共有两台服务器,第一个给A,第二个给B,第三个再给A…)
    • 加权轮巡wrr:根据服务器性能设置权重,权重大的服务器得到分配的请求就越多
    • 最少连接lc:根据真实服务器的连接数分配请求,优先分配连接少的
    • 加权最少连接wlc:类似wrr,根据权重分配请求
  • ipvsadm使用说明
    • -A:添加虚拟服务器
    • -E:编辑虚拟服务器
    • -D:删除虚拟服务器
    • -t:添加tcp服务器
    • -u:添加udp服务器
    • -s:指定调度算法。如轮巡rr、加权轮巡wrr、最小连接lc、加权最小连接wlc
    • -a:添加虚拟服务器后,向虚拟服务器中加入真实服务器
    • -r:指定真实服务器
    • -w:设置权重
    • -m:指定工作模式为NAT
    • -g:指定工作模式为DR

配置LVS NAT模式

  • NAT模式:通过lvs服务器来接收用户的请求,然后通过调度算法分配请求到真实服务器,然后真实服务器返回数据给lvs服务器,再有lvs服务器返回给用户

lvs-nat

  • clienteth0->192.168.88.10,gateway->192.168.88.5
  • lvseth0->192.168.88.5;eth1->192.168.99.5
  • web1eth0->192.168.99.100,gateway->192.168.99.5
  • web2eth0->192.168.99.200,gateway->192.168.99.5

环境准备

  • client
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.10/24 ipv4.gateway 192.168.88.5 connection.autoconnect yes# 启动
nmcli connection up eth0
  • lvs
# 设置eth0的ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 connection.autoconnect yes# 启动
nmcli connection up eth0# 设置eth1的ip
nmcli connection modify eth1 ipv4.method manual ipv4.addresses 192.168.99.5/24 connection.autoconnect yes# 启动
nmcli connection up eth1# 查看ip转发功能的内核参数
sysctl -a  # 这是查看所有的内核参数
sysctl -a | grep ip_forward
# net.ipv4.ip_forward = 0    # 1表示打开转发,0表示关闭转发# 永久打开ip_forward功能,可以使client和web1、web2互通
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 
sysctl -p
  • web1
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.99.100/24 ipv4.gateway 192.168.99.5 connection.autoconnect yes# 启动
nmcli connection up eth0# 安装httpd,并启动
yum install -y httpd
systemctl enable httpd --now
echo "web1" > /var/www/html/index.html
  • web2
# 设置ip
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.99.200/24 ipv4.gateway 192.168.99.5 connection.autoconnect yes# 启动
nmcli connection up eth0# 安装httpd,并启动
yum install -y httpd
systemctl enable httpd --now
echo "web1" > /var/www/html/index.html

相关配置

  • lvs服务器
# 安装lvs
yum install -y ipvsadm# 创建虚拟服务器,使用轮巡rr调度算法
ipvsadm -A -t 192.168.88.5:80 -s rr# 添加RIP
ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -m
ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -m# 查看配置
ipvsadm -Ln# 此时使用client访问192.168.88.5:80,效果是web1:web2,比例是1:1# 删除配置,使用加权轮巡wrr
ipvsadm -D -t 192.168.88.5:80 -s wrr
ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.100 -w 1 -m
ipvsadm -a -t 192.168.88.5:80 -r 192.168.99.200 -w 2 -m# 此时使用client访问192.168.88.5:80,效果是web1:web2,比例是1:2

配置LVS DR模式

  • DR模式相比于NAT模式,它不会因为lvs服务器的带宽而影响业务
  • DR模式:通过lvs服务器来接收请求,然后分配请求到真实服务器,然后通过真实服务器的虚拟网卡直接返回给用户

lvs-dr

  • clienteth0->192.168.88.10
  • lvseth0->192.168.88.5;eth0:0->192.168.88.15
  • web1eth0->192.168.88.100;lo:0->192.168.88.15/32
  • web2eth0->192.168.88.200;lo:0->192.168.88.15/32

环境准备

  • client相比与上一个实验无需操作
  • lvs
# 删除eth1网卡
nmcli connection delete eth1# 修改eth0,将ipv6那部分都删除,不然配置eth0:0的时候会报错ipv6冲突
vim ifcfg-eth0
# 文件内容如下,#后面的不用加入
TYPE=Ethernet  # 以太网
BOOTPROTO=none  # dhcp/none/static,none和static代表静态配置
NAME=eth0  # 为设备重命名
DEVICE=eth0  # 网卡设备名
ONBOOT=yes  # 开机激活
IPADDR=192.168.88.5  # ip
PREFIX=24  # 子网掩码
GATEWAY=192.168.88.254  # 网关# 重启网卡
ifdown eth0; ifup eth0# 配置eth0:0,这里使用的是直接修改网卡配置文件的方法
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth0:0
vim ifcfg-eth0:0
# 文件内容如下
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.88.15
PREFIX=24# 重启网卡
ifdown eth0:0; ifup eth0:0# 查看是否成功
ifconfig
  • web1
cd /etc/sysconfig/network-scripts/
# 修改eth0网络
vim ifcfg-eth0
# 文件内容如下
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.88.200
PREFIX=24
GATEWAY=192.168.88.254# 重启网卡(虚拟机情况下,修改完ip之后,记得修改一下网卡的连接,不然会连不上)
ifdown eth0; ifup eth0# 添加lo:0网卡
cp ifcfg-eth0 ifcfg-lo:0
# 文件内容如下
TYPE=Ethernet
BOOTPROTO=none
NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.15
PREFIX=32  # 这里掩码一定是32位,因为这个是一个虚拟地址# 重启网卡
ifdown lo:0; ifup lo:0# 查看是否生效
ifconfig# 配置内核参数,使它不响应192.168.88.15的请求(这一步很重要)
vim /etc/sysctl.conf
# 文件内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2# 重新加载内核
sysctl -p
  • web2
cd /etc/sysconfig/network-scripts/
# 修改eth0网络
vim ifcfg-eth0
# 文件内容如下
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.88.100
PREFIX=24
GATEWAY=192.168.88.254# 重启网卡(虚拟机情况下,修改完ip之后,记得修改一下网卡的连接,不然会连不上)
ifdown eth0; ifup eth0# 添加lo:0网卡
cp ifcfg-eth0 ifcfg-lo:0
# 文件内容如下
TYPE=Ethernet
BOOTPROTO=none
NAME=lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.88.15
PREFIX=32  # 这里掩码一定是32位,因为这个是一个虚拟地址# 重启网卡
ifdown lo:0; ifup lo:0# 查看是否生效
ifconfig# 配置内核参数,使它不响应192.168.88.15的请求(这一步很重要)
vim /etc/sysctl.conf
# 文件内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2# 重新加载内核
sysctl -p

相关配置

  • lvs服务器
# 清除之前的配置
ipvsadm -D -t 192.168.88.5:80# 创建虚拟服务器,使用的调度算法是最少连接lc
ipvsadm -A -t 192.168.88.15:80 -s lc# 向虚拟服务器中添加真实服务器(注意这里是-g,设置了权重是不影响的,因为使用的是lc,这里是为了下面演示修改虚拟服务器的调度算法)
ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.100 -w 100 -g
ipvsadm -a -t 192.168.88.15:80 -r 192.168.88.200 -w 200 -g# 此时使用client访问192.168.88.15:80,效果是web1:web2,比例是1:1# 修改虚拟服务器的调度算法为wlc
ipvsadm -E -t 192.168.88.15:80 -s wlc# 查看配置
ipvsadm -Ln# 此时使用client访问192.168.88.15:80,效果是web1:web2,比例是1:2

配置Keepalived+LVS DR模式

  • keepalived用于实现高可用集群
  • 它的工作原理就是VRRP(虚拟冗余路由协议)
  • 可以实现lvs服务器自动切换,并且可以根据web服务器的工作情况自动添加和删除

keepalived-lvs

  • clienteth0->192.168.88.10
  • lvs集群,使用keepalived服务,配置虚拟ip192.168.88.15/24
    • lvs1eth0->192.168.88.5,Master
    • lvs2eth0->192.168.88.6,Backup
  • web集群,都配置lo:0为192.168.88.15/32
    • web1eth0->192.168.88.100
    • web2eth0->192.168.88.200

环境准备

  • client不做修改
  • lvs1
# 配置网络
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.5/24 ipv4.gateway 192.168.88.254 autoconnect yes
nmcli connection up eth0# 安装keepalived和ipvsadm
yum install -y keepalived ipvsadm
  • lvs2
# 配置网络
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.88.6/24 ipv4.gateway 192.168.88.254 autoconnect yes
nmcli connection up eth0# 安装keepalived和ipvsadm
yum install -y keepalived ipvsadm
  • web1web2跟上次实验操作一致,不需要额外操作

相关配置

  • lvs1
# 编辑keepalived配置文件
vim /etc/keepalived/keepalived.conf
# 修改内容如下
1 ! Configuration File for keepalived
2 
3 global_defs {
4    notification_email {
5      acassen@firewall.loc
6      failover@firewall.loc
7      sysadmin@firewall.loc
8    }
9    notification_email_from Alexandre.Cassen@firewall.loc
10    smtp_server 192.168.200.1
11    smtp_connect_timeout 30
12    router_id lvs1  # 唯一id
13    vrrp_iptables  # 添加一行,自动开启iptables放行规则
14    vrrp_skip_check_adv_addr
15    vrrp_strict
16    vrrp_garp_interval 0
17    vrrp_gna_interval 0
18 }
19 
20 vrrp_instance VI_1 {
21     state MASTER  # 状态:MASTER为主,BACKUP为备
22     interface eth0  # 网卡
23     virtual_router_id 51  # 虚拟路由器地址
24     priority 100  # 优先级
25     advert_int 1  # 发送心跳信息的间隔
26     authentication {
27         auth_type PASS  # 认证类型为共享密码
28         auth_pass aabb  # 集群中密码相同,才能成为集群
29     }
30     virtual_ipaddress {
31         192.168.88.15  # VIP地址
32     }   
33 }
34 # 以下为keepalived配置lvs的规则
35 virtual_server 192.168.88.15 80 {  # 声明虚拟服务器的地址和端口
36     delay_loop 6  # 健康检查延迟6s开始
37     lb_algo rr  # 调度算法为rr
38     lb_kind DR  # 工作模式为DR
39     persistence_timeout 50  # 50s内相同客户端调度到相同服务器
40     protocol TCP  # 协议为TCP
41 
42     real_server 192.168.88.100 80 {  # 声明真实服务器的地址和端口
43         weight 1  # 权重
44         TCP_CHECK {  # 通过TCP协议对真实服务器做健康检查
45             connect_timeout 3  # 连接超时时间为3秒
46             nb_get_retry 3  # 3次访问失败则认为真实服务器故障
47             delay_before_retry 3  # 两次检查时间的间隔3秒
48         }
49     }
50 
51     real_server 192.168.88.200 80 {  # 第二个真实服务器配置跟第一台差不多
52         weight 2
53         TCP_CHECK {
54             connect_timeout 3
55             nb_get_retry 3
56             delay_before_retry 3
57         }
58     }
59 }# 启动服务
systemctl start keepalived.service# 查看设置是否成功
ip a s eth0 | grep 192.168.88.15
# inet 192.168.88.15/32 scope global eth0
ipvsadm -Ln
  • lvs2
# 编辑keepalived配置文件
1 ! Configuration File for keepalived
2 
3 global_defs {
4    notification_email {
5      acassen@firewall.loc
6      failover@firewall.loc
7      sysadmin@firewall.loc
8    }
9    notification_email_from Alexandre.Cassen@firewall.loc
10    smtp_server 192.168.200.1
11    smtp_connect_timeout 30
12    router_id lvs2  # 唯一id
13    vrrp_iptables  # 添加一行,自动开启iptables放行规则
14    vrrp_skip_check_adv_addr
15    vrrp_strict
16    vrrp_garp_interval 0
17    vrrp_gna_interval 0
18 }
19 
20 vrrp_instance VI_1 {
21     state BACKUP  # 状态:MASTER为主,BACKUP为备
22     interface eth0  # 网卡
23     virtual_router_id 51  # 虚拟路由器地址
24     priority 100  # 优先级
25     advert_int 1  # 发送心跳信息的间隔
26     authentication {
27         auth_type PASS  # 认证类型为共享密码
28         auth_pass aabb  # 集群中密码相同,才能成为集群
29     }
30     virtual_ipaddress {
31         192.168.88.15  # VIP地址
32     }   
33 }
34 # 以下为keepalived配置lvs的规则
35 virtual_server 192.168.88.15 80 {  # 声明虚拟服务器的地址和端口
36     delay_loop 6  # 健康检查延迟6s开始
37     lb_algo rr  # 调度算法为rr
38     lb_kind DR  # 工作模式为DR
39     persistence_timeout 50  # 50s内相同客户端调度到相同服务器
40     protocol TCP  # 协议为TCP
41 
42     real_server 192.168.88.100 80 {  # 声明真实服务器的地址和端口
43         weight 1  # 权重
44         TCP_CHECK {  # 通过TCP协议对真实服务器做健康检查
45             connect_timeout 3  # 连接超时时间为3秒
46             nb_get_retry 3  # 3次访问失败则认为真实服务器故障
47             delay_before_retry 3  # 两次检查时间的间隔3秒
48         }
49     }
50 
51     real_server 192.168.88.200 80 {  # 第二个真实服务器配置跟第一台差不多
52         weight 2
53         TCP_CHECK {
54             connect_timeout 3
55             nb_get_retry 3
56             delay_before_retry 3
57         }
58     }
59 }# 启动服务
systemctl start keepalived.service# 因为lvs2是备用服务器,当主服务器正常运行时,是不会出现VIP的,只能通过ipvsadm的配置查看
ipvsadm -Ln

效果演示

  1. 正常访问
for i in {1..6}; do curl http://192.168.88.15; done
# 结果都是web1或者web2,是因为上面的keepalived配置文件中第39行,配置了50s内相同服务器调度到相同服务器
  1. lvs1关机,然后查看lvs2的ip,再次访问测试
# lvs2
ip a s | grep 192.168.88.15
# 输出: inet 192.168.88.15/32 scope global eth0# client正常能够访问,实现了自动切换
for i in {1..6}; do curl http://192.168.88.15; done
  1. web2httpd服务器关闭,然后查看lvs2ipvsadm配置,再次访问测试
# lvs2
ipvsadm -Ln
# 结果只有一个真实服务器TCP -> 192.168.88.100:80            Route   1      0          0 # client正常能够访问,只能访问到web1
for i in {1..6}; do curl http://192.168.88.15; done
  1. lvs1启动,并启动它的keepalived服务,查看VIP会不会自动切换过来,再次访问测试
# 查看lvs1网卡,发现VIP自动切换过来了
ip a s | grep 192.168.88.15
# 输出: inet 192.168.88.15/32 scope global eth0# client正常能够访问,只能访问到web1
for i in {1..6}; do curl http://192.168.88.15; done

http://www.mrgr.cn/p/52511756

相关文章

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式: 直接使用allure.title为测试用例自定义标题;allure.title支持通过占位符的方式传递参数,可以实现测试用例标题参数化&a…

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

练习安装Python扩展库

(三)、练习安装Python扩展库 【实验截图】 1、在资源管理器中进入 Python 安装目录的 scripts 子目录,然后按下 Shift 键,在空 白处单击鼠标右键,在弹出来的菜单中选择“在此处打开命令窗口”进入命令提示符环境2.使用 pip 命令在线安装 Python 扩展库 numpy、pandas、sci…

Spark-机器学习(3)回归学习之线性回归

在之前的文章中,我们了解我们的机器学习,了解我们spark机器学习中的特征提取和我们的tf-idf,word2vec算法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你…

ZeRO论文阅读

一.前情提要 1.本文理论为主,并且仅为个人理解,能力一般,不喜勿喷 2.本文理论知识较为成体系 3.如有需要,以下是原文,更为完备 Zero 论文精读【论文精读】_哔哩哔哩_bilibili 二.正文 1.前言 ①为什么用该技术&…

4.25日团队开发第六天

今天进行了晨会晨会成员:董茂欣、龚涵彬、刘雪超 主要进行了团队内容完成分析,以及不会点的讨论,调用后端接口完成视频的播放

企业网架构与安全设备部署

在现代网络中,为了满足不同规模和需求的组织和企业的通信需求,网络架构通常会划分为多个层次,其中包括接入层、汇聚层和核心层。目录企业网三层架构常见安全设备网络区域划分网络架构拓扑示例 企业网三层架构 在现代网络中,为了满足不同规模和需求的组织和企业的通信需求,…

Typora for Mac:轻量级Markdown编辑器

Typora for Mac是一款专为Mac用户设计的轻量级Markdown编辑器,它以其简洁的界面和强大的功能,成为了Markdown写作爱好者的首选工具。 Typora for Mac v1.8.10中文激活版下载 Typora的最大特色在于其所见即所得的编辑模式,用户无需关心复杂的M…

Ubuntu部署jmeter与ant

为了整合接口自动化的持续集成工具,我将jmeter与ant都部署在了Jenkins容器中,并配置了build.xml 一、ubuntu部署jdk 1:先下载jdk-8u74-linux-x64.tar.gz,上传到服务器,这里上传文件用到了ubuntu 下的 lrzsz。 ubunt…

【工作】比亚迪工作笔记2——入职两周

1、工作制度 比亚迪每天打卡3次。 》早上弹性打卡上班,可以在8:30~9:30之间打卡。9:30之后算迟到。 》中午打卡时间12:00~13:00。大部分人选择12:01打卡然后去吃饭。 》晚上打卡时间,要求早晚打卡之间不少于9小时(理想情况下)。 实际上虹桥这边很少按点下班,工作到9…

2024第十五届蓝桥杯网络安全赛项WriteUp

欢迎关注公众号【Real返璞归真】回复【蓝桥杯2024】获取完整题目附件。 排名 安全知识 错1个选择题,题目说的不清楚,没搞懂题意。肯定不能用eval。错了理论题有点遗憾。 没想到这题前端是要解析json数据,排除CD选了A,结果发现正…

【项目学习01_2024.04.27_Day01】

学习笔记 项目学习链接第2章 内容管理模块v3.11 模块需求分析1.1 什么是需求分析1.2 模块介绍1.3 业务流程1.4 界面原型 2 创建模块工程2.1 模块工程结构父工程和子工程之间的继承关系以及工程与工程之间的依赖关系,通俗理解:2.2 创建模块工程\pom\含义及…

vue2 学习笔记

视屏地址:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=14&spm_id_from=pageDriver&vd_source=ad97a93a8a42c9559b03a66114d94d18 vue2 学习笔记: 1. 对象里面写方法,不用写 function 关键字。比如:

一个算法工程师的学习

本系列主要记录在算法工作模型训练过程中一些列用到的技术。训练模型需要学习和积累的知识非常多,在学习了之后会做一个总结,并记录在这里。voc数据集转换成coco数据集

Unity对应的c#版本

本文主要是记录一下unity已经开始兼容c#的版本和.net版本,以便更好的利用c#的特性。 c#和.net对应情况 微软已经将.net开发到.net 9了,但是unity的迭代速度远没有c#迭代速度快,已知unity最新的LTS版本unity2023已经兼容了c#9 可以在unity手册…

车道分割YOLOV8-SEG

车道分割YOLOV8-SEG,训练得到PT模型,然后转换成ONNX,OPENCV的DNN调用,支持C,PYTHON,ANDROID开发 车道分割YOLOV8-SEG

2024/4/27开发

讨论:讨论今天要干什么,但是有一个去陪女朋友去了,剩下两个下午都有一个预选赛,今天事情都很多,就考虑今天停工一天。

指针常量与常量指针

指针常量和常量指针的区别 1.指针常量定义的是一个常量,常量不可改变,因此必须在定义的时候初始化。 2.指针常量不可以改变指针指向的内存地址中的值;常量指针 可以改变指针指向的内存地址中的值。 3.指针常量 可以改变指针指向的内存地址;常量指针不可以改变指针指向的内…

MATLAB矩阵

MATLAB 矩阵 矩阵是数字的二维数组。 在MATLAB中,您可以通过在每行中以逗号或空格分隔的数字输入元素并使用分号标记每行的结尾来创建矩阵。 例如,让我们创建一个45矩阵一- 示例 a [ 1 2 3 4 5; 2 3 4 5 6; 3 4 5 6 7; 4 5 6 7 8] MATLAB将执行上述语…

实验3 :软件测试

一、实验题目 :软件测试 二、实验目的 1、熟悉开发环境下的自动化测试工具; 1、利用自动化测试工具进行自动化单元测试。 三、实验内容 1、选择开发环境,IDEA或PYCHARM任选其一; 2、基于所选择的开发环境实现对输入的n个整数进行排序的代码; 3、对所编写代码设计测试用例;…