13.2.3 安装方式对比(包管理、源码编译、容器)
在HAProxy的安装部署中,常见方式包括包管理、源码编译与容器镜像三类。不同方式在版本灵活性、维护成本、依赖管理与稳定性上各有侧重,应结合业务需求与运维能力选择。
包管理(YUM/APT)#
适用:对稳定性要求高、功能需求常规、标准化环境。
安装示例(CentOS/RHEL)
# 1) 安装
sudo yum install -y haproxy
# 2) 查看版本
haproxy -v
# 预期:输出 HA-Proxy version x.y.z
# 3) 基本配置与验证
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
sudo vim /etc/haproxy/haproxy.cfg
示例配置(/etc/haproxy/haproxy.cfg):
global
log 127.0.0.1 local0
maxconn 2000
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend fe_web
bind *:80
default_backend be_web
backend be_web
balance roundrobin
server s1 10.0.0.11:8080 check
server s2 10.0.0.12:8080 check
# 4) 语法检查(避免配置错误导致启动失败)
haproxy -c -f /etc/haproxy/haproxy.cfg
# 5) 启动与开机自启
sudo systemctl enable --now haproxy
sudo systemctl status haproxy
命令解释
- haproxy -c -f <配置>:只检查配置语法,不启动服务。
- systemctl enable --now:设置开机自启并立即启动。
排错要点
# 查看服务日志
journalctl -u haproxy --no-pager -n 100
# 常见问题:端口被占用、后端不可达、配置语法错误
ss -lntp | grep :80
源码编译#
适用:需要新特性、定制功能或性能优化的场景。
安装示例(Ubuntu/CentOS通用)
# 1) 安装编译依赖
# Ubuntu
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev zlib1g-dev libpcre3-dev
# CentOS
sudo yum install -y gcc make openssl-devel pcre-devel zlib-devel
# 2) 下载并解压
curl -LO https://www.haproxy.org/download/2.8/src/haproxy-2.8.5.tar.gz
tar -xf haproxy-2.8.5.tar.gz
cd haproxy-2.8.5
# 3) 编译并启用常用模块
make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1 \
USE_LUA=1 USE_PROMEX=1
# 4) 安装到 /usr/local/sbin
sudo make install
/usr/local/sbin/haproxy -v
命令解释
- TARGET=linux-glibc:指定编译目标平台。
- USE_OPENSSL=1:启用SSL终止能力。
- USE_PROMEX=1:启用Prometheus指标导出。
示例Systemd服务文件
# /etc/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=network.target
[Service]
ExecStart=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
ExecReload=/usr/local/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg
ExecReload=/bin/kill -USR2 $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now haproxy
排错要点
# 编译时报缺库
# 提示: openssl not found -> 安装 openssl-devel/libssl-dev
# 运行时报错找不到配置
/usr/local/sbin/haproxy -c -f /etc/haproxy/haproxy.cfg
容器部署(Docker/Kubernetes)#
适用:容器化架构、微服务集群、快速交付与弹性伸缩。
Docker快速启动
# 1) 准备配置
mkdir -p /opt/haproxy
cat >/opt/haproxy/haproxy.cfg <<'EOF'
global
maxconn 2000
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend fe_web
bind *:80
default_backend be_web
backend be_web
balance roundrobin
server s1 10.0.0.11:8080 check
server s2 10.0.0.12:8080 check
EOF
# 2) 运行容器
docker run -d --name haproxy \
-p 80:80 \
-v /opt/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \
haproxy:2.8
# 3) 验证
docker ps
docker logs haproxy --tail 50
Kubernetes示例(简化)
# haproxy-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: haproxy-config
data:
haproxy.cfg: |
global
maxconn 2000
defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
frontend fe_web
bind *:80
default_backend be_web
backend be_web
balance roundrobin
server s1 10.0.0.11:8080 check
server s2 10.0.0.12:8080 check
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: haproxy
spec:
replicas: 1
selector:
matchLabels:
app: haproxy
template:
metadata:
labels:
app: haproxy
spec:
containers:
- name: haproxy
image: haproxy:2.8
ports:
- containerPort: 80
volumeMounts:
- name: cfg
mountPath: /usr/local/etc/haproxy/haproxy.cfg
subPath: haproxy.cfg
volumes:
- name: cfg
configMap:
name: haproxy-config
kubectl apply -f haproxy-config.yaml
kubectl get pods
容器排错要点
# 容器内检查配置
docker exec -it haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg
# K8s查看Pod日志
kubectl logs deploy/haproxy --tail=100
安装方式对比总结(要点)#
- 包管理:稳定、省心、版本偏旧;适合标准化生产。
- 源码编译:灵活、可定制、维护成本高;适合性能与新特性需求。
- 容器:交付快、弹性强、配置与网络需额外规划;适合云原生。
练习#
- 使用包管理安装HAProxy,修改配置绑定80端口并转发到两台后端,完成语法检查与启动。
- 使用源码编译启用
USE_PROMEX=1,验证haproxy -vv是否包含Prometheus相关模块。 - 使用Docker运行HAProxy,将配置挂载为只读,修改配置后重启容器生效。
- 制造一个端口冲突(占用80端口),观察
journalctl -u haproxy输出并解决。