nginx双机高可用及Tomcat集群负载均衡 
********试验环境及常用命令******************** 
---》试验机器 
192.188.32.83 tomcat1 
192.188.32.55 tomcat2 
---》nginx linux下安装 
 参考 http://limaoyuan.iteye.com/blog/904352 
注意:其实把pcre-devel-7.8-3.1.el6.i686.rpm(在cd安装盘上找)安装过去就能正确编译。 
---》tomcat 安装(略) 
---》启动关闭tomcat服务器 
/usr/local/apache-tomcat-6.0.32/bin/startup.sh 
/usr/local/apache-tomcat-6.0.32/bin/shutdown.sh 
---》配置nginx文件 
vi /usr/local/nginx/conf/nginx.conf 
---》启动nginx 
/usr/local/nginx/sbin/nginx 
---》关闭nginx 
关闭nginx 
# ps -ef |grep nginx 
root 3462 1 0 13:07 ? 00:00:00 nginx: master process ./nginx 
nobody 3463 3462 0 13:07 ? 00:00:00 nginx: worker process 
root 3467 31523 0 13:08 pts/1 00:00:00 grep nginx 
# kill 3462 
******单nginx 配置tomcat集群(单机)负载均衡************ 
 
******单nginx 配置tomcat集群(多机器)负载均衡********** 
---》分别在两台试验机器上Tomcat web服务器 
 分别修改两套tomcat的ROOT/index.html ,在<body>中加入 
<h2>from tomcat1: 192.188.32.83</h2> 
<h2>from tomcat2: 192.188.32.85</h2> 
便于观察。 
---》在192.188.32.83上部署nginx ,配置参考 
#user nobody; 
user root root; 
worker_processes 4; 
#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 
#pid logs/nginx.pid; 
events { 
 #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue 
 use epoll; 
 worker_connections 1024; 
} 
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 0; 
 keepalive_timeout 65; 
 #gzip on; 
 upstream tomcat { 
 server 192.188.32.83:8080; 
 server 192.188.32.55:8080; 
 } 
 server { 
 listen 80; 
 server_name 192.188.32.83; 
 #charset koi8-r; 
 #access_log logs/host.access.log main; 
 location / { 
 root html; 
 index index.html index.htm; 
 proxy_pass http://tomcat; 
 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; 
 } 
 #error_page 404 /404.html; 
 # redirect server error pages to the static page /50x.html 
 #error_page 500 502 503 504 /50x.html; 
 location = /50x.html { 
 root html; 
 } 
 } 
} 
---》测试 
测试一:启动 nginx\tomcat1\tomcat2 
 访问http://192.188.32.83/ 观察,会轮询83和85两台服务器。 
测试二:关闭 tomcat1 
 访问http://192.188.32.83/ 观察,能正常访问85web服务器。 
测试三:启动tomcat1 
 访问http://192.188.32.83/ 观察,会轮询83和85两台服务器。 
测试四:关闭tomcat2 结果参考上述步骤 
******双机nginx 配置tomcat集群(多机器)负载均衡********** 
单nginx 配置tomcat集群(单机)负载均衡、单nginx 配置tomcat集群(多机器)负载均衡 
缺陷是高度依赖负载均衡服务器,负载均衡服务器故障会导致整个网络无法访问,所以考虑把负载均衡服务器也做成双机高可用。 
--》方案 
采用 linux虚拟ip(ip漂移技术)实现Nginx双机高可用。下述为虚拟ip阐述了ip虚拟技术: 
通常情况下,两台服务器都具有一块以上的网卡,每块网卡都应该有一个IP地址,同时,还应该有一个漂移IP地址,该地址为工作IP地址。因此,最简单的主从方式下,双机系统要占用3个网络地址。 
在分配IP地址时,要分清工作IP地址和主机自由地址。如在主从方式、单网卡的情况下,主机一地址为200.10.10.1,主机二的地址为200.10.10.2,工作地址为200.10.10.3,正常情况下,工作主机的自由地址是被工作地址取代的(若主机一在工作,主机一得地址由200.10.10.1变为200.10.10.3)。在发生主机切换的情况下,主机一的地址恢复为200.10.10.1,而主机二的地址会由200.10.10.2变为200.10.10.3,这就是地址漂移。 
网卡上增加一个IP: 
/sbin/ifconfig eth0:1 192.168.3.104 netmask 255.255.255.0 
/sbin/route add -host 192.168.3.104 dev eth0:1 
删除网卡的第二个IP地址: 
ip addr del 192.168.0.1 dev eth0 
---》分别给两台服务器配置虚拟ip 
两台机器的虚拟ip定为 192.188.32.81 
***32.83添加虚拟ip 
/sbin/ifconfig eth1:1 192.188.32.81 netmask 255.255.255.0 
/sbin/route add -host 192.188.32.81 dev eth1:1 
***32.85添加虚拟ip 
/sbin/ifconfig eth0:1 192.188.32.81 netmask 255.255.255.0 
/sbin/route add -host 192.188.32.81 dev eth0:1 
--》分别安装nginx和tomcat 
---》nginx配置参考 
#user nobody; 
user root root; 
worker_processes 4; 
#error_log logs/error.log; 
#error_log logs/error.log notice; 
#error_log logs/error.log info; 
#pid logs/nginx.pid; 
events { 
 #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue 
 use epoll; 
 worker_connections 1024; 
} 
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 0; 
 keepalive_timeout 65; 
 #gzip on; 
 upstream tomcat { 
 server 192.188.32.83:8080; 
 server 192.188.32.55:8080; 
 } 
 server { 
 listen 80; 
 #####需要修改的地方### 
 server_name 192.188.32.81; 
 #charset koi8-r; 
 #access_log logs/host.access.log main; 
 location / { 
 root html; 
 index index.html index.htm; 
 proxy_pass http://tomcat; 
 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; 
 } 
 #error_page 404 /404.html; 
 # redirect server error pages to the static page /50x.html 
 #error_page 500 502 503 504 /50x.html; 
 location = /50x.html { 
 root html; 
 } 
 } 
} 
---》测试 
测试1:启动两台tomcat、nginx,访问 http://192.188.32.81/,结果能正常访问; 
测试2:关闭某一台nginx,访问 http://192.188.32.81/,结果能正常访问; 
(可以关闭nginx,或删除虚拟ip模拟服务器故障情况) 
**删除83上的虚拟ip 
ip addr del 192.188.32.81 dev eth1 
**删除55上的虚拟ip 
ip addr del 192.188.32.81 dev eth0 
 
 
                     
            
        













 
                    

 
                 
                    