全部博文(6)
2011年(6)
分类: LINUX
2011-03-10 13:28:39
一.集群的概念
通俗的说集群就是为了完成一些单个计算机不可能完成的或者完成起来很吃力的工作而将多个计算机通过一点的技术连接到一块,但在外界看起来起来还只是一台计算机的技术。
Cluster集群技术是将一组相互独立的服务器在网络中表现为单一的系统,并以单一系统的模式加以管理。此单一系统为客户工作站提供高可靠性的服务。大多数模式下,集群中所有的计算机拥有一个共同的名称,集群内任一系统上运行的服务可被所有的网络客户所使用。Cluster必须可以协调管理各分离的组件的错误和失败,并可透明地向Cluster中加入组件。一旦在服务器上安装并运行了群集服务,该服务器即可加入群集。群集化操作可以减少单点故障数量,并且实现了群集化资源的高可用性。
二.集群的分类
Linux集群分为三类:
1.高可用性集群 HA (High Avaliability)
高可用性集群运行于两个或多个节点上,目的是在系统出现某些故障的情况下,仍能继续对外提供服务。高可用性集群的设计思想就是要最大限度地减少服务中断时间。这类集群中比较著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等。
2.负载均衡集群 LB (Load Balaceing)
负载均衡集群目的是提供和节点个数成正比的负载能力,这种集群很适合提供大访问 量的Web服务。负载均衡集群往往也具有一定的高可用性特点。Turbolinux Cluster Server、Linux Virtual Server(LVS)都属于负载均衡集。
3.高性能计算集群 HP (High perfomancing)
高可用性集群对一种服务而言不具有负载均衡功能,它可以提高整个系统的可靠性,但不能增加负载的能力。当然,高可用性集群可以运行多种服务,并适当分配在不同节点上,比如节点A提供Oracle服务,同时节点B提供Sybase服务,这也可以看成是某种意义上的负载均衡,不过这是对多种服务的分配而言。
三.LVS实现原理
名词解释:
DIP(Director's IP address)
VIP(Virtual IP address)
CIP(Client computer's IP address)
RIP(Real IP address)
原理:通过向ipvs中写规则来过滤数据流,从而达到分发控制数据流向,均衡服务器负载的目的:当client来访问服务器时,其目标IP是director分发器的对外网声明的一个viretual ip地址,当director接收到请求后通过自己的真实director ip将请求传递给内网的real server,client实际访问的是real server上的服务,director只是起到一个分发任务给内网各服务器的作用。
四.基于ipvs来实现虚拟服务:
1.通过NAT实现虚拟服务器(LVS/NAT)
特点:
IP DIP必须在同一网段,而且必须为私有地址;IP为RIP的default gateway
;Director很容易会成为整个网络的瓶颈点;IP可支持端口映射。
2.)
特点:
1.RIP DIP必须在同一网段,都不必是私有地址,
2.IP直接给CIP回复,directory只需要处理请求数据,这样的工作效率将成倍的提高,解决了LVM-NAT的瓶颈问题。不能进行端口映射
3.IP不支持端口映射。服务必须使用默认的端口
4.管理员可以直接通过Internet连接到RIP对服务器进行配置。但这里同时也存在着来自Internet的网络安全隐患
通过IP隧道实现虚拟服务器(LVS/TUN)
特点:
1.IP DIP 都必须为公网地址,DIP RIP之间数据通过网络Internet传送。因此directory和server可以不再同一个网段,可以跨越地区,其他的都和LVM-DR形式的一样。
2.因为其耗资源,投资较大,很少使用。
五.LVS的调度方法:
1. 轮叫 Round-robin (RR)
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮叫 Weithted round-robin (WRR)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值
3. 目标地址散列 Destination hashing (DH)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
4. 源地址散列 Source hash (SH)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
Dynamic Scheduling (lc wlc sed nq lblc lblcr)=====动态调度方法
其算法是:活动链接数x256+非活动链接数 将client请求分给数值小的服务器。
5. 最少链接 Least-connect (LC)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
6. 加权最少链接 Weighted least-connection (WLC) (Default)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
7.最短期望连接Shortest Expected delay(SED)
对wlc的改进,在wlc算法的基础上给权重值加一,主要用来针对某个服务器活动链接数值为0情况
8. 从不排队Never Quene(NQ)
基于SED算法的改进,不排队
9. 基于局部性的最少链接locality-based least-connection (LBLC)
基于局部的最少连接
10. 带复制的基于局部性最少链接 Locality-Based Least Connectionswith Replication (LBLCR)
六.ipvsadm命令使用:
ipvsadm 的用法和格式如下:①ipvsadm -A|E|D|S -t virutal-service-address:port -s 调度方法 [-p [timeout]] 添加服务和调度方法
②ipvsadm -a|e -t service-address:port -r real-server-address:port -m -w [weight] 添加reserver和指定使用模型
常用参数介绍:
-A (——add-service) 在内核的虚拟服务器表中添加一条新的虚拟服务器记录就是增加一台新的虚拟服务器。
-E ( ——edit-service)编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D (——delete-service )删除内核虚拟服务器表中的一条虚拟服务器记录。
-C (——clear) 清除内核虚拟服务器表中的所有记录。
-R (——restore) 恢复虚拟服务器规则
-S ——save 保存虚拟服务器规则,输出为-R 选项可读的格式
-a ( ——add-server_ 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器
-e (——edit-server )编辑一条虚拟服务器记录中的某条真实服务器记录
-d (——delete-server) 删除一条虚拟服务器记录中的某条真实服务器记录
-L( ——list) 显示内核虚拟服务器表
-Z( ——zero) 虚拟服务表计数器清零(清空当前的连接数量等)
-s( ——scheduler scheduler) 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p ——persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
-r 真实的服务器[Real-Server:port]
-w 真实服务器的权值
-c 显示LVS 目前的连接
-g 指定LVS 的工作模式为直接路由模式(也是LVS 默认的模式)
-i 指定LVS 的工作模式为隧道模式
-m 指定LVS 的工作模式为NAT 模式
七.IPVS实现虚拟服务,以Web服务为例:
1.通过NAT实现虚拟服务器(LVS/NAT)实验环境:
实验环境:
reserver1:192.168.10.5
reserver2:192.168.10.6
Director:外网地址:eth0 192.168.0.10
内网地址:eth1 192.168.10.1
配置过程:对reserver1:安装apache:yum install httpd -y
echo 'WEB1 test!' > /var/www/html/index.html(用于测试)
service httpd start
ifconfig eth0 192.168.10.5/24
route add default gw 192.168.10.1 添加网关
对reserver2:安装apache:yum install httpd
echo 'WEB2 test!' > /var/www/html/index.html
service httpd start
ifconfig eth0 192.168.10.6/24
route add default gw 192.168.10.1
对Director: eth0:ifconfig eth0 192.168.0.10/24
eth1: ifconfig eth1 192.168.10.1/24
安装ipvsadm:yum install ipvsadm
echo 1 > /proc/sys/net/ipv4/ip_forward
( 或者vim /etc/sysctl.conf 修改为:net.ipv4.ip_forward=1)
ipvsadm -A -t 192.168.0.10:80 -s rr
ipvsadm -a -t 192.168.0.10:80 -r 192.168.10.5 -m -w 2
ipvsadm -a -t 192.168.0.10:80 -r 192.168.10.6 -m -w 5
(注意:访问之前一定关闭selinux,直接使用setenforce 0 修改即可)
测试:在浏览器中输入,进入之后多次刷新,进行实验效果的测试.
此时在Director输入ipvsadm -Ln 查看。
2.通过直接路由实现虚拟服务器(LVS/DR)
实验环境:reserver1:
eth0 RIP 192.168.0.10
lo:0 VIP 192.168.0.30
reserver2:
eth0 RIP 192.168.0.20
lo:0 VIP 192.168.0.30
Director :eth0 DIP:192.168.0.40
eth0:0 VIP:192.168.0.30
配置过程:
reserver1:yum install httpd -y
ifconfig eth0 192.168.0.10/24
vim /etc/sysctl.conf
添加:net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
stsctl -p
ifconfig lo:0 192.168.0.30 broadcast 192.168.0.30 netmask 255.255.255.255 up
route add -host 192.168.0.30 dev lo:0
reserver2:配置过程同reserver1
Director:ifconfig eth0 192.168.0.40/24
ifconfig lo:0 192.168.0.30 broadcast 192.168.0.30 netmask 255.255.255.255 up
route add -host 192.168.0.30 dev eth0:0
echo 1> /proc/sys/net/ipv4/ip_forward
yum install ipvsadm
ipvsadm -A -t 192.168.0.30:80 -s wlc
ipvsadm -a -t 192.168.0.30:80 -r 192.168.0.10 -g -w 2
ipvsadm -a -t 192.168.0.30:80 -r 192.168.0.20 -g -w 5
ipvsadm -Ln
测试:在浏览器中输入,多次刷新进行实验效果的测试.
在Director输入ipvsadm -Ln 查看。
③实现访问页面都是同一个
在实验2基础之上进行修改:
在reserver1上: vim /etc/exports
添加 /var/www 192.168.0.0/24(rw)
保存退出
service nfs start
在 reserver2上进行挂载:monut 192.168.0.10:/var/www /var/www
OK,访问页面刷新,此后无论怎么刷新访问页面均为WEB1 test!
PS:由于这些配置开机重启后会自动消失,为方便下次实验,可以直接写个脚本:
#!/bin/bash
VIP=192.168.0.30
cat >> /etc/sysctl.conf << EOF
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
EOF
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev lo:0
执行脚本即可完成,省事方便。