免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1708 | 回复: 0
打印 上一主题 下一主题

内核中的基于内容请求分发KTCPVS[附配置过程] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-28 01:31 |只看该作者 |倒序浏览

由于用户空间TCP Gateway的开销太大,导致其伸缩能力有限。为此,我们提出在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换开销和内存复制的开销。在Linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。以下几小节将介绍KTCPVS的体系结构、实现方法、负载平衡和高可用特征等。
KTCPVS的体系结构
KTCPVS集群的体系结构如图6.3所示:它主要由两个组成部分,一是KTCPVS交换机,根据内容不同将请求发送到不同的服务器上;二是后端服务器,可运行不同的网络服务。KTCPVS交换机和后端服务器通过LAN/WAN互联。

图6.3 :KTCPVS集群的体系结构
KTCPVS交换机能进行根据内容的调度,将不同类型的请求发送到不同的后端服务器,再将结果返回给客户,后端服务器对客户是不可见的。所以,KTCPVS集群的结构对客户是透明的,客户访问集群提供的网络服务就像访问一台高性能、高可用的服务器一样,故我们也称之为虚拟服务器。客户程序不受服务器集群的影响不需作任何修改。
KTCPVS实现
在Linux 内核2.4中,我们用内核线程(Kernel thread)实现Layer-7交换服务程序,并把所有的程序封装在可装卸的KTCPVS模块。KTCPVS的主要功能模块如图6.4所示:当KTCPVS模块被加载到内核中时,KTCPVS主内核线程被激活,并在/proc文件系统和setsockopt上挂接KTCPVS的内核控制程序,用户空间的管理程序tcpvsadm通过setsockopt函数来设置KTCPVS服务器的规则,通过/proc文件系统把KTCPVS服务器的规则读出。基于内容调度的模块被做成可装卸的模块(Loadable Module),不同的网络服务可以使用不同的基于内容调度模块,如HTTP和RTSP等。另外,系统的结构灵活,用户也可以为自己不同类型的网络服务编写相应的模块。

图6.4:KTCPVS系统的主要功能模块
可以通过tcpvsadm命令使得KTCPVS主线程生成多个子线程监听在某个端口。这组子线程可以接受来自客户的请求,通过与其绑定的基于内容的调度模块获得能处理当前请求的服务器,并建立一个TCP连接到该服务器,将请求发到服务器;子线程获得来自服务器的响应结果后,再将结果返回给客户。所有的请求和响应数据处理都是在操作系统的内核中进行的,所以没有用户空间与核心空间的切换开销和内存复制的开销,其处理开销比用户空间的TCP Gateway小很多。
KTCPVS高可用性
KTCPVS集群系统的高可用性可分为二部分达到,一是服务器故障处理,二是KTCPVS调度器故障处理。
在服务器故障处理上,我们可以一种或者组合多种方法来检测服务器或者网络服务是否可用。例如,一是资源监测器每隔t个毫秒对每个服务器发ARP(Address Resolve Protocol)请求,若有服务器过了r毫秒没有响应,则说明该服务器已发生故障,资源监测器通知调度器将该服务器的所有服务进程调度从调度列表中删除。二是资源监测器定时地向每个服务进程发请求,若不能返回结果则说明该服务进程发生故障,资源监测器通知调度器将该服务进程调度从KTCPVS调度列表中删除。资源监测器能通过电子邮件或传呼机向管理员报告故障,一旦监测到服务进程恢复工作,通知调度器将其加入调度列表进行调度。通过检测节点或服务进程故障和正确地重置系统,可以将部分结点或软件故障对用户屏蔽掉,从而实现系统的高可用性。
KTCPVS调度器故障处理上,跟IPVS调度器故障处理类似,通过心跳或者VRRP来实现KTCPVS调度器的高可用性。
[附]Debian下配置基于2.6内核的ktcpvs负载均衡的web服务集群
2007-08-22 00:10
从ktcpvs官方网站下的最新发布版本是ktcpvs-0.0.18.tar.gz,是很早以前的,之后一直没有升级,也是针对linux2.4内核的,我一开始以为没办法只能把它从2.4迁移到2.6,搞了老半天,还没法编译成功,突然发现ktcpvs的svn的版本控制上有了支持2.6内核的一个稳定版本,只在redhat下测试过,也还没有公开发布,而且是刚上传没多少天,不过还是太好了,下下来。
1.准备内核环境
准备好与运行环境对应版本的kernel source,我用了2.6.8,并编译生成新的linux2.6.8.070728版本,然后重起进入这个版本。
2.编译ktcpvs
在ktcpvs目录运行make install
3.测试ktcpvs
在ktcpvs目录运行./start,没有任何错误提示,可以通过lsmod | grep ktcpvs查看到
如果出现FATAL: Error inserting ktcpvs (/lib/modules/2.6.8-2-386/kernel/net/ktcpvs/ktcpvs.ko): Unknown symbol in module, or unknown parameter (see dmesg)启动不了,很有可能是版本不一致,可以通过modinfo ktcpvs.ko查看,因为我一开始也出这样的错
4.简单配置ktcpvs
主要有四种规则:simple http, persistent http, cookie-based http, hash-based http
webcache
我先配置一个simple http,配置config,start,stop三个文件
假设ktcpvs服务器ip地址是192.168.0.185
config文件如下:
Virtual webtest {
    listen = 0.0.0.0:80
    scheduler = http
    startservers = 8
    maxclients = 256
    minspareservers = 6
    maxspareservers = 18
    server = 192.168.0.105:80 1
    server = 192.168.0.128:8080 1
    rule = pattern "/apache2-default/.*" use server 192.168.0.105:80
    rule = pattern ".*" use server 192.168.0.128:8080
}
注:定义了两个real server,一个处理apache默认安装的80端口服务,一个处理剩余的tomcat的8080端口服务,最简单只要有一个real server就行
原来默认有webcache代表8080,www代表80
start文件如下:
#/bin/bash
modprobe ktcpvs
modprobe tvs_http
modprobe tvs_phttp
modprobe tvs_chttp
modprobe tvs_hhttp
echo 5 > /proc/sys/net/ktcpvs/debug_level
userspace/tcpvsadm -f config
userspace/tcpvsadm --start -i webtest
stop文件如下:
#/bin/bash
userspace/tcpvsadm --stop -i webtest
echo 1 > /proc/sys/net/ktcpvs/unload
echo Waiting...
sleep 3<BR%

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/39231/showart_409144.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP