PS:写在开头,虽然HAProxy优点很多,但是现在网上可参考的HAProxy文档真的少之又少,so,我把最近在项目中使用的心得整理下,供大家参考,如有侵权或错误之处,还请联系更正,谢谢!

好了,下面进入正文

HAProxy简介

1.HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

2.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

3.HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

4.HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

HAProxy官网地址:https://www.haproxy.org

HAProxy下载地址(1.6.9):https://fossies.org/linux/misc/haproxy-1.6.9.tar.gz

HAProxy文档:http://cbonte.github.io/haproxy-dconv/1.8/configuration.html

步骤一、关闭SElinux、配置防火墙

1、vim /etc/selinux/config
SELINUX=enforcing #注释掉
SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
[root@A local]# wq! #保存退出
[root@A local]# setenforce 0 #使配置立即生效 2、vim /etc/sysconfig/iptables #编辑
-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址通信
-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协)通信
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允许80端口通过防火墙
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1080 -j ACCEPT #允许1080端口通过防火墙
[root@A local]# wq! #保存退出
[root@A local]# /etc/init.d/iptables restart #重启防火墙使配置生效

步骤二、安装HAProxy

1、创建HAProxy运行账户和组

groupadd haproxy #添加haproxy组
useradd -g haproxy haproxy -s /bin/false #创建nginx运行账户haproxy并加入到haproxy组,不允许haproxy用户直接登录系统

2、安装:

[root@A local]# yum install -y gcc
[root@A local]# tar zxvf haproxy-1.6.9.tar.gz
[root@A local]# cd haproxy-1.6.9
[root@A local]# make TARGET=linux3100 CPU=x86_64 PREFIX=/usr/local/haprpxy #编译 uname -r #查看系统内核版本号
[root@A local]# make install PREFIX=/usr/local/haproxy #安装

3、设置HAProxy

[root@A local]# mkdir -p  /usr/local/haproxy/conf  #创建配置文件目录
[root@A local]# mkdir -p /etc/haproxy #创建配置文件目录
[root@A local]# touch /usr/local/haproxy/conf/haproxy.cfg #创建配置文件
[root@A local]# ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置文件软连接
[root@A local]# cp -r /home/haproxyserver/haproxy-1.8.4/examples/errorfiles /usr/local/haproxy/errorfiles #拷贝错误页面
[root@A local]# ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加软连接
[root@A local]# mkdir -p /usr/local/haproxy/log #创建日志文件目录
[root@A local]# touch /usr/local/haproxy/log/haproxy.log #创建日志文件
[root@A local]# ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加软连接
[root@A local]# cp /home/haproxyserver/haproxy-1.8.4/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷贝开机启动文件
[root@A local]# chmod +x /etc/rc.d/init.d/haproxy #添加脚本执行权限
[root@A local]# chkconfig haproxy on #设置开机启动
[root@A local]# ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加软连接

4、配置haproxy.cfg参数

[root@A local]# cp  /usr/local/haproxy/conf/haproxy.cfg   /usr/local/haproxy/conf/haproxy.cfg-bak  #备份
[root@A local]# vi /usr/local/haproxy/conf/haproxy.cfg #编辑,修改

以下是HAProxy的参数配置

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 ###[err warning info debug]
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid ###haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
maxconn 4000 ###最大连接数,默认4000
user haproxy
group haproxy
daemon ###创建1个进程进入deamon模式运行。此参数要求将运行模式设置为"daemon"
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http ###默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
log global ###采用全局定义的日志
option dontlognull ###不记录健康检查的日志信息
option httpclose ###每次请求完毕后主动关闭http通道
option httplog ###日志类别http日志格式
option forwardfor ###如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option redispatch ###serverId对应的服务器挂掉后,强制定向到其他健康的服务器
timeout connect 10000 #default 10 second timeout if a backend is not found
timeout client 300000 ###客户端连接超时
timeout server 300000 ###服务器连接超时
maxconn 60000 ###最大连接数
retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
####################################################################
listen stats
bind 0.0.0.0:1080 #监听端口
stats refresh 30s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy Manager #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
#stats hide-version #隐藏统计页面上HAProxy的版本信息
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
bind 0.0.0.0:80
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 ###满足策略要求,则响应策略定义的backend页面
default_backend dynamic ###不满足则响应backend的默认页面
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance roundrobin ###负载均衡模式轮询
server static 127.0.0.1:80 check ###后端服务器定义 backend dynamic
balance roundrobin
server websrv1 192.168.5.5:80 check maxconn 2000
server websrv2 192.168.5.47:80 check maxconn 2000
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
#errorloc 503 http://www.osyunwei.com/404.html
errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http

修改后保存退出

:wq! #保存退出
service haproxy start #启动
service haproxy stop #关闭
service haproxy restart #重启

5、设置HAProxy日志

vi  /etc/syslog.conf  在centOS 6以后,编辑/etc/rsyslog.conf  #编辑,在最下边增加

haproxy.log

local0.*          /var/log/haproxy.log
local3.* /var/log/haproxy.log

rsyslog默认情况下,需要在端口514监听UDP,所以需要把以下两行注释去掉:

Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514
:wq! #保存退出
vi /etc/sysconfig/syslog 在centOS 6以后,编辑/etc/sysconfig/rsyslog #编辑修改
SYSLOGD_OPTIONS="-r -m 0 -c 2" #接收远程服务器日志
:wq! #保存退出
service syslog restart 在centOS 6以后, systemctl restart rsyslog.service #重启syslog

添加定时任务,定时切割haproxy运行日志:

在/user/local/haproxy/log/下添加执行脚本:

添加定时任务启动脚本,在每天零点一分执行脚本:

01 0 * * * root /usr/local/haproxy/log/haproxyLogRotate.sh

修改定时任务后需要重启crond服务:

service crond restart (centos 6之前)

/bin/systemctl restart crond.service (centos 6以后)

6.浏览器打开haproxy的监控页面

如下:http://192.168.5.248:1080/stats

说明:1080即haproxy配置文件中监听端口,stats 即haproxy配置文件中的监听名称

7、Haproxy 版本需要在1.5以上才支持SSL

haproxy 代理 ssl 有两种方式

1、haproxy 本身提供ssl 证书,后面的web 服务器走正常的http ,这种方式需要重新编译haproxy

2、haproxy 本身只提供代理,后面的web服务器https,这种方式不需要重新编译

方式一:

重新编译安装

make TARGET=linux3100 USE_OPENSSL=1 ADDLIB=-lz clean all
make install
[root@localhost haproxy]# ldd haproxy | grep ssl
libssl.so.10 => /lib64/libssl.so.10 (0x00007f5ab8264000)

修改haproxy.cfg配置文件

global
tune.ssl.default-dh-param 2048 //修改默认使用2048bit加密,不设置会有警告
frontend http-in
bind *:443 ssl crt /root/server.pem //配置ssl支持,这里pem文件是证书和私钥合并而成的, cat servername.crt servername.key |tee servername.pem
reqadd X-Forwarded-Proto:\ https //http和https并存
redirect scheme https if !{ ssl_fc } //http跳转https

方式二:

需要后置服务器本身支持https,那么只要进行如下配置:
frontend https
bind *:443
mode tcp
default_backend weblogic
backend weblogic
mode tcp
balance source
server s1 10.20.2.233:443
注意,这种模式下mode 必须是tcp 模式

HAProxy 使用小记的更多相关文章

  1. [笔记]HAproxy reload config file with uninterrupt session

    HAProxy is a high performance load balancer. It is very light-weight, and free, making it a great op ...

  2. [原]HAproxy 代理技术原理探究

    HAproxy 技术分享 简介 HAProxy是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件 Features 1.免费 2.能够做到4层以上代理 3.高性能 ...

  3. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  4. 利用HAProxy代理SQL Server的AlwaysOn辅助副本

    利用HAProxy代理SQL Server的AlwaysOn辅助副本 公司最近数据库升级到SQL Server2014 ,并部署了alwayson高可用集群 机房内有三套程序需要读取数据库 第一套:主 ...

  5. Mysql的Haproxy反向代理和负载均衡

    HaProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.应用到Haproxy主要是因为他免费,并且基于TCP和HTTP的应用代理. ...

  6. HAProxy介绍

    简单说明 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需 ...

  7. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  8. haproxy windows环境使用

    haproxy下载:http://pan.baidu.com/s/1miEvQUc 测试环境说明: ip地址 作用 开放端口 备注 nbproc 1 daemon defaults mode tcp ...

  9. haproxy利用ACL规则封禁自定义IP地址拒绝访问

    现在有一个需求就是在发版的时候希望除公司IP外的外网访问服务的时候都是拒绝访问的 现在利用haproxy 的acl规则作出限制 errorfile       403 /etc/haproxy/err ...

随机推荐

  1. <状压DP>solution-POJ3311_Hie with the Pie

    Hie with the Pie Description The Pizazz Pizzeria prides itself in delivering pizzas to its customers ...

  2. Vue 常用三种传值方式

    Vue常用的三种传值方式: 父传子 子传父 非父子传值 引用官网一句话:父子组件的关系可以总结为 prop 向下传递,事件向上传递.父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消 ...

  3. DOCKER 学习笔记7 Docker Machine 建立虚拟机实战,以及错误总结

    前言 通过以上6小节的学习,已经可以使用DOCKER 熟练的部署应用程序了.大家都可以发现使用 DOCKER 带来的方便之处,因为现在的话,只是在一台服务器上部署,这样部署,我们只需要一条命令,需要的 ...

  4. Github第三方登陆详细流程

    一. 流程图 二.具体实现步骤 Ⅰ.创建OAuth App 我们首先需要创建一个OAuth App,根据下图的步骤点击即可 依次填写信息,然后点Register application 然后我们可以看 ...

  5. POJ_1222_高斯消元

    题目描述: 每组数据给出一个5*6的0 1矩阵,每次操作可以把某个位置及其四周的位置0 1置换,要求输出操作位置的矩阵. 思路: 每个位置操作2次则等于没有操作,所以每个位置有操作和不操作两种选择,爆 ...

  6. Shell:setfacl缩小普通用户的权限

    简介 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现 ...

  7. Github搜索技巧-如何使用github找到自己感兴趣的项目(转载)

    Github现在不仅仅作为一个版本控制工具,更是一个开源的仓库,里面不但有优秀的开源代码,电子书,还有一些五花八门的项目,有些国家的法律也放在上面,作为程序员如何找到自己感兴趣的项目就非常重要了! 欢 ...

  8. 磁盘文件系统管理与LVM逻辑卷

    一.磁盘以及分区管理 无论是Linux系统还是Windows系统.当现有硬盘的规划不能满足当前需求时.我们就需要将其重新规划和调整 实现上述操作我们就需要用到fdisk磁盘及分区管理工具.此工具是大多 ...

  9. 申请Let’s Encrypt通配符HTTPS证书(certbot ACME v2版)

    1.获取certbot-auto# 下载 # 下载 wget https://dl.eff.org/certbot-auto # 设为可执行权限 chmod a+x certbot-auto 2.开始 ...

  10. day13 JS Dom

    js两种存在形式 1:文件 2:块 放到body标签底部 防止加载js超时页面反应慢的问题 声明变量 name = "sb"; //全局变量 var age=18; //局部变量 ...