无公网ip无法访问nginx及nginx的f5硬负载ip地址的话程序性能测试是否能够测试

F5 BIG-IP负载均衡器配置实例与Web管理界面体验[原创] - 张宴的博客 - Web系统架构与底层研发
23:33 | by
  [文章作者:张宴 本文版本:v1.0 最后修改: 转载请注明出自:]  前言:最近一直在对比测试F5 BIG-IP和Citrix NetScaler负载均衡器的各项性能,于是写下此篇文章,记录F5 BIG-IP的常见应用配置方法。  目前,许多厂商推出了专用于平衡服务器负载的负载均衡器,如F5 Network公司的BIG-IP,Citrix公司的NetScaler。F5 BIG-IP LTM 的官方名称叫做本地流量管理器,可以做4-7层负载均衡,具有负载均衡、应用交换、会话交换、状态监控、智能网络地址转换、通用持续性、响应错误处理、IPv6网关、高级路由、智能端口镜像、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、内容转换、连接加速、高速缓存、Cookie加密、选择性内容加密、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护、防火墙—包过滤、包消毒等功能。  以下是F5 BIG-IP用作HTTP负载均衡器的主要功能:  ①、F5 BIG-IP提供12种灵活的算法将所有流量均衡的分配到各个服务器,而面对用户,只是一台虚拟服务器。  ②、F5 BIG-IP可以确认应用程序能否对请求返回对应的数据。假如F5 BIG-IP后面的某一台服务器发生服务停止、死机等故障,F5会检查出来并将该服务器标识为宕机,从而不将用户的访问请求传送到该台发生故障的服务器上。这样,只要其它的服务器正常,用户的访问就不会受到影响。宕机一旦修复,F5 BIG-IP就会自动查证应用已能对客户请求作出正确响应并恢复向该服务器传送。  ③、F5 BIG-IP具有动态Session的会话保持功能。  ④、F5 BIG-IP的iRules功能可以做HTTP内容过滤,根据不同的域名、URL,将访问请求传送到不同的服务器。  下面,结合实例,配置F5 BIG-IP LTM v9.x:    ①、如图,假设域名blog.zyan.cc被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。  ②、如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。  ③、另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。  ④、所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。  详细配置步骤:  一、登录到F5 BIG-IP管理界面:  1、初次使用:  ①、打开F5 BIG-IP电源,用一根网线(直连线和交叉线均可)连接F5 BIG-IP的3.1管理网口和笔记本电脑的网口,将笔记本电脑的IP地址配置为“192.168.1.*”,子网掩码配置为“255.255.255.0”。  ②、用浏览器访问F5 BIG-IP的出厂默认管理IP地址或  ③、输入出厂默认用户名:admin,密码:admin  ④、点击Activate进入F5 BIG-IP License申请与激活页面,激活License。  ⑤、修改默认管理密码。  2、以后登录:  通过F5 BIG-IP的自身外网IP登录。  ①、假设设置的F5自身外网IP为61.1.1.2,就可以通过登录。  ②、还可以通过SSH登录,用户名为root,密码跟Web管理的密码相同。  二、创建两个VLAN:internal和external,分别表示内网和外网。  ★创建VLAN演示页面:  ★VLAN列表演示页面:  1、创建VLAN:internal(内网)  在“Network→VLANs”页面点击“create”按钮:  ①、Name栏填写:internal(填一个英文名称)  ②、Tag栏填写:4093(填一个数字)  ③、Interfaces栏:将Available列的“1.1”拉到Untagged列。1.1表示F5 BIG-IP的第一块网卡。  2、创建VLAN:external(外网)  在“Network→VLANs”页面点击“create”按钮创建VLAN:  ①、Name栏填写:internal(填一个英文名称)  ②、Tag栏填写:4094(填一个数字)  ③、Interfaces栏:将Available列的“1.2”拉到Untagged列。1.2表示F5 BIG-IP的第二块网卡。  三、创建F5 BIG-IP的自身IP:分别对应internal(内网)和external(外网)。  ★创建自身IP演示页面:  1、创建自身内网IP:192.168.1.2  在“Network→Self IPs”页面点击“create”按钮:  ①、IP Address栏填写:192.168.1.2(填内网IP地址)  ②、Netmask栏填写:255.255.255.0(填内网子网掩码)  ③、VLAN栏选择:internal  ④、Port Lockdown栏选择:Allow Default(默认值)  2、创建自身外网IP:61.1.1.2  在“Network→Self IPs”页面点击“create”按钮:  ①、IP Address栏填写:61.1.1.2(填外网IP地址)  ②、Netmask栏填写:255.255.255.0(填外网子网掩码)  ③、VLAN栏选择:external  ④、Port Lockdown栏选择:Allow Default(默认值)  四、创建默认网关路由  ★创建默认网关路由演示页面:  1、创建默认网关路由  在“Network→Routes”页面点击“create”按钮:  ①、Type栏选择:Default Gateway(默认值)  ②、Resource栏选择:Use Gateeay...,在其后的输入框填写网关IP地址:61.1.1.1(这里假设此IP为外网网关地址)  五、创建服务器自定义健康检查  ★创建服务器自定义健康检查演示页面:  1、创建自定义HTTP健康检查:monitor_http  在“Local Traffic→Monitors”页面点击“create”按钮:  ①、Name栏填写:monitor_http(填一个英文名称)  ②、Type栏选择:HTTP  ③、Import Settings栏选择:HTTP  ④、Interval栏填写:5(表示每5秒钟进行一次健康检查)  ⑤、Timeout栏填写:16(表示健康检查的连接超时时间为16秒)  ⑥、Send String栏填写:GET /(也可以根据自己的需求发送其他方法的请求,例如HEAD /或者GET /index.htm)  ⑦、Receive String栏填写:(填写对应的返回字符串,默认不填写)  六、创建服务器池(pool)  ★创建服务器池演示页面:  1、创建Squid服务器池:pool_squid  在“Local Traffic→Pools”页面点击“create”按钮:  ①、Name栏填写:pool_squid(填一个英文名称)  ②、Health Monitors栏:将第四步创建的自定义HTTP健康检查“monitor_http”由Available列拉到Active列  ③、Load Balancing Method栏选择:Round Robin(这里选择的负载均衡方式是轮询,也可以选择其他方式)  ④、New Members栏:先选择New Address,再添加两台Squid服务器的IP地址192.168.1.11、192.168.1.12以及它们的端口80  2、创建第一组Apache服务器池:pool_apache_default  在“Local Traffic→Pools”页面点击“create”按钮:  ①、Name栏填写:pool_apache_default(填一个英文名称)  ②、Health Monitors栏:将第四步创建的自定义HTTP健康检查“monitor_http”由Available列拉到Active列  ③、Load Balancing Method栏选择:Round Robin(这里选择的负载均衡方式是轮询,也可以选择其他方式)  ④、New Members栏:先选择New Address,再添加第一组两台Apache服务器的IP地址192.168.1.21、192.168.1.22以及它们的端口80  3、创建第二组Apache服务器池:pool_apache_irules  在“Local Traffic→Pools”页面点击“create”按钮:  ①、Name栏填写:pool_apache_irules(填一个英文名称)  ②、Health Monitors栏:将第四步创建的自定义HTTP健康检查“monitor_http”由Available列拉到Active列  ③、Load Balancing Method栏选择:Round Robin(这里选择的负载均衡方式是轮询,也可以选择其他方式)  ④、New Members栏:先选择New Address,再添加第二组两台Apache服务器的IP地址192.168.1.23、192.168.1.24以及它们的端口80  七、创建供七层负载均衡使用的Profiles配置  ★创建Profiles演示页面:  1、创建Profiles配置:profile_http  在“Local Traffic→Profiles”页面点击“create”按钮:  ①、Name栏填写:profile_http(填一个英文名称)  ②、Parent Profile栏选择:HTTP  ③、Insert XForwarded For栏:如果需要,可以选中方框,选择Enable(在Header头中插入x-forwarded-for标记,以便做七层负载均衡时能够获取用户真实IP,本文中Squid服务器开启了follow_x_forwarded_for allow all,因此F5无需设置此项)  注:在此设置页面中,还有压缩等优化功能,可以根据需要进行设置。  八、创建iRules规则  ★创建iRules规则演示页面:  1、创建iRules规则:irules_apache  在“Local Traffic→Profiles”页面点击“create”按钮:  ①、Name栏填写:irules_apache(填一个英文名称)  ②、Definition栏填写以下脚本,将访问的域名为“blog.zyan.cc”,访问的网址以“.htm”结尾,或者以“/read.php”开头的请求全部转到服务器池“pool_apache_irules”:when HTTP_REQUEST {
&&if {[HTTP::host] equals "blog.zyan.cc" and [HTTP::uri] ends_with ".htm"} {
&&pool pool_apache_irules
&&elseif {[HTTP::host] equals "blog.zyan.cc" and [HTTP::uri] starts_with "/read.php"} {
&&pool pool_apache_irules
}  九、创建虚拟服务器(Virtual Servers)  ★创建虚拟服务器演示页面:  1、以“四层”负载均衡模式创建Squid虚拟服务器:vs_squid  在“Local Traffic→Virtual Servers”页面点击“create”按钮:  ⑴、General Properties大类下:  ①、Name栏填写:vs_squid(填一个英文名称)  ②、Destination栏:选择Host,填写Squid服务器的外网虚拟IP(Virtual IP,简称VIP):61.1.1.3  ③、Service Port栏填写:80  ⑵、Configuration大类下:  ①、Configuration栏选择: Advanced(选择高级模式,这一步很重要)  ②、Type栏选择:Performance (Layer 4)  ③、SNAT Pool栏选择:None(注意:这一步很重要,四层模式下,请确保此项选择为None)  ⑶、Resources大类下:  ①、Default Pool栏选择:pool_squid  注意:F5的四层负载均衡由硬件芯片处理,不消耗CPU资源,能够处理更大的访问量。在四层负载均衡模式下,真实服务器的默认网关必须指向F5的自身内网IP,即192.168.1.2  2、以“七层”负载均衡模式创建Apache虚拟服务器:vs_apache  在“Local Traffic→Virtual Servers”页面点击“create”按钮:  ⑴、General Properties大类下:  ①、Name栏填写:vs_apache(填一个英文名称)  ②、Destination栏:选择Host,填写Apache服务器的内网虚拟IP(Virtual IP,简称VIP):192.168.1.3  ③、Service Port栏填写:80  ⑵、Configuration大类下:  Configuration栏选择: Advanced(选择高级模式,这一步很重要)  ①、Type栏选择:Standard(标准模式,即七层负载均衡模式)  ②、HTTP Profile栏选择:profile_http(注意:此项为None时,不能使用iRules规则,因此必须选一个。在此选择第六步创建的profile_http)  ③、SNAT Pool栏选择:Auto Map(注意:在本文的架构中必须选择,原因如下)  说明:当其中的一台Squid服务器“192.168.1.11”缓存未命中时,会去访问虚拟IP“192.168.1.3”。如果SNAT Pool选择默认值None,虚拟IP“192.168.1.3”后端的Apache服务器,看到的将是Squid服务器的真实IP“192.168.1.11”。由于Squid和Apache服务器的IP地址属于在同一网段,Apache服务器将无需经过F5网关“192.168.1.2”,直接通过交换机回包给Squid服务器“192.168.1.11”,这样虚拟IP“192.168.1.3”就会收不到回包信息,HTTP请求无法完成。因此,需要选择Auto Map,进行地址转换,让后端Apache服务器看到的是F5的自身内网IP,回包给F5。  ⑶、Resources大类下:  ①、iRules栏:将Available列的“irules_apache”拉到Enabled列。  ②、Default Pool栏选择:pool_apache_default  ⑷、Apache虚拟服务器──vs_apache创建完成后,如需进行修改,在以下两个配置页完成:  ★修改虚拟服务器演示页面1:  ★修改虚拟服务器演示页面2:  十、创建SNAT安全网络地址转换,让真实服务器能够访问互联网、对外发邮件  ★创建SNAT演示页面:  1、创建SNAT:snat_all_server  在“Local Traffic→SNATs”页面点击“create”按钮:  ①、Name栏填写:snat_all_server(填一个英文名称)  ②、Translation栏选择:IP Address,并填写SNAT IP地址:61.1.1.4(此项也可以选择Automap,使用F5的自身外网IP作为SNAT IP)  ③、Origin栏选择:Address List  ④、Address List栏:①Type栏选择host,填写要访问互联网、对外发邮件的内网IP地址。②或者Type栏选择Network,填写要访问互联网、对外发邮件的网段和子网掩码。  ⑤、VLAN Traffic栏选择:Enabled on...  ⑥、VLAN List栏:将Available列的“internal”拉到Selected列。  注意:真实服务器的默认网关需要指向F5的自身内网IP,即192.168.1.2,才能通过SNAT访问互联网、对外发邮件。  附1:  《》  《》  附2:  使用F5 BIG-IP作为负载均衡器的部分国内网站:  
引用地址:
注意: 该地址仅在今日23:59:59之前有效
BIG-IP 3400 vs NetScaler 9010 企业版F5 是基于Linux的,NetScaler 是基于BSD的。F5 的四层走的是硬件芯片,七层走的是软件,NetScaler 全部走的是软件。我测试的性能也是F5比NetScaler强,在均不使用压缩的情况下,NetScaler比F5消耗更大的带宽。
Kernel:Linux 2.4.21-9.3.1.37.0smpPackage:BIG-IP Version 9.3.1 46.7Hotfix HF2 Edition
恩,笔误,应该是61.1.1.4,已修正。谢谢指出错误。wangcf1009 的BLOG
用户名:wangcf1009
文章数:20
访问量:2270
注册日期:
阅读量:5863
阅读量:12276
阅读量:406603
阅读量:1095049
51CTO推荐博文
upstream、模块实现负载均衡、状态检测拓扑图:服务器增加一个网卡,与服务器和服务器,地址如上图服务器:配置地址,查看如下:源码安装nginx-1.0.11yum&--disablerepo=\*&--enablerepo=c6-media&install&pcre-devel&openssl-devel&-y&&&安装必要的软件包1.[root@wangcf1009&~]#&tar&-zxvf&nginx-1.0.11.tar.gz&&-C&/usr/local/src/2.[root@wangcf1009&~]#&unzip&healthcheck_nginx_upstreams-master.zip&3.[root@wangcf1009&~]#&cd&/usr/local/src/nginx-1.0.11/4.[root@wangcf1009&nginx-1.0.11]#&patch&-p1&&/root/healthcheck_nginx_upstreams-master/nginx.patch&&&&打补丁出现下图5.[root@wangcf1009&nginx-1.0.11]#&groupadd&-r&nginx6.[root@wangcf1009&nginx-1.0.11]#&useradd&-r&&-g&nginx&nginx7.编译:./configure&\--conf-path=/etc/nginx/nginx.conf&\--error-log-path=/var/log/nginx/error.log&\--http-log-path=/var/log/nginx/access.log&\--pid-path=/var/run/nginx/nginx.pid&\--lock-path=/var/lock/nginx.lock&\--user=nginx&\--group=nginx&\--with-http_ssl_module&\--with-http_flv_module&\--with-http_stub_status_module&\--with-http_gzip_static_module&\--http-client-body-temp-path=/var/tmp/nginx/client/&\--http-proxy-temp-path=/var/tmp/nginx/proxy/&\--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/&\--with-pcre&\--add-module=/root/healthcheck_nginx_upstreams-master8.[root@wangcf1009&nginx-1.0.11]#&make&&&&make&install9.[root@wangcf1009&nginx-1.0.11]#&vim&/etc/profile&编辑如下PATH10.[root@wangcf1009&nginx-1.0.11]#&.&/etc/profile11.[root@wangcf1009&nginx-1.0.11]#&cd&/etc/nginx/12.[root@wangcf1009&nginx]#&nginx&-t&&检查语法出现下面错误13.[root@wangcf1009&nginx]#&mkdir&-pv&/var/tmp/nginx/client/14.[root@wangcf1009&nginx]#&nginx&-t&再进行测试,成功15.[root@wangcf1009&nginx]#nginx&&启动成功16.ping后方的服务器,成功通17.[root@wangcf1009&nginx]#&vim&/etc/nginx/nginx.conf实现负载均衡以及状态检查18.测试语法,并重启,关闭防火墙打开浏览器http://192.168.88.100/stat,探测失败为服务器做探测页面service&httpd&restart打开浏览器http://192.168.88.100/stat查看,一个探测本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)[操作系统]烂泥:nginx负载均衡
你的位置:
[操作系统]烂泥:nginx负载均衡
本文由秀依林枫提供友情赞助,首发于烂泥行天下。 今天我们来学习下有关nginx的负载均衡配置。nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的。 说明:有三台服务器,前端的A服务器使用nginx进行负载均衡配置。后端是两台配置的相同服务器,以访问这个域名为例。结构图,如下:
A服务器对外(公网)开放80端口,B、C服务器就是两台配置相同的服务器。B服务器开放8080端口,C服务器开放8090端口。当客户端访问域名时,A服务器根据nginx的upstream模块相应策略进行分配客户端访问到B服务器还是C服务器。 注意B服务器和C服务器内容是相同的。但是在此,我们为了看到实验效果,我在B、C服务器配置了不同的内容。B服务器的默认页面现实的内容为:The Server is web1_192.168.1.249:8080。C服务器的默认页面现实的内容为:The Server is web2_192.168.1.249:8090。如下:
nginx负载均衡的默认是使用轮询方式进行分配的,而且默认的权重为1,并且权重越大被访问的几率越大。 我们先配置A服务器的nginx,如下: cat /usr/local/nginx/conf/nginx.conf|grep -v ^#|grep -v ^$ upstream
{ server 192.168.1.248:8080; server 192.168.1.249:8090; } location / { proxy_ proxy_set_header Host $ proxy_set_header X-Real-IP $remote_ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_ }
注意上图中,标记出来的第一部分。其中upstream就是做负载均衡使用的。;就是我们要访问的域名,通过proxy_pass反向代理到upstream下的服务器中。 第二部分就是我们要反向代理的域名,注意在此我们监听的是80端口,而且这个server标签中,我并没有配置server_name。其实配置server_name也是可以的,不过最后的效果是一样的,这个是经过测试的。 第三部分,在此我配置的就是一个虚拟主机。监听的是8080端口,并且在此我也配置了server_name。这个主要是为了做对比使用的。 我们现在先启动A服务器的nginx,并且访问:8080。如下:
可以看到目前A服务器的nginx已经可以正常访问了。注意我们在此访问的是:8080。 现在开始配置B、C服务器的nginx,配置内容如下:
B、C服务器的nginx配置完毕后,我们现在来启动各自的nginx服务并访问,如下:
通过上图,我们可以看到B、C服务器的nginx已经正常访问了。那么我现在来访问看看能不能达到我们所要的效果。如下:
可以看到我们现在访问已经反向代理到upstream下的B服务器,并且现在显示的是B服务器的内容。 再次刷新页面,显示如下:
刷新页面后,你会发现这次显示的是C服务器的内容。也说明已经反向代理到C服务器上。 你可以多次刷新页面,会发现显示的内容是B、C服务器交替出现。 为什么会是这样呢? 其实在文章前面,我已经介绍了nginx的upstream负载均衡,在没有其他配置的情况默认使用的策略是轮询方式的,而且默认的权重为1。 也就是说:upstream
{ server 192.168.1.248:8080; server 192.168.1.249:8090; } 中B、C服务器的默认权重都是一样为1。那么在nginx轮询时,所以B、C服务器会交替出现。 如果我们现在把B服务器的权重设置为5,C服务器还是使用默认看看实际情况。配置如下: upstream
{ server 192.168.1.248:8080 weight=5; server 192.168.1.249:8090; }
再次访问,首先显示的还是B服务器的内容。然后刷新,你会发现大约大约刷新了5次左右,才会显示C服务器的内容。这就权重的作用,服务器的权重数值越高,被分配到客户端的请求次数越多。 注意以上实验,我们是在A、B、C服务器是在同一个局域网,对公网来说只是开放了A服务器的80端口。如果这三台服务器全部是公网IP的话,那就是我们下篇文章要介绍的内容了,有关nginx反向代理的使用。 到此,有关nginx的负载均衡我们基本上介绍完毕后。下面在辅助介绍下,nginx的upstream目前支持以下几种方式的分配: 1)、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2)、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。设置服务器的权重,权重数值越高,被分配到客户端的请求次数越多,默认值为1。 3)、ip_hash 每个请求按访问IP的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 4)、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 5)、url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
、 、 、 、 、rfyiamcool 的BLOG
用户名:rfyiamcool
文章数:423
评论数:2201
访问量:1475157
注册日期:
阅读量:5863
阅读量:12276
阅读量:406603
阅读量:1095051
51CTO推荐博文
在和一些朋友交流Nginx+Keepalived技术时,我虽然已成功多次实Nginx+Keepaived项目方案,但这些都是用的单主Nginx在工作,从Nginx长期只是处于备份状态,所以我们想将二台Nginx负载均衡器都处于工作状态,其实用Nginx+Keepalived也很容易实现。此方法适用场景:适合中小型网站应用场景。
一般为了维护方便,企业网站的服务器都在自己的内部机房里,只开放了Keepalived的VIP地址的两个端口80、443,通过Juniper SSG550防火墙映射出去,外网DNS对应映射后的公网IP。此架构的防火墙及网络安全说明如下:
此系统架构仅映射内网VIP的80及443端口于外网的Juniper SSG550防火墙下,其他端口均关闭,内网所有机器均关闭iptables防火墙;外网DNS指向即通过Juniper SSG550映射出来的外网地址。
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的安装比较简单,我这里就不重复了,大家可以参考我的专题系列的文章,如下地址,我这里附上Nginx.conf配置文件,如下所示:
&&&&user&www&&&&&&worker_processes&8;&&&&&pid&/usr/local/nginx/logs/nginx.&&&&&worker_rlimit_nofile&51200;&&&&&events&&&&&{&&&&&use&&&&&&worker_connections&51200;&&&&&}&&&&&http{&&&&&include&&&&&&&mime.&&&&&default_type&application/octet-&&&&&server_names_hash_bucket_size&128;&&&&&client_header_buffer_size&32k;&&&&&large_client_header_buffers&4&32k;&&&&&client_max_body_size&8m;&&&&&sendfile&&&&&&tcp_nopush&&&&&&&&&&keepalive_timeout&60;&&&&&tcp_nodelay&&&&&&fastcgi_connect_timeout&300;&&&&&fastcgi_send_timeout&300;&&&&&fastcgi_read_timeout&300;&&&&&fastcgi_buffer_size&64k;&&&&&fastcgi_buffers&4&64k;&&&&&fastcgi_busy_buffers_size&128k;&&&&&fastcgi_temp_file_write_size&128k;&&&&&gzip&&&&&&gzip_min_length&1k;&&&&&gzip_buffers&&&&&4&16k;&&&&&gzip_http_version&1.0;&&&&&gzip_comp_level&2;&&&&&gzip_types&&&&&&&text/plain&application/x-javascript&text/css&application/&&&&&gzip_vary&&&&&&&&&&&upstream&backend&&&&&{&&&&&ip_&
server&192.168.1.17:80;&&&&&server&192.168.1.18:80;&&&&&}&&&&&server&{&&&&&listen&80;&&&&&server_name&;&&&&&location&/&{&&&&&root&/var/www/html&;&&&&&index&index.php&index.htm&index.&&&&&proxy_redirect&&&&&&proxy_set_header&Host&$&&&&&proxy_set_header&X-Real-IP&$remote_&&&&&proxy_set_header&X-Forwarded-For&$proxy_add_x_forwarded_&&&&&proxy_pass&http://&&&&&}&&&&&&&&&&location&/nginx&{&&&&&access_log&&&&&&auth_basic&&NginxStatus&;&&&&&#auth_basic_user_file&/usr/local/nginx/&&&&&}&&&&&&&&&&log_format&access&'$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.log&&&&&&}&
二、配置Keepalived文件,我这里简单说下原理,其实也就是通过Keepalived生成二个实例,二台Nginx互为备份,即第一台是第二台机器的备机,而第二台机器也是第一台的备机,而生成的二个VIP地址分别对应我们网站,这样大家在公网上可以通过DNS轮询来访问得到我们的网站,任何一台Nginx机器如果发生硬件损坏,Keepalived会自动将它的VIP地址切换到另一台机器,不影响客户端的访问,这个跟我们以前的LVS+Keepalived多实例的原理是一样的,相信大家也能明白。
主Nginx机器之一的Keepalived.conf配置文件如下:
!&Configuration&File&for&keepalived&global_defs&{&&&&notification_email&{&&&&&&&&&&&&&}&&&&notification_email_from&&&&&smtp_server&127.0.0.1&&&&smtp_connect_timeout&30&&&&router_id&LVS_DEVEL&}&vrrp_instance&VI_1&{&&&&&state&MASTER&&&&&interface&eth0&&&&&virtual_router_id&51&&&&&priority&100&&&&&advert_int&1&&&&&authentication&{&&&&&&&&&auth_type&PASS&&&&&&&&&auth_pass&&&&&&}&&&&&virtual_ipaddress&{&&&&&&&&&192.168.1.8&&&&&}&}&vrrp_instance&VI_2&{&&&&&state&BACKUP&&&&&interface&eth0&&&&&virtual_router_id&52&&&&&priority&99&&&&&advert_int&1&&&&&authentication&{&&&&&&&&&auth_type&PASS&&&&&&&&&auth_pass&&&&&&}&&&&&virtual_ipaddress&{&&&&&&&&&192.168.1.9&&&&&}&}&
主Nginx之二的keepalivd.conf配置文件如下:
!&Configuration&File&for&keepalived&global_defs&{&&&&notification_email&{&&&&&&&&&&&&&}&&&&notification_email_from&&&&&smtp_server&127.0.0.1&&&&smtp_connect_timeout&30&&&&router_id&LVS_DEVEL&}&vrrp_instance&VI_1&{&&&&&state&BACKUP&&&&&interface&eth0&&&&&virtual_router_id&51&&&&&priority&99&&&&&advert_int&1&&&&&authentication&{&&&&&&&&&auth_type&PASS&&&&&&&&&auth_pass&1paituan&&&&&}&&&&&virtual_ipaddress&{&&&&&&&&&192.168.1.8&&&&&&&&&&&&&&&&&&&&&&&}&}&vrrp_instance&VI_2&{&&&&&state&MASTER&&&&&interface&eth0&&&&&virtual_router_id&52&&&&&priority&100&&&&&advert_int&1&&&&&authentication&{&&&&&&&&&auth_type&PASS&&&&&&&&&auth_pass&1paituan&&&&&}&&&&&virtual_ipaddress&{&&&&&&&&&192.168.1.9&&&&&&&&&&&&&&&&&&&&&&&}&}&
二台机器的监控Nginx的进程脚本,脚本内容如下:
#!/bin/bash&while&&:&do&&nginxpid=`ps&-C&nginx&--no-header&|&wc&-l`&&if&[&$nginxpid&-eq&0&];then&&&/usr/local/nginx/sbin/nginx&&&sleep&5&&&nginxpid=`ps&-C&nginx&--no-header&|&wc&-l`&&&echo&$nginxpid&&&&&if&[&$nginxpid&-eq&0&];then&&/etc/init.d/keepalived&stop&&&&fi&&fi&&sleep&5&done&
我们分别在二台主Nginx上执行,命令如下所示:
nohup&sh&/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的机器的ip addr命令显示结果:
1:&lo:&,UP,LOWER_UP&mtu&16436&qdisc&noqueue&link/loopback&00:00:00:00:00:00&brd&00:00:00:00:00:00&inet&127.0.0.1/8&scope&host&lo&2:&eth0:&,MULTICAST,UP,LOWER_UP&mtu&1500&qdisc&pfifo_fast&qlen&1000&link/ether&00:0c:29:99:fb:32&brd&ff:ff:ff:ff:ff:ff&inet&192.168.1.5/24&brd&192.168.1.255&scope&global&eth0&&&inet&192.168.1.8/32&scope&global&eth0&
这台是IP为192.168.1.6的机器的ip addr命令显示结果:
1:&lo:&,UP,LOWER_UP&mtu&16436&qdisc&noqueue&link/loopback&00:00:00:00:00:00&brd&00:00:00:00:00:00&inet&127.0.0.1/8&scope&host&lo&inet6&::1/128&scope&host&valid_lft&forever&preferred_lft&forever&2:&eth0:&,MULTICAST,UP,LOWER_UP&mtu&1500&qdisc&pfifo_fast&qlen&1000&link/ether&00:0c:29:7d:58:5e&brd&ff:ff:ff:ff:ff:ff&inet&192.168.1.6/24&brd&192.168.1.255&scope&global&eth0&inet&192.168.1.9/32&scope&global&eth0&inet6&fe80::20c:29ff:fe7d:585e/64&scope&link&valid_lft&forever&preferred_lft&forever&3:&sit0:&&mtu&1480&qdisc&noop&&&link/sit&0.0.0.0&brd&0.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收录的问题;
四、证书的问题,二台机器都需要;
五、其它问题暂时没有想到,待补充。
本文出自 && 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)}

我要回帖

更多关于 负载均衡 公网vip 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信