当前位置: 主页 > 环境部署 > 负载均衡 >

nginx代替线上haproxy (一)

时间:2013-05-04 20:34来源:www.shencan.net 作者:shencan 点击:
目前我们线上业务都是跑的haproxy(经过2次开发的) 因为功能跟需求都摆在线上了 nginx也是一个很火的负载均衡软件 这几天关注了一下 想试试用nginx(第三方模块) 来实现一下我们线上hap
欢迎大家分享自己的文档,请点击查阅:分享方法,Linux系统运维
如果你喜欢这文章,可以点击文章结尾处百度分享,分享到你的各种社区收藏,或推荐给朋友……


目前我们线上业务都是跑的haproxy(经过2次开发的) 因为功能跟需求都摆在线上了 nginx也是一个很火的负载均衡软件 这几天关注了一下 想试试用nginx(第三方模块) 来实现一下我们线上haproxy的相应功能
nginx这个东西第三方模块比较多 所有说nginx可以干很多事情(就是不知道 第三方模块的性能怎么样)
关于nginx的一些特性 功能啥的 这里就不做介绍了 大家都知道 …..
先说下软件平台吧
nginx-1.0.14
pcre-8.20 #这个自己去下载安装
nginx_upstream_hash #nginx一个第三方upstream hash模块(为啥要用这个 做cache的都知道) 我们不是用ip_hash
nginx_upstream_check_module #nginx 一个第三方upstream check默认(tcp http等多种 下面我用的是http模块)

1.先下载安装部署吧
git clone git://github.com/cep21/healthcheck_nginx_upstreams.git
git clone git://github.com/yaoweibin/nginx_upstream_check_module.git
wget http://nginx.org/download/nginx-1.0.14.tar.gz
tar fxz nginx-1.0.14.tar.gz && cd nginx-1.0.14 && patch -p0 < ../nginx_upstream_check_module/check_1.2.2+.patch && patch -p1 <../nginx_upstream_hash/nginx.patch && useradd nginx && LIBS= && CFLAGS= && ./configure –prefix=/usr/local/shencan/nginx –with-pcre=/root/nginx/pcre-8.20/ –user=nginx –group=nginx –with-http_stub_status_module –add-module=/root/nginx/nginx_upstream_check_module/ –add-module=/root/nginx/nginx_upstream_hash/ && make -j 8 && make install

2.修改配置文件吧 # (有参考网上的配置) 大部分网上都有讲解
user nginx nginx;
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
error_log /var/log/nginx/error.log;
pid /var/run/nginx/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
keepalive_timeout 180;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
client_header_buffer_size 4k;
open_file_cache max=102400 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 1;

gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_types text/* text/css application/javascript application/x-javascript;
gzip_comp_level 9;
gzip_vary on;
gzip_http_version 1.1;

include mime.types;
include fastcgi.conf;
default_type application/octet-stream;
log_format main ‘$remote_addr – $remote_user [$time_local] $status ‘
‘”$request” $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;

access_log /var/log/nginx/access.log main;

server_names_hash_bucket_size 128;

proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding “”;

client_max_body_size 10m;
client_body_buffer_size 128k;

proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;

upstream static_server {
hash $request_uri; #upstream hash 模块的配置 根据请求的uri来取模hash
hash_again 10; #选取长度
server 112.25.34.136:80 ;
server 112.25.34.135:80 ;
# server 112.25.34.133:80 weight=5 backup;
check interval=3000 rise=2 fall=3 timeout=5000 type=http; # upstream check模块的配置 http检测
check_http_send “GET /open/app_icon/00/00/03/58/XXXXXXXXX.png HTTP/1.0\r\n\r\n Host:i.gtimg.cn”; #随便找个URL 通过后端随便access日志来判断是否进行了探测
check_http_expect_alive http_2xx http_3xx; #来验证后端抓取上面URL的返回值 是否可用(后端返回2XX 3XX认为后端可用)
}
upstream all_server {
hash $request_uri;
hash_again 10;
server 112.25.34.136:80;
server 112.25.34.135:80;
# server 112.25.34.134:80 weight=5 backup;
check interval=30000 rise=2 fall=3 timeout=5000 type=http;
check_http_send “GET /open/app_icon/00/00/03/58/358_16.png HTTP/1.0\r\n\r\n Host:i.gtimg.cn”;
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 112.25.34.140:8080;
access_log /var/log/nginx/access.log main;
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx|ico)$ {
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://static_server;
}
location /nginx_status {
stub_status on;
access_log off;
allow 61.135.207.195;
deny all;
}
location / {
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
proxy_pass http://all_server;
}
}
}

配置贴完了 测试一下2个功能吧
1.后端http检测
2.hash功能

随便找个URL 然后看后端随便日志 (3s探测一次)

先注释掉 upstream hash配置(2行的那个) 绑定抓取试试 大家都知道 我就不做演示了 会轮训的  ……….

然后我们把配置添加上再绑定测试

第一次抓取   #为了证明是连续抓2次我把date 框了下

第二次

OK 了 2个功能都实现了  默认替换haproxy 的基本功能都实现了(性能没测试过)

下一步需要继续测试  backup功能(好像用了hash模块 后 不能识别 backup 了 ) 还有一些ACL的功能(上面配置已经实现了 动静态分离) 这个需要一份详细的nginx 内置变量 来做

先写这么多吧  下次继续……..
nginx代替线上haproxy (二)
 

转载请注明linux系统运维
http://www.linuxyw.com/linux/fuzaijunheng/20130504/155.html

------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片