目录
3.1 服务器一:部署共享存储(NFS服务器:192.168.162.121)
一、集群和分布式
1.1 集群含义
Cluster,集群、群集:由多台主机构成,但对外只表现为一个整体。互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心。
Cluster分为三种类型:
LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
HA: High Availiablity,高可用,避免 SPOF(single Point Of failure)
提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果,HA的工作方式包括双工和主从两种模式
HPC: High-performance computing,高性能
提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
常见算法:
#轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均 等地对待每台服务器,而不管服务器实际的连接数和系统负载。
#加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重 值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更 多请求。
#最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收 到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
#加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的 情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载。
#IP_Hash根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,
#url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。具体没研究过
#fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配
1.2 分布式系统
分布式存储:Ceph,GlusterFS,FastDFS,MogileFS
分布式计算:hadoop,Spark
分布式常见应用
分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值服务)
分布式静态资源--静态资源放在不同的存储集群上
分布式数据和存储--使用key-value缓存系统
分布式计算--对特殊业务使用分布式计算,比如Hadoop集群
1.3 集群和分布式区别
集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
二、负载均衡
2.1 什么是负载均衡
负载均衡是由多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,都可以单独对外提供服务而无须其他服务器的辅助。
通过某种负载分担技术,将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。均衡负载能够平均分配客户请求到服务器列阵,借此提供快速获取重要数据,解决大量并发访问服务问题。
2.2 常见负载均衡器
根据工作的协议层可划分为:
四层负载均衡(位于内核层):根据请求报文中的目标地址和端口进行调度
七层负载均衡(位于应用层):根据请求报文的内容进行调度,这种调度属于“代理“的方式如varnish
2.3 负载均衡工作原理
1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间。
2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链。
3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。
4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。
2.4 工作模式
· nat工作模式
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
lvs-dr:操纵封装新的MAC地址(直接路由)
lvs-tun:隧道模式
· IP隧道
采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
· 直接路由
采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
三、部署LVS-NAT
部署准备:
三台服务+一台服务+windows客户机
3.1 服务器一:部署共享存储(NFS服务器:192.168.162.121)
确认内核对LVS管理
[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 ~]#
安装ipvsadm管理所需包
服务器一配置:
##关闭防火墙
##下载服务所需安装包
[root@localhost ~]# yum install nfs-utils rpcbind -y
已加载插件:fastestmirror, langpacks
file:///mnt/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/repodata/repomd.xml"
##新建目录,创建网页文件
[root@localhost opt]# mkdir lpp benet
[root@localhost opt]# ls
benet lpp
[root@localhost opt]# echo "this is lpp" > lpp/index.html
[root@localhost opt]# echo "this is benet" > benet/index.html
##开启服务,查看服务状态
[root@localhost opt]# systemctl start rpcbind
[root@localhost opt]# systemctl start nfs
[root@localhost opt]# systemctl status nfs
##提升文件夹权限
[root@localhost opt]# chmod 777 lpp/ benet/
定制策略
[root@localhost ~]#vim /etc/exports
/opt/lpp 192.168.162.0/24(rw,sync)
/opt/benet 192.168.162.0/24(rw,sync)
验证
3.2 部署两台节点服务器
安装http
##关闭防火墙,安装http
[root@localhost ~]# yum install httpd -y
##验证访问
[root@localhost ~]# showmount -e 192.168.162.121
Export list for 192.168.162.121:
/opt/benet 192.168.162.0/24
/opt/lpp 192.168.162.0/24
挂载目录
##挂载到地址的文件目录下
[root@localhost ~]# mount 192.168.162.121:/opt/lpp /var/www/html/
##查看地址网页文件
[root@localhost ~]# ls /var/www/html/
index.html
[root@localhost ~]#
第二台服务器部署
开启服务
[root@localhost ~]# systemctl start httpd
3.3 部署调度服务器
添加一块新的网卡
复制并修改卡ens37
修改ens33
重启网卡,查看配置
打开路由转发功能
[root@localhost network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
##刷新服务
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost network-scripts]#
添加防火墙策略
[root@localhost network-scripts]# iptables -F
##添加策略
[root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.162.0/24 -o ens37 -j SNAT --to 12.0.0.1
##查看服务
[root@localhost network-scripts]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.162.0/24 0.0.0.0/0 to:12.0.0.1
##刷新服务
[root@localhost network-scripts]# modprobe ip_vs
[root@localhost network-scripts]# 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 network-scripts]# yum install ipvsadm* -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.ustc.edu.cn
* extras: mirrors.ustc.edu.cn
* updates: mirrors.ustc.edu.cn
软件包 ipvsadm-1.27-8.el7.x86_64 已安装并且是最新版本
缺少添加文件
[root@localhost network-scripts]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost network-scripts]# systemctl start ipvsadm.service
[root@localhost network-scripts]#
清空策略,添加记录
[root@localhost network-scripts]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.162.122:80 -m
[root@localhost network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.162.123:80 -m
启动程序
更改两台节点服务器的网卡配置
##更改网卡
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
##更改为调度服务器网址
GATEWAY=192.168.162.101
#DNS1=8.8.8.8
重启网卡
客户机验证