目录
一.企业群集应用概述
1.群集的含义
Cluster,集群、群集
由多台主机构成,但对外只表现为一个整体
问题:
互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心
解决方法
使用价格昂贵的小型机、大型机使用普通服务器构建服务群集
2.系统性能扩展方式:
. Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
. Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster垂直扩展不再提及:
随着计算机性能的增长,其价格会成倍增长
3.集群Cluster
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的
单个系统Cluster分为三种类型:
LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
HA: High Availiablity,高可用,避免 SPOF (single Point Of failure)
HPC: High-performance computing,高性能
负载均衡群集(Load Balance Cluster)
提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能·LB的负载分配依赖于主节点的分流算法
#轮询rr〈Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均等地对待每台服务器,而不管服务器实际的连接数和系统负载。
#加权轮询wrr(weighted Round Robin):根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更多请求。
#最少连接lc(Least connections):根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
#加权最少连接wlc(weighted Least connections):在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更大比例的活动连接负载。
#TP_Hash根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,
#fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配
#url_hash按访问url的hash结果来分配请求,使每个ur1定向到同一个后端服务器,后端服务器为缓存时比较有效。
4.分布式系统
分布式存储: Ceph,GlusterFS,FastDFS,MogileFS
分布式计算: hadoopr Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调互相配合,为用户提供最终价值)
分布式静态资源–静态资源放在不同的存储集群上·分布式数据和存储–使用key-value缓存系统
分布式计算–对特殊业务使用分布式计算,比如Hadoop集群
5.基于工作的协议层次划分
- 传输层(通用):DNAT 和 DPORT
LVS:
nginx:stream
haproxy:mode tcp - 应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, mycat…
6.总结
集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代
码都是一样的。
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来握升效率。
二.负载均衡群集架构
负载均衡的结构
第一层,负载调度器(Load Balancer或Director
第二层,服务器池(Server Pool)
第三层,共享存储(Share Storage)
三.LVS术语
VS: Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer (lvs服务器).
RS: Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)·
CIP: Client lP(客户机IP)
VIP: Virtual serve lP VS外网的IP·
DIP: Director IP VS内网的IP
RIP: Real server lP(真实IP)
访问流程:CIP <–> VIP == DIP <–> RIP
四.LVS集群的工作模式
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址(直接路由)
- lvs-tun:隧道模式
1.LVS的NAT模式
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的真实服务器的真实IP和PORT实现转发
(1)真实IP和内网IP应在同一个IP网络,且应使用私网地址;真实服务器的网关要指向内网IP
(2)请求报文和响应报文都必须经由Director(调度部分)转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)lvs服务器必须是Linux系统,真实IP可以是任意OS系统
2.LVS的隧道模式
真实IP和内网IP可以不处于同一物理网络中,真实服务器的网关一般不能指向内网IP,且真实IP可以和公网通信。也就是说集群节点可以跨互联网实现。内网IP, 外网IP, 真实IP可以是公网地址。
真实服务器的通道接口上需要配置外网IP地址,以便接收内网IP转发过来的数据包,以及作为响应的报文源IP。
内网IP转发给真实服务器时需要借助隧道,隧道外层的IP头部的源IP是内IP,目标IP是真实IP,而真实服务器响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是外网IP,目标IP是客户机IP
请求报文要经由Director,但响应不经由Director,响应由真实服务器自己完成
不支持端口映射
真实服务器的系统须支持隧道功能
3.直接路由模式
Direct Routing,简称DR模式
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络“负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
4.LVS工作模式总结和比较
NAT | TUN | DR | |
---|---|---|---|
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 支持隧道 | 不支持跨网段 |
Real server(要求) | any | Tunneling | Non-arp device |
Real server network | private(私网) | LAN/WAN(公网、私网) | LAN(私网) |
Real server number | low (10~20) | High (100) | High (100) |
Real server gateway | load balancer | own router | own router |
五.ipvsadm 工具
-A: 添加虚拟服务器
-D: 删除整个虚拟服务器
-s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc)
-a: 添加真实服务器(节点服务器)
-d: 删除某一个节点
-t: 指定VIP地址及TCP端口
-r: 指定RIP地址及TCP端口
-m: 表示使用NAT群集模式
-g: 表示使用DR模式
-i: 表示使用TUN模式
-w: 设置权重(权重为0时表示暂停节点)
-p 60: 表示保持长连接60秒
-l: 列表查看 LVS虚拟服务器(默认为查看所有)
-n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln
六.NAT模式LVS负载均衡部署
负载调度器:配置双网卡 内网:192.168.133.50(ens33) 外网卡:12.0.0.1(ens37)
二台WEB服务器集群池:192.168.133.99、192.168.133.100
一台NFS共享服务器:192.168.133.75
客户端 win10
1.部署共享存储(NFS服务器:192.168.133.75)
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install nfs-utils rpcbind -y 安装软件服务
[root@localhost ~]# mkdir /opt/zy /opt/fyx 新建2个文件夹
[root@localhost ~]# chmod 777 /opt/zy /opt/fyx 给文件夹设置权限
[root@localhost ~]# echo "welcome ! this is zy' page ! " > /opt/zy/index.html 各自添加一个网页
[root@localhost ~]# echo "WELCOME ! THIS IS FXY' PAGE ! " > /opt/fyx/index.html
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# vim /etc/exports 设置共享策略
[root@localhost ~]# exportfs -rv 查看共享策略
exporting 192.168.133.0/24:/opt/fyx
exporting 192.168.133.0/24:/opt/zy
[root@localhost ~]# systemctl restart nfs
2.节点服务器
1.服务器一(192.168.133.99):
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install httpd -y 安装http
[root@localhost ~]# showmount -e 192.168.133.75
Export list for 192.168.133.75:
/opt/fyx 192.168.133.0/24
/opt/zy 192.168.133.0/24
[root@localhost ~]# vim /etc/fstab
在最后一行添加永久挂载
[root@localhost ~]# mount -a 检查挂载是否成功
[root@localhost ~]# df -hT
[root@localhost ~]# systemctl start httpd 启动服务
把网卡网关指向负载调度器的内网地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 编辑网卡
[root@localhost ~]# systemctl restart network 重启网卡
2.服务器二(192.168.133.100)
操作和服务器一相同,就是挂载不同
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install -y httpd
[root@localhost ~]# showmount -e 192.168.133.75
Export list for 192.168.133.75:
/opt/fyx 192.168.133.0/24
/opt/zy 192.168.133.0/24
[root@localhost ~]# vim /etc/fstab
[root@localhost ~]# mount -a
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# df -Th
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
3.调度(负载)服务器的配置
(内:192.168.133.50)
(外:12.0.0.1)
网卡设置
首先要有2块网卡,所以我们要先添加一块网卡
[root@localhost ~]# ifconfig
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# vim ifcfg-ens33
内网网卡设置
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
外网网卡设置,删除uuid并更改以下
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig
路由功能开启
[root@localhost ~]# vim /etc/sysctl.conf 打开路由转发功能
在文件末尾加上这一行
[root@localhost ~]# sysctl -p 刷新,启动服务
net.ipv4.ip_forward = 1
防火墙设置
[root@localhost ~]# iptables -nL -t nat
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -o ens37 -j SNAT --to 12.0.0.1
[root@localhost ~]# iptables -nL -t nat
内核模块加载
[root@localhost ~]# cat /proc/net/ip_vs 没启动前是报错的
cat: /proc/net/ip_vs: No such file or directory
[root@localhost ~]# modprobe ip_vs 刷新启动后就能看到了
[root@localhost ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]# yum install ipvsadm* -y 安装软件
[root@localhost ~]# ipvsadm-save >/etc/sysconfig/ipvsadm 保存配置文件,不保存启动服务会报错
[root@localhost ~]# systemctl start ipvsadm.service
[root@localhost ~]# ipvsadm -C 先清空
[root@localhost ~]# ipvsadm -A -t 12.0.0.1:80 -s rr 指定IP地址 外网的入口 -s rr 轮询
[root@localhost ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.133.99:80 -m 先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
[root@localhost ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.133.100:80 -m
[root@localhost ~]# ipvsadm 查看状态
4.打开客户端
设置IP地址
ping内网网地址测试
打开浏览器输入“12.0.0.1”
等待几分钟后再刷新