一、LUA编译安装以及Systemd开发包:
1.下载、上传lua-5.3.5.tar.gz并解压
2.安装依赖 yum install -y readline-devel
3.进入lua目录,执行以下命令
make linux
make INSTALL_TOP=/usr/local/lua install
yum install systemd-devel -y
二、安装haproxy
1.上传haproxy-2.0.1.tar.gz并解压
2.haproxy-2.0.1 目录,执行以下命令
make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_LUA=1 LUA_LIB=/usr/local/lua/lib/ LUA_INC=/usr/local/lua/include/ USE_PCRE=1 USE_SYSTEMD=1
make install PREFIX=/usr/local/haproxy
3.创建运行账户
useradd haproxy -s /sbin/nologin
4.检查是否支持SSL:
ldd haproxy | grep ssl
显示libssl.so.10 => /lib64/libssl.so.10 (0x00007fde85f97000)表示正常
三、配置
haproxy没有默认配置文件,需要自行新增,在/usr/local/haproxy/路径新增haproxy.cfg,文件内容如下:
global #全局设置
log 127.0.0.1 local0 info # log语法:log <address_1>[max_level_1] # 全局的日志配置,使用log关键字,
# 指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志
user haproxy
daemon #以后台进程运行
maxconn 256#每个进程的最大连接数,所以单个进程的TCP会话最大数目将是该值的两倍。
nbproc 1#进程数,该值可以设置小于或等于cpu核心数
pidfile /usr/local/haproxy/haproxy.pid#将所有进程写入pid文件
defaults#默认设置
balance roundrobin #默认的负载均衡的方式,轮询方式
# balance source #默认的负载均衡的方式,类似nginx的ip_hash
# balance leastconn #默认的负载均衡的方式,最小连接
mode http#设置http(七层模式),也可设置为tcp(四层模式),另外还有一个Health健康监测模式。
#对mysql进行负载均衡的话,这里记得修改为tcp
#log 127.0.0.1 local3 err
retries 3 #检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
option redispatch # 当使用了cookie时,haproxy将会将其请求的后端服务器的serverID插入到cookie中,
# 以保证会话的SESSION持久性;而此时,如果后端的服务器宕掉了,但是客户端的cookie是不会刷新的,
# 如果设置此参数,将会将客户的请求强制定向到另外一个后端server上,以保证服务的正常。
option abortonclose # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均衡器或者监控系统为了探测该服务是否存活可用时,
# 需要定期的连接或者获取某一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称为空连接;
# 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,
# 建议不要使用该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
option httpclose # 这个参数我是这样理解的:使用该参数,每处理完一个request时,
# haproxy都会去检查http头中的Connection的值,
# 如果该值不是close,haproxy将会将其删除,如果该值为空将会添加为:Connection: close。
# 使每个客户端和服务器端在完成一次传输后都会主动关闭TCP连接。
# 与该参数类似的另外一个参数是“option forceclose”,该参数的作用是强制关闭对外的服务通道,
# 因为有的服务器端收到Connection: close时,也不会自动关闭TCP连接,
# 如果客户端也不关闭,连接就会一直处于打开,直到超时。
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen admin_stats #配置haproxy管理页面
bind *:9999#访问端口为9999
mode http
option httplog
stats refresh 30s#自动刷新时间
stats uri /stats#项目名为status,ip+端口+项目名即可访问
stats auth admin:admin#配置管理用户账号密码
stats admin if TRUE
stats hide-version
frontend http-in#配置前端访问端口
mode http
bind *:1080#通过该端口进行负载均衡
option forwardfor # 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server
default_backend servers#指定后端服务器
#日志格式
capture request header Host len 64
capture request header User-Agent len 128
capture request header X-Forwarded-For len 100
capture request header Referer len 200
capture response header Server len 40
capture response header Server-ID len 40
#capture捕获信息
log-format %ci:%cp\ %si:%sp\ %B\ %U\ %ST\ %r\ %b\ %f\ %bi\ %hrl\ %hsl\
# 启用X-Forwarded-For,在requests头部插入客户端IP发送给后端的server,使后端server获取到客户端的真实IP
# acl static_down nbsrv(static_server) lt 1
# # 定义一个名叫static_down的acl,当backend static_sever中存活机器数小于1时会被匹配到
# acl php_web url_reg /*.php$
# #acl php_web path_end .php
# # 定义一个名叫php_web的acl,当请求的url末尾是以.php结尾的,将会被匹配到,上面两种写法任选其一
# acl static_web url_reg /*.(css|jpg|png|jpeg|js|gif)$
# #acl static_web path_end .gif .png .jpg .css .js .jpeg
# # 定义一个名叫static_web的acl,当请求的url末尾是以.css、.jpg、.png、.jpeg、.js、.gif结尾的,将会被匹配到,上面两种写法任选其一
# use_backend php_server if static_down
# # 如果满足策略static_down时,就将请求交予backend php_server
# use_backend php_server if php_web
# # 如果满足策略php_web时,就将请求交予backend php_server
# use_backend static_server if static_web
# 如果满足策略static_web时,就将请求交予backend static_server
backend servers
server server1 192.168.158.2 check inter 2000 rise 3 fall 3 weight 1 maxconn 32
#建议加上check,否则后台服务器A宕机了,负载均衡还会把请求发送到该宕机服务器上,
#inter 2000指check检测时间为2000毫秒,rise 3检测3次均正常则表示后天服务器正常,
#fall 3检测3次失败,则会把该后天服务器标志宕机,不再玩该后台服务器发送请求,
#weight 1指权重,取消weight改为backup,则是所有后台服务器宕机后才会启用该backup后台服务器
server server2 192.168.158.1 check inter 2000 rise 3 fall 3 weight 1 maxconn 32
四、相关操作介绍
启动
`/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg`
重启`
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid
关闭pkill haproxy
五、Haproxy负载介绍
balance roundrobin # 动态加权轮询,软负载均衡基本都具备这种算法
balance static-rr # 静态轮训,建议使用
balance leastconn # 最少连接者先处理,建议用于长会话
balance source # 源地址哈希算法,根据请求源IP,建议使用
balance uri # 根据请求的URI
balance url_param # 根据请求的URl参数'balance url_param' requires an URL parameter name
balance hdr(name) # 根据HTTP请求头来锁定每一次HTTP请求
balance rdp-cookie(name) # 根据据cookie(name)来锁定并哈希每一次TCP请求
六、Haproxy 开启日志记录
CentOS 7上yum安装的Haproxy,默认没有记录日志。需要做一下配置才能记录日志。(不知道其他版本是否需要,已经忘记了)主要是用到了Haproxy,以前貌似没有这么麻烦,今天配置出了一些问题查日志才发现原来Haproxy需要自己手工开启日志记录功能。因此作为相关记录!
- 创建记录日志文件
mkdir /var/log/haproxy && chmod a+w /var/log/haproxy
- 开启rsyslog记录haproxy日志功能
修改/etc/rsyslog.conf文件,去掉这两行的注释:
$ModLoad imudp
$UDPServerRun 514
新增这一行:local0.* /var/log/haproxy.log
echo "local0.* /var/log/haproxy/haproxy.log">>/etc/rsyslog.conf
- 修改"/etc/sysconfig/rsyslog"文件,内容如下
SYSLOGD_OPTIONS="-r -m 0 -c 2" - 配置haproxy
编辑haproxy配置文件,进行如下内容修改
log 127.0.0.1 local0 info - 重启日志服务service rsyslog restart
- 重启haproxy服务
- 查看日志记录tail -f /var/log/haproxy/haproxy.log
- 日志级别
emerg 0 系统不可用
alert 1 必须马上采取行动的事件
crit 2 关键的事件
err 3 错误事件
warning 4 警告事件
notice 5 普通但重要的事件
info 6 有用的信息
debug 7 调试信息