一、 集群概述

1、 什么是集群?

一组各自相互独立且又相互依赖的,通过高速网络互联的计算机组成的一个计算机组, 以单一的系统模式加以管理, 为用户提供服务, 对用户来说, 用户只会认为对方是一个服务.  这个里面, 一组计算机的一台计算机就是集群的一个节点

2、  集群的特性:

可伸缩性, 可靠性,  可管理性

3、  应用场景:

例:一台服务器    如果能够响应10000个并发

        如果现在有20000个并发    一台服务器就无法响应

说明,web服务已经达到瓶颈

解决这个问题的办法:

加配置:   加CPU, 加内存, 加带宽, 加SSD 这种解决方法称为“向上扩展”, 能够解决一时, 却不能持久一世[单台服务器上做动作]

加服务器:  一台==>两台, 两台==>四台  四台==>8台  使用多台服务器同时为用户提供服务  ,而这一种解决方法则称为“横向扩展”或“向外扩展”

向外扩展:  就是集群

4、  集群的种类:

集群系统主要分为

负载均衡(Load Balance)集群,简称  LB

高可用(High Availability)集群,简称  HA 集群

高性能计算(High Perfermance Computing)集群,简称  HPC 集群

5、  LB实现手段

硬件的实现:  – F5 负载均衡器

软件的实现:  – LVS(4层,传输层)  – Nginx(7层,应用层)

二、  LVS集群

1、LVS(Linux Virtual Server)

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一,是根据iptables的实现来开发的,所以使用时候会和iptables相当类似

官网:http://www.linuxvirtualserver.org/

中文站点: http://zh.linuxvirtualserver.org/

2、 LVS 集群工作结构图:

       负载调度器 (分发器Load Balancer, Director): 整个集群对外的最前端机, 负责接收用户请求, 并且根据自己的调度算法, 将请求转发到后端真实服务器上的动作,而客户认为服务是来自一个IP地址(我们可称之为VIP虚拟IP地址)上的。

       服务器池(Server Pool):  真正为用户提供服务的服务器, 每一台服务器就是一台RS[RealServer],执行的服务有WEB、MAIL、FTP和DNS等。

       共享存储(Shared Storaged): 为RS保持相同内容, 提供数据的一致性,也就是说,它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

三、  LVS模式及工作原理

1 、 LVS(4层)  模式:

LVS/NAT

LVS/DR

LVS/TUN

2、  LVS负载均衡的三种包转发方式

LVS提供了三种包转发方式:NAT(网络地址映射)IP Tunneling(IP隧道)Direct Routing(直接路由)。不同的转发模式决定了不同的cluster的网络结构

3、  NAT(网络地址映射)

NAT: 网络地址转换

DNAT: 目标地址转换  改变的是目标地址

SNAT: 原地址转换  改变的是原地址

LVS-NAT: 就是使用的SNAT和DNAT完成报的转发

NAT方式可支持任何的操作系统,以及私有网络,并且只需一个Internet IP地址,但是整个系统的性能受到限制。因为执行NAT每次需要重写包,有一定的延迟;另外,大部分应用有80%的数据是从服务器流向客户机,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成很大压力,成为了新的瓶颈。

4、  IP Tunneling(IP隧道)

Director(分发器)分配请求到不同的real server。real server处理请求后直接回应给用户,这样director负载均衡器仅处理客户机与服务器的一半连接。IP Tunneling技术极大地提高了director的调度处理能力,同时也极大地提高了系统能容纳的最大节点数,可以超过100个节点。real server可以在任何LAN或WAN上运行,这意味着允许地理上的分布,这在灾难恢复中有重要意义。服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议。

5 、 Direct Routing(直接路由)

与IP Tunneling类似,负载均衡器仅处理一半的连接,避免了新的性能瓶颈,同样增加了系统的可伸缩性。Direct Routing与IP Tunneling相比,没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在一个物理网段。

6 、 LVS-NAT 模式工作原理:

客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

如图:

步骤1:客户端访问VIP1的网站

图上各IP注解:

CIP  客户端的IP

VIP  是域名解析的IP, 是集群对外的公网IP

DIP  用来和后端服务器进行数据交互的IP, 请求报文转发给后端服务器从此口出去

RIP  真实服务器的IP

步骤2:客户端访问调度器时,调度器通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;

步骤3:真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

步骤总结及过程地址变化:

1: 客户端请求访问www.example.com[www.example.com  ===>  VIP]

源地址: CIP   目标地址: VIP

2: 请求报文到达负载均衡器

源地址: CIP   目标地址: RIP

3: RealServer收到报文处理, 响应

源地址: RIP   目标地址: CIP

4: 负载调度器收到报文, 根据自身之前的转发修改记录, 还原报文

源地址: VIP    目标地址: CIP

四、  实战:配置LVS-NAT

1 、 实例1:  LVS NAT模式

实验前期准备:

1、准备3台主机

2、iptables -F , 清除规则

3、/etc/selinux/config,关SELinux

#getenforce   Disabled

2、  真实环境中的拓扑图

3、  集群各节点IP注解:

客户端计算机的IP(CIP):可能是一个本地的、与VIP在同一网络的私有ip地址,或者是一个因特网上的公共ip地址。用作向集群发送请求的源ip地址

虚拟IP(VIP):Director用于向客户端提供服务的ip地址

Director的IP(DIP):在Director的VIP上接收访问集群服务的请求,这些请求通过DIP转发出去抵达各个集群节点

真实real server IP(RIP):在LVS术语中,向外部世界提供服务的节点叫做真实服务器,因此在真实服务器上使用的ip地址叫做真实ip地址(RIP)。

精简版,实验拓扑图:

说明:客户端只要求能够访问到VIP即可。

4、配置LVS:

xuegod63配置成分发器:

1、打开路由转发功能

[root@xuegod63 ~]# vim /etc/sysctl.conf

改:net.ipv4.ip_forward = 0

为:net.ipv4.ip_forward = 1

让配置生效:

[root@xuegod63 ~]# sysctl -p

2、配置网络环境:

添加一个网卡(需要两张网卡), 配置成以下网络环境:

eth0  192.168.1.63  模式:br0    模拟公网

eth1  192.168.2.63  模式:vmnet4    模拟内网

Director分发器:需不需要开启80(服务的)端口  ?

5、 安装: LVS管理工具: ipvsadmin

[root@xuegod63 Packages]# pwd

/mnt/Packages

[root@xuegod63 Packages]# rpm -ivh ipvsadm-1.25-9.el6.x86_64.rpm

或:yum install ipvsadm

6 、 使用ipvsadm命令设置规则:

[root@xuegod63 ~]# ipvsadm -A -t 192.168.1.63:80 -s rr       rr代表轮循

选项:

-A  添加虚拟服务器

-t   表示TCP的服务  VIP:PORT

-s  指定调度算法  rr表示round-robin 轮循

[root@xuegod63 ~]#  ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.64 -m

[root@xuegod63 ~]#  ipvsadm -a -t 192.168.1.63:80 -r 192.168.2.62 -m

选项:

-a   表示添加real server的地址

-r    指定real server的IP地址

-m  表示masquerade 也就是NAT方式的LVS

7 、查看:

Ipvsadm命令,用于配置及查看内核IPVS表和算法的工具,类似于iptables

[root@xuegod63 ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.63:80 rr

-> 192.168.2.62:80              Masq    1      0          0

-> 192.168.2.64:80              Masq    1      0          0

8 、 保存配置或规则

[root@xuegod63 ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

或ipvsadm -S    保存以上的配置

Saving IPVS table to /etc/sysconfig/ipvsadm:           [确定]

9 、 配置真实服务器

RealServer:在xuegod62和xuegod64上面配置:

准备:

1、配置IP:REAL SERVER自己的网络相关信息配置成如下:

xuegod62: eth0: vmnet4 : 192.168.2.62  网关: 192.168.2.63

xuegod64: eth0: vmnet4 : 192.168.2.64  网关: 192.168.2.63

2、配置xuegod64为realserver, 并启web服务

[root@xuegod64 ~]# yum install -y httpd

[root@xuegod64 ~]# systemctl restart httpd

[root@xuegod64 ~]# echo "192.168.2.64" > /var/www/html/index.html    #(实验期间,各个服务器的页面不同)

3、配置xuegod62为realserver, 并启web服务

[root@xuegod62 ~]# yum install -y httpd

[root@xuegod62 ~]# systemctl restart httpd

[root@xuegod62 ~]# echo "192.168.2.62" > /var/www/html/index.html    #(实验期间,各个服务器的页面不同)

10 、 测试:

在xuegod63上测试:

[root@xuegod63 ~]# yum install elinks

测试realserver :

[root@xuegod63 ~]# elinks 192.168.2.64

[root@xuegod63 ~]# elinks 192.168.2.64 --dump

192.168.2.64

[root@xuegod63 ~]# elinks 192.168.2.62 --dump

192.168.2.62

11 、 测试VIP:

[root@xuegod63 ~]# elinks 192.168.1.63 --dump

192.168.2.62

访问: 在物理上打开浏览器访问: 每按F5刷新一次,就会变换一个页面。

分发器需要监听80 吗?不需要

12  扩展ipvsadm 更多参数说明

 -L -n  ==>  查看规则,显示内核虚拟服务器表

 -L -n -c ==> 查看客户端连接分发器和real server 的情况

例1:

[root@xuegod63 ~]# ipvsadm -L -n -c

IPVS connection entries

pro expire state       source             virtual            destination

TCP 01:33  TIME_WAIT   192.168.1.100:49698 192.168.1.70:80    192.168.2.62:80

TCP 01:26  TIME_WAIT   192.168.1.100:49690 192.168.1.70:80    192.168.2.64:80

TCP 01:57  TIME_WAIT   192.168.1.100:49739 192.168.1.70:80    192.168.2.62:80

选项:

-L -n --stats  ==>  查看分发情况

-L -n --rate  ==> 查看速率

-Z --zero 虚拟服务表计数器清零(清空当前的连接数量等)

例2:

[root@xuegod63 ~]# ipvsadm -Z

[root@xuegod63 ~]# ipvsadm -L -n --stats

IP Virtual Server version 1.2.1 (size=4096)

选项:   -Z --clear 清空IPVS的数据、等信息

例3:

[root@xuegod63 ~]# ipvsadm -C

选项:   -C    清空所有规则

LVS的规则配置文件:/etc/sysconfig/ipvsadm

附录:ipvsadm命令选项解释:

-A --add-service      在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E --edit-service      编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D --delete-service  删除内核虚拟服务器表中的一条虚拟服务器记录。

-C --clear                 清除内核虚拟服务器表中的所有记录。

-R --restore             恢复虚拟服务器规则

-S --save                 保存虚拟服务器规则,输出为-R 选项可读的格式

-a --add-server        在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e --edit-server        编辑一条虚拟服务器记录中的某条真实服务器记录

-d --delete-server    删除一条虚拟服务器记录中的某条真实服务器记录

-L|-l --list                  显示内核虚拟服务器表

-Z --zero                  虚拟服务表计数器清零(清空当前的连接数量等)

--set tcp tcpfin udp  设置连接超时值

--start-daemon        启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived的VRRP 功能。

--stop-daemon        停止同步守护进程

-h --help                  显示帮助信息

其他的选项:  

-t --tcp-service service-address        说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]

-u --udp-service service-address      说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]

-f --fwmark-service fwmark               说明是经过iptables 标记过的服务类型。

-s --scheduler scheduler                   使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.

-p --persistent [timeout]                    持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。

-M --netmask                                    netmask persistent granularity mask

-r --real-server server-address         真实的服务器[Real-Server:port]

-g --gatewaying                                指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)

-i --ipip                                              指定LVS 的工作模式为隧道模式

-m --masquerading                           指定LVS 的工作模式为NAT 模式

-w --weight weight                            真实服务器的权值

--mcast-interface interface               指定组播的同步接口

-c --connection                                 显示LVS 目前的连接 如:ipvsadm -L -c

--timeout                                           显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

--daemon                                          显示同步守护进程状态

--stats                                               显示统计信息

--rate                                                显示速率信息

--sort                                                 对虚拟服务器和真实服务器排序输出

--numeric -n                                      输出IP 地址和端口的数字形式

 

超时时间用ipvsadm --set tcp tcpfin udp设置,比如

#ipvsadm --set 120 20 100

表示tcp空闲等待时间为120 秒

客户端关闭链接等待时间为20秒

udp空闲等待为100秒

LVS系列一、LVS集群-NAT模式的更多相关文章

  1. LVS负载均衡集群--NAT模式部署

    目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...

  2. 构建LVS负载均衡集群——NAT模式(最简单方式)

    一.装备一台lvs调度器主机要求两个网卡一个为内部局域网ip,一个为公网ip #IP地址设置过程不再重复 [root@localhost ~]# ip a | grep eth0 #内网ip : et ...

  3. LVS集群TUN模式实例(5)

    LVS集群TUN模式实例 1. 实验拓扑图 2. 实验环境 4台CentOS6.2的服务器. 类型 IP DR eth0:10.20.73.20  VIP eth0:0 10.20.73.30 RS ...

  4. LVS集群DR模式实例(4)

    LVS集群DR模式实例 1. 实验拓扑图 2. 实验环境 3台CentOS6.4 64bit的服务器. 类型 IP DR eth0:10.20.73.20  VIP eth0:0 10.20.73.3 ...

  5. RabbitMQ学习之集群镜像模式配置

    1.增加负载均衡器 关于负载均衡器,商业的比如F5的BIG-IP,Radware的AppDirector,是硬件架构的产品,可以实现很高的处理能力.但这些产品昂贵的价格会让人止步,所以我们还有软件负载 ...

  6. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    No cross,no crown . 不经历风雨,怎么见彩虹. Redis哨兵模式,用现在流行的话可以说就是一个"哨兵机器人",给"哨兵机器人"进行相应的配置 ...

  7. spark之scala程序开发(集群运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  8. 一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

    1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop      ...

  9. Spark新手入门——3.Spark集群(standalone模式)安装

    主要包括以下三部分,本文为第三部分: 一. Scala环境准备 查看二. Hadoop集群(伪分布模式)安装 查看三. Spark集群(standalone模式)安装 Spark集群(standalo ...

随机推荐

  1. ak-1

    最近研究ak,网上也有很多这方面的资料,就不重复叙述了,本次记录就是自己在做适应时的一些记录. 本次环境 中标麒麟  金蝶apusic 人大金仓 先说说东西从哪下载怎么来的 基本都是通过官网打电话申请 ...

  2. 2.Locust 跑起来试试

    代码 from locust import HttpLocust, TaskSet, task class UserBehavior(TaskSet): @task def baidu(self): ...

  3. loj2587 「APIO2018」铁人两项[圆方树+树形DP]

    主要卡在一个结论上..关于点双有一个常用结论,也经常作为在圆方树/简单路径上的良好性质,对于任意点双内互不相同的三点$s,c,t$,都存在简单路径$s\to c\to t$,证明不会.可以参见clz博 ...

  4. Java冒泡排序,二分查找法

    冒泡排序 int[] arr = {1,7,6,2,8,4}; int temp ; //只需 运行 5次 for (int i = 0; i < arr.length - 1; i++) { ...

  5. C# ado.net 使用task和await(四)

    class Program { private static string constr = "server=.;database=northwnd;integrated security= ...

  6. 删除3天前创建的以log结尾的文件

    1. #/bin/bash # filename: del_log.sh find / -name "*.log" -mtime 3 | xargs rm -rf 2. #/bin ...

  7. Delphi 实现Ping命令

    Delphi  实现Ping命令 unit FtPing; interface uses Windows, SysUtils, Classes, Controls, Winsock, StdCtrls ...

  8. HGOI 20191103am 题解

    Problem A number 使用一个$2^k$数集中每个元素的和表示数$n$,不同集合的数目有多少? 对于$100\%$的数据满足$1 \leq n \leq 10^6$ Solution : ...

  9. 新西达电调初始化代码,使用nodejs ffi技术调用wiringpi,代码使用typescript编写

    这是我设计的F450四轴飞行器飞控代码的一部分 运行在orangepi-zero上,操作系统是armbian,思路是使用node-ffi调用wiringpi的so库与GPIO通信,然后控制端逻辑代码使 ...

  10. 捣乱Linux环境下的C语言

    #include <stdlib.h> 头文件作用.CSDN C 标准库 – <stdlib.h> | 菜鸟教程  https://www.runoob.com/cprogra ...