安装
yum install -y haproxy
配置
vim /etc/haproxy/haproxy.cfg
配置一个状态检查接口和流量代理接口
#---------------------------------------------------------------------# Example configuration for a possible web application. See the# full configuration options online.## http://haproxy.1wt.eu/download/1.4/doc/configuration.txt##---------------------------------------------------------------------#---------------------------------------------------------------------# Global settings#---------------------------------------------------------------------global# to have these messages end up in /var/log/haproxy.log you will# need to:## 1) configure syslog to accept network log events. This is done# by adding the '-r' option to the SYSLOGD_OPTIONS in# /etc/sysconfig/syslog## 2) configure local2 events to go to the /var/log/haproxy.log# file. A line like the following can be added to# /etc/sysconfig/syslog## local2.* /var/log/haproxy.log### 定义全局的syslog服务器,最多可以定义2个## local0 是日志设备,到时候对应 /etc/rsyslog.conf 中的配置,默认回收 info 的日志级别log 127.0.0.1 local0 info# log 127.0.0.1 local2 info## 修改 HaProxy 的工作目录到指定的目录,## 并且在放弃权限之前执行 chroot() 操作,可以提升 haproxy 的安全级别chroot /var/lib/haproxy## 进程文件(默认路径 /var/run/haproxy.pidpidfile /var/run/haproxy.pid## 设定每个 haproxy 进程所接受的最大并发连接数## 其等同于命令行选项 -n,"ulimit n" 自动计算的结果正式参照从参数设定的maxconn 4000## uid, 此处用 user 名代替,需要 useradd -g haproxy haproxyuser haproxy## gid, 此处用 group 名代理,需要 groupadd haproxygroup haproxy## 作为后台守护进程形式运行daemon## 指定启动的 haproxy 进程个数## --->作为守护进程形式时候,仅能设置一个nbproc########################################################### 多节点部署时 node 、 description 的值要 做相应调整。########################################################## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时node mycat-proxy-1## 当前实例的描述信息description mycat-proxy-1# turn on stats unix socketstats socket /var/lib/haproxy/stats#---------------------------------------------------------------------# common defaults that all the 'listen' and 'backend' sections will# use if not designated in their block#---------------------------------------------------------------------## defaults 用于为所有其他配置段提供默认参数,这默认配置参数可由下一个 " 所重新设定defaults## 所处理的模式 (tcp四层 , http七层 , health状态检查 只会返回 OK)### tcp: 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,######## 且不会对 7 层报文做任何类型的检查,此为默认模式### 实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,######## 所有不与 RFC 模式兼容的请求都会被拒绝### health :实例运行于 health 模式 ,其对入站请求仅响应 OK ”信息并关闭连接######## 且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求mode http## 继承 global 中 log 的定义log global# 日志格式option httplog# 日志中不记录负载均衡的心跳检测机制option dontlognull#option http-server-close#option forwardfor except 127.0.0.0/8## serverId 对应的服务器挂掉后 强制定向到其他健康的服务器option redispatch#retries 3#timeout http-request 10s#timeout queue 1m##连接超时 默认是毫秒 单位可以设置 us,ms,s,m,h,d)timeout connect 5000# 客户端超时,默认ms,可添加时间单位timeout client 50s# 服务器超时,默认 ms,可添加时间单位timeout server 5s#timeout http-keep-alive 10s#timeout check 10s## 前端的最大并发连接数(默认为 2000)### 其不能用于 backend 区段,对于大型站点来说,可以尽可能提高此值以便让 haproxy 管理连接队列,### 从而避免无法应答用户请求。 当然,此最大值不能超过“ global ”段中的定义。### 此外,需要留心的是, haproxy 会为每个连接维持两个缓冲,每个缓存的大小为 8KB### 再加上其他的数据,每个连接将大约占用 17KB 的 RAM 空间,这意味着经过适当优化后### 有着 1GB 的可用 RAM 空间时将维护 40000 50000 并发连接。### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默认为 2000maxconn 3000## listen 名称可自定义## 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用## HAProxy 的状态信息统计页面listen admin_stats# 绑定的ip及监听的端口bind 0.0.0.0:4001# 访问协议mode http# URI 相对地址stats uri /show# 统计报告格式stats realm Global\ statistics## 启用日志记录 HTTP 请求# option httplog# 用于登录监控界面的账户密码stats auth admin:abc666666# 数据库负载均衡配置listen proxy-mysql# 绑定的ip及监听的端口bind 0.0.0.0:3306# 访问协议mode tcp# 负载均衡算法# roundrobin:轮询# static-rr:权重# leastconn:最少连接# source:请求源ipbalance roundrobin# 记录 tcp 请求日志option tcplog## 允许向 server 和 client 发送 keepalive 检测死链option tcpka### 向后端服务器的 48700 端口(端口值在后端服务器上通过 xinetd 配置)发送 OPTIONS 请求### 原理请参考 HTTP 协议 ) HAProxy 会根据返回内容来判断后端服务是否可用### 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。option httpchk OPTIONS * HTTP/1.1 r nHost: www ## 后端服务状态检测# 需要被负载均衡的主机## 格式: server <name> <address>[:[port]] [param*]### serser 在后端声明一个 server ,只能用于 listen 和 backend 区段。### <name> 为此服务器指定的内部名称,其将会出现在日志及警告信息中### <address> 此服务器的 IPv4 地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的 IPV4 地址### [:[port]] 指定将客户端连接请求发往此服务器时的目标端口,此为可选项### [param*[ 为此 server 设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:###### weight: 权重,默 认为 1 ,最大值为 256 0 表示不参与负载均衡###### backup: 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server###### check: 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定###### inter: 设定监控状态检查的时间间隔,单位为毫秒,默认为 2000########## 也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟###### rise: 设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2###### fail: 设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3###### cookie: 为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,########## 第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能###### maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值########## 其将被放置于请求队列,以等待其他连接被释放# server mycat_01 192.168.1.211:8066 check port 8066 weight 1 maxconn 2000server mycat_02 192.168.1.212:8066 check port 8066 weight 1 maxconn 2000
运行
- 根据以上 HAProxy 配置文件要求做以下配置
添加 haproxy 用 户 组 和用户
groupadd haproxy useradd g haproxy haproxy
创建 chroot 运行的路径
mkdir /usr/share/haproxy
防火墙中打开 3306 端口 和 4001 端口
- 运行
systemctl start haproxy
查看状态
浏览器键入
http://<ip>:4001/show,键入配置文件中的账号密码即可查看端口
可自行配置
- 这里为了将 MyCat 后面的 db 集群当成黑盒,将转发接口设置为 3306,让应用当成一个 db 来使用 | 端口 | 作用 | | —- | —- | | 3306 | TCP/IP 转发端口 | | 4001 | 监控界面端口 |
下面是未经过实验的
开启 rsyslog 的 haproxy 日志记录功能
- 默认情况下 haproxy 是 不记录日志的,如果需要记录日志,还需要配置 系 统的 syslog 在 linux 系统中是 rsyslog 服 务。 syslog 服务器可以用作一个网络中的日志监控中心, rsyslog 是一个开源工具,被广泛用于 Linux 系统以通过 TCP/UDP 协议转发或接收日志消息
安装配置 rsyslog 服务
- 安装和配置
yum install rsyslog # 没安装的情况下执行安装 vim /etc/rsyslog.conf
# 允许 514 端口接收使用 UDP 和 TCP 协议转发过来的日志,# provides UDP syslog receptionmodule(load="imudp")input(type="imudp" port="514")# provides TCP syslog receptionmodule(load="imtcp")input(type="imtcp" port="514")# -------------------############################### GLOBAL DIRECTIVES ################################ ------------------## Include all config files in /etc/rsyslog.d/#$IncludeConfig /etc/rsyslog.d/*.conf
- 创建 haproxy 的 日志配置文件
- 看上面文件的注释,rsyslog 服务会来此目录加载配置
cd /etc/rsyslog.d/ touch haproxy.conf vim /etc/rsyslog.d/haproxy.conf
- 看上面文件的注释,rsyslog 服务会来此目录加载配置
local0.* /var/log/haproxy.log&~
- 如果不加上面的的 配置则除了在
/var/log/haproxy.log中写入日志外,也会写入/var/message文件中配置- 保存后重启 rsyslog 服 务
配置系统内核 的 IP 包转 发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
- 使配置生效
sysctl p
