在实际的生活应用中,我们搭建服务器,用以处理客户的各种需求,进而维护公司或者企业的业务稳定与发展,但是当服务器出现故障,而又没有及时的进行修复,那么导致的损失可是很大的。又有这样一种情况,例如淘宝网刚刚过去的双十一,数千万人等待在计算机前,登陆天猫,淘宝的页面,其web服务器的压力可想而知。服务器的群集就是这样出现的,通过将一定数量的服务器组合在一起,形成一个强大的处理单元!!
服务器的群集有三种类型,每种类型有着其不同的意义。
1. 负载均衡群集 简称LB 【load balance】,一般应用于web服务器,和mysql等数据库服务器上。
实现LB群集的方法:
a. 硬件方面 F5 他使用了特殊的算法,是十分安全的,但是价格十分昂贵
b. 软件方面 LVS 【linux虚拟服务器】,值得骄傲的是它是由中国人章文松开发的代码,也就是linux中的ipvsadm服务。
c. 使用squid nginx 作为反向代理也可以实现
总的来说LB群集,就是通过这些方法提供更大量的并发连接请求,是够公司业务拓展的必须技术。
2. 高可用性群集 简称HA【highly availability】,一般应用与LB群集的前端的分发设备上
HA群集的作用:关键性节点保证不中断,应用于关键性业务上。保证关键性业务在99.999%中可使用,一般性的业务在99.9%可用。
可应用的节点数目:2节点或多节点, 多节点使用RHCS 可使用100个节点。
工作方式: 主备方式 针对单业务,主主方式 针对多业务。
心跳线:在主备/主主模式中,将两个分发设备连接起来,以实现备用分发设备发现主动分发设备的故障,的线叫做心跳线。心跳线 可使用双绞线,管线,serial 线即可。存在心跳流量,三次发送数据包即可确定是否主用设备完好。
HA可以靠 rhcs/heartbeat/corosync+openais+pacemaker/drbd 都可以实现
3. HP群集,为了实现高复杂,大量运算的时候使用。使用较少
LB群集的术语:
VIP:虚拟ip地址,客户端访问的ip。
RIP:服务器的真实ip地址。
DIP:director转发设备的另一个接口的ip地址。
CIP:客户端ip地址。
LB群集的三种模型:
1. LVS-NAT模型
模型特点: Director必须与 服务器群集在一个 vlan或者同一个物理网络,但是不能实现异地容灾,所有的请求数据,与恢复数据都要经过分发设备,所以分发设备的性能,也会影响群集的效果。而且群集节点网管都指向 director,所以分发设备容易成为网络的瓶颈。
2. LVS-DR模型
模型特点: 减轻了 director 的负担,只经过 客户端请求的流量,但是回复的流量不经过他。并且不做NAT 转换。群集节点必须与director在一样的网络。
数据的处理:用户请求的数据包,转换为数据帧,转发给内部server,去掉帧头,变为数据包给内部,每一个 real server 都需要有VIP,
Arp广播请求响应问题:1. real server 不做出响应.arp 防火墙 2. 内核参数arp-announce
Arp-ignor 忽略对 server的arp请求。
需求:1. RIP必须是合法的ip地址。
2. 群集节点网关不再指向 director
3. 不是所有的操作系统适合作为real servers
4. 节点数最多100
3. LVS-TUNNLE模型
模型特点:
1. 可以异地容灾。
2. 节点不需要与 director在一样的网络中。
3. Director只检查 进来的流量,减少了转发设备的瓶颈问题。
4. 不能够实现端口重定向。
5. 只有部分操作系统支持隧道协议。
LVS 转发设备的调度算法
也就是当客户端发出请求,转发设备收到请求后,怎么样将请求分发给群集中的某一台服务器来进行处理。
其调度算法分为静态算法【也叫做固定调度算法】和动态算法【轮询调度算法】
静态算法有四类:
1,RR 轮询的调度算法,轮流来做【每一个real,server情况不一,能力不一,这样是不合适的】
2,WRR 加权的轮询调度,根据不同的real server能力,分配不同的任务。
3,.目标hash:发送请求给同样ip地址的 real server
4.,来源hash:director需要去顶数据包是来自同样的路由器或者防火墙的时候
动态算法:根据每一个real server的真实情况来决定。 director追踪real server 中的活动链接数量 以及非活动链接数量,来进行调度
1. LC 最少连接数: 根据活动非活动链接 计算出一个值 overload。计算方法 活动链接*256+非活动,谁的值小 给谁。
2. WLC加权最少连接数:给server 加上一个权重值,该值将参与计算LC,计算方法 (活动链接*256+非活动)/加权值,谁的值小由谁来进行处理。
3. SED最少的期望延迟:对于 WLC/LC的改进。不考虑非活动的连接,计算方法 (活动链接数+1)*256
4. NQ 永不排队:针对处理能力强的server,接收的连接虽然多,但是经过计算仍然会获得请求,如果某一个 server 很闲,则将请求交给他。
5. LBLC基于本地的最少连接数:类似于客户端—缓存服务器—real-server的模型,请求现有缓存来进行回复,没有的才给予real-server处理
6. LBLCR 带复制功能的LBLC:类似于多个缓存服务器的模型,使缓存服务器的缓存可复制到其他缓存服务器上,减少了服务器的工作量。
在LVS虚拟服务器的群集中,要使用我们国人开发的一个服务,ipvsadm服务,通过它来配置lvs群集服务
Ipvsadm
-A| -E 添加 或者编辑一个虚拟服务器
-D 删除一个虚拟服务器
-C 清空虚拟服务器表
-R 恢复删除的表
-S 保存之后可以被restore
-a| -e 添加,修改一个 real-server
-d 删除一个real-server
-L| -l 列出虚拟服务器表
-t| -u | -f TCP/UDP/标记
-w 权重值
实验:LVS基于NAT模型的群集
实验环境:linux虚拟机5.4
实验过程:
real-server1
1. ip设置
2. 安装httpd 服务,创建主页,开机自启动httpd服务,并创建一个简单地网页。
# echo"real-server1" > /var/www/html/index.html
Real-server2
1. 配置ip地址
2. 安装httpd 服务,创建主页,开机自启动httpd服务,创建一个测试的网页网页
# echo"real-server2" > /var/www/html/index.html
Director转发设备
1. 设置两个网卡的ip,一个连接内网,一个连接外网
2. 安装群集中的ipvsadm软件包
# rpm -ivh/mnt/cdrom/Cluster/ipvsadm-1.24-10.i386.rpm
3. 开启linux
4. 服务器的数据包转发功能
# vim /etc/sysctl.conf
# sysctl -p
5. Man ipvsadm
6. 创建ipvsadm的静态rr轮询虚拟服务
#ipvsadm -A -t 192.168.1.100:80 -s rr
7. Ipvsadm –a –t 192.168.1.100:80 –r 192.168.3.2 –m//基于nat模型的tcp服务的转换条目
8. Ipvsadm –L //查看列表
9. Ipvsadm –a –t 192.168.1.100:80 –r 192.168.3.3 –m//基于nat模型的tcp服务的转换条目
10. Ipvsadm –L
再次刷新 LVS表,会发现 非活动链接项有数值,而活动链接项无数值,这是因为http服务要处理大量的请求链接,处理完之后 就断开连接,否则服务器是支撑不住的。
Weight表示权重值
Masq 表示使用的是 nat 模型
WRR模式
#ipvsadm -E -t 192.168.1.100:80 -s wrr
#ipvsadm -e -t 192.168.1.100:80 -r 192.168.3.3 -m -w 5
更改权重后,刷新多次都在real-server2 页面上,然后才跳到real-server1页面上。
权重大的,就收的请求就多,做的工作就多。
一般的服务器群集前端是 转发设备,后端就是重要的数据存储设备了,不可能所有群集服务器上都存放相同的东西吧!
一般的存储方式有三种方式
1. DAS direct attached storage 直接附加存储
2. NAS 网络附加存储例如:NFS SAMBA 提供的是文件级别的共享。
当然也有专门的NAS产品:
优点:具有锁机制,在一个用户编译中,其他用户不得编辑该文件
具有推送机制
3. SAN 存储区域网络。存储中较高的级别。
Fc-san 代价高 效率高 ip-san 代价低 效率低
具体的存储应用,下次再说 *.*!