安装
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.pid
pidfile /var/run/haproxy.pid
## 设定每个 haproxy 进程所接受的最大并发连接数
## 其等同于命令行选项 -n,"ulimit n" 自动计算的结果正式参照从参数设定的
maxconn 4000
## uid, 此处用 user 名代替,需要 useradd -g haproxy haproxy
user haproxy
## gid, 此处用 group 名代理,需要 groupadd haproxy
group haproxy
## 作为后台守护进程形式运行
daemon
## 指定启动的 haproxy 进程个数
## --->作为守护进程形式时候,仅能设置一个
nbproc
########################################################
### 多节点部署时 node 、 description 的值要 做相应调整。
########################################################
## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时
node mycat-proxy-1
## 当前实例的描述信息
description mycat-proxy-1
# turn on stats unix socket
stats 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 并发连接。
### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,
### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默认为 2000
maxconn 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:请求源ip
balance 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 2000
server 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 reception
module(load="imudp")
input(type="imudp" port="514")
# provides TCP syslog reception
module(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