HAproxy
1. 主流负载均衡软件比较
HAProxy特点:
1.支持TCP与Http协议,工作在网络4层和7层
2.支持Session共享、Cookies引导
3.支持通过URL健康检测
4.支持8种负载均衡策略
5.支持心跳检测
Nginx特点:
1.支持Http协议,工作在网络7层
2.支持通过端口健康检测
3.支持强大的正则匹配规则
4.支持WebSocket协议
5.支持Http Cache
LVS特点:
1.抗负载能力强。
2.工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
3.稳定性、可靠性好,自身有完美的热备方案。
4.应用范围比较广,可以对所有应用做负载均衡;
5.不支持正则处理,不能做动静分离。
6.支持负载均衡算法。
7.配置 复杂,对网络依赖比较大,稳定性很高。
HAProxy支持四层和七层代理模式,弥补了Nginx的一些短板,同时稳定性与LVS相媲美,支持心跳检测,配置简单,开源免费等优点符合我们项目的使用。
HAProxy提供了可靠的用于为TCP和HTTP应用程序提供高可用,负载均衡和代理服务器的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。
在监管平台使用中,高并发情况下我们可能会需要自动扩容负载均衡。HAProxy为我们提供了很好的解决方案,
2. 安装步骤
Linux centos7.0操作系统下执行:yum install –y haproxy
安装完成后在/etc/haproxy/下可查看到配置文件haproxy.conf
该文件是haproxy的配置文件,几乎所有的相关配置功能都可以在这里修改实现,后面我们一一介绍。
默认配置如下:
**# Global settings
Global //全局配置信息
log 127.0.0.1 local2 //全局日志配置
chroot /var/lib/haproxy //chroot运行路径,改变当前工作目录
pidfile /var/run/haproxy.pid //当前进程id文件
maxconn 4000 //默认最大连接数
user haproxy 所属用户
group haproxy 所属组
daemon 以守护进程方式运行haproxy
**# turn on stats unix socket //打开unix套接字
stats socket /var/lib/haproxy/stats
**# common defaults that all the ‘listen’ and ‘backend’ sections will
**# use if not designated in their block
defaults //默认配置信息
mode http //(7层代理http,四层tcp)
log global//应用全局日志配置
option httplog 启动日志记录http请求
option dontlognull 配置日志不记录空连接
option http-server-close 每次请求完主动关闭http通
道
option forwardfor except 127.0.0.0/8 配置服务器接收到真实的客户端ip地址
retries 3 //三次连接失败认为服务不可用
option redispatch //当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
timeout http-request 10s http请求超时时间
timeout queue 1m 一个请求在队列里的超时时间
timeout connect 10s //连接超时
timeout client 1m //客户端超时
timeout server 1m //服务端超时
timeout http-keep-alive 10s 设置http-keep-alive的超时时间
timeout check 10s //心跳检测超时
maxconn 3000 //默认最大连接数
**# main frontend which proxys to the backends
frontend main *:5000 //监听地址5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app //定义一个名为app的前端部分,此处将对应的请求转发给后端
**# static backend for serving up images, stylesheets and such
backend static 使用了静态动态分离(如果url_path匹配.jpg .gif .png .css .js静态文件则访问此后端)
balance roundrobin 负载均衡算法,这里是轮询算法
server static 127.0.0.1:4331 check 静态文件部署在本机
**# round robin balancing between the various backends
backend app//定义一个名为app的后段部分
balance roundrobin
server app1 127.0.0.1:5001 check //定义的后端服务器
server app2 127.0.0.1:5002 check //定义的后端服务器
server app3 127.0.0.1:5003 check //定义的后端服务器
server app4 127.0.0.1:5004 check //定义的后端服务器
3. tcp负载均衡emq实现方案
首先我们在三台服务器上安装emq服务,分别是
192.168.2.224
192.168.0.90
192.168.0.170
安装方法参考emq高并发解决方案。
然后我们在192.168.3.124服务器上安装haproxy负载服务器,做负载均衡处理。
只需在配置文件中加入以下内容:
listen test1
bind *:8099 //定义访问端口号
mode tcp //模式
balance roundrobin //负载均衡算法
option httpclose
server s1 192.168.2.8:1883 check inter 1500
server s2 192.168.2.180:1883 check inter 1500
server s3 192.168.3.124:1883 check inter 1500
配置好后启动haproxy服务,
systemctl start haproxy.service 启动haproxy服务
systemctl start haproxy.service 停车haproxy服务
systemctl start haproxy.service 查看haproxy服务状态
查看状态如果启动失败的话,执行setsebool -P haproxy_connect_any=1
然后重启服务。
此时在emq的启动配置文件中,将服务器连接改为haproxy的服务器
,此时启动三个设备会分别连接到配置的三个emq服务器。这样就实现了设备的负载均衡。
4. http负载均衡配置
测试http的负载均衡,首先我们搭建三台http服务器。
IP地址分别为192.168.2.180
192.168.3.50
192.168.2.8
Httpd是apache超文本传输协议的服务器主程序,被设计成一个独立运行的后台进程,他会建立一个处理请求的子进程或线程池。
Centos6.0下安装httpd:
yum install httpd
Apache httpd的主配置文件/etc/httpd/conf/httpd.conf
默认站点主目录:、var/www/html
配置文件如下:
ServerRoot “/etc/httpd” //用于指定Apache的运行目录,服务启动之后自动将目录改变为当前目录,在后面使用到的所有相对路径都是想对这个目录下
Listener 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
AllowOverride none
Require all denied
DocumentRoot “/var/www/html”
5. haproxy+keepalive 主备
haproxy和keepalive搭建在服务器172.16.100.35和172.16.100.36服务器。
Tcp服务(emq服务)搭建在172.16.100.33和172.16.100.34服务器
在两台服务器分别搭建haproxy服务,按照之前tcp负载均衡emq实现方案配置即可(第三章)。
去keepalive官网下载软件:http://www.keepalived.org/download.html
这里使用的是:keepalived-1.3.9.tar.gz
主机:172.16.100.35
备机:172.16.100.36
VIP(虚ip) 172.16.100.37
Keepalive部署
(1)分别在主机和备机上安装keepalive,操作如下:
1. 安装Keepalive所需要的相关依赖包:
yum install openssl-devel popt-devel libnl-devel kernel-devel -y
1.2 编译安装keepalived
<–编译安装keepalived–>
ln -s /usr/src/kernels/2.6.32-573.18.1.el6.x86_64/ /usr/src/linux
tar zxvf keepalived-1.2.15.tar.gz -C /usr/local/src
cd /usr/local/src/keepalived-1.2.15/
./configure \
–prefix=/usr/local/keepalived \
–with-kernel-dir=/usr/src/kernels/2.6.32-573.18.1.el6.x86_64
**#2.6.32-573.18.1.el6.x86_64 这个需要根据kernel来匹配,一般安装了kernel-devel即可查看
make make install
<–对keepalived进行相关路径优化调整–>
<—拷贝keepalived相关启动命令—>
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
<—创建keepalived相关配置文件—>
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
(3)分别配置主机以及备机上的keepalive实例,如下所示:
主机:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
**# vrrp_strict 不注释这个配置,会导致虚ip无法ping通
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_haproxy { #表示创建一个脚本check_haproxy
script “/home/shell/branch/check_haproxy.sh” #引用的脚本路径
interval 3 #表示检测时间的间隔为3s
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
dont_track_primary
nopreempt #不抢占master
track_interface { #表示需要检测的网卡
enp0s3
}
mcast_src_ip 172.16.100.35 #表示设置组播的源地址,主机ip地址
garp_master_delay 6
virtual_router_id 60
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.100.38/24 brd 172.16.100.255 dev enp0s3 label enp0s3:1
}
virtual_routes {
172.16.100.38/24 dev enp0s3
}
track_script {
check_haproxy
}
# notify_master /home/shell/branch/state_master.sh
# notify_backup /home/shell/branch/state_backup.sh
# notify_fault /home/shell/branch/state_fault.sh
}
virtual_server 192.168.200.100 443 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.2 1358 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
sorry_server 192.168.200.200 1358
real_server 192.168.200.2 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.200.3 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334c
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
virtual_server 10.10.10.3 1358 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.200.4 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
备机与主机几乎相同,但是一定要修改以下内容:
state BACKUP #设置为备机
mcast_src_ip 172.16.100.36 #表示设置组播的源地址,即备机ip地址
priority 100 #优先级,要小于主机的优先级
然后按照顺序启动主机和备机,haproxy+keepalive就搭建完毕。
Keepalive的默认配置文件是在/etc/keepalived下。