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

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 关于系…

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 完全按…

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

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

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

文章目录 前言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;点击菜单编辑-虚拟网络编辑器-选择…

机器学习-10-神经网络python实现-从零开始

文章目录 总结参考本门课程的目标机器学习定义从零构建神经网络手写数据集MNIST介绍代码读取数据集MNIST神经网络实现测试手写的图片 带有反向查询的神经网络实现 总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍基于python实现神经网络。 参考 BP神经网络及pytho…

Reactor 模式

目录 1. 实现代码 2. Reactor 模式 3. 分析服务器的实现具体细节 3.1. Connection 结构 3.2. 服务器的成员属性 3.2. 服务器的构造 3.3. 事件轮询 3.4. 事件派发 3.5. 连接事件 3.6. 读事件 3.7. 写事件 3.8. 异常事件 4. 服务器上层的处理 5. Reactor 总结 1…

公钥密码学Public-Key Cryptography

公钥或非对称密码学的发展是整个密码学历史上最伟大的&#xff0c;也许是唯一真正的革命。The development of public-key, or asymmetric, cryptography is the greatest and perhaps the only true revolution in the entire history of cryptography. 公钥算法基于数学函数…

node.js如何实现留言板功能?

一、实现效果如下&#xff1a; 20240422_160404 二、前提配置&#xff1a; 配置&#xff1a;需要安装并且导入underscore模板引擎 安装&#xff1a;在控制台输入npm install underscore -save 文件目录配置&#xff1a; 1》在文件里建一个data文件夹&#xff0c;此文件夹下…

ContextMenuStrip内容菜单源对象赋值学习笔记(含源码)

一、前言 MetroTileItem属于第三方控件,无法定义ContextMenuStrip属性 想实现某子项点击菜单时,与源控件(按钮metroTileItem)的某值对应,用于动态控制按钮的状态或方法 1.1 效果 二、实现方法 2.1 方法1 (代码,说明见注释) private void metroTileItem_MouseDown(o…

【题解】AB5 点击消除(栈)

https://www.nowcoder.com/practice/8d3643ec29654cf8908b5cf3a0479fd5?tpId308&tqId40462&ru/exam/oj 把string当栈用&#xff0c;扫一遍就可以了&#xff0c;时间复杂度O(n) #include <iostream> #include <string> using namespace std;int main() {…

向量的点积和叉积的几何意义

1. 点积 点积(dot product)&#xff0c;又称标量积&#xff08;scalar product&#xff09;。结果等于。 可用于 判断的是否垂直求投影长度求向量是抑制作用还是促进作用 2. 叉积 叉积(cross product)&#xff0c;又称为向量积(vector product)。模长等于&#xff0c;方向…