创作不易,关注、点赞,分享了解互联网前沿知识。
负载均衡概述
负载均衡(Load Balance)是应用于互联网后台系统架构设计中的各层,它将请求均匀分摊到多个操作单元上执行。
在实际的APP应用程序中,我们知道Web服务群集前总是有负载平衡服务,典型的负载平衡软件使用会根据网站规模的增加而使用不同的技术。 例如,中小型web APP应用程序Nginx就足够了,但对于大型站点和关键服务,可以使用LVS。
主流负载均衡软件
Nginx、LVS、HAProxy是目前使用最广泛的三种负载平衡软件。
最常用的负载均衡软件有LVS、HAProxy和Nginx,结合高可用软件有Heartbeat、Keepalived,可以搭建出承载海量请求的成熟架构如LVS+Keepalived、HAProxy+keepalived等。
Nginx的好处:
1、简单: Nginx安装和配置都非常简单,非常好用
2、重量轻:能承受高负荷压力
3、稳定:用于反向代理,停机概率非常低
4、节约: Nginx对网络稳定性的依赖非常小,理论上只要能ping就可以进行负载功能
5、强大:内置体检; 有很多功能
6、内存消耗少:成本低廉,可以跨平台
Nginx的缺点:
- Nginx不支持url来检测;
- Nginx仅能支持http和Email,这个它的弱势;
LVS的好处:
1、抗负载能力强: LVS内存和cpu资源消耗较低,无流量产生,因此LVS是负载均衡软件中性能最强
2、配置性较低:配置性低,简化操作成本,降低操作失误概率
3、 工作比较稳定:自身有完整的双机热备方案,自身抗负载能力强
4,应用范围广: LVS几乎适用于所有APP应用
LVS的缺点:
- 动作分不开2、大网站LVS Keepalived实施复杂,配置成本高
HA代理的优点:
1、HAProxy支持虚拟主机,由前端命令实现
2.支持会话保留、cookie引导等。
3. 检测支持URL 检测后端的服务器的问题非常有用。
4.和LVS一样,这只是一个负载均衡软件,单纯从效率上来说,HAProxy的负载均衡速度比Nginx好,并发性也比Nginx好。
5、HAProxy可以负载均衡Mysql读取、发现和负载均衡后端的MySQL节点
6. 可以将请求的URL与header中的信息进行匹配,比lvs有更好的7层实现。
HAProxy 的缺点:
1、不支持POP/SMTP协议和SPDY协议。
2.不支持HTTP缓存功能。即它不能是网络服务器
3、重载配置的能力需要进程重启,这也是软重启,但是不使用Nginx重载更流畅,更易用。
4.对多进程模式的支持不够好
三者对比总结:
性能上LVS>HA>Nginx,功能性和便利性上Nginx>HA>LVS。
以下介绍安装说明
HAProxy安装配置说明
HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
以主机pmonapp01、pmonapp02为例,两台主机均需要安装HAPorxy。HAProxy接收外部HTTP请求然后,分发给pmonapp01和pmonapp02上面的Tomcat服务,使pmonapp01和pmonapp02两台服务器上面的Tomcat服务统一对外提供服务端口为8080。
HAProxy安装以pmonapp01为例。
- 安装前准备
在/tmp目录创建plugin目录,用于临时存放HAProxy安装介质。
使用命令
执行顺序 | 命令 | 说明 |
1 | mkdir -p /tmp/plugin | 在/tmp/下创建plugin目录 |
执行示意
[root@pmondbs01 ~] # mkdir /tmp/plugin |
然后以通过FTP方式上传haproxy-1.7.1.tar.gz。
- 安装HAProxy
HAProxy在不同的操作系统平台上,在安装时需要根据操作系统内核版本来指定不同的编译参数。
确定操作系统内核版本
使用uname -r命令查看操作系统内核信息。
[root@pmonapp01~] # uname -r 3.10.0-957.el7.x86_64 |
操作系统内核版本为3.10.0
HAProxy编译参数对照表:
参数 | 操作系统内核版本 |
linux22 | Linux 2.2 |
linux24 | Linux 2.4及以上 |
linux24e | 带支持Working epoll的Linux 2.4 |
linux26 | Linux 2.6及以上 |
linux2628 | Linux2.6.28、3.x及以上 |
solaris | Solaris 8或10 |
freebsd | FreeBSD 5到10 |
netbsd | NetBSD |
osx | Mac OS/X |
openbsd | OpenBSD 5.7及以上 |
aix51 | AIX 5.1 |
aix52 | AIX 5.2 |
cygwin | Cygwin |
haiku | Haiku |
generic | 其他任何操作或者版本 |
custom | 人工调整每项参数 |
安装HAProxy
根据HAPorxy编译参数对照表得知HAProxy在pmonsapp01上的编译参数为linux2628。
使用命令
执行顺序 | 命令 | 说明 |
1 | cd /tmp/plugin/ | 进入/tmp/plugin目录 |
2 | tar -zxf haproxy-1.7.1.tar.gz | 解压haproxy-1.7.1.tar.gz |
3 | cd haproxy-1.7.1/ | 进入haproxy-1.7.1 |
4 | make TARGET=linux2628 | 编译haproxy |
5 | make install | 安装haproxy |
执行示意
[root@pmonapp01~] # cd /tmp/plugin/ [root@pmonapp01 plugin] # tar -zxf haproxy-1.7.1.tar.gz [root@pmonapp01 plugin] # cd haproxy-1.7.1/ [root@pmonapp01 haproxy-1.7.1] # make TARGET=linux2628 [root@pmonapp01 haproxy-1.7.1] # make install |
- 配置HAProxy
HAProxy配置包括创建启动脚本、创建配置文件、设置启动方式等,需要依次完成。
创建启动脚本
在解压之后的HAProxy安装介质中的examples/haproxy.init下提供有HAProxy的启动脚本,把该脚本复制到/etc/init.d下,然后赋予755权限,即完成HAProxy启动脚本创建。
使用命令
执行顺序 | 命令 | 说明 |
1 | cp /usr/local/sbin/haproxy /usr/sbin/ | 复制haproxy启动程序到/usr/sbin目录下 |
2 | cp /tmp/plugin/haproxy-1.7.1/examples/haproxy.init /etc/init.d/haproxy | 复制haproxy启动脚本到/etc/init.d目录下 |
3 | chmod 755 /etc/init.d/haproxy | 赋予启动脚本755权限 |
执行示意
[root@pmonapp01 ~] # cp /usr/local/sbin/haproxy /usr/sbin/ [root@pmonapp01 ~] # cp /tmp/plugin/haproxy-1.7.1/examples/haproxy.init /etc/init.d/haproxy [root@pmonapp01 ~] # chmod 755 /etc/init.d/haproxy |
创建配置文件
首先在/etc目录下创建haproxy文件夹,然后将安装介质中conf文件夹下haproxy.cfg通过FTP方式上传至/etc/haproxy下,然后修改以下参数配置。
参数设置详情为:
参数 | 值 | 说明 |
bind | 0.0.0.0:8080 | HAProxy对外端口 |
server | web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 | HAProxy转发目标Server |
server | web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 | HAProxy转发目标Server |
使用命令
执行顺序 | 命令 | 说明 |
1 | mkdir /etc/haproxy | 在/etc/创建haproxy目录 |
2 | vi /etc/haproxy/haproxy.cfg | 编辑HAProxy配置文件 |
3 | bind 0.0.0.0:8080 server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 | 参数及参数值 |
执行示意
[root@pmonapp01 ~] # mkdir /etc/haproxy [root@pmonapp01 ~] # vi /etc/haproxy/haproxy.cfg global maxconn 20000 ulimit-n 65535 log 127.0.0.1 local0 chroot /var/empty nbproc 4 daemon defaults mode tcp timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s mode http timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s listen tomcat-proxy bind 0.0.0.0:8080 mode http log global log 127.0.0.1 local0 err option forwardfor balance roundrobin server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 |
设置HAProxy启动方式
设置HAProxy随操作系统启动。
使用命令
执行顺序 | 命令 | 说明 |
1 | chkconfig --add haproxy | 添加haproxy启动随系统启动 |
2 | chkconfig --level 12345 haproxy on | 修改haproxy启动级别 |
执行示意
[root@pmonapp01 ~] # chkconfig --add haproxy [root@pmonapp01 ~] # chkconfig --level 345 haproxy on |
启动HAProxy
修改完配置之后务必重启HAProxy,重启命令service haproxy restart。
[root@pmonapp01 ~] # service haproxy restart |
- HAProxy负载均衡配置
两台转发服务器做负载均衡配置,假设情况如下:
主机名 | IP地址 | 权重 |
pmonapp01 | ip.81.47 | 50% |
pmonapp02 | ip.81.48 | 50% |
- 修改pmonapp01的HAProxy配置文件
修改haproxy.cfg为如下结果。
[root@pmonapp01 ~] # vi /etc/haproxy/haproxy.cfg global maxconn 20000 ulimit-n 65535 log 127.0.0.1 local0 chroot /var/empty nbproc 4 daemon defaults mode tcp timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s mode http timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s listen tomcat-proxy bind 0.0.0.0:8080 mode http log global log 127.0.0.1 local0 err option forwardfor balance roundrobin server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 |
- 修改pmonapp02的HAProxy配置文件
修改haproxy.cfg为如下结果。
[root@pmonapp02 ~] # vi /etc/haproxy/haproxy.cfg global maxconn 20000 ulimit-n 65535 log 127.0.0.1 local0 chroot /var/empty nbproc 4 daemon defaults mode tcp timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s mode http timeout queue 1m timeout connect 1m timeout client 1m timeout server 1m timeout check 10s listen tomcat-proxy bind 0.0.0.0:8080 mode http log global log 127.0.0.1 local0 err option forwardfor balance roundrobin server web01 ip.81.47:8089 check inter 500 rise 2 fall 3 weight 5 server web02 ip.81.48:8089 check inter 500 rise 2 fall 3 weight 5 |
- 重启HAProxy
HAProxy修改配置之后务必重启HAProxy配置才能生效,重启操作参考1.3.4启动HAProxy。
本文暂时没有评论,来添加一个吧(●'◡'●)