说明:这篇配置介绍是本人为了熟悉了解Nginx负载均衡架构而在本地虚拟机上实验的,本文作为记录配置过程以备以后查看。
负载均衡的前提是服务器分布式集群架构,有两台以上的服务器提供服务,可以保证两台服务器的流量均衡。这样不至于忙的忙死,闲的闲死。
大致流程像这样子,用户发出请求,经过中间那层Nginx负载均衡处理之后,流量会均衡分发到后台的业务处理webserver,业务处理服务器经过Cache、MySQL层获取到数据之后返回给用户。
这是简单的架构,大数据、云计算企业的服务器成千上万台,架构比这个复杂多了。
今天要做的就是Nginx负载均衡处理这一块。我本地当然没有那么多服务器,一台win7(A,IP:192.168.0.205)+一台Centos虚拟机(B,IP:192.168.137.163)。
计划使用A上的Nginx做负载均衡兼业务处理webserver。就是B上的nginx负责分发到A上的Nginx和B上的Nginx。如果单纯的使用B作为负载均衡分发也是没问题的。
宿主机使用phpStudy的一键安装的环境。
首先指定一个域名upstream.com作为本次测试的域名,需要在hosts文件中绑定一下,绑定的IP是负载均衡分发的那台服务器IP,在这里就是指的B服务器的IP。
#此处IP是负载均衡服务器IP 192.168.137.163 upstream.com
A上新建站点
B上Nginx配置负载均衡,完整代码如下
#关键配置代码,此处backendServer可随意,只是一个负载均衡的别名,下面的分发与此一致即可 upstream backendServer { #每个ip在一定时间内会被固定的后端服务器,这样我们不用解决session共享问题 ip_hash; #weigth参数表示权值,权值越高被分配到的几率越大 #此处8080是因为我同时使用B服务器作为分发和后台处理服务器,分发的webserver监听了80端口 #那么B服务器后台处理的webserver就得换个端口,此处使用8080 server 192.168.0.205:80 weight=2; server 192.168.137.163:8080 weight=8; } #这个是设置负载均衡的,监听80端口 server { listen 80; server_name upstream.com; access_log /etc/nginx/logs/upstream.com.access.log mAIn; #对 "/" 启用负载均衡 location / { #以这种格式来使用后端的web服务器,此处别名要和上面的别名保持一致 proxy_pass http://backendServer; 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; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } } ## ##到这里其实负载均衡已经配置好了。 ##下面的配置是在当前服务器上开启一个8080端口作为一台后台处理webserver。 ## #这个是设置web服务的,监听8080端口, server { listen 8080; server_name upstream.com; index index.html index.htm; root /data/www/test; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } #开启php解析支持 location ~ .*.(php|php5)?$ { #自动显示目录 autoindex on; #人性化方式显示文件大小否则以byte显示 autoindex_exact_size off; #按服务器时间显示,否则以gmt时间显示 autoindex_localtime on; #root /var/www/php/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
配置完之后重启一下nginx,service nginx restart
然后在A服务器的站点目录下新建文件index.html,内容如下:
你当前访问的是192.168.0.205
在B服务器的站点目录下新建文件index.html,内容如下:
你当前访问的是192.168.137.163
然后在A服务器,即win7宿主机上访问upstream.com,因为开始绑定的host是B服务器。
此处显示为A服务器上的文件,如果这时把A服务器上的webserver关闭模拟服务器故障,这时再访问会出现几秒钟的迟钝,但很快会输出B服务器上的文件信息。
把上面的那个ip_hash配置注释掉的话,不断刷新页面会显示不同的内容。
至此,说明负载均衡分发配置成功,写的真是乱,供自己记录回顾吧。