一、集群的基本原理
集群:数据内容是一致的,集群可以被替代
分布式:各司其职,每台服务器存储自己独有的数据,对外作为单点被访问是访问整体的数据;
分布式是不能被替代的;分布式分为MFS、GFS、ceph;
优点:效率快
数据库分布式存储:
如果两个人同时修改数据库,会出现数据不隔离,不能同步的问题;这时候就用到了事务隔离、还可以用主从复制、还可以用mycat实习读写分离;读写分离主要是php内部会做条件判断、一旦要进行写操作,它会去找某一台mysql数据库;因为写服务器只有一台,如果写服务器崩了,就会造成损失,这时用到了数据库的高可用-MHA、PXC、MMM,这样一旦数据库写服务器出了问题,当前服务器就会降级,而另一台服务器就会升级为新的写服务器。
会话保持:
动态资源要和数据库资源进行联动,例:购物车——如果会话没有保持,php动态资源里没有数据,导致它不知道调用哪一个数据库,导致你购物车里也没数据。因此我们要想办法保存:cookie、session;session需要用session服务器——Redis(中间件),会话是以键值对存储的、
redis也可以做集群,哨兵(cluster)
【注】:代理和调度的本质是负载均衡。
LVS、F5(四层负载均衡 ):tcp/ip栈的传输层,针对多个应用做负载均衡,如:80、3306
七层负载均衡:如用的是http协议,只能通过http协议做负载均衡;自己是http服务器、负载均衡被调度方也是http对应的web服务器,这种就被称为代理负载均衡
代理负载均衡分为:同构代理(http、ftp、mysql):只是普通端口代理
异构代理(fastcgi、uwsgi):跨程序代理
1.概述
集群(cluster),也称为群集,表示一群的意思,在服务器领域表示大量的服务器的集合体。
2.计算机性能扩展方案
①纵向扩展
②横向扩展--->集群
3.企业网站架构器群的由来
4.企业级集群分类:
①负载均衡集群(LB---->Load Balance)
②高可用集群(HA--->High Availability)
③高性能集群(HP)
将各个主机组成集群,形成一个系统组合工作。其系统的可扩展性、可用性、容量、性能都会有大规模的提升。
5.集群部署的思路:
①可用 (然后再优化,注意系统内尽量要避免串行化和交互)
②标准化
③自动化
6.集群的种类
①:负载均衡集群(LB)
在企业网站架构中,提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体能力。
例如“DNS轮询”“应用层交换”“反向代理”等都可做负载均衡集群。
LB负载分配依赖于主节点的算法,将来自客户机的访问请求分担给多个多个服务器节点,从而缓解整个系统的负载压力。
②:高可用集群(HA)
提高应用系统的可靠性,尽可能减少终端时间为目标,确保服务的连续的性,达到高可用(HA)的容错效果,例如“故障切换”“双机热备”“多机热备”等都属于高可用集群技术
HA工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从才切换为从节点。
③:高性能集群(HP)
以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力。
如“云计算”“网格计算”;高性能群集依赖于“分布式运算”、并行计算:通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,
实现大型、超级计算机才具备的计算能力。、
7.负载均衡集群实现方式
①:硬件方式 F5 A10 Citrix NetScaler array 梭子鱼 绿盟 ......
②:软件方式:LVS haproxy nginx ats ......
8.负载均衡集群工作的层次划分
传输层:LVS,haproxy(模拟在传输层进行调度) 新版nginx也支持
应用层:haproxy nginx ats
二、LVS原理详解和LVS的配置
1.LVS基本介绍
①:LVS(Linux Virtual Server)工作在传输层,基于TCP和UDP进行调度工作。已经被Linux官方编译入内核,作者是章文嵩。
②:工作方式:根据目标IP和端口转发入后端主机集群(服务器池)中的某一台主机(如何挑选,基于某种特定的算法)
③:LVS附着在netfilter基础上进行工作 ip_vs ipvsadm
2.回顾Netfilter的五个钩子函数
①:PREROUTING ---> INPUT
②:PREROUTING ---> FORWARD --->POSTROUTING
③:OUTPUT ---> POSTROUTING
LVS由工作在用户空间的ipvsadm和内核空间的ipvs组成
ipvsadm:用户空间命令工具,用于管理LVS集群服务
ipvs:工作在内核netfilter INPUT链
查看系统内核是否编译了LVS,以及支持的功能
grep -i -A 10 'IPVS' /boot/config-3.10.0-514.el7.x86_64
通常ipvs模块在Linux内核中被自动装载,若没有被装载,执行modprobe ip_vs进行装载,然后cat /proc/net/ip_vs 查看是否装载成功。
4.LVS架构名词
①:调度器(director) DIP
②:RS(real server) RIP
③:CIP(client IP)
④:VIP(Director Virutal IP)
5.LVS结构类型
①:lvs-nat
②:lvs-dr(direct routing)
③:lvs-tun
④:lvs-fullnat
NAT模式:
①多目标的DNAT,real-server为隐藏的内网私有地址,用户请求需要基于NAT地址转换。
②:nat模式请求流程:通过修改请求报文目标IP地址(可能修改目标端口),挑选出某个RS的RIP实现转发。
注意事项:①:RS应该和DIP都使用私网地址,并且RS网关须指向DIP
②:请求和响应报文都要基于director转发,在生产环境通常director需要高可用
③:director支持端口映射,RS可以使用任何操作系统
④:RS的RIP和director的DIP必须在同一网络。
原理:客户封装一个请求报文(数据载荷+源IP:CIP+目标IP:VIP),发送到调度器LVS上,在调度器上的INPUT链做DNAT转换,然后封装报文变动(数据载荷+源IP:CIP+目标IP:后台某个RIP),调度器利用算法探测后端服务器哪个比较空闲,这样报文就可基于导演服务器的某种算法顺利的转发给后端某台服务器。后台某个服务器接收到了报文,做一个响应报文(数据载荷+源IP:后台某个RIP+目标IP:CIP),然后发送给LVS调度器,在LVS做一个SNAT转换(数据载荷+源IP:自己的VIP+目标IP:CIP),最后发送给客户端
【注】:必须要求nat服务器一手托两家,请求报文和响应报文都经过DIP,后面RIP的网关必须指向导演;nat服务器要开启核心路由转发功能
DR模式:
通过修改目标MAC地址来实现调度转发
注意事项:①:保证前端路由器将目标IP为VIP的请求报文发送给director
解决方案:修改RS主机内核参数
②:RS的RIP可以使用私有地址,也可以使用公网地址
③:RS跟director必须在同一物理网络中
④:请求报文经由director调度,但响应报文一定不能经过director
⑤:不支持端口映射
⑥:RS可以是大多数OS
⑦:RS网关不能指向director
原理:请求报文(数据载荷+源IP:CIP+目标IP:VIP),经过层层路由,到达LVS调度器,它不会做任何ip地址转换,只是通过甩锅把报文甩到RIP某一个服务器上,这时LVS调度器重新封装报文(数据载荷+源IP:CIP+目标IP:后端某一台RIP);当后端RIP收到请求报文时,它会返回一个响应报文(数据载荷+源IP:自己的RIP+目标IP:CIP)
【注】:必须要求每个RIP回环接口上面都绑定一个VIP地址(避免RIP绑定的VIP和调度器上的VIP产生局域网IP冲突)
流程:客户端发送请求报文(数据载荷+源IP:CIP+目标IP:VIP),发送到路由器右侧接口,路由器会发送一个VIP地址解析对应的ARP广播,这时为了防止后面的RIP服务器接到VIP广播,就要修改对应的内核参数(让其禁止接收ARP广播、禁止回应ARP广播);此时只有LVS调度服务器可以收到ARP广播,由于此时是在内网通信,内网通信走MAC地址,所以此时的报文封装形式就发生了变化(数据载荷+源IP:CIP+目标IP:VIP+源MAC:路由器右侧接口MAC+目标MAC:调度器VIP接口的MAC),然后发送给LVS导演服务器;当导演收到后,基于调度算法挑选RIP中某一台服务器,并封装局域网的MAC地址(源MAC:调度器自己的MAC+目标MAC:RIP某一台服务器的MAC),注意由于回环地址没有MAC地址,只有真网卡有MAC地址,为了保证真网卡可以顺利把报文传给回环网卡做匹配,所以要把真网卡到回环网卡之间开启核心路由转发功能;然后重新封装响应报文(源IP:VIP+目标IP:CIP+源MAC:真网卡MAC+目标MAC:路由器右侧接口的MAC地址)
tun模式:
不修改请求报文的ip首部,通过原有ip头部之外,再封装一个ip头部。
价格比较昂贵,在企业中走专线,在企业中用的少
注意事项:①DIP RIP VIP 全是公网地址
②RS的网关不能指向DIP
③请求报文必须由director调度,响应报文必须不能经过director
④不支持端口映射
⑤RS的OS必须支持隧道功能
原理:
lvs-fullnat模式(默认内核不支持):
Director通过同时修改请求报文的目标地址和源地址进行转发,可以实现跨机房部署
注意事项:①:VIP是公网地址,RIP和DIP是私网地址,二者无需在同一网络
②:RS接受到请求报文的源地址为DIP,因此要响应给DIP
③:请求报文和响应报文都必须经由Director
④:支持端口映射
⑤:RS可以使用任意OS
原理:因为不在同一个网络,所以要做双向FullNAT,客户端发请求报文(源IP:CIP+目标iP:vip),调度器那会做报文更改(源IP:DIP+目标iP:RIP),当RIP收到到会返回一个响应报文(源IP:RIP+目标iP:DIP),通过层层路由到调度器,然后做报文更改(源IP:vip+目标iP:cip),最后客户收到响应报文。
6.负载均衡必须要考虑的问题--->会话保持
负载均衡集群进行调度,尤其在web服务集群,调度过程中无法避免的问题就是会话保持。
会话保持解决方案:
①:session绑定(以ip_hash机制进行绑定,会一定程度上损害负载均衡效果)
cookie:LVS无法实现
②:session集群
③:session服务器(较大规模生产环境)
7.LVS的调度算法
负载均衡集群进行调度,如何挑选后端RS进行调度?--->基于固定的调度算法
静态方法:根据算法本身进行调度
RR(轮询) WRR(加权轮询) SH(源地址hash,实现session保持) DH(目的地址hash)
动态方法:根据算法以及各个RS的当前负载状态进行调度
LC(最小连接数) WLC(加权最小连接) SED(最短期望延迟) NQ(永不排队) LBLC(基于局部性的最少链接) LBLCR(带复制的基于局部性最少链接)
8.LVS客户端工具--->ipvsadm的用法
【注】:①:在一个ipvs主机中可以定义多个集群服务;一个集群服务中一个director至少应该能调度一个RS
②:使用客户端工具ipvsadm完成LVS的规则调度。
③:管理LVS集群服务
新增和修改集群
ipvsadm -A|E -t|u|f service-address [-s scheduler] (-A 添加 -E 修改 -t 指定tcp -u 指定udp -s:指定调度算法)
service-address:①如果是tcp -t ip:port
②如果是udp -u ip:port
scheduler:调度算法,默认是wlc
例如:ipvsadm -A -t 173.16.16.88:80 -s rr (添加VIP为173.16.16.88的集群服务,基于TCP协议,端口为80,调度算法为轮询)
ipvsadm -E -t 192.168.10.88:80 -s wrr (修改VIP为192.168.10.88集群的调度算法为加权轮询)
删除集群
ipvsadm -D -t|u|f service-address (-D 删除)
例如:ipvsadm -D -t 173.16.16.88:80 (删除VIP为173.16.16.88,并且端口为80的集群)
清空所有集群规则:
ipvsadm -C
④管理服务器池中的RS
添加和修改
ipvsadm -a|e -t|u| service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-a:添加可调度的服务器节点 -e:修改添加的服务器节点 -r:指定节点服务器IP地址(RIP)
-g:使用DR模型 -i:TUN模型 -m:NAT模型 (默认是DR模型)
-w:权重
例如:ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.10 -m -w 1 添加服务器池中的RS服务器192.168.20.10,被192.168.10.88调度,使用NAT模型,权重为1
ipvsadm -a -t 192.168.10.88:80 -r 192.168.20.20 -m -w 2 添加服务器池中的RS服务器192.168.20.20,被192.168.10.88调度,使用NAT模型,权重为2
删除RS节点
ipvsadm -d -t|u|f service-address -r server-address
例如:ipvsadm -d -t 192.168.10.88 -r 192.168.20.10
⑤查看LVS配置的相关节点和规则
ipvsadm -L [-n] [--stats] [--rate]
动态监控访问数量 watch [-n #] "ipvsadm -L -n"
-n:不反解 -c:显示当前的连接 --stats 显示统计数据 --rate:统计速率