首先,老生常谈的聊一下,到底什么是Haproxy呢————乍一看很哈人啊,全是英文,莫慌莫慌,百度一下,先了解了解嘛,了解完说不定印象就有所改观咯。Haproxy,走你!
什么是Haproxy
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。 又是负载均衡又是高可用 老熟人啊!
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter 和 Tuenti 在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。
接下来,我们来嗦一哈
Haproxy作为高性能负载均衡器的主要优点到底有哪些呢
能够让国内外那么多知名特大网站对他情有独钟呢???到底是为什么呢?
关于Haproxy的算法介绍
三种web集群调度器的差别
我还搬运了知乎上一些相关回答(如何比较haproxy和nginx的居多)也贴在此处,供各位一观
那么理论也看完了,各位大佬的不同意见也贴出来供各位一观了,现在我们就要开始干正事咯:正所谓亲自动手方可熟能生巧 来部署一哈吧!
Haproxy集群部署
部署Haproxy服务器
[root@ha ~]# tar zxvf haproxy-1.5.19.tar.gz
[root@ha ~]# yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
[root@ha haproxy-1.5.19]# make TARGET=linux2628 ARCH=x86_64 //指定内核版本和系统位数,2.6.18-371.e15,此时该参数用TARGET=linux26;kernel大于2.6.28的用TARGET=linux2628
[root@ha haproxy-1.5.19]# make install
[root@ha haproxy-1.5.19]# mkdir /etc/haproxy
[root@ha haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/
[root@ha haproxy-1.5.19]# cd /etc/haproxy/
[root@ha haproxy]# vim haproxy.cfg
global
log /dev/log local0 info //local0为日志设备,默认存放到系统日志
log /dev/log local0 notice
#log loghost local0 info
maxconn 4096 //最大连接数,可以用ulimit -n限制
# chroot /usr/share/haproxy //将这行注释
uid 99 //用户UID
gid 99 //用户GID
daemon //守护进程模式
#debug
#quiet
defaults
log global //定义日志为global配置中的日志定义
mode http //模式是http
option httplog //采用http日志格式记录日志
option dontlognull //不记录健康检查日志信息
retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch //当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 //最大连接数
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen webcluster 0.0.0.0:80
option httpchk GET /test.html //检查服务器的test.html文件
balance roundrobin //负载均衡调度算法使用轮询算法
server inst1 12.0.0.10:80 check inter 2000 fall 3 //定义在线节点
server inst2 12.0.0.13:80 check inter 2000 fall 3
//check inter 2000 //表示haproxy服务器和节点之间的一个心跳频率
//fall 3 //表示连续三次检测不到心跳频率则认为该节点失效
[root@ha ~]# cp haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@ha ~]# cd /etc/init.d/
[root@ha init.d]# ls
functions haproxy jexec netconsole network README
[root@ha init.d]# chmod +x haproxy
[root@ha init.d]# chkconfig --add /etc/init.d/haproxy
[root@ha init.d]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
[root@ha haproxy]# service haproxy start
Starting haproxy (via systemctl): [ 确定 ]
部署nginx服务
[root@nginx01 ~]# echo "this is jd" > /usr/local/nginx/html/test.html
[root@nginx02 ~]# echo "this is taobao" > /usr/local/nginx/html/test.html