LB负载均衡的目的是为了提高访问的并发性和服务器的性能。实现 LB 的方式主要有软件方式和硬件方式。软件方式实现的软件有LVS工作于传输层、nginx工作于应用层haproxy工作于传输层和应用层硬件方式实现的软件有 BIG-IPF5,A10A10等。这里主要介绍软件方式实现 LB。

lvs方式实现 LB原理部分

一、lvs介绍

lvsLinux Virtual Server,Linux虚拟服务是工作在第四层的一款软件。是工作在内核的netfilter模块上的类似于iptables的工作模型。它是一个前端调度器Director,由它来具体实现负载均衡。它的工作原理如下图

几个概念说明

cip请求客户端的 ip 地址。

vip是lvs调度器的 ip 地址通常也是客户端请求服务的的目标 ip 地址。

dip: 是directory和后端 real serveer 之间通信使用的 ip 地址。

rip: 是提供真正服务的real server的 IP 地址。

Director是lvs的前端调度器是ipvs的核心组件。

Real Server: 是后端真正提供服务的服务器。

lvs在内核中是由ipvs实现具体的数据包转发包括软发到后端那个real server、响应报文如何工作在netfilter的INPUT链上在此处决定是否进行数据包的转发。可以使用ipvsadm工具配置 ipvs 规则。

二、lvs的调度算法(Scheduler)

调度算法是在Directory转发集群数包的时候使用的具体算法目的是为了选择哪个后端Real Server服务器。ipvs代码必须提供的调度方法。

如何查看自己的内核是否支持ipvs功能以及支持的算法

常见的算法有如下

静态方法仅考虑调度算法进行调度

RR: round robin、WRR: weighted 轮询 、加权轮询实现了起点公平。新的连接请求被轮流分配至各RealServer算法的优点是其简洁性它无需记录当前所有连接的状态所以它是一种无状态调度。轮叫调度算法假设所有服务器处理性能均相同不管服务器的当前连接数和响应速度。该算法相对简单不适用于服务器组中处理性能不一的情况而且当请求服务时间变化比较大时轮叫调度算法容易导致服务器间的负载不平衡

SHSource Hash 源地址hash,目的是session保持。意义来源于同一源地址的CIP请求会被定向到同一RS。它根据请求的源IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。它采用的散列函数与目标地址散列调度算法的相同。除了将请求的目标IP地址换成请求的源IP地址外它的算法流程与目标地址散列调度算法的基本相似。在实际应用中源地址散列调度和目标地址散列调度可以结合使用在防火墙集群中它们可以保证整个系统的唯一出入口。

DH: Destination Hash 目标地址Hash。是针对目标IP地址的负载均衡但它是一种静态映射算法通过一个散列Hash函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址作为散列键Hash Key从静态分配的散列表找出对应的服务器若该服务器是可用的且未超载将请求发送到该服务器否则返回空。

动态方法根据调度算法和当前RS的负载情况进行调度,讲究结果公平

LC: Least Connection 最少连接 如何监控一般情况是根据tcp协议的计数等相关信息判断

Overhead = Active * 256 + Inactive 表示负载情况越小说明负载越小,会优先选择

WLC: weigthed

Overhead = (Active * 256 + Inactive)/weight 默认机制

SED: shortest expection dalay 最短期望连接

Overhead = (Actived + 1)/weight目的是为了让权重大的优先匹配。问题权重小的可能一直空的。

NQ: Never Quene 工作机制是先每一个 Real Server 都请求一次。

LBLC: locality-based Least connection

LBLCR:  Replicated LBLC,带复制的LBLC

三、lvs的工作模型

工作模型可以这么理解就是 LB 的Real Server接收到报文到底以哪种方式响应给客户端。lvs原生态支持的类型有NAT网络地址转换、DR直接路由、TUN隧道。

NAT模型的工作原理

nat特点      
1、RS使用私有地址网关为DIP       
2、请求和响应都要经过direstor高负载时可能出现单点故障       
3、支持端口映射PNAT意思是director 和 real sever 的服务端口可以不在同一端口。       
4、RS可以使用任何操作系统

DR的原理大致如下

DR特点      
1、要保证前端路由将目标地址为VIP的报文统统发往Direstory,而不是RS       
     1) 静态地址绑定在前端路由器上配置一条静态ARP地址解析将vip地址和DIP的MAC地址绑定。       
     2arptables   在realserver主机上设置arp解析规则只要收到vip地址的arp解析就不进行解析       
     3)修改RS的内核参数修改内核参数arp_ignore arp_announce实现比解析vip的mac地址       
        此时还要在 Real Server 添加一条静态路由来实现响应报文的源地址是vip

2、RS可以使用私有地址也可以使用公网地址      
3、RS跟Directory必须在同一物理网络中。       
4、请求报文经过Directory,但响应报文必须不经过Directory.       
5、不支持端口映射       
6、RS可以使常见的OS支持arptables       
7、RS的网关不会指向DIP

TUN的大致原理

TUN特点IP隧道 将IP首部通过IP首部隧道传送      
1、rip,vip,dip全部是公网地址       
2、rs的网关不会指向DIP       
3、不支持端口映射       
4、请求报文经过Directory,但响应报文必须不经过Directory。       
5、各个real server 必须支持隧道

补充随着互联网的出现了lvs的第四种模型。

FullNat模型是基于NAT模型的扩展可实现局域网内可以有子网的情况。实现方式同时修改请求报文的源地址和目标地址。

NAT的优点1)可以隐藏内部rip地址安全2)配置简单

四、ipvs配置工具ipvadm

ipvsadm是配置ipvs规则的工具和iptables类似。

常用的用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1、添加集群
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] \
[--pe persistence_engine]
    -A 添加集群  -E 修改集群
    -t tcp 协议  -u udpx协议  -f 防火墙标记
    service-address:指的是vip的地址
    -s 指明调度算法默认是wlc
# 2、删除一个集群服务
ipvsadm -D -t|u|f service-address
# 3、清空所有的规则
ipvsadm -C
# 4、导入ipvs规则相当于ipvsadm-restore
ipvsadm -R 
# 5、保存ipvs规则等价于 ipvsadm-save
ipvsadm -S [-n]
#6、将real server 加入到定义好的集群服务中去
ipvsadm -a|e -t|u|f service-address -r server-address [options]
    -a -e 添加、修改real server到指定的集群中
    -r 指定 real server 的IP地址
# 7、删除集群中的指定的real sever
ipvsadm -d -t|u|f service-address -r server-address
# 8、查看配置好的 ipvs 规则常与 -n 一起使用
ipvsadm -L|l [options]

常与的option的有

1
2
3
4
--gatewaying   -g DR模型也是默认的lvs类型gatewaying
--ipip    -i TUN模型  ipip encapsulation (tunneling)
--masquerading -mNAT模型 masquerading (NAT)
-w 指明权重

四、防护墙标记和持久连接

1、防护墙标记

借助netfilter的mangle将作为集群服务的请求报文打标记在PREROUTING链上完成。这样做的目的后者说是好处是只要是防火墙标记相同的就可以认为同一集群服务。例如在访问web服务时有用http协议的也有用https协议的此时就需要在director处定义2个集群服务这样可以实现功能。但是管理起来不方便防火墙标记就可以解决这样的困扰。

具体做法(例如将http 和 https 服务定义成统一的集群服务)

1)iptables -t mangle -A PREROUTING -d {vip} -p tcp -m mulitport --dports 80 -j MARK --set-mark 10

2)基于mark定义集群服务

ipvsadm -A -f 10 -s rr

ipvsadm -a -f 10 -r {rip} -g -w 1

2、持久连接

持久连接是无论使用什么调度算法持久连接都能保证指定的一段时间内来自同一客户端的请求始终低定向到同个RS,其调度基准是集群服务。持久连接时基于内核中的持久连接模板persistent template来实现的基于ssl点对点实现全程加密实现数据安全。

常见的持久连接类型

PCC:持久客户端连接

在基于tcp或udp定义集群服务时其端口为0。表示将来自客户端的所有请求都转发到后端的RS。基于客户端持久连接时来自同一个client的所有请求都被转发到同一RS.

示例ipvsadm -A -t vip:0 -p 60 -p指定持久连接的时间

PPC:持久端口连接

仅针对某一特定的服务启用的持久服务。单服务调度各个集群分开调度。

示例ipvsadm -A -t vip:80 -s rr -p 60

PFM:持久防火墙标记

持久防火墙标记单服务调度。可以通过防火墙标记来定义一个集群的多个端口。

示例ipvsadm -A -f 10 -p 60

实践部分

一、示例NAT模型

实验原理如下实验实现的目标是实现通过访问Director实现Discuz的访问。真正实现的discuz服务地后端的Real Sever从而实现负载均衡的效果。此时就必须要有单独的文件服务器和数据库服务器分别来存储像图片等的非结构数据和像账号、密码等的结构化数据。

环境

操作系统CentOS 6.5 安装在VMware虚拟机上

配置步骤

在172.16.10.16

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
一、配置NFS服务器
# 1、安装客户端软件
yum install -y nfs-utils
# 2、提供共享目录
mkdir /data
setfacl -m u:48:rwx /data -R (id为48的用户是rpm方式安装httpd时的apache用户)
# vim /etc/exports
/data/ 172.16.0.0/24(rw)
# 3、启动服务
/etc/init.d/nfs start
# 以后使用 exports -ar
二、安装mysql
#1、安装mysql软件这里使用rpm安装
yum install mysql mysql-sever -y
# 2、初始化数据库这里不再详细说明
# 3、授权用户
mysql> CREATE DATABASE discuz;
mysql> GRANT ALL ON discuz.* TO discuz@'172.16.%.%' IDENTIFIED BY '123456';

在172.16.10.22

1
2
3
4
5
6
7
一、配置ip地址和网关信息
# 临时配置
ifconfig eth0 172.16.10.22/16 up
route add default gw 172.16.10.9
# 也可使用永久配置如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
二、部署discuz服务
# 1、安装软件
yum install httpd php php-mysql 
# 2、挂载NFS服务
mount -t nfs 172.16.10.16:/data /var/www/html
# 解压 discuz 源代码将解压后的upload目录复制到此目录
cp upload /var/www/html -r
# 修改属主属组
chown apache.apache /var/www/html/upload -R
# 3、安装discuz
# 不在详述安装时需要注意编码问题和数据库连接时的问题。其他可根据提示解决。

在172.16.10.33

在172.16.10.33可参照172.16.10.22步骤可完成。

在Director 上172.16.10.9 192.168.1.66

1
2
3
4
5
# 配置ipvs规则
ipvsadm -A -t 192.168.1.66:80 -s rr
ipvsadm -a -t 192.168.1.66:80 -r 172.16.10.22:80 -m -w 1
ipvsadm -a -t 192.168.1.66:80  -r 172.16.10.33:80 -m -w 1

注意real sever和director的172.16.10.9属于同一局域网中在VMware中可以使用如下方式配置

配置完成验证结果

二、示例DR模型

1、vip和rip在相同的网络内

实验原理图如下实现的目标是web服务。

解释

arp_announce:如何通告本地地址

0表示有arp请求时会通告本机所有网卡的mac地址。 默认

2 表示仅通过网络直连的接口的地址

arp_ignore:表示如何响应接收到的arp请求

0 表示请求的地址可以通过其他网卡响应  默认。

1 表示仅在请求的地址必须在请求报文接口进行响应

在172.16.10.33中

1
2
3
4
5
6
7
ifconfig eth0 172.16.10.22/16 up # 这个也可以写到配置文件
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 172.16.10.20 netmask 255.255.255.255 broadcast 172.16.10.20
route add -host 172.16.10.20  dev lo:0

在172.16.10.22中

此配置可参照172.16.10.33配置配置基本相同

在Director172.16.10.9 172.16.10.20中

1
2
3
ipvsadm -A -t 172.16.10.20:80 -s rr
ipvsadm -a -t 172.16.10.20:80 -r 172.16.10.22:80 -g -w 1
ipvsadm -a -t 172.16.10.20:80 -r 172.16.10.33:80 -g -w 1

实验结果

三、防火墙标记和持久连接

实验拓扑图如下,实验实现的目的是:使用防火墙标记实现将80和443端口实现持久连接。

在192.168.1.201上

1、提供IP地址和网关

2、安装软件

httpd软件和mod_ssl软件

3、提供测试页面和ssl证书

编辑/etc/httpd/conf.d/ssl.conf

4、启动服务即可

在192.168.1.202上

在192.168.1.202上的配置于192.168.1.201类似ip地址和测试页面不同。

在192.168.1.50172.16.0.50上

1
2
3
4
5
6
iptables -t mangle -A PREROUTING -d 172.16.0.50 -p tcp -m multiport \
--dports 80,443 -j MARK --set-mark 10
ipvsadm -A -j 10 -s rr
ipvsadm -a -f 10 -r 192.168.1.201 -m
ipvsadm -a -f 10 -r 192.168.1.202 -m

补充说明

如何获得证书可以参照http://guoting.blog.51cto.com/8886857/1535032。这里说明一点的是RealServer1和RealServer2使用相同的证书。

结果说明

在访问web服务时最主要的一个功能是会话保持 session如何利用lvs实现呢

此时只需要修改ipvs的规则如下

1
2
3
ipvsadm -A -f 10 -s rr -p 60
ipvsadm -a -f 10 -r 192.168.1.201 -m -w 1 
ipvsadm -a -f 10 -r 192.168.1.202 -m -w 1

此时在访问到一个RealServer时会话会保持一段时间结果如下

至此所有配置完成。

本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1550809,如需转载请自行联系原作者

Linux LB 集群知识、如何用 LVS 方式实现 LB 集群?相关推荐

  1. 集群服务负载均衡------LVS

    个人的理解,以一种通俗易懂的方式讲述出来,如果有哪些地方说的不正确的话,希望大家留言指出来.笔者会非是常的感谢! Cluster服务器集群,直接理解为一些单一的服务器的集合通过某种方式组合起来,为客户 ...

  2. LVS四层负载均衡集群

    大型网站高并发解决方案LVS 文章目录 大型网站高并发解决方案LVS 一.集群功能分类 LB 图示 负载均衡产品分类 软件负载均衡设备 硬件负载均衡设备 HA 二.负载均衡 负载均衡的主要方式 htt ...

  3. 服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型

    服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型 下面是"黑夜路人"的<大型网站架构优化(PHP)与相关开源软件使用建议> =============== ...

  4. 集群(一)——LVS负载均衡集群

    集群(一)--LVS负载均衡集群 一.企业群集应用 1.群集的含义 2.问题出现 3.解决办法 4.根据群集所针对的目标差异进行分类 ①.负载均衡群集 ②.高可用群集 ③.高性能运算群集 二.负载均衡 ...

  5. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 11g 集群

    作者:Jeffrey Hunter 了解如何以低于 2,700 美元的费用在 Oracle Enterprise Linux 上安装并配置 Oracle RAC 11g 第 2 版开发集群. 本指南中 ...

  6. Elasticsearch集群知识笔记

    Elasticsearch集群知识笔记 Elasticsearch内部提供了一个rest接口用于查看集群内部的健康状况: curl -XGET http://localhost:9200/_clust ...

  7. 集群负载均衡之lvs和keepalived

    本篇主要介绍集群的负载均衡. lvs是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术.调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器 ...

  8. 使用LVS构建可伸缩WEB集群

    原文:http://kb.linuxvirtualserver.org/wiki/Building_Scalable_Web_Cluster_using_LVS Building Scalable W ...

  9. linux开发工程师工作知识,Linux开发工程师需要掌握的技能有哪些

    关于Linux运维相信现在大家应该已经不再陌生了,因为Linux运维人员的高薪资与良好的工作环境,使得如今参加Linux培训想要进入Linux行业的人员一直在不断的增加.本篇文章扣丁学堂小编就和大家分 ...

最新文章

  1. Vivado使用误区与进阶——XDC约束技巧之I/O篇 (上)
  2. 剑指Offer_编程题_22
  3. 强化学习(四)---基于模型动态规划问题
  4. 使用高级视频质量工具 AVQT 评估视频 | WWDC 演讲实录
  5. gdb调试fork多进程
  6. java 安全库_国家信息安全漏洞库
  7. libevent学习笔记
  8. php中的thumb函数,phpcms v9 thumb(缩略图) 函数说明
  9. Java高并发编程详解系列-单线程执行设计模式
  10. Major GC 是清理老年代。 Full GC 是清理整个堆空间—包括年轻代和老年代。
  11. 仅用一年时间,蓝巨人 IBM 如何开发出首台个人计算机?
  12. matlab read grads,讲解:Grads Only、Network、Matlab、MatlabProcessing|P
  13. 台北宇珍2021春拍捷报,美国博物馆专拍创下白手套佳绩
  14. PHP配置优化《MordenPHP》
  15. 海森堡量子力学与计算机,量子力学诞生后的120年,没有人真正懂他
  16. OpenCV python 轮廓的极值点
  17. vue项目rem 大屏可视化适配
  18. 拼多多数据分析一二三面面经(HR面后综排挂)
  19. shell 脚本 基础
  20. C语言execvp实现简易Shell的两种方法

热门文章

  1. 火力发电厂与变电站设计防火标准_火力发电厂与变电站设计防火规范
  2. iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构
  3. Java基础:String类
  4. 服务器常用shell巡检脚本
  5. MyEclipse 2017软件安装教程
  6. 总线上加三个终端电阻可以吗_什么是RS485总线?怎么使用RS485总线?
  7. loader调用过程
  8. 纯净版搜狗输入法_小米定制搜狗输入法更新!MIUI开发版更新解析!
  9. Linux下的DNS服务器搭建
  10. Linux脚本之定时清空文件内容