Linux服务:LVS负载均衡+keepalived架构

news2025/7/21 18:50:44

目录

一、LVS

1、负载均衡的结构

2、LVS三种工作模式

3、LVS调度算法

5、ipvsadm工具

二、KEEPALIVED

1、KEEPALIVED作用

2、KEEPALIVED原理

3、KEEPALIVED工作模式

4、KEEPLIVED问题及优化

三、LVS+KEEPALIVED架构实现

1、实验目的

2、实验拓扑

3、实验准备

4、实验过程

5、实验结果检验


一、LVS

1、负载均衡的结构

①负载调度器:LVS即四层(传输层)负载均衡,根据算法调度用户请求给业务服务器处理

②业务服务器池:真正处理用户请求的业务服务器集群

2、LVS三种工作模式

①LVS-NAT:DNAT原理,缺点是路由器转发修改mac地址压力过大。

②LVS-DR:每台服务器都配置虚拟ip,通过改写请求报文中的mac地址来实现。

③IP隧道:转发时借助隧道。

3、LVS调度算法

①RR:轮询,每个服务器分配一次反复轮询。

②LC:最小连接数轮询,查看那个服务器处理的请求最少则处理,以此类推。

③WRR:加权轮询,根据管理员给每个服务器添加的weight权重分配用户请求任务,默认全部是1。

④SH:session或者源地址hash分配,通过用户来源地址hash算法将分配给固定的服务器处理。

⑤DH:模板地址hash,通过用户访问目的地址hash算法将,分配给固定的服务器处理。

⑥WLC:加权最小连接数

5、ipvsadm工具

ipvsadm是LVS负载均衡的真实服务名称。

-A 添加虚拟服务器

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

-s 指定负载调度算法

-a 添加真实服务器

-d 删除某个节点

-t 指定VIP地址及TCP端口

-r 指定RIP地址及TCP端口

-w 设置权重

-l 列表查看LVS虚拟服务器‘

-n 以数字形式显示地址

-m 指定nat模式

-g 指定DR模式

-C 清空策略

二、KEEPALIVED

1、KEEPALIVED作用

保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。

2、KEEPALIVED原理

利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。

3、KEEPALIVED工作模式

①抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。

②延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。

③不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。

④心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。

4、KEEPLIVED问题及优化

①默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。

②心跳线默认是广播模式,根据需求改为组播或单播模式。

③脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。

④日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS="-D -S local数字" ,并利用rsyslog将日志分隔出来。

三、LVS+KEEPALIVED架构实现

1、实验目的

①通过客户端访问LVS高可用集群虚IP 192.168.30.100可以访问到NFS业务服务器的内容。

②当LVS_01负载均衡断开服务后,LVS_02可以进行备用,不影响用户访问业务。

③当WEB1或者WEB2关闭服务后,另外一台服务器可以正常访问业务。

2、实验拓扑

3、实验准备

①1台客户机用于访问业务,IP地址192.168.30.10。

②2台LVS负载均衡,并使用keepalived做成高可用,LVS_01 IP地址:192.168.30.14,LVS_02 IP地址:192.168.30.15。

③2台nginx web代理服务器安装nginx并将nfs服务器内容挂载到默认目录,web1 IP地址:192.168.30.12,web2 IP地址:192.168.30.13。

④NFS业务服务器创建文件夹共享给web1和web2,内容为"this  is   nfs  share"

4、实验过程

①关闭所有服务器firewalld.service和selinux

systemctl  stop firewalld.service
setenforce 0

②NFS业务服务器配置,创建共享文件夹 /share,并在/share文件夹中创建index.html文件,输入内容为"this  is  nfs  share"

mkdir /share
#创建共享文件夹
echo "this is nfs share">/share/index.html
#创建共享文件内容
vim /etc/exports
内容:
/share 192.168.30.0/24(rw,sync)
#配置共享文件夹/share  共享网段192.168.0.0/24 rw可读写,sync并同步
systemctl start nfs
#启动ngs服务
exportfs -vr
显示内容:exporting 192.168.30.0/24:/share
#热加载并查看本机nfs共享

③配置web服务器,安装nginx并挂载NFS到默认根目录下并创建虚拟网卡lo:0配置ip192.168.30.100。

web1和web2执行:
yum install epel-release -y
#先安装额外源
yum install nginx -y
#yum安装nginx
systemctl start nginx 
#开启nginx服务
showmount   -e  192.168.30.11
显示内容:/share 192.168.30.0/24
#查看此服务器是否有NFS共享
rpm ql nginx |grep html
#查看nginx默认web根目录
mount 192.168.30.11:/share  /usr/share/nginx/html/
#临时挂载 nfs服务器的/share文件夹到/usr/share/nginx/html/目录下,所以问/usr/share/nginx/html/的内容即访问/share内容
curl 192.168.30.13
curl 192.168.30.12
#显示内容this is nfs share
#分别访问俩个web服务器内容,查看是否挂载nfs成功显示网页内容。
ifconfig lo:0 192.168.30.100 netmask 255.255.255.2555
#添加虚拟网卡lo:0并配置ip
route add -host 192.168.30.100 dev lo:0
#添加路由192.168.30.100走lo:0网卡
vim /etc/sysctl.conf
#编辑内核参数,添加内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#保存退出后查看配置
sysctl  -p 
#查看内核参数是否配置完成

④LVS_01和LVS_02安装ipvsadm并启动服务

yum install ipvsadm  -y 
#yum安装ipvsadm服务,即LVS负载均衡的真实服务名
systemctl start ipvsadm.service
#开启ipvsadm服务,此步骤启动服务报错
systemctl status ipvsadm.service>1.txt
cat 1.txt
#将ipvsadm服务启动报错提示导给1.txt文件并查看。内容如下截图
ipvsadm-save>/etc/sysconfig/ipvsadm
#报错信息提示是没有/etc/sysconfig/ipvsadm文件,解决方法是将ipvsadm保存到/etc/sysconfig/ipvsadm文件下。
systemctl  restart ipvsadm.service 
#重新启动ipvsadm成功

⑤LVS_01和LVS_02安装keepalived服务并配置启动

yum install keepalived.x86_64 -y
#安装keepalived.x86_64
vim /etc/sysctl.conf
#编辑内核文件
添加内容:
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
#保存退出
sysctl  -p
#查看添加内核内容有则成功
vim keepalived.conf
#编辑配置文件
修改内容:
global_defs模块中
smtp_server 127.0.0.1
#改为127.0.0.1即改为本机
router_id LVS_01
#第一条LVS名称改为LVS_01
   #vrrp_skip_check_adv_addr
   #vrrp_strict
   #vrrp_garp_interval 0
   #vrrp_gna_interval 0
#以上4行安全机制添加#号注释掉
virtual_ipaddress {
        192.168.30.100
    }
#虚拟主机地址改为要配置的虚拟ip,可配置多个,若只写一个将模板的其他2个删除。
virtual_server 192.168.30.100 80 {
#虚拟ip地址改为配置的虚拟ip和web服务端口号
    delay_loop 6
    lb_algo rr
    lb_kind DR
#模式改为DR模式即直连模式
    persistence_timeout 50
    protocol TCP

    real_server 192.168.30.12 80 {
#第一台真实ip地址和web服务端口号
        weight 1
        TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
            connect_port 80
#添加连接端口80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.30.13 80 {
#第二台真实ip地址和web服务端口号
        weight 1
        TCP_CHECK {
#添加TCP_check 注意分号前有空格,检测真实服务器健康状态,即检测后端服务器80端口,若不正常则访问其他台服务器
            connect_port 80
#添加连接端口80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
#俩台真实服务器后的所有内容删除即可,修改完成后保存退出。完整配置文件如下图
scp keepalived.conf 192.168.30.15:/etc/keepalived/ 
LVS_02配置文件修改:
#将配置好的配置文件传到LVS_02服务器上
#第一步修改 router_id LVS_02 名称改为LVS_02
#第二步要修改vrrp_instance VI_1模块中的state为BACKUP,和priority 90改为比主LVS优先级低的等级
#其他不用修改保存即可
systemctl restart ipvsadm  keepalived
#重启服务
ipvsadm  -ln
显示内容:
TCP  192.168.30.100:80 rr persistent 50
  -> 192.168.30.12:80             Route   1      0          0         
  -> 192.168.30.13:80             Route   1      0          1
#查看有2个真实服务器的ip即可。

5、实验结果检验

①在客户机上curl 192.168.30.100查看内容是否为nfs服务器共享的内容“this is nfs share” 

②关闭LVS_01测试查看内容是否还为nfs服务器共享的内容“this is nfs share” 

③关闭nginx web1服务器测试查看内容是否还为nfs服务器共享的内容“this is nfs share” 

 

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

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

相关文章

关于几种求最短路算法的碎碎念(Dijkstra、spfa、floyd)

目录 一、求1号点到n号点的最短路 1、所有边都是正数——Dijkstra (1)朴素版dijkstra - 邻接矩阵 (2)堆优化版dijstra - 邻接表 2、存在负权边——spfa 3、dijkstra和spfa的区别 二、起点和终点未知,求某两点间…

【16】linux命令每日分享——chmod修改权限

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

使用QIS(Quantum Image Sensor)图像重建总结(1)

最近看了不少使用QIS重建图像的文章,觉得比较完整详细的还是Abhiram Gnanasambandam的博士论文:https://hammer.purdue.edu/articles/thesis/Computer_vision_at_low_light/20057081 1 介绍 讲述了又墨子的小孔成像原理,到交卷相机&#xf…

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译

[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译 文章目录[AI助力] 2022.3.3 考研英语学习 2012 英语二翻译2012年英语二翻译真题总结积累🧐来点好玩的想法~ 这次试试让AI做更多的事情它居然给出了流汗黄豆😅让它评价一下参考答案让AI评价我的翻译让AI …

工具及方法 - Windows下出现“IPv4/IPv6 No Internet Access“错误

家里的PS4,突然用电信网刷新不了PS会员游戏了。同样的网,登录微软账号也登不上。难道是网络问题? 可我换成手机热点就是好的,而且PS4再用电信网络就恢复了。 让我郁闷了一下,开始怀疑人生。后来上网查了一下&#xf…

IM即时通讯开发用Netty实现心跳机制、断线重连机制

所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性。注:心跳包还有另一个作用,经常被忽略,即:一个连接如果长时间不用,防火墙或者路由器就会…

百天百题(1/100)Java创建线程的方式?

首先创建线程有四种种方式: 1.继承Thread类 缺点:1.Java是不支持多继承的,所以我们不能在继承其他的类了 2.不能通过线程池来此操作,每次创建一个线程都需要先创建一个类,创建和销毁线程对整体的资源开销是非常大的。…

Thread 类的基本用法

1.线程创建 Thread类:创建的线程都是一样的 1.继承Thread,重写run; 2.实现Runable,重写run; 3.使用匿名内部类,继承Thread; 4.使用匿名内部类,实现Runnable; 5.使用lambda表达式(常用&#xff…

IDEA插件系列(3):Maven Helper插件

一、引言在写Java代码的时候,我们可能会出现Jar包的冲突的问题,这时候就需要我们去解决依赖冲突了,而解决依赖冲突就需要先找到是那些依赖发生了冲突,当项目比较小的时候,还比较依靠IEDA的【Diagrams】查看依赖关系&am…

嵌入式学习笔记——使用寄存器编程操作GPIO

使用寄存器编程操作GPIO前言GPIO相关的寄存器GPIO 端口模式寄存器 (GPIOx_MODER) (x A..I)位操作GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x A..I)GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x A..I/)GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x A..I/)GPIO 端口输入数据寄…

Python bool 到底怎么用? 【源码拆解】

人生苦短 我用python 一、布尔类型描述 布尔类型是计算机中最基本的类型, 它是计算机二进制世界的体现,一切都是 0 和 1 。 Python中的布尔类型只有两种值:True 和 False 。 (注意:首字母都是大写,与C、Ja…

女生学习大数据怎么样~有前景么

当前大数据发展前景非常不错,且大数据领域对于人才类型的需求比较多元化,女生学习大数据也会有比较多的工作机会。大数据是一个交叉学科涉及到的知识量比较大学习有一定的难度,女生则有女生的优势,只要认真学习了都是可以做大数据…

STM32定时器的编码器接口模式

MCU为STM32L431,通用定时器框图: 编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下…

Python面向对象的三大特征 - - 封装、继承、多态

目录 一、三大特征介绍 1、封装(隐藏) 2、继承 3、多态 二、继承 1、子类扩展父类 1.语法格式 2.构造函数 2、类成员的继承和重写 1. 成员继承 2. 方法重写 3、查看类的继承层次结构 4、object根类 1.描述 2. dir() 查看对象属性&#xff…

JVM-可达性分析算法

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈…

maven的学习

为啥要用maven 1、不用认为添加jar包所依赖的其他jar包 2、能在本地仓库只保留一份jar包,避免了多个工程使用相同jar包,需要重复导入的问题,减少冗余 3、能够规范添加jar包,在下载需要的jar包时有多种方法,但是不能保…

TeeChart VCL/FMX v2023 crack

TeeChart VCL/FMX v2023 crack TeeChart Pro VCL允许您为所有领域(包括商业、工程、金融、统计、科学、医疗、实时和网络)创建通用和专用图表和绘图应用程序。TeeChart Pro VCL具有多种图表类型的图表库,包括2D或3D线条、条形图、水平条、区域、点、饼图、箭头、气泡…

MySQL OCP888题解043-GTID模式下如何解决主键冲突问题

文章目录1、原题1.1、英文原题1.2、答案2、题目解析2.1、题干解析3、知识点3.1、知识点1:GTID模式下跳过一个事务的方法4、总结1、原题 1.1、英文原题 A simple master-to-slave replication is currently being used. This information is extracted from the SH…

Kubernetes学习(三)Service

Service对象 为什么需要Service 每个Pod都有自己的IP地址,但是在Deployment中,在同一时刻运行的Pod集合可能与稍后运行该应用程序的Pod集合不同。 这就导致了一个问题:如果一组Pod(称为后端)为集群内其他Pod&#x…

Java测试题

选择题(共15题,每题2分)( B ) 1、使用下面哪个表达式能产生[20,999]之间的数?A.(int)(20Math.random( )*979) B.20(int)(Math.random( )*980)C.(int)Math.random( )*999 D.20(int)Math.random( )*980( C )2、请仔细阅读下面的程序…