/ 中存储网

Nginx与resin的负载均衡配置过程

2013-09-27 09:43:01 来源:IT技术网

查遍网上资料,以下是总结下来的最简洁的nginx负载均衡配置,可惜还是不好用,80只能跳转到8081的resin默认页面。还在继续trouble shooting。

系统设计1.117:80端口转发到1.117:8081和1.201:8081。把其中之任一的8081停掉,80还是可以使用,2个都停掉80就挂了,打开任一个80又可以用了。这说明,nginx的proxy是成功的。但8081请求的页面始终只是停留在resin的默认页面。

以下是nginx的配置:

worker_processes 1;

events {

worker_connections 1024;

}

http{

upstream resin {

server 192.168.1.117:8081;

server 192.168.1.201:8081;

}

server {

listen 80;

location / {

proxy_pass http://resin;

proxy_set_header X-Real-IP $remote_addr;

}

}

}

0927号有了新的进展:

架构是这样的:19作为主机,上面安装nginx 80, resin 8080; 191是备机,上面有resin 8080. nginx作为反向代理在19,191的resin上作负载均衡。

19 resin的配置:在安装后的默认配置上加入如下一段。定义了新的cluster,server,host。

<cluster id="resin19">

<server-default>

<jvm-arg>-Xms1024m</jvm-arg>

<jvm-arg>-Xmx5024m</jvm-arg>

<jvm-arg>-Xmn256m</jvm-arg>

<jvm-arg>-XX:PermSize=128m</jvm-arg>

<jvm-arg>-XX:MaxPermSize=512m</jvm-arg>

<thread-max>1024</thread-max>

<socket-timeout>30s</socket-timeout>

<keepalive-max>512</keepalive-max>

<keepalive-timeout>60s</keepalive-timeout>

</server-default>

<resin:import path="${resin.home}/conf/app-default.xml"/>

<server id="resin19" address="127.0.0.1" port="6801">

<http port="8080"/>

</server>

<host id="" root-directory="/resin_app_dir">

<web-app id="/" root-directory="." />

</host>

</cluster>

resin的启动命令:/usr/local/resin/bin/resin.sh start --server resin19 # --server 后面的参数就是配置文件里的server id. 这个server id还会用在nginx的upstream里面。

191的配置:

<cluster id="resin191">

<server-default>

<jvm-arg>-Xms1024m</jvm-arg>

<jvm-arg>-Xmx5024m</jvm-arg>

<jvm-arg>-Xmn256m</jvm-arg>

<jvm-arg>-XX:PermSize=128m</jvm-arg>

<jvm-arg>-XX:MaxPermSize=512m</jvm-arg>

<thread-max>1024</thread-max>

<socket-timeout>30s</socket-timeout>

<keepalive-max>512</keepalive-max>

<keepalive-timeout>60s</keepalive-timeout>

</server-default>

<resin:import path="${resin.home}/conf/app-default.xml"/>

<server id="yh191" address="127.0.0.1" port="6801">

<http port="8080"/>

</server>

<host id="" root-directory="/resin_app_dir">

<web-app id="/" root-directory="." />

</host>

</cluster>

nginx需要装一个jvm-route的补丁:

2.解压到某个文件夹。如/temp/nginx-upstream-java-route.

3.回到nginx的安装目录,执行patch -p0 < /temp/nginx-upstream-java-route/jvm_route.patch

4.编译nginx: ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/temp/nginx-upstream-java-route && make && make install

下面是nginx的配置:

http {

include mime.types;

default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '

# '$status $body_bytes_sent "$http_referer" '

# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

keepalive_timeout 65;

#gzip on;

upstream www.server110.com {

server 192.168.1.19:8080 weight=10 srun_id=resin19; # srun_id,就是resin 配置的server id resin19

server 192.168.1.191:8080 weight=90 srun_id=resin191; #srun_id,就是resin 配置的server id resin191

jvm_route $cookie_JSESSIONID; #nginx-upstream-route的参数

}

server {

listen 80;

server_name www.server110.com;

location / {

# root html;

# index index.html index.htm;

proxy_pass http://www.server110.com;

}

目前系统上线,不断的有新问题,也不断的在总结一些经验,发在这里,做下mark,同时也为hbase使用者提供一些思路吧。

1、单条rowkey下虽然能支持百万列,但是建议不要这么做,因为真正一个rowkey下挂了这么多数据时会在两个地方出现问题,一是查询时单行记录数据量过大,client超时;第二个问题是regionserver做compact的过程有可能被单条rowkey的数据塞满内存造成OOM

2、datanode的handler的数量不要默认值,太少,要在100左右,另外regionserver的handler的数量在200左右比较合适

3、resultScannser使用完毕记得关闭

4、HTablePool可以管理HTable。查询结束后直接用HTablePool.put(HTable t)来回收,入库结束后记得table.flushCommit()后再回收

5、mapred.local.dir这个参数是mapreduce会在机器的硬盘上做临时文件的存放,如果挂载的多块盘请将每个盘都配上,提升总体性能

6、map阶段的输出可以配置LZO压缩,这样能有效节省map->reduce阶段的网络带宽,不过会提高cpu的占用率

7、多网卡绑定能有效提高hadoop体系的网络带宽

8、bulkload目前测试的性能在单节点51GB/小时左右,希望其他有做过的同学能交流一下bulkload方面的问题。