目录
2.配置节点服务器:192.168.68.200 192.168.68.105
3.客户机搭建:192.168.68.100 12.0.0.1
一.集群和分布式
1.系统性能的扩展方式
- 垂直扩展:提高物理硬件的性能
- 水平扩展:增加设备,并行的运行服务调度
垂直扩展不建议,增大成本。
2.集群的类型
- LB:Loading Balancing,负载均衡,多个主机组成,但每个主机只负责一部分
- HA:High Availiablity,高可用,避免SPOF(单点故障)(系统中一点失效,整个系统就会无法正常运转)
单点故障就是整体故障
- HPC:High-performance computing,高性能
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration( repair)平均恢复前时间,故障时间
A = MTBF /(MTBF+MTTR)
1年 = 365天 = 8760小时
90 = (1-90%)*365=36.5天
99 = 8760 * 1% = 87.6小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 8760 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟
99.9999= (1-99.9999%)*365*24*60*60=31秒
SLA:服务等级协议
#停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。
#轮询(Round Robin):将收到的访问请求按照顺序轮流分配给群集中的各节点,均 等地对待每台服务器,而不管服务器实际的连接数和系统负载。
#加权轮询(Weighted Round Robin):根据调度器设置的权重值来分发请求,权重 值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更 多请求。
#最少连接(Least Connections):根据真实服务器已建立的连接数进行分配,将收 到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。
#加权最少连接(Weighted Least Connections):在服务器节点的性能差异较大的 情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更 大比例的活动连接负载。
#IP_Hash根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,
#url_hash 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。具体没研究过
#fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配
3.分布式系统
- 分布式存储:Ceph,GlusterFS,FastFS,MogileFS
- 分布式计算:hadoop,Spark
4.集群和分布式
- 集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能都是一样的。
- 分布式:一个业务分成几个不同的子业务。因此分布式中的服务器的功能是不一样的。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
5.集群设计原则
- 可扩展性:集群的水平扩展
- 可用性
- 性能
- 容量:单位时间内的最大并发吞吐量
6.集群设计实现
1.基础设施层面
- 提升硬件资源性能
- 多域名——DNS
- 多入口——将A记录解析到多个公网IP入口
- 多机房——同城+异地容灾
- CDN——Content Delivery Network:内容分发网络(就近原则)
2.业务层面
- 分层——安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
- 分割——基于功能分割大业务为小服务
- 分布式
二.负载均衡群集架构
第一层:负载调度器
第二层:服务器池
第三层:共享存储
三.LVS工作模式
NAT:修改请求报文的目标IP,多目标IP的DNAT
TUN:隧道模式
DR:操纵封装新的MAC地址(直接路由)
1.LVS集群类型中的术语
-
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)
-
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
-
CIP:Client IP(客户机IP)
-
VIP:Virtual serve IP VS外网的IP
-
DIP:Director IP VS内网的IP
-
RIP:Real server IP (真实IP)
访问流程:CIP ——>VIP——> DIP——> RIP
2.NAT模式——地址转换
DNAT(外部访问内部)
- Network Address Translation,简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
- 真实IP和内网IP应在同一个IP网络,且应使用私网地址;真实服务器的网关要指向内网IP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系统
3.TUN模式——IP隧道
- IP Tunnel,简称TUN模式;
- 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器;
- 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
-
真机IP和内网IP可以不处于同一物理网络中,真实服务器的网关一般不能指向内网IP,且真机IP可以和公网通信。也就是说集群节点可以跨互联网实现。内网IP, 虚拟IP, 内网IP可以是公网地址。
-
真机服务器的通道接口上需要配置虚拟IP地址,以便接收内网IP转发过来的数据包,以及作为响应的报文源IP。
-
内网IP转发给真机服务器时需要借助隧道,隧道外层的IP头部的源IP是内网IP,目标IP是RIP,而真机服务器响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP虚拟IP,目标IP是客户机IP
-
请求报文要经由Director,但响应不经由Director,响应由真机服务器自己完成
-
不支持端口映射
-
真机服务器的OS须支持隧道功能
4.DR模式——直接路由
- Direct Routing,简称DR模式
- 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
运用到arp和rarp的技术。通过请求报文重新封装一个MAC首部,进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
5.LVS工作模式总结和比较
NAT | TUN | DR | |
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 服务器支持隧道模式 | 不支持跨网段 |
真实服务器要求 | any | Tunneling | Non-arp device |
支持网络 | private(私网) | LAN/WAN(私网/公网) | LAN(私网) |
真实服务器数量 | low (10~20) | High (100) | High (100) |
真实服务器网关 | lvs内网地址 | Own router(网工定义) | Own router(网工定义) |
四.ipvsadm
1.ipvsadm 工具选项
选项 | 解释 |
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询:rr、加权轮询: wrr、最少连接:Ic、加权最少连接: wlc) |
-a | 表示添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定VIP地址及 TCP端口 |
-r | 指定RIP地址及TCP端口 |
-m | 表示使用NAT群集模式 |
-g | 表示使用DR模式 |
-i | 表示使用TUN模式 |
-w | 设置权重(权重为0时表示暂停节点) |
-p 60 | 表示保持长连接60秒 |
-l | 列表查看LVS虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与"-I"选项组合使用。ipvsadm -ln |
五.NAT模式LVS负载均衡部署
客户端:12.0.0.1
NFS服务器:192.168.68.40
web1节点服务器:192.168.68.200
web2节点服务器:192.168.68.105
客户端上环境搭建
LVS现在已成为Linux内核的一部分,默认编译为ip_ vs模块,必要时能够自动调用。
## 加载ip_vs模块
[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
1.NFS服务器:192.168.68.40
[root@localhost ooo]# vim index.html
[root@localhost ooo]# vim index.html
开启服务
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y nfs-utils.x86_64 rpcbind.x86_64
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir oyyy ooo
[root@localhost opt]# ls
ooo oyyy
[root@localhost opt]# cd ooo/
[root@localhost ooo]# vim index.html
hello oooo!!!!
[root@localhost opt]# cd oyyy/
[root@localhost oyyy]# vim index.html
hello oyyy!!!!
[root@localhost opt]# systemctl start rpcbind
[root@localhost opt]# systemctl start nfs
[root@localhost opt]# chmod -R 777 oyyy/ ooo/
[root@localhost opt]# vim /etc/exports
/opt/oyyy 192.168.68.0/24 (rw,sync)
/opt/ooo 192.168.68.0/24 (rw,sync)
[root@localhost opt]# systemctl restart nfs
[root@localhost opt]# exportfs -rv
exportfs: No options for /opt/oyyy 192.168.68.0/24: suggest 192.168.68.0/24(sync) to avoid warning
exportfs: No host name given with /opt/oyyy (rw,sync), suggest *(rw,sync) to avoid warning
exportfs: No options for /opt/ooo 192.168.68.0/24: suggest 192.168.68.0/24(sync) to avoid warning
exportfs: No host name given with /opt/ooo (rw,sync), suggest *(rw,sync) to avoid warning
exporting 192.168.68.0/24:/opt/ooo
exporting 192.168.68.0/24:/opt/oyyy
exporting *:/opt/ooo
exporting *:/opt/oyyy
2.配置节点服务器:192.168.68.200 192.168.68.105
另外一台节点服务器
开启httpd服务
修改网关
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install -y httpd
[root@localhost ~]# showmount -e 192.168.68.40
Export list for 192.168.68.40:
/opt/ooo (everyone)
/opt/oyyy (everyone)
[root@localhost ~]# mount 192.168.68.40:/opt/oyyy /var/www/html/
[root@localhost ~]# df
192.168.68.40:/opt/oyyy 52403200 5336320 47066880 11% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# cat index.html
hello oyyy!!!!
[root@localhost html]# systemctl start httpd.service
[root@localhost html]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost html]# systemctl restart network
GATEWAY=192.168.68.100 ##将网关改为客户端的IP地址
3.客户机搭建:192.168.68.100 12.0.0.1
增加一块网卡,网卡为ens37
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens37
[root@localhost network-scripts]# vim /etc/sysctl.conf
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
## 加载ip_vs模块
[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 -y ipvsadm*
##添加一块网卡
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens33 ifdown-ipv6 ifdown-TeamPort ifup-ippp ifup-routes network-functions
ifcfg-lo ifdown-isdn ifdown-tunnel ifup-ipv6 ifup-sit network-functions-ipv6
ifdown ifdown-post ifup ifup-isdn ifup-Team
ifdown-bnep ifdown-ppp ifup-aliases ifup-plip ifup-TeamPort
ifdown-eth ifdown-routes ifup-bnep ifup-plusb ifup-tunnel
ifdown-ib ifdown-sit ifup-eth ifup-post ifup-wireless
ifdown-ippp ifdown-Team ifup-ib ifup-ppp init.ipv6-global
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
[root@localhost network-scripts]# vim ifcfg-ens33
IPADDR=192.168.68.100
NETMASK=255.255.255.0
[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]# iptables -nL -t nat
[root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.68.0/24 -o ens37 -j SNAT --to 12.0.0.1
[root@localhost network-scripts]# iptables -nL -t nat
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT all -- 192.168.68.0/24 0.0.0.0/0 to:12.0.0.1
[root@localhost network-scripts]# ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost network-scripts]# systemctl start ipvsadm.service
[root@localhost network-scripts]# ipvsadm -C
[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.68.200:80 -m
[root@localhost network-scripts]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.68.105:80 -m
[root@localhost network-scripts]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP localhost.localdomain:http rr
-> 192.168.68.105:http Masq 1 0 0
-> 192.168.68.200:http Masq 1 0 0
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr
-> 192.168.68.105:80 Masq 1 0 0
-> 192.168.68.200:80 Masq 1 0 0
4.验证
将验证主机的ip子网掩码和网关设置一下
输入12.0.0.1
再刷新
验证成功