LVS详解及基于LVS实现web服务器负载均衡
前言
LVS(Linux Virtual Server)Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。通过LVS提供的负载均衡技术和Linux操作系统可实现一个高性能、高可用的服务器群集,从而以低成本实现最优的服务性能。
集群基础
集群简介
集群(Cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群系统的主要优点:高可扩展性、高可用性、高性能、高性价比。
集群类型
LB:Load Balancing 高可拓展,伸缩集群
HA:High Availability 高可用集群
HP:High Performance 高性能集群
集群方案
LB:
硬件级:F5 BIG-IP、Citrix Netscaler、 A10 A10、Array、Redware
软件级:lvs (传输层)、haproxy, nginx (应用层)
HA:
heartbeat 、corosync + pacemaker、 cman + rgmanager、cman + pacemaker、keepalived
HP:
hadoop
LVS详解
LVS组成
ipvsadm:用于管理集群服务的命令行工具,工作于Linux系统中的用户空间。
ipvs:为lvs提供服务的内核模块,工作于内核空间
LVS术语
VIP:Director用来向外部提供服务的IP地址,也就是DNS通过域名解析到的IP
RIP:集群节点(后台真正提供服务的服务器)所使用的IP地址
DIP:Director用来和RIP进行交互的IP地址
CIP:客户端使用的IP或公网IP
RS:集群节点服务器Real server
LVS类型
LVS-NAT:Network Address Translation 网络地址转换
LVS-DR:Direct Routing 直连路由
LVS-TUN:Tunneling 隧道
LVS各类型特性
NAT类型的特性:
①RS应用使用私有地址,RS的网关必须指向DIP
②请求和响应都要经过Director,高负载场景中,Director易成为性能瓶颈
③支持端口映射
④RS可以使用任意OS
DR类型的特性:
①保证前端路由将目标地址为VIP的报文统统发往Directory,而不能是RS
解决方案:
(1) 静态地址绑定:在前端路由器上操作
前提:必须要有路由操作权限
(2) aprtables
(3) 修改RS上内核参数,将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求
②RS可以使用私有地址,但也可以使用公网地址,此时可通过互联网通过RIP对其直接访问
③RS跟Directory必须在同一物理网络中
④请求报文经由Director,但响应报文必须不能经过Director
⑤不支持端口映射
⑥RS可以是大多数常见的OS
⑦RS的网关绝不允许指向DIP
TUN类型的特性:
①RIP、VIP、DIP全部是公网地址
②RS的网关不会也不可能指向DIP
③请求报文经由Director,但响应报文必须不能经过Director
④不支持端口映射
⑤RS的OS必须支持隧道功能
LVS调度算法
静态方法:仅根据调度算法本身进行调度
rr: round robin,轮流,轮询,轮叫 wrr: weighted round robin, 加权轮询 sh:source hashing,session绑定 dh: destination hashing, 目标地址hash
动态方法:根据算法及各RS当前的负载状况进行调度
lc: least connection,最少连接 wlc: weighted lc,加权最少连接 sed: shortest expection delay,最少期望延迟 nq: never queue,永不排队 lblc: Locality-Based Least Connection,基于局部性的最少连接 lblcr:Replicated lblc,基于局部性的带复制功能的最少连接
LVS配置(ipvsadm)
命令格式
ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]] [-M netmask]ipvsadm -D -t|u|f service-addressipvsadm -Cipvsadm -Ripvsadm -S [-n]ipvsadm -a|e -t|u|f service-address -r server-address[-g|i|m] [-w weight] [-x upper] [-y lower]ipvsadm -d -t|u|f service-address -r server-addressipvsadm -L|l [options]ipvsadm -Z [-t|u|f service-address]ipvsadm --set tcp tcpfin udpipvsadm --start-daemon state [--mcast-interface interface][--syncid syncid]ipvsadm --stop-daemon stateipvsadm -h
命令详解
定义集群服务: -A 添加一个集群服务 -D 删除一个集群服务 -E 修改一个集群服务 -t VIP:端口 定义集群服务的类型为TCP的某个端口 -u VIP:端口 定义集群服务的类型为UDP的某个端口 -f 防火墙标记 定义集群服务的类型为防火墙标记 -s 调度算法 指定集群服务的调度算法 定义集群节点: -a 添加一个节点到集群服务 -d 从集群服务中删除一个节点 -e 修改集群服务器中的节点 -r 节点IP:端口 定义节点的IP及类型 -m 定义为NAT模型 -g 定义为DR模型 -i 定义为TUN模型 -w 权重 定义服务器的权重 查看已经定义的集群服务及RS: ipvsadm -L -n-c: 查看各连接--stats: 统计数据--rate: 速率--exact: 精确值 从集群服务中删除RS: ipvsadm -d -t|u|f service-address -r server-address 删除集群服务: ipvsadm -D -t|u|f service-address 清空所有的集群服务: ipvsadm -C 保存集群服务定义: ipvsadm -S > /path/to/some_rule_file ipvsadm-save > /path/to/some_rule_file 让规则文件中的规则生效: ipvsadm -R < /path/from/some_rule_file ipvsadm-restore < /path/from/some_rule_file
LVS-NAT模型
配置过程
#以下实验都是临时性配置,若要永久生效,请自行配置 Real Server 1 #ifconfig eth0 172.16.10.100/16 up #route add default gw 172.16.10.12 Real Server 2 #ifconfig eth0 172.16.10.212/16 up #route add default gw 172.16.10.12 Director Server #ifconfig eth0 192.168.1.10/24 up #ifconfig eth1 172.16.10.12/16 up #yum -y install ipvsadm #echo 1 > /proc/sys/net/ipv4/ip_forward #ipvsadm -A -t 192.168.1.10:80 -s rr #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -m #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -m
LVS-DR模型
上面说了NAT模型的实现方式,但NAT模型有个缺陷,因为进出的每个数据包都要经过Director Server,当集群系统负载过大的时候Director Server将会成为整个集群系统的瓶颈,而DR模型就避免了这样的情况发生,DR模型在只有请求的时候才会经过Director Server, 回应的数据包由Real Server 直接响应用户不需要经过Director Server。
配置过程
内核参数: arp_ignore: 定义接收到ARP请求时的响应级别 0:只要本地配置的有相应地址,就给予响应 1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应 arp_announce:定义将自己地址向外通告时的通告级别 0:将本地任何接口上的任何地址向外通告 1:试图仅向目标网络通告与其网络匹配的地址 2:仅向与本地接口上地址匹配的网络进行通告
Real Server 1 #ifconfig eth0 172.16.10.100/16 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #route add -host 192.168.1.10 dev lo:0 Real Server 2 #ifconfig eth0 172.16.10.212/16 up #echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore #echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce #ifconfig lo:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #route add -host 192.168.1.10 dev lo:0 Director Server #ifconfig eth0 172.16.10.12/16 up #ifconfig eth0:0 192.168.1.10 netmask 255.255.255.255 broadcast 192.168.1.10 up #echo 1 > /proc/sys/net/ipv4/ip_forward #route add -host 192.168.1.10 dev eth0:0 #yum install ipvsadm -y #ipvsadm -A -t 192.168.1.10:80 -s rr #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.100 -g #ipvsadm -a -t 192.168.1.10:80 -r 172.16.10.212 -g
基于LVS实现web服务器负载均衡
实验拓扑
环境介绍
系统环境:CentOS6.6
Director Server:192.168.1.10(VIP) 172.16.10.12(DIP)
Real Server 1:192.168.1.10(VIP) 172.16.10.100(RIP )
Real Server 2:192.168.1.10(VIP) 172.16.10.212(RIP )
PHP服务器:172.16.10.110
NFS服务器:172.16.10.110
数据库服务器:172.16.10.211
要求:web服务器上部署discuz,基于LVS实现负载均衡
NFS服务器配置
创建共享目录,并设置权限
编辑配置文件,设置共享目录及客户端
[root@scholar ~]# vim /etc/exports /web/discuz 172.16.10.100(rw,sync) 172.16.10.212(rw,sync)
站点文件准备
[root@scholar ~]# unzip Discuz_7.2_FULL_SC_GBK.zip [root@scholar ~]# chmod -R 777 upload [root@scholar ~]# mv upload/* /web/discuz/ [root@scholar ~]# chown -R apache.apache /web/discuz
启动服务,设置开机自启
数据库服务器配置
RS1和RS2配置
配置VIP
配置虚拟主机
[root@RS1 ~]# vim /etc/httpd24/extra/httpd-vhosts.conf <VirtualHost *:80>DocumentRoot "/web/discuz"ProxyRequests OffProxyPassMatch ^/(.*\.php)$ fcgi://172.16.10.110:9000/web/discuz/$1 </VirtualHost>
挂载共享目录
#可设置开机自动挂载 [root@scholar ~]# vim /etc/fstab 172.16.10.110:/web/discuz /web/discuz nfs defaults,_netdev 0 0
检查语法,启动服务
Director Server配置
配置VIP
定义集群
安装测试及访问测试
安装完成,我们来发一个帖子测试一下
过一会儿,刷新一下页面
此过程中是否实现了负载均衡,我们在Director Server上查看一下是哪台服务器响应的请求就知道了
由此可见,基于LVS实现web服务器的负载均衡功能已完成
The end
OK,基于LVS的负载均衡就说到这里了,负载均衡集群的配置还是比较简单的,几条命令就搞定了,不要因为简单看一眼就略过,只有理解原理结合实践才能真正掌握知识,配置过程中遇到问题可留言呦。以上仅为个人学习整理,如有错漏,大神勿喷~~~
转载于:https://blog.51cto.com/scholar/1656073
相关文章:

解决Ubuntu系统下git clone下载速度较慢的问题(亲测有效)
常见问题使用Git clone下载网速通常有十几kb,下载较慢. 使用以下指令即可解决: //这是我们要clone的,通常是github.com需要替换掉,就是在github.com后面加上.cnpmjs.org就可以了 git clone https://github.com/Hacker…

Revit结构2021专业人士的选择:从入门到专业
Revit结构2021专业人士的选择:从入门到专业 Revit Structure 2021 : 13th Floor Concrete Building 你会学到: Revit结构中的第13栋混凝土建筑 在Revit结构中启动新项目 创建级别的基本方法 创建关卡的技巧 在Revit结构2021中处理主要和次要问题 网格的绘制 直线和曲线网格 圆…

神奇的FireFox
今天开发的时候用FireFox,然后有个js总是不出效果,window.close,然后换个浏览器就完全没问题了,还有onkeydown->ruturn false 屏蔽按键,FireFox也不行........ 果然FireFox这么好用是有原因的... 推荐大家开发的时候还是用360极速,自用还是FireFox好一点.转载于:https://www…

python输出结果空格分割_python 输出列表元素实例(以空格/逗号为分隔符)
给定list,如何以空格/逗号等符号以分隔符输出呢? 一般的,简单的for循环可以打印出list的内容: l[1,2,3,4] for i in l: print(i) 输出结果一行一个元素: 1 2 3 4 若想得到以空格或逗号为分隔符的输出结果,代码可改为&a…

My deep learning reading list
My deep learning reading list 主要是顺着Bengio的PAMI review的文章找出来的。包括几本综述文章,将近100篇论文,各位山头们的Presentation。全部都可以在google上找到。BTW:由于我对视觉尤其是检测识别比较感兴趣,所以关于DL的应…

QT串口调试软件
QT串口调试软件软件主界面设置界面关于我们使用介绍软件主界面 本界面主要包括串口设置部分、数据接收部分、数据发送部分以及软件配置部分构成,软件主界面如图1所示。 在图1软件主界面中,位于左侧部分数据数据连接部分,主要功能是与无人机…

Unity提高工作效率的终极指南
本套课程指南通过关于如何更快、更智能地工作的最新技术,帮助Unity创作者节省时间并提高工作效率 你会学到: Unity的创建者节省了时间,提高了生产力。 关于如何更快地使用程序员和艺术家工具集的技巧,无论是个人还是团队。 Unity应该是一种快…

deepin tim(wine)无法安装_利用HyperV虚拟机,如何在Win10上安装Deepin国产操作系统?深度好文!...
随着老美对华为手机业务的封锁,在PC端的操作系统的未来也逐渐引起了人们的重视,一旦Windows停止向国内供应的话,对国内市场的冲击也是不小的。基于这个原因,国产操作系统也越来越频繁地进入大家的视野。在众多国产操作系统中&…

**使用 Git Hook 实现网站的自动部署
http://www.tuicool.com/articles/3QRB7jU 自动化能解放人类的双手,而且更重要的是,因为按照规定的流程来走,也减少了很多误操作的产生。不知道大家平时都是怎么样更新自己生产环境的代码的,FTP 覆盖旧文件、服务器定时任务去 bui…

Mavlink自定义协议
参照本人博客:博客直达 浏览密码:N414 这里不做描述,详细过程请移步本人博客

UE建筑可视化全局照明学习 Unreal Engine: Global Illumination for Arch. Visualization
虚幻引擎:建筑可视化的全局照明 你会学到: 使用轻量级地理信息引擎 聚焦胃肠计算 生成灯光贴图Uv 轻度烘焙 控制光反弹 使用环境遮挡 动画和地理信息 暴露 保存高分辨率图像 课程获取:UE建筑可视化全局照明学习-云桥网 时长:1h 30m |视频:. MP4,12807…

dbf如何导入oracle_「赵强老师」第一个Oracle的手工管理的备份和恢复
一、什么是手工管理的备份与恢复?尽管在Oracle中,已经有了RMAN的备份与恢复。但是作为Oracle备份恢复的一种方式,我们将在本文中通过一个例子来为大家介绍如何使用手工的方式来完成Oracle的备份与恢复。手工方式的本质是通过操作系统的cp命令…

大小端存储模式的理解和判断
在计算机系统中,存储是以字节为单位的,每个地址单元都对应着一个字节,一个字节8bit。在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器)。对于位数大于8位的处理…

汇编语言学习随笔
1.可执行文件中包含两部分内容: *程序(从源程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据) *相关的描述信息(比如程序有多大,占多少内存空间啊等等) 2.segment和ends…

新装Ubuntu18.04系统配置PX4环境
1.安装QGC地面站系统:链接:https://docs.qgroundcontrol.com/master/en/getting_started/download_and_install.html 2.配置系统文件:下载PX4代码 -->打开代码 -->找到文件夹Tools文件 -->找到setup文件夹 -->找到ubuntu.sh文件&…

Blender程序性纹理学习教程大师班 Creative Shrimp – Procedural Texturing Blender Master Class
标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率。 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量,清晰的细节和没有重复的模式。 你…

java 全局变量 内存不回收_Java的内存 - 内存回收
这篇承接上一篇 《Java的内存 - 内存模型》,分析内存回收相关的知识点。 垃圾回收包含两个步骤,①标记哪些内存是垃圾 ②回收内存。下面分别说这两个步骤有哪些算法:1. 垃圾标记1.1 引用计数算法没有哪一种 JVM 是使用「引用计数」作为垃圾回…

题目1000:计算a+b
题目描述:求整数a,b的和。 输入:测试案例有多行,每行为a,b的值。 输出:输出多行,对应ab的结果。 样例输入:1 2 4 5 6 9 样例输出:3 9 15 #include<iostream> using…

Mac下chrome的webapp hostadmin 快速切换host
首先是安装 app ,https://chrome.google.com/webstore/detail/hostadmin-app/mfoaclfeiefiehgaojbmncmefhdnikeg Chrome把扩展的NPAPI 禁用了,所以做成APP没以前方便了,但是有总比没有好。 安装之后发现mac下选择host文件没法选,因…

PX4如何开启本地在环仿真?如何将仿真地点定位为本地位置?你进来就对了!
视频预览:3架无人机在环仿真 3架仿真jmavsim本地坐标启动教程 1.首先执行仿真命令 n414414:~/001/Firmware$ make px4_sitl_default jmavsim出现左边界面就说明该仿真是可以进行仿真的!由于我在自己写的代码里面启动,所以出现右边提示&…

Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course
从头到尾创建低多边形角色。 你会学到: Blender界面的基础。 基本建模技术。 如何遵循字符引用? 如何创造和塑造自己的角色(不同风格、发型和服装)。 纹理字符。 索具和动画介绍(用于你的游戏引擎或动画)。 调整您下载的资产包角色,以创建新的不同角色。…

20145101《Java程序设计》第4周学习总结
20145101《Java程序设计》第4周学习总结 教材学习内容总结 第六章 继承与多态 继承:避免多个类间重复定义共同行为。把相同代码提升为父类 运用extends关键字的子类会继承扩充父类行为 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中&#…

反编译使用yield关键字的方法
我认为这是一个真命题:“没有用.NET Reflector反编译并阅读过代码的程序员不是专业的.NET程序员”。.NET Reflector强大的地方就在于可以把IL代码反编译成可读性颇高的高级语言代码,并且能够支持相当多的“模式”,根据这些模式它可以在一定程…

Android studio 启动自学模式
今天在网上看到了编译Android的软件Android studio,出于对Android的学习兴趣,我打算开始新一轮的Android的学习。今天就是在网上,以及图书馆里查找了有关Android studio的书籍,但是由于Android是在13年才开始发布的原因吧&#x…

AutoCAD 2D与3D大师班学习教程 AutoCAD 2D and 3D Masterclass
用实例和解决问题的方法完成从基础到专业的AutoCAD课程。 你会学到什么 AutoCAD课程包含创建计划和模型的命令和不同方法的详细使用。 本课程包括对AutoCAD中使用的所有命令和工具的详细解释。 课程内容是按时间顺序设计的,以了解承担项目的实际方法。 本课程包含两…

威纶通宏开机后使用初始化宏指令_【操作系统】我们按下电脑开机键的背后发生了什么?...
作者:CVNot链接:https://juejin.im/post/5e8844996fb9a03c6675b9d6操作系统是什么?操作系统是用来管理计算机硬件的软件,狭义上实现该定义的为操作系统内核;而更加宽泛的操作系统概念为根据内核对外提供了一些OS服务&a…

Linux常用压缩与解压缩命令
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d…

【Kubernetes】如何使用Kubeadm部署K8S集群
一 . 准备机器 本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware) vm01(2V4G): Ubuntu_18.04作为K8S master节点 vm02(1V1G): Ubuntu_18.04作为K8S node节点 备注: 以下所有…

解决ORA-28000: the account is locked
在oracle中,连续十次尝试登陆不成功,那么此账户将会被锁定(lock)。当使用被锁定的账户登录时,系统会报错:ORA-28000: the account is locked。查询FAILED_LOGIN_ATTEMPTS参数默认值,这个参数限制…
Android sudio Day01-1
今天我开始学习Android studio的第二天,主题是Android studio的安装。 之前的学校学习都是使用Android开发者工具(Android development tools,ADT),而ADT作为一个Android开发工具,它是通过内置于Eclipse的…