lighty的lb问题

看了galaxystar的帖子之后对lighty有了初步的了解,而且从google的trends上也可以看出lighty确实是一个web server中迅速崛起的新星,势头非常之强劲,所以趁这个周末我也来学习一把

1,下载安装,我使用的是ubuntu7.10,所以下载lighttpd非常简单,只要执行
sudo apt-get install lighttpd 命令就可以下载并安装lighttpd了,我下载的好像是1.4的版本。
安装结束之后,它就自动启动了,这时候在流览器里输入http://localhost就可以看到lighttpd的页面了。

2,下载tomcat6.10,拷贝一份出来,修改conf目录下的server.xml,将connector中的8080改成18080。启动两个tomcat实例。这时候在浏览器里输入http://localhost:8080/index.jsp和http://localhost:18080/index.jsp,分别出现两个tomcat的页面,接下来在这两个index.jsp(webapps/root()目录下)分别加入以下代码<%out.println("-aaaaaa-");%>和<%out.println("-bbbbbb-");%>

3,接下来修改lighttpd.conf文件,在server.modules 数组中加入一个新的元素,如下:
server.modules              = (

            "mod_access",

            "mod_alias",

            "mod_accesslog",

            "mod_compress",

#           "mod_rewrite",

#           "mod_redirect",

#           "mod_status",

#           "mod_evhost",

#           "mod_usertrack",

#           "mod_rrdtool",

#           "mod_webdav",

#           "mod_expire",

#           "mod_flv_streaming",

            "mod_proxy", #主要是增加这个节点,代表lighty将会使用proxy模块

#           "mod_evasive"

)

接着在下面加上如下配置:
$HTTP["host"] == "localhost" {



$HTTP["url"] =~ ".jsp|.go|.do|action" {

proxy.balance = "fair"

proxy.server = ( "" => ( ( "host" => "127.0.0.1", "port" => 8080 ),("host" => "127.0.0.1", "port" => 18080) ))

}

}

上面这段配置浅显易懂,只有一个proxy.balance节点的熟悉比较奇怪。
lighttpd的配置要比apache简单的多了,而且更容易理解。这也是apache需要学习的地方。

4,重启lighttpd,看看有什么效果:./lighttpd restart

在浏览器中输入http://localhost/index.jsp
出现的页面上有-aaaaaa-这个字符串,这代表请求被转发到1号tomcat了,再多次请求,发现返回的页面上一直有a的字符串,而没有出现b的字符串,貌似lb没有产生效果。


ok,让我们来看看proxy.loadblance的几个值:
hash:表示相同的request uri会被发送到同一个proxyhandler,比如说现在我们有两个node,那么a.jsp的hashcode为1,b.jsp的hashcode为2,那么a.jsp的请求只会被发到node1(2),而b.jsp的请求只会被发到node2(1)。

fair:表示使用普通的基于负载的消极的均衡,什么意思呢,我的理解就是,当node1负载过高时,才把请求发给node2,所以就出现了上面的那种情况,不管你怎么刷,都是出现-aaaaaa-,而不会出现-bbbbbb-了。只有当node1压力过高时才会出现b。该策略是lighttpd默认的lb策略。

round-robin:表示不管怎么样都是轮发。也就是说通过这种方式我们不能通过设置factor来控制node的处理数量,这个是一个个小小的缺憾。更大的问题是据说lighttpd的round-robin不是很稳定,这个是最麻烦的(最大的麻烦是我没有试出来,一使用round-robin,lighttpd就跟我说:no proxy-handler found for: /,文档上写道:Check if you have used an IP address for the proxy address. Hostnames are not allowed there!   但是我没有用hostname也不行,有点郁闷了。
)。所以综合看来hash策略应该是最佳选择了。

题外话,lighttpd好像也不支持stickly-session吧,所以我觉得使用lighttpd来做lb不是很合适。在这个功能上它和apache还有较大差距,今天试用的是lighttpd1.4的版本,不知道1.5版本的lighttpd在这方面会不会好一点。有空我来试用一下lighttpd1.5的round-robin,看能否让它正常跑起来。

你可能感兴趣的:(apache,jsp,算法,python,lighttpd)