一、HAProxy简介

   代理的作用:web缓存(加速)、反向代理、内容路由(根据流量及内容类型等将请求转发至特定服务器)、转码器(将后端服务器的内容压缩后传输给client端)。

缓存的作用:减少冗余内容传输;节省带宽、缓解网络瓶颈;降低了对原始服务器的请求压力,降低了传输延迟。
    HAProxy是一种免费的、非常快速且可靠的解决方案,它提供了高可用性、负载平衡和对TCP和基于http的应用程序的代理。它特别适用于非常高的流量网站,并为世界上访问量最大的网站提供了强大的力量。多年来,它已经成为事实上的标准的opensource负载平衡器,现在随大多数主流Linux发行版本一起发布,
    并且经常在云平台上默认部署。
    HAProxy:只是http协议的反向代理,不提供缓存功能。    
二、HAProxy测试环境搭建
1、简单架构图

885374-20170725170351169-1855430327.png

2、测试环境(说明):

HAProxy:192.168.16.10
web1:   192.168.16.11
web2:   192.168.16.12

操作系统:CentOS Linux release 7.3.1611 (Core)

iptables关闭和selinux为disabled

3、HAProxy服务器安装haproxy

通过yum安装Haproxy:

[root@sheng1 haproxy]# yum -y install haproxy

查看Haproxy版本

[root@sheng1 haproxy]# haproxy -vHA-Proxy version 1.5.18 2016/05/10Copyright 2000-2016 Willy Tarreau 

4、web1和web2安装httpd

web服务器1:192.168.16.11Web服务器2:192.168.16.11

yum -y install httpd

echo "1111111" > /var/www/html/index.html

systemctl start httpd

echo "2222222" > /var/www/html/index.html
systemctl start httpd

然后systemctl start httpd.service

查看和配置haproxy配置文件
cat /etc/haproxy/haproxy.cfg | egrep -v '(#|^$)'

5、配置HAProxy

vim /etc/haproxy/haproxy.cfg

[root@sheng1 haproxy]# pwd

/etc/haproxy

修改haproxy.cfg的配置如下:

global                   #全局配置    log    127.0.0.1 local2    #日志输出配置    chroot  /var/lib/haproxy     #haproxy工作目录    pidfile  /var/run/haproxy.pid   #haproxy的pid目录    maxconn  4000           #最大连接数(默认配置)    user    haproxy         #运行haproxy用户    group   haproxy         #haproxy所属组    daemon               #后台启动    stats socket /var/lib/haproxy/stats  #这个不知道,后续补充defaults                                  #默认配置    mode   http            #默认模式mod{tcp|http|health}    log   global          #日志系统与global段相同    option  httplog          #日志类别采用httplog    option  dontlognull          #不记录健康检查日志    option  http-server-close     #每次请求完毕后主动关闭http通道    option  forwardfor  except 127.0.0.0/8  #后端服务器需要获得客户端真实ip需要配置的参数    option  redispatch           #当请求的服务器挂掉之后强行切换到健康的服务器    retries 3              #3次连接服务器失败后确定服务器不可用    timeout http-request 10s    #默认http请求超时时间(可优化)    timeout queue     1m    #默认队列超时时间(可优化)    timeout connect    10s    #默认连接超时时间(可优化)    timeout client    1m    #默认客户端超时时间(可优化)    timeout server    1m    #默认服务器超时时间(可优化)    timeout http-keep-alive 10s  #默认持久连接超时时间(可优化)    timeout check      10s  #默认心跳检测超时时间(可优化)    maxconn         3000  #最大连接数,不要超过全局配置最大连接数listen stats_auth            #监控页面及监听端口混合配置,做的有点差,仅做参考    bind 192.168.16.10:8000      #绑定监控页面监听端口    stats uri /status       #haproxy监控页面    stats auth admin:westos    #配置监控页面账号密码登录    stats refresh 5s        #监控页面自动刷新时间    stats hide-version       #隐藏监控页面haproxy版本号,保障安全    listen www.jzz.nginx *:8088  #监听的实例名称、地址和端口,可配置多个    server web1 192.168.16.11:80 cookie app1inst1 check inter 2000 rise 2 fall 5            #后端web服务器ip及其他配置    listen www.jzztest.org *:8089 #监听的实例名称、地址和端口,可配置多个    server web2 192.168.16.12:80 cookie app1inst2 check inter 2000 rise 2 fall 5            #后端web服务器ip及其他配置    #  注意参数解释:inter 2000 心跳检测时间;rise 2 三次连接成功,表示服务器正常;    #  fall 5 三次连接失败,表示服务器异常; weight 1 权重设置    listen localhost.localdomain *:80    balance roundrobin          #负载均衡算法(有roundrobin、static-rr、leastconn、source、url、url_param、hdr、rdp_cookie)frontend  main *:5000           #frontend前端配置,为haproxy安装时就有,能力有限,不再解释    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             appbackend static             #backend前端配置,为haproxy安装时就有,能力有限,不再解释    balance     roundrobin    server      static 127.0.0.1:4331 checkbackend app               #backend前端配置,为haproxy安装时就有,能力有限,不再解释    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

rsyslog 系统日志转发

编辑配置文件/etc/rsyslog.conf

加入如下内容:

$ModLoad imudp$UDPServerRun 514local2.*    /var/log/haproxy.log

vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS=
"-r -m 0"           
#接收远程服务器日志

重启rsyslog进程

systemctl restart rsyslog

6. 启动haproxy服务

systemctl start haproxy

三、测试环境是否健康

通过浏览器访问HAProxy

http://192.168.16.10:8000/status

访问haproxy监控页面端口下的/status,为了安全起见,第一次登陆需要账号密码,账号密码就是配置文件里设置的

QQ截图20190325115106.png

进入监控页面,在这里可以看到我们的配置

QQ截图20190325215416.png

访问haproxy服务器ip的8088端口,可以发现跳转到了Web服务器1

QQ截图20190325215742.png

访问haproxy服务器ip的8089端口,可以发现跳转到了Web服务器2

2.png

也可以设置域名访问到不同web服务器,但要在本地host绑定域名ip对应关系。

haproxy服务器配置成功

三、haproxy+keepalived简单配置

前提:
1.两台haproxy服务器,配置基本一样,可参考上面haproxy的配置,后端web服务器一样
2.两台haproxy服务器器上都已安装完成keepalived,安装教程参考我的lvs+keepalived配置中的keepalived的安装。
环境:

haproxy服务器1:192.168.16.9haproxy服务器2:192.168.16.10haproxy代理web服务器1:192.168.16.11(hostname:www.jzz.nginx 默认页面:1111111)haproxy代理Web服务器2:192.168.16.12(hostname:www.jzztest.org 默认页面:2222222)keepalived主服务器:192.168.174.9keepalived从服务器:192.168.174.10VIP:192.168.16.8操作系统:centos7.3   iptables关闭和selinux为disabled

两台keepalived主机的设置

      1、配置HAProxy:新加进来的192.168.16.9也要和之前的haproxy做同样的配置。

   2、 haproxy服务器两台机均安装keepalived

#安装依赖文件与keepalive

# yum install -y openssl openssl-devel keepalived

keepalived主服务器配置文件

[root@sheng0 ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {    router_id LVS_R1}vrrp_strict chk_http_port {         script "/opt/script/check_haproxy.sh"         interval 2         weight   2}vrrp_instance VI_1 {    state MASTER  interface ens33  virtual_router_id 88  priority 100  advert_int 1  authentication {     auth_type PASS     auth_pass 1111  }  virtual_ipaddress {     192.168.16.8  }  track_script {     check_haproxy  }}

keepalived从服务器配置文件

[root@sheng1 /]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {    router_id LVS_R2}vrrp_strict chk_http_port {           # Haproxy监控脚本       script "/opt/script/check_haproxy.sh"       interval 2       weight 2}vrrp_instance VI_1 {    state BACKUP  interface ens33  virtual_router_id 88  priority 80  advert_int 1  authentication {      auth_type PASS       auth_pass 1111  }  virtual_ipaddress {      192.168.16.8  }  track_script {      check_haproxy  }}

keepalived主从配置文件依旧只有很小差别,在这里只有priority和router_id不同,在这里用到了一个检测haproxy存活性的脚本,主从配置文件都有且相同

[root@sheng1 script]# cat check_haproxy.sh #!/bin/bashif [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then      /etc/init.d/haproxy startfisleep 2if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then      /etc/init.d/haproxy stopfi

*******************************************************************************************************************

附录:

haproxy配置文件:

global    log        127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     4000    user       haproxy    group       haproxy    daemon    stats socket /var/lib/haproxy/statsdefaults    mode                http    log                global    option              httplog    option              dontlognull    option http-server-close    option forwardfor       except 127.0.0.0/8    option              redispatch    retries              3    timeout http-request      10s    timeout queue          1m    timeout connect         10s    timeout client         1m    timeout server         1m    timeout http-keep-alive 10s    timeout check          10s    maxconn              3000listen stats_auth    bind 192.168.16.10:8000    stats uri /status    stats auth admin:westos    stats refresh 5s    stats hide-version    listen www.jzz.nginx *:8088    server web1 192.168.16.11:80 cookie app1inst1 check inter 2000 rise 2 fall 5    listen www.jzztest.org *:8089    server web2 192.168.16.12:80 cookie app1inst2 check inter 2000 rise 2 fall 5    listen localhost.localdomain *:80    balance roundrobinfrontend  main *: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             appbackend static    balance     roundrobin    server      static 127.0.0.1:4331 checkbackend 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

推广:haproxy+keepalived(主主模式)实现高可用环境的简单配置