LVS负载均衡及LVS-NAT模式

news2024/10/4 10:20:06

一、集群概述

1.1 集群的背景

集群定义:为解决某个特定问题将多个计算机组合起来形成一个单系统

集群目的:为了解决系统的性能瓶颈

集群发展历史:
垂直扩展:向上扩展,增加单个机器的性能,即升级硬件
水平扩展:向外扩展,增加设备。并行的运行多个服务,通过网络和算法来调度服务分配的问题

1.2 集群的类型

  • 负载均衡集群:LB(loab blance),由多个主机组成,每个主机只承担一部分访问请求。主要靠负载均衡算法来实现
  • 高可用集群:HA(high availiablity),避免SPOF(single point of failure)单点故障。系统当中有一部分组件出现故障,可以保障整个系统继续运行
  • 高性能集群:HPC(hish-performance computing),快速转发,快速响应

1.3 集群的可靠性指标

  • MTBF:mean time between failure,系统在正常运行期间无故障的平均时间,一般用小时或者天数来表示。MTBF值越高,系统的可靠性越高,出现故障的概率也越小
  • MTTR:系统从发生故障到恢复正常运行的平均时间,一般用小时或者天数表示,MTTR值越小,说明系统恢复故障的能力越强
  • A:系统的可靠性指标,A值越高越好

三者关系:A=MTBF/(MTBF+MTTR)

停机时间:

计划内停机:指预定时间内的维护或者检修时间

计划外停机:运维人员主要关注

1.4 设计集群的原则

1、可扩展性:集群要有随时可以添加或者删除设备的能力以及动态地扩缩容
2、可靠性:集群中如果有节点发生故障,可以快速检测并且自动切换
3、负载均衡:合理地分配负载,避免单个节点过载,影响整体性能
4、可维护性:能够方便地进行配置、维护、监控,降低成本
5、安全性:防止恶意攻击以及数据泄露、丢失
6、易用性:相关的工作人员可以方便地进入集群,能够快速地开发、部署、测试等等

二、LVS虚拟服务器

2.1 LVS概述

Linux Virtual Server:是一个部署在Linux系统通过内核层面实现负载均衡的软件

主要作用:多个后端服务器组成一个高可用、高性能、负载均衡的高性能集群。通过负载均衡的算法将客户端请求发送到后端服务器

LVS集群当中的术语:

vs(virtual server):lvs服务的逻辑名字,外部访问lvs集群时提供的一个虚拟ip地址和端口
DS(Directop server):lvs集群当中的主服务器,也叫调度器,是整个lvs集群的核心,接受客户端的请求转发到后端RS
RS(real server):lvs的后端的真实服务器的ip,接收到了DS的请求之后返回响应结果
CIP(client ip):客户端的ip地址
VIP(virtual ip):对外提供访问的同一虚拟IP地址
DIP(Director ip):调度器在lvs内部使用的ip地址,用于和真实服务器进行通信
RIP:后端真实服务器的ip地址

2.2 LVS访问流程

  1. 客户端访问都是访问vip
  2. DS接收到请求,根据调度算法选择好后端服务器(rs)
  3. RS处理请求并将响应发送到DS
  4. DS把RS的响应包装成自己响应,发送到客户端

这种情况下,客户端既不知道请求的真实服务器,也不知道响应的服务器

2.3 LVS的负载均衡方式

  • NAT(Network Address Translation):地址转换,访问的是vip,进入集群,调度器来选择一台后端的真实服务器,然后转发到真实服务器;响应过程是先到调度器,调度器做地址转换,再把响应发送到客户端。

  • DR(Direct Routing):直接路由模式 ,在LVS集群和后端服务器之间建立一个虚拟接口,将客户端请求直接发送到后端服务器,并将后端服务器返回的响应包通过LVS集群进行转发。

  • TUN(Tunneling):隧道协议, 将客户端请求通过LVS集群中的一个IP地址和端口号发送到后端服务器,同时在LVS集群和后端服务器之间建立一个隧道进行数据传输。

其中NAT和DR是最常用的方式

2.4 LVS集群的设置

ipvasdm工具:管理ipvs内核模块的命令行工具,可用于配置和管理lvs集群

ipvasdm工具常用选项:

-A:添加虚拟服务器

-D:删除整个虚拟服务器

-s:指定负载调度的算法

  • rr:轮询
  • wrr:加权轮询
  • dh:目的地址hash,根据ip地址查找静态hash表,获取需要真实的RS的地址
  • sh:源地址hash
  • lc:最小连接数调度
  • wlc:加权最小连接数调度,权重高的,转发的就多,为了避免性能瓶颈,再跟上最小连接数分配,可以把请求往连接数量较小的服务器继续转发
  • lblc:基于地址的最小连接数调度,将来自同一个目的地址的请求分配给RS,如果这台服务器尚未满负荷,就会把请求分配给连接数最小的RS,而且在下一次转发时会优先考虑这台RS

-a:添加真实服务器

-d:删除真实服务器

-t:指定VIP地址的端口号

-r:指定RIP的端口号

-m:表示使用nat模式

-g:表示使用DR模式

-i:表示使用TUN模式

-w:设置真实服务器的权重

-p 60:设置连接保持的时间60s

三、LVS-NAT部署实操

实验配置:
20.0.0.10:调度器内网网卡
12.0.0.1:调度器外网网卡
20.0.0.40:nfs共享存储
20.0.0.61:web集群1
20.0.0.62:web集群2
20.0.0.20:访问客户端

 配置nfs服务器

40、61、62:
yum -y install nfs-utils rpcbind
40:
[root@pup4 ~]# cd /opt
[root@pup4 opt]# mkdir pup benet
[root@pup4 opt]# chmod 777 /opt/kgc/ /opt/benet/
[root@pup4 opt]# echo "this is pup" > /opt/pup/index.html
[root@pup4 opt]# echo "this is benet" > /opt/benet/index.html
[root@pup4 opt]# vim /etc/exports
--添加--
/opt/pup 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)

[root@pup4 opt]# systemctl restart rpcbind
[root@pup4 opt]# systemctl restart nfs
[root@pup4 opt]# exportfs -rv
exporting 20.0.0.0/24:/opt/benet
exporting 20.0.0.0/24:/opt/pup                            

 配置web服务器

61:
[root@nginx1 ~]# systemctl restart rpcbind
[root@nginx1 ~]# systemctl restart nfs
[root@nginx1 ~]# showmount -e 20.0.0.40
Export list for 20.0.0.40:
/opt/benet 20.0.0.0/24
/opt/pup   20.0.0.0/24
[root@nginx1 ~]# mount 20.0.0.40:/opt/pup /usr/local/nginx/html
[root@nginx1 ~]# systemctl restart nginx
62:
[root@nginx2 ~]# systemctl restart rpcbind
[root@nginx2 ~]# systemctl restart nfs
[root@nginx2 ~]# showmount -e 20.0.0.40
Export list for 20.0.0.40:
/opt/benet 20.0.0.0/24
/opt/pup   20.0.0.0/24
[root@nginx2 ~]# mount 20.0.0.40:/opt/benet /usr/local/nginx/html
[root@nginx2 ~]# systemctl restart nginx

61、62相同操作:
[root@nginx1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
--修改--
GATEWAY=20.0.0.10
#DNS1=218.2.135.1

[root@nginx1 ~]# systemctl restart network

配置调度器

[root@pup1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
--修改--
#GATEWAY=20.0.0.2
#DNS1=218.2.135.1

[root@pup1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@pup1 network-scripts]# vim ifcfg-ens36

[root@pup1 network-scripts]# systemctl restart network
[root@pup1 network-scripts]# iptables -t nat -A POSTROUTING -s 20.0.0.0/24 -o ens36 -j SNAT --to 12.0.0.1

[root@pup1 network-scripts]# yum install ipvsadm* -y
[root@pup1 yum.repos.d]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.61:80 -m
[root@pup1 yum.repos.d]# ipvsadm -a -t 12.0.0.1:80 -r 20.0.0.62:80 -m
[root@pup1 yum.repos.d]# ipvsadm-save>/etc/sysconfig/ipvsadm
[root@pup1 yum.repos.d]# systemctl restart ipvsadm.service 

[root@pup1 yum.repos.d]# vim /etc/sysctl.conf
--添加--
net.ipv4.ip_forward = 1

[root@pup1 yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1

验证

 20.0.0.20客户端网卡配置:

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

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

相关文章

【CNN-LSTM预测】基于卷积神经网络-长短期记忆网络的数据分类预测研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ONEPIECE!程序环境和预处理——C语言最终章

时间过得飞快呀,从第一篇blog到现在,已经有三四个月的时间了,而我们终于也迎来了C语言的最终章——程序环境和预处理!加油吧朋友们,ONEPIECE就在眼前~ 目录 一、程序的"翻译环境"和"运行环境" 二…

使用gen 结合gorm 生成表模型文件

# 创建一个目录 用于执行 自动生成model 的代码 和存储 生成的model文件 mkdir gengormmodel && cd gengormmodel go mod init gengormmodel go get -u gorm.io/genv0.3.16 #最终的目录结构package mainimport ("fmt""gorm.io/driver/mysql""…

【进程概念③】:进程环境变量/进程切换

深入篇【Linux】学习必备:进程环境变量/进程切换 Ⅰ.环境变量Ⅱ.深层意义Ⅲ.全局属性Ⅳ.进程切换 Ⅰ.环境变量 1.环境变量是什么?:环境变量是系统提供的一组name/value形式的变量,不同的环境变量有不同的用户。 一般是用来指定操作…

AIGC笔记--基于DDPM实现图片生成

目录 1--扩散模型 2--训练过程 3--损失函数 4--生成过程 5--参考 1--扩散模型 完整代码:ljf69/DDPM 扩散模型包含两个过程,前向扩散过程和反向生成过程。 前向扩散过程对一张图像逐渐添加高斯噪声,直至图像变为随机噪声。 反向生成过程…

--initialize specified but the data directory has files in it. Aborting. 问题解决

当电脑输入这条命令以试图初始化数据库的时候,出现这样的错误。 2023-10-23T09:04:21.258180Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more deta…

Spark SQL概述与基本操作

目录 一、Spark SQL概述 (1)概念 (2)特点 (3)Spark SQL与Hive异同 (4)Spark的数据抽象 二、Spark Session对象执行环境构建 (1)Spark Session对象 (2)代码演…

Python-字符串(切片操作与内建函数)

目录 一、字符串介绍 1、什么是字符串 2、转义字符 二、字符串的输入和输出 1、字符串输出 2、字符串输入 三、访问字符串中的值 1、字符串的存储方式 2、使用切片截取字符串 四、字符串内建函数 1、find 2、index 3、count 4、replace 5、split 6、capitalize …

Centos 7 Zabbix配置安装

前言 Zabbix是一款开源的网络监控和管理软件,具有高度的可扩展性和灵活性。它可以监控各种网络设备、服务器、虚拟机以及应用程序等,收集并分析性能指标,并发送警报和报告。Zabbix具有以下特点: 1. 支持多种监控方式:可…

Docker容器引擎的介绍

目录 Docker概述 容器受欢迎的原因 Docker与虚拟机的区别 Docker三个核心概念 Docker的安装 1、环境准备 2、安装依赖包 3、设置阿里云镜像源 4、安装 Docker-CE并设置为开机自动启动 Docker命令 1、查看 docker 版本信息 2、docker 信息查看 3、Docker 镜像操作命…

GoLong的学习之路(五)语法之数组

书接上回,上回书说到,循环语句,在go中循环语句的少了whlie这个关键词,但是与之for可以改这个改这个特点。并且在终止关键词中,又有标签可以方便,停止。这次说数组 文章目录 Array(数组)数组的初始化方法一方…

数据结构堆详解

[TOC]堆详解 一,堆 1.1堆的概念 堆的性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 1.2堆的存储模式 我们前面的文章提到过,二叉树的两种存储模式,一个是顺序存储,一…

网络第一颗

✍ 如何理解局域网和广域网? ✍ 路由器和交换机是怎样工作的? ✍ 三层交换机能不能代替路由器? -- 1.局域网 2. 广域网 -- -- 企业网络 运营商架构 数据中心架构 -- 局域网 - 内网 - 私网 -- 通过交换机连接的 转发相同IP地址段的…

NVIDIA显卡算力表--nvidia显卡算力表

参考链接:https://blog.csdn.net/qq_41070955/article/details/108269915 官方链接:https://developer.nvidia.com/cuda-gpus

电压放大器在工业领域有哪些用途

电压放大器在工业领域中有广泛的应用,其主要功能是将传感器或其他信号源的微小电压信号放大为更大幅度的电压信号,以便进行后续的信号处理、控制和监测。以下是电压放大器在工业领域中的一些常见用途: 传感器信号放大:工业生产中经…

Java 通过反射修改字符串 String 类型变量的取值而不改变字符串变量的指向

注意点 由于 JDK 8 中有关反射相关的功能自从 JDK 9 开始就已经被限制了,如:通过反射修改 String 类型变量的 value 字段(final byte[]),所以要能够使用运行此方法,需要在运行项目时,添加虚拟机(VM)选项:-…

map set 使用快速上手【C++】

目录 一,关联式容器 二,键值对 三,set 1)使用参考此文档 2)count 函数 3)multiset类 四,map 1. 模板参数介绍 2.operator[]介绍 3. multimap 英语比较好的同学可以自行查找文档 学…

springboot+avue框架开发的医院绩效考核系统全套源码

医院综合绩效核算系统全套源码 (应用案例自主版权演示) 医院绩效考核系统以医院的发展战略为导向,把科室、员工的绩效考核跟战略发展目标紧密结合,引导医院各个科室、各员工的工作目标跟医院的发展目标结合在一起,实现…

代码随想录Day26 贪心01 LeetCode T53 最大子数组和

LeetCode T53 最大子数组和 题目链接:53. 最大子数组和 - 力扣(LeetCode) 题目思路: 贪心贪的是哪里呢? 如果 -2 1 在一起,计算起点的时候,一定是从 1 开始计算,因为负数只会拉低总和,这就是贪…

VPN访问外网的原理

一.前言 许多人都用VPN翻墙,那么VPN为什么可以做到访问外网? VPN的全称叫“Virtual Private Network”意思就是虚拟私人专用网络,是专用网络的延伸,通过VPN,可以模拟点对点专用连接的方式,通过共享和公共网…