仓酷云
标题:
来看看:Nginx主主负载均衡架构
[打印本页]
作者:
飘灵儿
时间:
2015-1-14 21:07
标题:
来看看:Nginx主主负载均衡架构
小知识:CentOS是企业Linux发行版领头羊RedHatEnterpriseLinux(以下称之为RHEL)的源代码再编译版本。
登录/注册后可看大图
0245411515-0.jpg
(32.23 KB, 下载次数: 6)
下载附件
保存到相册
来看看:Nginx主主负载均衡架构
2015-1-14 21:07 上传
在和一些朋友交流
Nginx+Keepalived
技术时,我虽然已成功多次实
Nginx+Keepaived
项目方案,但这些都是用的单主
Nginx
在工作,从
Nginx
长期只是处于备份状态,所以我们想将二台
Nginx
负载均衡器都处于工作状态,其实用
Nginx+Keepalived
也很容易实现。此方法适用场景:适合中小型网站应用场景。
一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了
Keepalived
的
VIP
地址的两个端口
80
、
443
,通过
JuniperSSG550
防火墙映射出去,外网
DNS
对应映射后的公网
IP
。此架构的防火墙及网络安全说明如下:
此系统架构仅映射内网
VIP
的
80
及
443
端口于外网的
JuniperSSG550
防火墙下,其他端口均关闭,内网所有机器均关闭
iptables
防火墙;外网
DNS
指向即通过
JuniperSSG550
映射出来的外网地址。
Nginx
负载均衡作服务器遇到的故障一般有:
1.
服务器网线松动等网络故障;
2.
服务器硬件故障发生损坏现象而
crash
;
3.Nginx
服务进程死掉(这种情况理论上会遇到,但事实上生产环境下的
Linux
服务器没有出现过这种情况,足以证明了
Nginx
作为负载均衡器
/
反向代理服务器的稳定性,我们可以通过技术手段来解决这一问题)。
测试实验环境:
主
Nginx
之一:
192.168.1.5
主
Nginx
之二:
192.168.1.6
Web
服务器一:
192.168.1.17
Web
服务器二:
192.168.1.18
VIP
地址一:
192.168.1.8
VIP
地址二:
192.168.1.9
一、Nginx
和
Keepalived
的安装比较简单,我这里就不重复了,大家可以参考我的专题系列的文章,如下地址
http://network.51cto.com/art/201007/209823.htm
,我这里附上
Nginx.conf
配置文件,如下所示:
userwwwwww;worker_processes8;pid/usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile51200;events{useepoll;worker_connections51200;}http{includemime.types;default_typeapplication/octet-stream;server_names_hash_bucket_size128;client_header_buffer_size32k;large_client_header_buffers432k;client_max_body_size8m;sendfileon;tcp_nopushon;keepalive_timeout60;tcp_nodelayon;fastcgi_connect_timeout300;fastcgi_send_timeout300;fastcgi_read_timeout300;fastcgi_buffer_size64k;fastcgi_buffers464k;fastcgi_busy_buffers_size128k;fastcgi_temp_file_write_size128k;gzipon;gzip_min_length1k;gzip_buffers416k;gzip_http_version1.0;gzip_comp_level2;gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;gzip_varyon;upstreambackend{ip_hash;server192.168.1.17:80;server192.168.1.18:80;}server{listen80;server_namewww.1paituan.com;location/{root/var/www/html;indexindex.phpindex.htmindex.html;proxy_redirectoff;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_passhttp://backend;}location/nginx{access_logoff;auth_basic"NginxStatus";#auth_basic_user_file/usr/local/nginx/htpasswd;}log_formataccess$remote_addr-$remote_user[$time_local]"$request"$status$body_bytes_sent"$http_referer""$http_user_agent"$http_x_forwarded_for;access_log/data/logs/access.logaccess;}}
复制代码
二、配置Keepalived文件,我这里简单说下原理,其实也就是通过Keepalived生成二个实例,二台Nginx互为备份,即第一台是第二台机器的备机,而第二台机器也是第一台的备机,而生成的二个VIP地址分别对应我们网站http://www.1paituan.com,这样大家在公网上可以通过DNS轮询来访问得到我们的网站,任何一台Nginx机器如果发生硬件损坏,Keepalived会自动将它的VIP地址切换到另一台机器,不影响客户端的访问,这个跟我们以前的LVS+Keepalived多实例的原理是一样的,相信大家也能明白。
主Nginx机器之一的Keepalived.conf配置文件如下:
!ConfigurationFileforkeepalivedglobal_defs{notification_email{yuhongchun027@163.com}notification_email_fromkeepalived@chtopnet.comsmtp_server127.0.0.1smtp_connect_timeout30router_idLVS_DEVEL}vrrp_instanceVI_1{stateMASTERinterfaceeth0virtual_router_id51priority100advert_int1authentication{auth_typePASSauth_pass1paituan.com}virtual_ipaddress{192.168.1.8}}vrrp_instanceVI_2{stateBACKUPinterfaceeth0virtual_router_id52priority99advert_int1authentication{auth_typePASSauth_pass1paituan.com}virtual_ipaddress{192.168.1.9}}
复制代码
主Nginx之二的keepalivd.conf配置文件如下:
!ConfigurationFileforkeepalivedglobal_defs{notification_email{yuhongchun027@163.com}notification_email_fromkeepalived@chtopnet.comsmtp_server127.0.0.1smtp_connect_timeout30router_idLVS_DEVEL}vrrp_instanceVI_1{stateBACKUPinterfaceeth0virtual_router_id51priority99advert_int1authentication{auth_typePASSauth_pass1paituan}virtual_ipaddress{192.168.1.8}}vrrp_instanceVI_2{stateMASTERinterfaceeth0virtual_router_id52priority100advert_int1authentication{auth_typePASSauth_pass1paituan}virtual_ipaddress{192.168.1.9}}
复制代码
二台机器的监控Nginx的进程脚本,脚本内容如下:
#!/bin/bashwhile:donginxpid=`ps-Cnginx--no-header|wc-l`if[$nginxpid-eq0];then/usr/local/nginx/sbin/nginxsleep5nginxpid=`ps-Cnginx--no-header|wc-l`echo$nginxpidif[$nginxpid-eq0];then/etc/init.d/keepalivedstopfifisleep5done
复制代码
我们分别在二台主Nginx上执行,命令如下所示:
nohupsh/root/nginxpid.sh&
复制代码
此脚本我是直接从生产服务器上下载的,大家不要怀疑它会引起死循环和有效性的问题,我稍为解释一下,这是一个无限循环的脚本,放在主Nginx机器上(因为目前主要是由它提供服务),每隔5秒执行一次,用ps-C命令来收集nginx的PID值到底是否为0,如果是0的话(即Nginx进程死掉了),尝试启动nginx进程;如果继续为0,即nginx启动失改,则关闭本机的Keeplaived进程,VIP地址则会由备机接管,当然了,整个网站就会由备机的Nginx来提供服务了,这样保证Nginx进程的高可用。
四、正常启动二台主Nginx的Nginx和Keealived程序后,二台机器的正常IP显示应该如下所示:
这台是IP为192.168.1.5的机器的ipaddr命令显示结果:
1:lo:<LOOPBACK,UP,LOWER_UP>mtu16436qdiscnoqueuelink/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostlo2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_fastqlen1000link/ether00:0c:29:99:fb:32brdff:ff:ff:ff:ff:ffinet192.168.1.5/24brd192.168.1.255scopeglobaleth0inet192.168.1.8/32scopeglobaleth0
复制代码
这台是IP为192.168.1.6的机器的ipaddr命令显示结果:
1:lo:<LOOPBACK,UP,LOWER_UP>mtu16436qdiscnoqueuelink/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>mtu1500qdiscpfifo_fastqlen1000link/ether00:0c:29:7d:58:5ebrdff:ff:ff:ff:ff:ffinet192.168.1.6/24brd192.168.1.255scopeglobaleth0inet192.168.1.9/32scopeglobaleth0inet6fe80::20c:29ff:fe7d:585e/64scopelinkvalid_lftforeverpreferred_lftforever3:sit0:<NOARP>mtu1480qdiscnooplink/sit0.0.0.0brd0.0.0.0
复制代码
五、测试过程如下:
一、我们要分别在二台主Nginx上用killall杀掉Nginx进程,然后在客户端分别访问192.168.1.8和192.168.1.9这二个IP(模拟DNS轮询)看能否正常访问Web服务器。
二、尝试重启192.168.1.5的主Nginx负载均衡器,测试过程如上;
三、尝试重启192.168.1.6的主Nginx负载均衡器,测试过程如下;
四、尝试分别关闭192.168.1.5和192.168.1.6的机器,测试过程如上,看影响网站的正常访问不?
六、目前投入生产要解决的问题:
一、Cacti和Nagios等监控服务要重新部署,因为现在客户机是分别访问二台负载均衡器;
二、日志收集要重新部署,现在访问日志是分布在二台负载均衡器上;
三、要考虑google收录的问题;
四、证书的问题,二台机器都需要;
五、其它问题暂时没有想到,待补充。
本文出自“抚琴煮酒”博客,请务必保留此出处http://andrewyu.blog.51cto.com/1604432/655646
小知识:CentOS是企业Linux发行版领头羊RedHatEnterpriseLinux(以下称之为RHEL)的源代码再编译版本。
作者:
admin
时间:
2015-1-17 05:52
我想即使Linux高手也很难快速准确精练的回答你。
作者:
飘飘悠悠
时间:
2015-1-24 14:13
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
作者:
蒙在股里
时间:
2015-2-7 14:42
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
作者:
小魔女
时间:
2015-2-22 19:59
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
作者:
简单生活
时间:
2015-3-7 04:50
学习Linux,应该怎样学,主要学些什么,一位Linux热心学习者,一段学习Linux的风云经验,历时十二个小时的思考总结,近十位网络Linux学习者权威肯定,为您学习Linux指明方向。
作者:
小女巫
时间:
2015-3-14 14:00
要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信对于你自己的Linux能力必然大有斩获。
作者:
第二个灵魂
时间:
2015-3-21 10:54
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2