什么是集群??
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。
(Cluster就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点node)
集群宗旨:
可伸缩性、可靠性、可管理性
集群分类
负载均衡集群
Load Balance集群,简称LB,当一台服务器无法满足需求的时候,两台或多台服务器同时为客户端提供服务,以分担需求,提供轮询工作查询[GSLB,SLB]
高可用集群
High Availability集群,简称HA,比如一台服务器出现故障的时候,但是不影响客户端体验,另外一台服务器担当这台服务器的工作!
高性能集群
High Perfermance Computing集群,简称HPC,一台计算机是4路,那么100台计算机同时来辅助计算处理,就是400颗CPU。
硬件集群和软件集群
硬件
F5负载均衡器 https://f5.com/
软件
LVS(工作在OSI第四层,传输层)端口 http://zh.linuxvirtualserver.org/
Nginx(工作在OSI第七层,应用层)文件后缀
LVS:Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统此项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。章文嵩 阿里云的CTO 现在是滴滴的CTO
LVS集群的三层结构
1、负载调度器/分发器(load balaancer)
它是整个集群对外的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个ip地址上的,我们称这个ip为虚拟ip。Virtual IP=VIP
2、服务器池(Server Pool)
是一组真正执行客户请求的服务器,执行程序可以是一组web、ftp、mail和DNS等等。
3、共享存储(Shared Storage)
它是为服务器池提供的一个共享存储区,这样很容易使得服务器拥有相同的内容,提供相同的服务。

LVS包转发方式
LVS有四种转发方式
NAT(网络地址映射)
IP Tunneling(IP隧道)
Direct Routing(直路由)
Full-NAT模式
不同的转发模式决定了不同的Cluster的网络结构,包的转发方式的目的:安全性、可靠性、性能
NAT分为两种情况:
DNAT:目标地址转换
SNAT:源地址转换
NAT方式支持任何操作系统,以及私有网络,并且只需要一个Internet IP即可
缺点:
是整个系统的性能受到限制,因为执行NAT的过程每一次都需要重写包,有一定的延迟。另外,大部分应用有80%的数据是从服务器流向客户端,也就是用户的请求非常短,而服务器的回应非常大,对负载均衡器形成非常大的压力,成为新的瓶颈!
大数据上:真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的瓶颈!
LVS-NAT工作原理
1、原理:
就是把客户端发来的数据包的ip头的目的地址,在负载均衡上换成其中一台RS的ip地址,并发至此RS来处理,RS处理完成后把数据交给经过负载均衡器。
负载均衡器再把数据包的源ip地址改为自己的ip,将目的地址改为客户端ip地址即可。期间,无论进来的流量还是出去的流量,都必须经过负载均衡器。
客户端请求:CIP VIP
经过了Driector:CIP RIP
RS响应:RIP CIP
二次经过Driecoor:VIP CIP

数据包流动过程:
客户端访问服务器,访问请求到达调度器,调度器通过网络地址转换,调速器重写请求报文到目的地址
根据预设的调度算法,将请求分派给后端的Real Server
Real Server的相应包通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
2、优点
集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。
3、缺点
扩展性有限,当服务器节点增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器上,速度就会变慢。
4、关于集群中的IP名称缩写
名称 缩写 说明
虚拟IP地址(Virtual IP address) VIP VIP为Director用户向客户端提供服务的IP地址
真实IP地址(Real Server IP address) RIP 在集群下面节点上使用的IP地址
Director IP地址(Director IP Address) DIP Directory用于连接内外网的IP地址,物理网卡上的IP地址
客户端IP地址(Client Ip Address) CIP 客户端用户请求集群服务器的IP地址,改地址用作发送给集群请求的源IP地址
5、数据包请求步骤分解
(1)、步骤1:客户端访问VIP1的网站
发送的请求包是源地址是自己的ip地址CIP,目标地址直接访问的是Director的VIP,请求显示某一个页面,是不去直接访问Real Server里面的ip地址(Real Server的ip地址是私有的ip地址,需要经过NAT的方式将内部ip地址转换之后的VIP才能在公网上运作)

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

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

搭建LVS NAT模式
1、环境前期准备
主机名 ip地址 服务角色 系统信息
node154 eth0:20.20.20.154 调度器 centos7.2-1511
eth1:192.168.1.154
node155 eth1:192.168.1.155 web1 centos7.2-1511
gateway:192.168.1.154
DNS:192.168.1.154
node156 eth1: 192.168.1.156 web2 centos7.2-1511
gateway:192.168.1.154
DNS:192.168.1.154
2、配置分发器
(1)、开启路由转发功能
将node154节点配置成分发器,需要打开路由转发功能。
[root@node154 ~]# vim etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@node154 ~]# sysctl -p #加载配置,是指sysctl.conf里面的配置生效
net.ipv4.ip_forward = 1
[root@node154 ~]#
(2)、安装LVS管理功能
[root@node154 ~]# yum install -y ipvsadm
3、配置Director规则
(1)、设置规则
[root@node154 ~]# ipvsadm -A -t 20.20.20.154:80 -s rr #rr表示轮询,round-robin
参数说明:
-A:表示添加;-t:表示TCP的服务;后面书写格式为VIP:port; -s:设置调度算法
[root@node154 ~]# ipvsadm -a -t 20.20.20.154:80 -r 192.168.1.155 -m
[root@node154 ~]# ipvsadm -a -t 20.20.20.154:80 -r 192.168.1.156 -m
参数说明:
(2)、查看规则
[root@node154 ~]# ipvsadm -L -n #配置及查看内核ipvs表和算法的工具类似于iptables
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 20.20.20.154:80 rr
-> 192.168.1.155:80 Masq 1 0 0
-> 192.168.1.156:80 Masq 1 0 0
[root@node154 ~]#
InActConn 指非活跃连接数, TCP ESTABLISH 状态以外的连接都称为不活跃连接。例如处于 SYN_RECV 状态的连接,处于 TIME_WAIT 状态的连接等
(3)、保存规则
[root@node154 ~]# ipvsadm -S
-A -t 20.20.20.154:http -s rr
-a -t 20.20.20.154:http -r 192.168.1.155:http -m -w 1
-a -t 20.20.20.154:http -r 192.168.1.156:http -m -w 1
4、配置Real Server
(1)、自定义http页面
[root@node155 ~]# echo web155 > var/www/html/index.html
[root@node156 ~]# echo web156 > var/www/html/index.html
(2)、重启httpd服务
[root@node155 ~]# systemctl restart httpd
[root@node156 ~]# systemctl restart httpd
测试集群
(1)、模拟客户端浏览页面


测试结果是会在两个页面之间切换
ipvsadmin 其他参数
--add-service -A add virtual service with option
#在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器
--edit-service -E edit virtual service with options
#编辑内核虚拟服务器表中的一条虚拟服务器记录
--delete-service -D delete virtual service
#删除内核虚拟服务器表中的一条虚拟服务器记录
--clear -C clear the whole table
#清除内核虚拟服务器表中的所有记录
--restore -R restore rules from stdin
#恢复虚拟服务器规则
--save -S save rules to stdout
#保存虚拟服务器规则,输出为-R 选项可读的格式
--add-server -a add real server with options
#在内核虚拟服务器表的一条记录里添加一条新的真实服务器
--edit-server -e edit real server with options
#编辑一条虚拟服务器记录中的某条真实服务器记录
--delete-server -d delete real server
#删除一条虚拟服务器记录中的某条真实服务器记录
--list -L|-l list the table
#显示内核虚拟服务器表
--zero -Z zero counters in a service or all services
#虚拟服务表计数器清零
--set tcp tcpfin udp set connection timeout values
#设置连接超时值
--start-daemon start connection sync daemon
#启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采keepalived 的VRRP 功能。
--stop-daemon stop connection sync daemon
#停止同步守护进程
--help -h display this help message
#显示帮助信息
ipvsadm其他选项
--tcp-service -t service-address service-address is host[:port]
#说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]
--udp-service -u service-address service-address is host[:port]
#说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]
--fwmark-service -f fwmark fwmark is an integer greater than zero
#说明是经过iptables 标记过的服务类型。
--scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,the default scheduler is wlc.
#使用的调度算法,有这样几个选项,默认的调度算法是:wlc.
--persistent -p [timeout] persistent service
#持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒
--netmask -M netmask persistent granularity mask
--real-server -r server-address server-address is host (and port)
#真实的服务器[Real-Server:port]
--gatewaying -g gatewaying (direct routing) (default)
#指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式
--ipip -i ipip encapsulation (tunneling)
#指定LVS 的工作模式为隧道模式
--masquerading -m masquerading (NAT)
#指定LVS 的工作模式为NAT 模式
--weight -w weight capacity of real server
#真实服务器的权值
--u-threshold -x uthreshold upper threshold of connections
--l-threshold -y lthreshold lower threshold of connections
--mcast-interface interface multicast interface for connection sync
#指定组播的同步接口
--syncid sid syncid for connection sync (default=255)
--connection -c output of current IPVS connections
#显示LVS 目前的连接 如:ipvsadm -L -c
--timeout output of timeout (tcp tcpfin udp)
#显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout
--daemon output of daemon information
#显示同步守护进程状态
--stats output of statistics information
#显示统计信息
--rate output of rate information
#显示速率信息
--thresholds output of thresholds information
--persistent-conn output of persistent connection info
--sort sorting output of service/server entries
#对虚拟服务器和真实服务器排序输出
--ops -O one-packet scheduling
--numeric -n numeric output of addresses and ports
#输出IP 地址和端口的数字形式
ipvsadm命令实例
(1)、查看客户端连接分配器和Real Server
[root@node154 ~]# ipvsadm -L -n -c
IPVS connection entries
pro expire state source virtual destination
TCP 14:50 ESTABLISHED 192.168.20.17:51864 20.20.20.154:80 192.168.1.155:80
TCP 15:01 ESTABLISHED 20.20.20.23:57511 20.20.20.154:80 192.168.1.155:80
TCP 01:58 FIN_WAIT 192.168.20.17:51863 20.20.20.154:80 192.168.1.156:80
TCP 14:58 ESTABLISHED 20.20.20.23:57512 20.20.20.154:80 192.168.1.156:80
[root@node154 ~]#
(2)、清空当前虚拟服务器的计数器
[root@node154 ~]# ipvsadm -Z
(2)、查看分发情况
[root@node154 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 20.20.20.154:80 0 2 2 82 80
-> 192.168.1.155:80 0 1 1 41 40
-> 192.168.1.156:80 0 1 1 41 40
[root@node154 ~]#
Conns (connections scheduled) 已经转发过的连接数
InPkts (incoming packets) 入包个数
OutPkts (outgoing packets) 出包个数
InBytes (incoming bytes) 入流量(字节)
OutBytes (outgoing bytes) 出流量(字节)
(3)、查看速率
[root@node154 ~]# ipvsadm -L -n --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP 20.20.20.154:80 0 0 0 0 0
-> 192.168.1.155:80 0 0 0 0 0
-> 192.168.1.156:80 0 0 0 0 0
[root@node154 ~]#
CPS (current connection rate) 每秒连接数
InPPS (current in packet rate) 每秒的入包个数
OutPPS (current out packet rate) 每秒的出包个数
InBPS (current in byte rate) 每秒入流量(字节)
OutBPS (current out byte rate) 每秒入流量(字节)
总结
Director 两张网卡,一张模拟外网,另外一张模拟内网配置DIP
所有RS的网关,指向DIP
配置演示页
配置规则,需要加载模块
进行测试