查遍网上资料,以下是总结下来的最简洁的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方面的问题。
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。