centos7下haproxy1.7的使用与配置
centos7下haproxy1.7的使用与配置
haproxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
一、haproxy下载
http://www.haproxy.org/#down
如:haproxy-1.7.2.tar.gz
二、安装haproxy
查看内核版本
> uname -r
解压haproxy,并安装
> tar xf haproxy-1.7.2.tar.gz
> cd haproxy-1.7.2
> make TARGET=linux2628 PREFIX=/data/haproxy
> make install PREFIX=/data/haproxy
安装成功后,查看版本
> /data/haproxy/sbin/haproxy -v
复制haproxy文件到/usr/sbin下
因为下面的haproxy.init启动脚本默认会去/usr/sbin下找,当然你也可以修改,不过比较麻烦。
> cp /data/haproxy/sbin/haproxy /usr/sbin/
复制haproxy脚本,到/etc/init.d下
> cp ./examples/haproxy.init /etc/init.d/haproxy
> chmod 755 /etc/init.d/haproxy
我们可以查看一下这个haproxy.init文件
#$BASENAME默认就是haproxy
BASENAME=`basename $0`
if [ -L $0 ]; then
BASENAME=`find $0 -name $BASENAME -printf %l`
BASENAME=`basename $BASENAME`
fi #执行文件路径
BIN=/usr/sbin/$BASENAME
#配置文件路径
CFG=/etc/$BASENAME/$BASENAME.cfg
#pid文件路径
PIDFILE=/var/run/$BASENAME.pid
#锁文件路径
LOCKFILE=/var/lock/subsys/$BASENAME
创建系统账号
> useradd -r haproxy
创建配置文件
> mkdir /etc/haproxy
> vi /etc/haproxy/haproxy.cfg
#全局配置
global
#设置日志
log 127.0.0.1 local3 info
chroot /data/haproxy
#用户与用户组
user haproxy
group haproxy
#守护进程启动
daemon
#最大连接数
maxconn 4000 #默认配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000 #前端配置,http_front名称可自定义
frontend http_front
bind *:80
#haproxy的状态管理页面,通过/haproxy?stats来访问
stats uri /haproxy?stats
default_backend http_back #后端配置,http_back名称可自定义
backend http_back
#负载均衡方式
#source 根据请求源IP
#static-rr 根据权重
#leastconn 最少连接者先处理
#uri 根据请求的uri
#url_param 根据请求的url参数
#rdp-cookie 据据cookie(name)来锁定并哈希每一次请求
#hdr(name) 根据HTTP请求头来锁定每一次HTTP请求
#roundrobin 轮询方式
balance roundrobin
#设置健康检查页面
option httpchk GET /index.html
#传递客户端真实IP
option forwardfor header X-Forwarded-For
# inter 2000 健康检查时间间隔2秒
# rise 3 检测多少次才认为是正常的
# fall 3 失败多少次才认为是不可用的
# weight 30 权重
server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30
server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
打开rsyslog配置
> vi /etc/rsyslog.conf
去掉下面两行前面的#号
$ModLoad imudp
$UDPServerRun 514
并添加下面一行
local3.* /var/log/haproxy.log
重启rsyslog
> systemctl restart rsyslog
启动haproxy
> service haproxy start
三、haproxy的acl规则
frontend http_front
bind *:80
stats uri /haproxy?stats #创建一个acl,is_http_back2是acl的名称,可自定义,用于判断主机名是否为www.back2.com
acl is_http_back2 hdr_end(host) www.back2.com
#通过正则判断主机名中是否为bbs.back.com或forum.back.com
acl is_host_bbs hdr_reg(host) -i ^(bbs.back.com|forum.back.com)
#判断ua是否为android
acl is_ua_android hdr_reg(User-Agent) -i android
#判断主机名开头是否为img.或css.或js.
acl is_host_static hdr_beg(host) -i img. css. js.
#判断url路径中是否有/bbs
acl is_path_bbs path_beg -i /bbs
#判断url文件结尾
acl is_php path_end -i .php
#通过正则判断url中结尾以
acl is_static_file url_reg -i /*.(css|jpg|png|jpeg|gif)$
#效果同上
acl is_static_file2 path_end -i .css .jpg .png .jpeg .gif #如果主机名是www.back2.com那么就使用后端http_back2
use_backend http_back2 if is_http_back2 #默认使用的后端
default_backend http_back backend http_back
balance roundrobin
option httpchk GET /index.html
option forwardfor header X-Forwarded-For
server node1 192.168.1.222:8080 check inter 2000 rise 3 fall 3 weight 30 backend http_back2
balance roundrobin
option httpchk GET /index.html
option forwardfor header X-Forwarded-For
server node2 192.168.1.222:8082 check inter 2000 rise 3 fall 3 weight 30
四、haproxy的动态管理
在/etc/haproxy/haproxy.cfg的global配置中添加如下项:
stats socket /data/haproxy/haproxy.sock mode 600 level admin
stats timeout 2m
安装socat工具
> yum install socat
查看帮助
> echo "help" | socat stdio /data/haproxy/haproxy.sock
查看信息
> echo "info" | socat stdio /data/haproxy/haproxy.sock
关闭后台主机
> echo "disable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock
打开后台主机
> echo "enable server http_back/node1" | socat stdio /data/haproxy/haproxy.sock
五、可调优的参数
配置端口可用范围
> cat /proc/sys/net/ipv4/ip_local_port_range
配置端口复用
> cat /proc/sys/net/ipv4/tcp_tw_reuse
修改timeout的时间(不建议修改)
> cat /proc/sys/net/ipv4/tcp_fin_timeout
centos7下haproxy1.7的使用与配置的更多相关文章
- centos7下mysql5.7的安装与配置
centos7下MySQL5.7的安装与配置 下载 下载地址 根据系统和版本选择红框中的四个RPM包下载即可,然后放到centos7系统中的/opt目录下,等待稍后安装. 安装前的准备 1. 检查系统 ...
- CentOS7下安装MySQL5.7安装与配置(转)
原文地址:http://www.centoscn.com/mysql/2016/0626/7537.html 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在M ...
- centos7下/etc/rc.local文件里配置的开机启动项不执行的解决办法
习惯于在/etc/rc.local文件里配置我们需要开机启动的服务,这个在centos6系统下是正常生效的.但是到了centos7系统下,发现/etc/rc.local文件里的开机启动项不执行了!仔细 ...
- CentOS7下搭建Nginx+PHP7的安装配置
一.安装编译工具及库文件: yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 环境要求 nginx是C ...
- CentOS7下安装MySQL5.7安装与配置(YUM)
http://blog.csdn.net/xyang81/article/details/51759200 安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在My ...
- CentOS7下SVN server的安装与配置
CentOS7通过yum install命令进行安装SVN(参考:http://subversion.apache.org/packages.html#centos) $ yum install su ...
- CentOS7下安装Nexus私服及基础配置
环境准备 VMware上安装CentOS7 XShell/Xftp NexusOSS-3.10 jdk1.8 安装 使用root用户登录,将安装包均放置在/usr/local文件夹下 使用Xshell ...
- CentOS7下MySQL8的二进制基本安装配置
前言 基于本地Centos7.6虚拟机Mysql8的配置(亲测有效) 一.安装前的准备 1.到官网下载mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz 2.通过Xs ...
- CentOS7下安装MySQL的安装与配置(yum) (转)
原文链接:http://www.centoscn.com/mysql/2016/0626/7537.html 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mys ...
随机推荐
- How to Pronounce Word vs. World
How to Pronounce Word vs. World Share Tweet Share Tagged With: Comparison, Dark L What is the differ ...
- Haskell语言学习笔记(79)lambda演算
lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...
- shell流程控制与循环结构
shell脚本中的流程控制有if/else语句.case语句,循环结果包括for循环.while循环.until循环等内容. if语句 (1)最简单的if语句.使用格式有2种方式,分别如下 使用格式1 ...
- 关于PHP Notice: A non well formed numeric value encountered, 你知道多少
---------------------------------------------------------------------------------------------- A non ...
- 生产者消费者 wait()。 notify()
public class ThreadDemo3 { public static void main(String[] args){ MyList list = new MyList(); Produ ...
- jdk动态代理和cglib动态代理
参考: http://www.importnew.com/22015.html Java动态代理 上面的代码运行的结果为: I'm proxy! Welcome oschina hosee's blo ...
- SSM综合练习
CRM系统 CRM项目外观 1. 开发环境 IDE: Eclipse Neon Release (4.6.0) Jdk: 1.8 数据库: MySQL 2. 创建数据库 创建crm数据库,这里使用的是 ...
- grabcut 分割 Rect
#include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src = imread("E:\ ...
- the type java.io.ObjectInputStream cannot be resolved. It is indirectly......
问题的原因: 配置tomcat7.0的时候自己设置了jre的版本1.8,而没有用myeclipse10自带的jre1.6,导致了出现了差错! 两种解决的办法: 1.点击windows--->pr ...
- Gradle 在Eclipse中的使用
eclipse上gradle插件的安装 1)在Eclipse中选择Help -> Eclipse Marketplace…,输入buildship点击Go,然后选择Install安装Gradle ...