1 Nginx实现负载均衡
Nginx("engine x")是一个高性能的 HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器。
1.1简介
(1)web服务器
www服务器、http服务器主要功能是提供网上信息浏览服务
(2)反向代理
反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器
(3)负载均衡
负载均衡(又称为负载分担),英文名称为Load Balance,其意思就是将负载(工作任务)进行平衡、分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
(4)Linux下常用Web服务器对比
Apache、Nginx、Lighttpd、Tomcat、IBMWebSphere其中最为广泛的是Apache
1)Apache: 60%占有率重量级的Web服务器
优点跨平台、模块丰富。
缺点速度性能较其他web服务器差、消耗内存较高
2)Lighttpd
内存开销低、性能好、模块较丰富轻量级web服务器
3)Tomcat 服务器
对静态文件、高并发处理较弱
4)IBM WebSphere
在Apache的基础上增加了SSL和在线网页HTTPSERVER配置功能
5) Nginx
支持高并发链接
支持高达5万个并发连接数响应
内存消耗小
Nginx+php服务器在3W并发链接下开启10个Nginx进程只消耗150MB
高性能
实际生产环境两台Nginx+php5运行多个复杂性一般的纯php动态程序
处理能力可达到 700次请求/秒相当于每天可承受6000万的访问量(700*60*60*24=60480000)
同等硬件环境下,Nginx的处理能力是Apache的5~10倍
成本低廉
购买F5 Big-IP NetScaler硬件负载均衡交换机几十万
Nginx基于BSD开源协议免费的、可商用
支持rewrite重写规则
能够根据域名、URL的不同将HTTP请求分发到不同的后端服务器群组
内置的健康检查功能
如果Nginx Proxy后端的某Web服务器宕机了,不会影响前端访问,节省带宽
支持GZIP压缩
可以添加浏览本地缓存的Header头
稳定性高
使用反向代理、几乎不会宕机
支持热部署
不断服务进行更新
1.2安装与配置
准备软件:nginx-1.2.2.tar.gz , pcre-8.30.tar.gz ,zlib-1.2.3.tar
Nginx安装步骤如下:
1.将软件包上传至服务器;
2.Nginx的安装依赖第三方包,首先编译安装zlib、pcre
tar xvf zlib-1.2.3.tar tar zxvf pcre-8.12.tar.gz |
分别
./configure &&make && make install |
3.编译安装Nginx
tar zxvf nginx-1.2.2.tar.gz ./configure &&make && make install |
4.按照以上步骤,Nginx将默认安装到/usr/local/nginx目录下
Nginx启动:
假设nginx安装在/usr/local/nginx目录下可以使用以下命令启动nginx的服务
首先进入到nginx的sbin目录下,然后
./nginx |
如果nginx安装时指定了其他的路径
/usr/local/nginx/sbin/nginx –c “nginx.conf path” |
参数-c表示指向配置文件的路径
Nginx停止:
方法1:
/usr/local/nginx/sbin/nginx –s stop |
方法2:
先查询nginx的进程号
ps –aux|grep nginx |
然后使用 kill –TERM进程号
Nginx热启动:
Nginx可以在不停服务的情况下进行配置文件更新、升级、修改nginx配置文件nginx.conf后上传到服务器更新,首先需要使用
./nginx -t |
检查配置文件的语法是否正确
如正确会提示
Theconfiguration file/usr/local/nginx/conf/nginx.conf syntax is ok
configurationfile/usr/local/nginx/conf/nginx.conf test is successful
./nginx –s reload |
就可在不断服务器的情况下完成nginx配置文件的更改
1.3Nginx负载均衡
nginx的upstream目前支持4种方式的分配
1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2) weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3) ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4)fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5)url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
Nginx 负载均衡核心配置
upstream demo{#定义负载均衡设备的Ip及设备状态
server127.0.0.1:9090 down;
server 192.168.1.11:8080 weight=2;
server192.168.1.12:6060;
server 192.168.1.13:7070 backup;
}
a) down 表示当前的server暂时不参与负载
b) weight 默认为1.weight越大,负载的权重就越大。
c) max_fails :在fail_timeout时间内对后台服务器请求失败的次数
d)fail_timeout:max_fails次失败后,暂停的时间。
e) backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
负载均衡实验环境:
三个节点:192.168.1.11,192.168.1.12,192.168.1.13,
其中192.168.1.13作为负载均衡服务器,192.168.1.11,192.168.1.12,192.168.1.13作为应用服务器,访问nginx示例文件/html/index.html。
(1)在三个节点上正确安装nginxweb服务器;
修改192.168.1.13节点上nginx的配置文件:nginx.conf如下,实验中采用weight策略实现负载均衡。
nginx.conf文件如下:
#user nobody; worker_processes 1; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream demo{ server 192.168.1.13:5000 down; server 192.168.1.12:5000 weight=3; server 192.168.1.11:5000; } server { listen 5000; server_name www.sugon.com; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://demo; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } |
(2)在本地浏览器上输入以下地址:
可以发现,在每4次请求中,有1次是访问192.168.1.11节点,3次访问192.168.1.12节点.