管理集群工具之LVS

管理集群工具之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

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

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

相关文章

模拟网关是什么?

模拟网关是一种网络设备,用于在模拟电话系统和数字网络之间进行信号转换。它的主要作用是将模拟语音信号转换为数字格式,使得这些信号能够通过基于IP(互联网协议)的网络进行传输,从而实现语音通信。这种设备是将传统的…

Python环境找不到解决方法

Python环境找不到 打开设置:Ctrl Alt S 添加Local Interpreter... 打开System Interpreter,找到本地安装的Python.exe路径,然后一路点OK Trust Project 如果打开工程时,出现如下对话框,请勾选 Trust projects in ...&…

项目管理中,项目团队如何高效的协作与沟通?

目 录 一、项目团队高效的协作与沟通,可以通过以下几个方面来实现: 二、如何在项目团队中明确和共享愿景以提高协作效率? 三、有效的沟通策略在项目管理中的应用案例有哪些? 四、建立哪些具体的沟通机制可以提升团队协作效率…

matlab学习003-绘制由差分方程表示的离散系统图像

目录 1,题目 2,使用函数求解差分方程 1)基础知识 ①filter函数和impz函数 ②zeros函数 ☀ 2)绘制图像 ​☀ 3)对应代码 如果连简单的信号都不会的,建议先看如下文章👇,之…

互联网大厂ssp面经,数据结构part2

1. 什么是堆和优先队列?它们的特点和应用场景是什么? a. 堆是一种特殊的树形数据结构,具有以下特点:i. 堆是一个完全二叉树,即除了最后一层外,其他层都是满的,并且最后一层的节点都靠左对齐。i…

【设计模式】11、flyweight 享元模式

文章目录 十一、flyweight11.1 pool 连接池11.1.1 pool_test.go11.1.2 pool.go11.1.3 conn.go 11.2 chess_board11.2.1 chess_test.go11.2.2 chess.go 十一、flyweight https://refactoringguru.cn/design-patterns/flyweight 大量重复的对象, 如果很消耗资源, 没必要每次都初…

IP/网关流量控制:Linux上设置多个路由表 (多号段IP配置)

文章目录 引言I 使用特定的路由策略和规则1.1 实现思路1.2 配置路由策略II Mac/window的IP多号段配置2.1 Mac电脑2.2 windows系统2.3 linux系统III 预备知识3.1 配置接口 IP 地址和网关3.2 启用IP转发功能3.3 修改IP地址3.4 添加一个新的路由策略3.5 路由表配置引言

常见的经典目标检测

常见的经典目标检测算法主要包括: R-CNN 系列57:R-CNN(Region-based Convolutional Neural Networks)是一种经典的目标检测算法,它通过卷积神经网络(CNN)提取候选区域特征,然后使用支…

SEGGER Embedded Studio IDE移植FreeRTOS

SEGGER Embedded Studio IDE移植FreeRTOS 一、简介二、技术路线2.1 获取FreeRTOS源码2.2 将必要的文件复制到工程中2.2.1 移植C文件2.2.2 移植portable文件2.2.3 移植头文件 2.3 创建FreeRTOSConfig.h并进行配置2.3.1 处理中断优先级2.3.2 configASSERT( x )的处理2.3.3 关于系…

【npm】常用的NPM命令及在开发过程中的应用

常用的NPM命令及在开发过程中的应用 NPM(Node Package Manager)是JavaScript的包管理工具,也是世界上最大的软件注册表。它允许开发者共享和重用代码,并便于管理各种Node.js的包依赖。本文将介绍一些常用的NPM命令,并…

linq select 和selectMany的区别

Select 和 SelectMany 都是 LINQ 查询方法&#xff0c;但它们之间有一些区别。 Select 方法用于从集合中选择特定的属性或对集合中的元素进行转换&#xff0c;并返回一个新的集合。例如&#xff1a; var numbers new List<int> { 1, 2, 3, 4, 5 }; var squaredNumbers…

SRS WebRTC Whip 和 Whep 部署体验问题

whip 報錯 404 webrtc推流 小窗口一闪而过&#xff0c;然后查看f12回复404的报错信息 chrome版本&#xff1a; 正在检查更新 版本 123.0.6312.123&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; centos 7.9 源码安装部署&#xff0c; 代码分支5.0 完全按…

【设计模式】中介模式

目录 什么是中介模式 中介模式的组成 使用场景&#xff1a; 优点&#xff1a; 缺点&#xff1a; Java 示例代码&#xff1a; 什么是中介模式 Java 中的中介模式&#xff08;Mediator Pattern&#xff09;是一种行为型设计模式&#xff0c;旨在降低多个对象和类之间的通信…

socket通信基础讲解及示例-C

socket通信之C篇 服务端与客户端简介 socket通信服务端与客户端通信模型通信实战server&#xff08;服务端&#xff09;创建client&#xff08;客户端&#xff09;创建 函数详解创建套接字 socket绑定端口bind进入监听状态listen获取客户端连接请求accept接收网络数据read发送数…

selenium上传文件时打开指定本地文件路径

遇到这样一个问题&#xff1a; 用selenium和chromedriver操作浏览器&#xff0c;其中有一个“本地上传”的按钮&#xff0c;点击后&#xff0c;会进入本地电脑的文件夹&#xff0c;但是这个文件夹一般是C:\Users\XX。如何指定本地上传路径呢&#xff1f; 看起来很简单的一个问…

《前端面试题》- 编程题-手写new(JS)

function Person(name) {this.name name; }Person.prototype.say function() {console.log(Im ${this.name}); }const xiaoming new Person(xiaoming); xiaoming.say(); // 输出 // Im xiaomingfunction _new(fn, ...args) {// 基于fn的原型创建一个新的对象const emptyObj …

每日一题---移除链表元素

文章目录 前言1.题目2.分析思路3.参考代码 前言 Leetcode–-移除链表元素 1.题目 2.分析思路 首先要创建一个新的链表&#xff0c;在定义三个指针&#xff0c;newHead&#xff0c;newTail和pcur&#xff0c;分别代表新链表头&#xff0c;新链表尾以及用于遍历原链表。 其次是…

Rust入门-所有权

一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道&#xff0c;如何从内存中申请空间来存放程序的运行内容&#xff0c;如何在不需要的时候释放这些空间&#xff0c;成为所有编程语言设计的难点之一。 主要分为三种…

git merge 和 git rebese的区别

git merge 和 git rebese的区别 拉取分支和合并代码会涉及两种选择&#xff0c;git merge 和 git rebase&#xff1a; rebase&#xff1a;变基&#xff0c;会有一个干净的分支&#xff0c;但是对于记录来源不够清楚merge&#xff1a;合并&#xff0c;git 分支看起来比较混乱&…

CentOS 7虚拟机配置静态IP地址(一)

IP地址的配置 以下几个地址需要记住&#xff0c;在配置中使用 &#xff08;1&#xff09;查看MAC地址&#xff08;点击菜单虚拟机-设置-网络适配器-高级-记住MAC地址&#xff09; &#xff08;2&#xff09;查看子网掩码和网关IP&#xff08;点击菜单编辑-虚拟网络编辑器-选择…