集群-原理

要想构建集群,或者解决生产环境中的问题,首先我们需要了解集群的原理,那么下面我从其基本的常识,到集群的构建(LVS),做了详细的记录,让我在面对问题时,能够拥有足够的知识,去解决问题。

一、集群描述

1、集群的定义

# 定义:可以理解为一组协同工作的服务器。解决了高并发的需求。

2、集群的特性

1)可扩展

# 当服务器负载压力增加时,可以通过扩展的方式减少单台服务器的压力。
# 水平扩展:通过增加更多的服务器或者程序实例来分散负载,从而达到提升存储和计算的能力,
	# 优点:上限高、添加节点服务不会中断、性价比高	
	# 缺点:技术实现难度较高、需要更该网络拓扑结构
# 水平扩展实现方案:
	# DNS服务器:由于缓存服务器硬性服务器的性能平衡
	# Agent代理:真实服务器、共享存储、用户通过Agent端的访问策略,将其代理到RS
# 垂直扩展:增强单机硬件性能(如换一个更强大的硬件或服务器)
	# 优点:技术实现难度低、网络拓扑结构不需要更改
	# 缺点:有上限瓶颈、服务访问会中断

2)高可用

# 集群中的一个节点失效,其任务不会中断,会传递到其他节点。防止单节点失效,而导致访问中断

3)高性能

# 当访问量增加时,能够轻松的扩展,提高集群的性能,应对更多的访问压力。

3、集群的种类

1)负载均衡集群(load Balancing)---LBC

#定义:
	#将单台服务器的压力分担之不同的服务器节点共同承担
#结构:
	 # 前端组件/负载调度器
	 # 真实服务器
	 # 共享存储
# 负载调度器分类:软件、硬件
	# 软件:amoeba、Nginx,Ha-Proxy(linux-HA)、LVS 等
	# 硬件:ROSE、安瑞科技、F5 等
#基于OSI七层模型:
	# 二层:数据链路层 F5 等
	# 四层:传输层:Nginx(新版)、LVS、Ha-Proxy 等
	# 七层:应用层:(可识别域名主机) Nginx、Ha-Proxy 等
# 原理:
	#四层:只完成一次完整的tcp连接,由Client通过调度器转发,发送至真实服务器完成
	#七层:完成两次完整的tcp连接,一次由Client和调度器完成,一次有调度器和真实服务器完成
# 基于安全性:
	#四层:不能拦截SYN攻击
	#七层:可以拦截SYN攻击
#基于范围行:
	#四层:只要是C/S结构的根据tcp、udp开发的服务体系
	#七层:只能负载自己识别的协议模式
#基于并发能力:
	#四层大于七层

2)高可用集群(High Availability)---HAC

#工作模式:
	# 将出现故障的服务器转发到另一个正常工作的服务器上,从而达到服务不会中断的效果。
#原理:
	#心跳线:主从服务器之间进行心跳检测,从服务器一旦发现主服务器由于某些原因而停止服务,立即投入使用,保证服务不会中断。
# 目的:
	# 尽可能的提高服务器的可用性。
描述 通俗叫法 可用性级别 年度停机时间
基本可用性 2个9 99% 87.6小时
较高可用性 3个9 99.9% 8.8小时
具有故障自动恢复能力的可用性 4个9 99.99% 53分钟
极高可用性 5个9 99.999% 5分钟
# 常见的问题:
	# 脑分裂
		#在一个高可用集群中,由于网络的原因内部两个节点互相加测不到对方的存在,互相接管对方的资源。
	# 脑分裂导致的问题:
		# 引起数据的不完整性,在集群的节点出现脑分裂的时候,如果外部无法判断式哪个为主节点,脑分裂的集群都可以正常访问,这时候如果有数据写入,可能会导致数据不完整。
		#服务异常:对外提供服务出现异常
	#解决方案:
		#添加冗余的心跳线,尽量减少“脑裂”的机会
		#启用磁盘锁,在发生脑分裂的时候可以协调对资源的访问
		#设置仲裁机制
		#多次间歇性探测
		#电源交换机
	#实现方案:
		#软件:heartbeat(linux-ha)、Keepalived等
		#硬件:ROSE、安瑞科技、F5等

3)高性能运算集群(Hight Performance)---HPC

# 当任务量极大的时候,用一个集群来完成此项任务。
# 提供了单台计算机提供不了的运算能力

二、LVS

1、定义

# LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性。

2、工作类型

1)NAT(路由模式)

# 特性:
	# 负载调度器工作在真实服务器和客户端之间
	#负载调度器必须是linux系统,这是服务器可以使任意系统
	#出入站均有负载调度器转发完成
	# 支持端口映射

2)DR(子接口路由模式)

#特性
	#负载调度器与真实服务器处于同一个广播域
	#负载调度器不许是linux系统,真实服务器必须是linux系统
	#入站有调度器负责完成,出站由真实服务器和调度器完成
	#不支持端口映射

3、算法分类

1)静态调度算法

# RR轮询:
	#将每次用户的请求分配给后端服务器,从第一台服务器开始到第N台结束,然后循环
# WRR加权轮询:
	#按照权重的比例实现在多台主机之间进行调度
# SH(source hash)源地址散列:
	#将同一个ip用户的请求,发送给同一个服务器
# DH(destination hash)目标地址散列:
	# 将同一个目标地址的请求发送给同一个真实服务器(提高缓存的命中率)

2)动态调度算法

# 连接类型:
	#活动连接:正在连接传送数据
	#非活动连接:传输完成后,还没来得及断开握手
# LC(lest-connection):最少连接:
	#将新的连接请求,分配给连接数最少的服务器
	#计算:活动连接 × 256 + 非活动连接
	#例:RS1 活动连接10 非活动连接100,RS2 活动链接数20 非活动连接数0.利用算法可以知道RS2压力大于RS1
# WLC:加权最少连接:
	#特殊的最少连接算法,权重越大承担的请求数量越多
	#计算:(活动连接数x256+非活动连接数)/权重
# SED:最短期望延迟:特殊的WLC算法
	#计算:(活动连接数+1)x256/权重
# NQ永不排队:
	#特殊的SED算法,无需等待,如果有真实服务器的连接数等于0那就直接分配 不需要运算
# LBLC:
	#特殊的DH算法,既能提高缓存命中率,又要考虑服务器性能(动态调度算法)
# LBLCR
	#LBLC+缓存,尽肯能提高负载均衡和缓存命中率的折中方案
	#生产环境中,不需要缓存的用轮询机制(RR),需要缓存的用这种缓存的(LBLC), 以适合的生产环境为主,RR和WRR用的最多

3)持久化连接

# 特性:
	#持久化连接不属于调度算法,但是会应用于算法,并且比算法优先级更高
	#算法类似于 SH ,但是又有时间限制
# 分类:
	# PCC(持久客户端连接):
		#将来自于同一个客户端的所有请求统统定向至此前选定的RS;也就是只要IP相同,分配的服务器始终相同
		ipvsadm -A -t 192.168.190.111:0 -s wlc -p 120 
		#-A:添加一个新的集群 -t:tcp集群 集群地址(:0代表任意端口)-s:指定算法 -p:指定持久化时间
	#PPC(持久端口连接):
		#将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的RS
		ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
	#  PFMC持久防火墙标记连接:
		#持久防火墙标记连接;将来自于同一客户端对指定服务(端口)的请求,始终定向至此选定的RS;不过它可以将两个毫不相干的端口定义为一个集群服务
iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 80 -j MARK --set-mark 10  iptables -t mangle -A PREROUTING -d 172.16.0.8 -p tcp --dport 443 -j MARK --set-mark 10 
service iptables save
ipvsadm -A -f 10 -s wlc -p 120 
	# PFMC原理:
		#借助防火墙工具,将用户分类,打标签,集群根据对应的标签的值进行对应的负载调度
# ARP响应级别:
	#arp-ignore
		#0    只要本机配置有相应 IP 地址就响应
		#1    仅在请求的目标地址配置在请求到达的网络接口上时,才给予响应
# ARP 通告行为:
	#arp-announce
		#0    将本机任何网络接口上的任何地址都向外通告
		#1    尽可能避免像目标网络通告与其网络不匹配的地址信息表
		#2    仅向目标网络通告与其网络相匹配的地址信息

注:本文为博主查阅多方资料整理而成,如有侵权请留言联系博主删除。

posted @ 2020-04-18 09:25  候你已久  阅读(573)  评论(0)    收藏  举报