每秒处理3百万请求的Web集群搭建-用 LVS 搭建一个负载均衡集群
这篇文章是《打造3百万次请求/秒的高性能服务器集群》系列的第3部分,有关于性能测试工具以及优化WEB服务器部分的内容请参看以前的文章。
本文基于你已经优化好服务器以及网络协议栈的基础之上,并使用 iperf
与 netperf
工具测试将服务器已优化到支持 500,000 次/秒的静态WEB页面的性能。
现在你已经做好足够准备进行安装服务器集群。
Redhat 官网已经有一些不错的文章,所以我建议你在遇到不明白的问题时查看一下这些文章。不过你先别担心,我接下会一步步地讲解群集搭建的所有操作。
LVS 路由器配置
这里需要一台设备作为路由器,它负责将 TCP 流量均衡到 LVS 集群中的每一台服务器。因此你需要拿出一台设备按以下操作进行配置。如果你的 IP 路由的流量非常小的话,你可拿一台性能最比较弱服务器做为路由器。
1.在 LVS 路由器上安装 LVS 软件
yum groupinstall "Load Balancer"
chkconfig piranha-gui on
chkconfig pulse on
2.配置 WEB 管理的密码
/usr/sbin/piranha-passwd
3.在 iptables 中配置放行端口
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport -j ACCEPT
4.启动 WEB 管理
service piranha-gui start
-> 一定要等到 Piranha 配置结束之后再开启 pulse 。
5.打开报文转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = sysctl -p /etc/sysctl.conf
6.启动 WEB 服务器
[root@webservers ~] service nginx start
Direct Routing 模式配置
1.在 LVS 路由器上登录 Piranha WEB 管理界面进行配置。
在 GLOBAL SETTINGS 页中查看,默认采用是 Direct Routing 模式,我们需要通过这个页面下的功能进行配置 LVS WEB 集群服务器的虚拟 IP 地址(Virtual IP)。
2.选择 VIRTUAL SERVERS 标签页,创建虚拟 WEB 服务器, 这里的服务器就是你的 WEB 服务器集群。通过这个配置可以让你有多台服务器对外像是一台服务器,因此又被称作虚拟服务器(virtual server)。
点击 ADD,然后点 EDIT。
3.编辑虚拟服务器,首先选择一个 IP 地址作为 Virtual IP(IP 不作为真实服务器使用),然后选择一个设备接口(Device)进行绑定。
点击 ACCEPT 完成配置,这个时候 WEB 页面并不会刷新,不过此时配置已经保存完毕。
点击 REAL SERVER 进行下一步真实服务器配置。
4.配置真实服务器,REAL SERVER 页面用于配置 WEB 集群所对应的真实服务器。
用 ADD 将所有的 HTTP 服务器添加进来,然后用 EDIT 进行服务器的详细配置,之后点 ACCEPT 进行保存。
如果需要重新配置集群,先点 VIRTUAL SERVER 之后重新配置 REAL SERVER。
在 REAL SERVER 页配置完所有的真实服务器之后,依次选择每一行后点击 (DE)ACTIVATE 进行激活。
5.至此,所有的真实服务器配置并激活完毕,下接下来回到 VIRTUAL SERVERS 页
点 (DE)ACTIVATE 激活虚拟服务器。
到此为止路由器配置完毕,现在你可以关闭并退出浏览器,接下来要打开 pulse 对每台服务器进行配置。
service pulse start
输入 ipvsadm 可以看到集群已经正常启动。
[root@lvsrouter ~]# ipvsadm
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.122.10:http wlc
-> 192.168.122.1:http Route
-> 192.168.122.2:http Route
-> 192.168.122.3:http Route
Direct Routing – 配置每台真实服务器节点
在集群中的每台服务器上按以下步骤进行配置。
1.为真实服务器配置虚拟 IP 地址。
ip addr add 192.168.12.10 dev eth0:
由于我们希望 IP 地址配置在服务器重启之后也能生效,因此需要将配置写入 /etc/rc.local 文件中。
vim /etc/rc.local
ip addr add 192.168.12.10 dev eth0:
2.在真实服务器上为虚拟 IP 配置 ARP 表项。
这里要关闭所有真实服务器对虚拟 IP 地址的 ARP 请求的响应,这些服务器只响应物理 IP 地址的ARP请求,在整个集群系统中,仅有 LVS 路由器才能响应虚拟 IP 地址的ARP请求。
yum -y install arptables_jf
arptables -A IN -d <cluster-ip-address> -j DROP
arptables -A OUT -s <cluster-ip-address> -j mangle --mangle-ip-s <realserver-ip-address>
3.在真实服务器上配置完毕之后,保存 ARP 表项配置。
service arptables_jf save
chkconfig --level arptables_jf on
4.测试
如果 arptables 命令配置正确,只有 LVS 路由器才会应答 Ping 请求。首先确保 pulse 已关闭,之后从群集的任一真实服务器上 ping 虚拟 IP 地址,如果有真实服务器回应这个请求,你可以通过查看 ARP 表项看到它。
ping 192.168.122.10
arp | grep 192.168.122.10
这里可以看到解析到服务器的 MAC 地址,然后在这台服务器上关闭 ARP 响应。
还有一个简单而有效测试方法就是使用 curl 向集群请求 WEB 页面,你可以在 LVS 路由器上通过命令 ipvsadm 查看到数据流量。
[root@lvsrouter ~]# watch ipvsadm
[user@outside ~]$ curl http://192.168.122.10/test.txt
使用 Tsung 对集群进行性能测试
到此为此集群服务器已经配置完毕并工作正常,这时你可以通过压力测试看到它的性能是多么的强大。参考一下这篇文章对 Tsung 进行配置并生成有效的数据流对集群进行测试。
[root@loadnode1 ~] tsung start
Starting Tsung
"Log directory is: /root/.tsung/log/20120421-1004"
建议测试至少进行 2 个小时以上,因为测试需要经过比较长的时间才能看到 HTTP 的峰值请求速率。在整个测试过程中你可以在集群服务器上通过 htop 命令看到每个 CPU 核的率用率。
这里假设你已经安装好了 EPEL 和 RPMforge 源。
yum -y install htop cluster-ssh
cssh node1 node2 node3 ...
htop
你可以看到 HTTP 服务器在高速地接收并回应 WEB 请求,整个过程 LVS 路由器实际没有多少负载。
在实际使用中请确保服务器的 CPU 占所有核的总负责的平均值小于 CPU 的总核数(比如:我的 24 核系统中,我始终保持负载小于等于 23 个核的能力。),这样所有 CPU 即能够充分发挥能力,同时系统又能够具备单一失效时的冗余能力。
在 Tsung 执行结束之后,可以查看集群服务器压力测试的详细测试报告。
cd /root/.tsung/log/-
/usr/lib/tsung/bin/tsung_stats.pl
firefox report.html
译者注:LVS 主创人为阿里云 CTO 章文嵩博士,是我朝人民长脸作之一,其在服务器群集中应用广泛,相比于 M$ 的 NLB 群集技术而言更为强大,文中的 DR 模式使用通用服务器做为流量均衡设备,性能相对较弱,在实际高性能群集应用中,通常采用具备三层 ECMP 路由硬件能力的交换机或专用负载均衡硬件设备,在不需要复杂流量均衡策略(如:基于应用的均衡)的群集中,使用交换机性价比较高。
转自:http://blog.jobbole.com/87503/
每秒处理3百万请求的Web集群搭建-用 LVS 搭建一个负载均衡集群的更多相关文章
- 每秒处理3百万请求的Web集群搭建-如何生成每秒百万级别的 HTTP 请求?
本文是构建能够每秒处理 3 百万请求的高性能 Web 集群系列文章的第一篇.它记录了我使用负载生成器工具的一些经历,希望它能帮助每一个像我一样不得不使用这些工具的人节省时间. 负载生成器是一些生成用于 ...
- 每秒处理3百万请求的Web集群搭建-为最佳性能调优 Nginx
这篇文章是<打造3百万次请求/秒的高性能服务器集群>系列的第2部分,在这个部分中你可以使用任何一种 WEB 服务器,不过我决定使用 Nginx,因其轻量级.高可靠及高性能的优点. 通常来说 ...
- windows配置nginx实现负载均衡集群 -请求分流
windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...
- Keepalived+LVS 实现高负载均衡Web集群
一.原理及简介: 1.1 Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节 ...
- 搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡
环境准备: 192.168.193.80 node1 192.168.193.81 node2 关闭防火墙 [root@node1 ~]# systemctl stop firewalld #两台都 ...
- EMQ集群搭建实现高可用和负载均衡(百万级设备连接)
一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- [译]使用golang每分钟处理百万请求
[译]使用golang每分钟处理百万请求 在Malwarebytes,我们正在经历惊人的增长,自从我在1年前加入硅谷的这家公司以来,我的主要职责是为多个系统做架构和开发,为这家安全公司的快速发展以及百 ...
- Web负载均衡学习笔记之四层和七层负载均衡的区别
0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...
随机推荐
- HDU 4493 Tutor (水题)
Tutor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submi ...
- LT1946A-- Transformerless dc/dc converter produces bipolar outputs
Dual-polarity supply provides ±12V from one IC VC (Pin 1): Error Amplifier Output Pin. Tie external ...
- Virtual Treeview - Paint cycles and stages
The most complex process in Virtual Treeview is without doubts its painting. Read here what stages V ...
- wpf简单的绘图板
xaml: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft ...
- linq Distinct 去除重复数据
转载:http://www.cnblogs.com/ldp615/archive/2011/08/01/distinct-entension.html 只可惜linq默认不支持.Distinct(p ...
- 简化delegate写法
标准的写法 空 简化后的宏 /**************************************************************/ // delegate 托付 /* #de ...
- win10怎么彻底关闭自动更新
原文:https://jingyan.baidu.com/article/9faa7231e7b78b473c28cbb6.html 方法/步骤 1 单击左下角开始菜单点击设置图标进入设置界面 2 ...
- 【spring】RestTemplate发送请求,请求第三方接口 的几种请求方式POST,GET,DELETE,PUSH
org.springframework.web.client.RestTemplate 参考地址:http://www.cnblogs.com/UniqueColor/p/7123347.html G ...
- 树状数组求第K小值 (spoj227 Ordering the Soldiers && hdu2852 KiKi's K-Number)
题目:http://www.spoj.com/problems/ORDERS/ and pid=2852">http://acm.hdu.edu.cn/showproblem.php? ...
- Linux ALSA音频PCM播放编程
使用ALSA播放两个频率的单音,并使用GNU Radio中的Audio Source和FFT来观测声音的频谱. #include <alsa/asoundlib.h> #include & ...