目录标题

OceanBase数据库OBProxy 4.2高可用负载均衡方案:Keepalived与HAProxy结合实践

一、方案概述与架构设计

1.1 目标与价值

OceanBase数据库作为分布式关系型数据库,其代理层组件ObProxy是连接应用与数据库集群的关键桥梁。在生产环境中,确保ObProxy的高可用性和性能稳定性至关重要。本方案旨在利用开源组件Keepalived和HAProxy,构建针对ObProxy 4.2版本的高可用负载均衡解决方案,实现:

  • 高可用性:消除单点故障,确保在节点故障或维护期间服务连续性
  • 负载均衡:合理分配数据库连接请求,提高资源利用率
  • 故障自愈:自动检测并隔离故障节点,恢复后自动纳入服务
  • 性能优化:通过参数调优提升系统处理能力和响应速度

1.2 技术选型与架构原理

本方案采用Keepalived+HAProxy的组合,实现ObProxy的高可用负载均衡。这一组合的核心优势在于:

  • Keepalived:基于VRRP协议实现高可用,通过虚拟IP(VIP)漂移机制,确保在主节点故障时,服务可以自动切换到备用节点
  • HAProxy:提供高性能的负载均衡能力,支持多种负载均衡算法和健康检查机制
  • 分工明确:Keepalived负责高可用性保障,HAProxy负责流量分发,两者结合实现完整的解决方案

部署架构图

客户端应用
  │
  └───→ VIP(虚拟IP)
          │
          ├─── HAProxy主节点(Active)
          │       ├───→ ObProxy节点1
          │       └───→ ObProxy节点2
          │
          └─── HAProxy备节点(Backup)
                  ├───→ ObProxy节点1
                  └───→ ObProxy节点2

1.3 适用场景与版本要求

本方案特别适用于以下场景:

  • OceanBase数据库ObProxy 4.2版本部署环境
  • 需要高可用性保障的数据库访问层
  • 要求快速故障检测与恢复的生产环境
  • 需要对数据库连接进行负载均衡的场景

二、环境准备与组件安装

2.1 服务器配置要求

建议硬件配置

组件CPU内存存储网络
HAProxy节点至少2核至少4GB50GB以上双网卡(管理+业务)
ObProxy节点至少4核至少8GB100GB以上千兆以上

操作系统要求

  • CentOS 7.9/8.x或Ubuntu 18.04/20.04
  • 内核参数优化(禁用NUMA、透明大页等)

2.2 软件安装与基础配置

2.2.1 安装HAProxy

在所有HAProxy节点上执行以下命令安装HAProxy:

# CentOS系统
yum install -y haproxy

# Ubuntu系统
apt-get install -y haproxy

安装完成后,建议禁用系统自带的haproxy服务:

systemctl stop haproxy
systemctl disable haproxy
2.2.2 安装Keepalived

在所有HAProxy节点上执行以下命令安装Keepalived:

# CentOS系统
yum install -y keepalived

# Ubuntu系统
apt-get install -y keepalived
2.2.3 安装ObProxy 4.2

按照OceanBase官方文档安装ObProxy 4.2版本,确保ObProxy正常运行并连接到OceanBase集群。

关键配置参数

  • 监听端口:默认2883
  • 连接OceanBase集群参数
  • 认证信息配置

2.3 系统环境优化

在所有服务器上进行以下系统优化:

  1. 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
  1. 禁用SELinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
  1. 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
  1. 禁用NUMA
grubby --update-kernel=ALL --args="numa=off"
  1. 系统参数优化
cat >> /etc/sysctl.conf << EOF
net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 16777216
net.core.wmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.ip_local_port_range = 3500 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
EOF

sysctl -p

三、HAProxy配置详解

3.1 HAProxy配置结构概述

HAProxy配置文件通常分为以下几个主要部分:

  1. global:全局参数,影响整体运行环境
  2. defaults:默认参数,可被其他部分继承
  3. frontend:前端配置,定义如何接收客户端请求
  4. backend:后端配置,定义如何将请求转发给后端服务器
  5. listen:复合配置,可同时定义前端和后端

对于ObProxy高可用负载均衡场景,主要关注frontend和backend部分的配置。

3.2 基础配置示例

以下是针对ObProxy 4.2的HAProxy基础配置示例:

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    maxconn 40000
    tune.ssl.default-dh-param 2048

defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend obproxy-frontend
    bind *:2883
    default_backend obproxy-backend

backend obproxy-backend
    balance leastconn
    option tcp-check
    tcp-check connect port 2883
    tcp-check send "show status"
    tcp-check expect string "OK"
    server obproxy1 192.168.1.10:2883 check inter 2000 rise 2 fall 3
    server obproxy2 192.168.1.11:2883 check inter 2000 rise 2 fall 3
    server obproxy3 192.168.1.12:2883 check inter 2000 rise 2 fall 3

3.3 关键配置参数详解

3.3.1 global部分关键参数
  • log:配置日志输出,便于监控和故障排查
  • chroot:设置chroot环境,增强安全性
  • stats socket:配置管理接口,便于监控和动态调整
  • maxconn:设置最大并发连接数
  • daemon:以守护进程方式运行
3.3.2 defaults部分关键参数
  • mode tcp:使用TCP模式,适合数据库代理
  • option tcplog:启用TCP日志记录
  • option dontlognull:不记录空日志
  • timeout connect:连接超时时间
  • timeout client:客户端超时时间
  • timeout server:服务器端超时时间
3.3.3 frontend部分关键参数
  • *bind :2883:绑定到2883端口,与ObProxy默认端口一致
  • default_backend obproxy-backend:指定默认后端服务器组
3.3.4 backend部分关键参数
  • balance leastconn:使用最小连接数算法进行负载均衡
  • option tcp-check:启用TCP健康检查
  • tcp-check connect port 2883:检查ObProxy服务端口
  • tcp-check send/show status/:发送特定命令检查服务状态
  • tcp-check expect string OK:期望收到"OK"响应
  • server obproxy1 192.168.1.10:2883:定义ObProxy服务器地址和端口
  • check inter 2000:健康检查间隔2秒
  • rise 2:连续2次成功则标记为可用
  • fall 3:连续3次失败则标记为不可用

3.4 高级配置选项

根据实际需求,可以考虑添加以下高级配置选项:

  1. 会话保持
    stick-table type ip size 10m expire 30m
    stick on src
  1. 连接限制
    maxconn 1000
    option redispatch
  1. 慢启动
    server obproxy1 192.168.1.10:2883 check inter 2000 rise 2 fall 3 slowstart 30s
  1. 权重配置
    server obproxy1 192.168.1.10:2883 weight 100 check inter 2000 rise 2 fall 3
    server obproxy2 192.168.1.11:2883 weight 80 check inter 2000 rise 2 fall 3
  1. HTTP监控界面
listen stats
    bind *:1080
    mode http
    stats enable
    stats hide-version
    stats refresh 30s
    stats show-node
    stats uri /haproxy?stats
    stats realm Haproxy\ Statistics
    stats auth admin:password

四、Keepalived配置详解

4.1 Keepalived配置结构概述

Keepalived配置文件主要分为以下几个部分:

  1. global_defs:全局定义,包含全局参数
  2. vrrp_instance:VRRP实例配置,定义虚拟路由器
  3. virtual_server:虚拟服务器配置(非必需)
  4. vrrp_script:自定义脚本配置

对于ObProxy高可用负载均衡场景,主要关注vrrp_instance和vrrp_script部分的配置。

4.2 基础配置示例

以下是Keepalived的基础配置示例:

global_defs {
    router_id OB_PROXY_HA
}

vrrp_script check_haproxy {
    script "pidof haproxy > /dev/null"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        192.168.1.200/24
    }
    track_script {
        check_haproxy
    }
    notify_master "/etc/keepalived/notify_master.sh"
    notify_backup "/etc/keepalived/notify_backup.sh"
    notify_fault "/etc/keepalived/notify_fault.sh"
}

4.3 关键配置参数详解

4.3.1 global_defs部分关键参数
  • router_id:唯一标识,用于日志记录
4.3.2 vrrp_script部分关键参数
  • script:执行的脚本命令,检查HAProxy进程是否存在
  • interval:检查间隔时间
  • weight:权重,影响优先级
4.3.3 vrrp_instance部分关键参数
  • state MASTER/BACKUP:主节点或备用节点状态
  • interface eth0:绑定的网络接口
  • virtual_router_id 51:虚拟路由器ID,必须一致
  • priority 100:优先级,数值越大优先级越高
  • advert_int 1:通告间隔时间(秒)
  • authentication:认证配置
  • virtual_ipaddress:虚拟IP地址
  • track_script:关联健康检查脚本
  • notify_master/notify_backup/notify_fault:状态变化时执行的脚本

4.4 健康检查脚本

为了确保HAProxy和ObProxy的健康状态,需要编写自定义健康检查脚本。以下是几个关键脚本示例:

4.4.1 检查HAProxy状态脚本
#!/bin/bash
# 检查HAProxy进程是否存在
if ! pgrep haproxy > /dev/null; then
    exit 1
fi

# 检查HAProxy是否能正常处理请求
echo -e "show info\nquit" | socat stdio /var/lib/haproxy/stats 2>/dev/null | grep -q "status: UP"

if [ $? -ne 0 ]; then
    exit 1
fi

exit 0
4.4.2 检查ObProxy状态脚本
#!/bin/bash
# 检查ObProxy是否能正常响应
echo -e "show status\nquit" | socat stdio /var/lib/haproxy/stats 2>/dev/null | grep -q "OK"

if [ $? -ne 0 ]; then
    exit 1
fi

exit 0
4.4.3 通知脚本示例
#!/bin/bash
# 主节点状态通知脚本
echo "`date`: Entering master state" >> /var/log/keepalived_notify.log
#!/bin/bash
# 备用节点状态通知脚本
echo "`date`: Entering backup state" >> /var/log/keepalived_notify.log
#!/bin/bash
# 故障状态通知脚本
echo "`date`: Fault detected" >> /var/log/keepalived_notify.log

五、高可用负载均衡关键机制

5.1 故障检测机制

在Keepalived+HAProxy+ObProxy架构中,存在多层故障检测机制:

5.1.1 HAProxy对ObProxy的健康检查

HAProxy通过TCP健康检查机制定期检测ObProxy节点的状态:

  1. TCP连接检查:尝试连接ObProxy的服务端口
  2. 命令响应检查:发送特定命令(如"show status")并验证响应
  3. 心跳间隔:每2秒检查一次(可配置)
  4. 健康阈值:连续3次失败标记为不可用,连续2次成功标记为可用

这种机制确保HAProxy能够及时发现ObProxy节点的异常,并将请求转发到健康的节点上。

5.1.2 Keepalived对HAProxy的健康检查

Keepalived通过自定义脚本定期检查HAProxy的状态:

  1. 进程检查:确保HAProxy进程正在运行
  2. 服务检查:验证HAProxy是否能正常处理请求
  3. 状态变化通知:当HAProxy状态变化时触发相应操作

这种机制确保即使HAProxy本身出现故障,系统也能快速切换到备用节点。

5.1.3 综合检测策略

为了提高系统的可靠性,可以实施多级检测策略:

  1. 初级检测:HAProxy检测ObProxy的服务状态
  2. 次级检测:Keepalived检测HAProxy的运行状态
  3. 高级检测:独立监控系统定期检查整体架构的健康状态

5.2 故障切换机制

5.2.1 主备切换流程

当主节点出现故障时,系统将按以下流程进行切换:

  1. 故障检测:HAProxy检测到ObProxy节点故障,将其标记为不可用
  2. 健康检查:Keepalived检测到HAProxy异常,降低其优先级
  3. VRRP协商:备用节点检测到主节点优先级降低,发起VRRP协商
  4. VIP漂移:虚拟IP地址从故障节点漂移到备用节点
  5. 服务恢复:备用节点接管服务,客户端请求被转发到新的主节点

整个过程通常在秒级内完成,确保服务的连续性。

5.2.2 自动恢复机制

当故障节点恢复正常后,系统将按以下流程自动恢复:

  1. 健康检测:HAProxy检测到恢复的ObProxy节点响应正常
  2. 状态更新:HAProxy将恢复的节点重新加入可用节点列表
  3. 优先级调整:Keepalived检测到HAProxy恢复正常,恢复其优先级
  4. VRRP协商:原主节点恢复后,可能重新协商成为主节点(取决于配置)
  5. VIP回归:如果配置了抢占模式,虚拟IP可能漂移回原主节点
5.2.3 无状态切换保障

为确保故障切换过程中不丢失连接和请求,系统设计遵循以下原则:

  1. 无状态设计:HAProxy和ObProxy均采用无状态设计,不保存会话状态
  2. 连接池管理:客户端应使用连接池,并设置合理的连接超时时间
  3. 重试机制:客户端应具备自动重试机制,处理短暂的连接中断
  4. 优雅停机:在计划内停机时,应使用优雅停机机制,确保当前请求处理完成

5.3 负载均衡策略

HAProxy提供多种负载均衡算法,适用于不同的场景:

5.3.1 常用负载均衡算法
  1. 轮询(Round Robin):按顺序分配请求,适用于服务器性能相近的场景
  2. 最小连接数(Least Connections):将请求分配给当前连接数最少的服务器
  3. 源地址哈希(Source IP Hash):根据客户端IP地址进行哈希分配,实现会话保持
  4. URI哈希(URI Hash):根据请求的URI进行哈希分配,适用于缓存场景
  5. 加权轮询(Weighted Round Robin):根据服务器权重分配请求,适用于服务器性能不同的场景

对于ObProxy 4.2场景,最小连接数算法通常是最佳选择,因为它能根据实际负载动态分配请求。

5.3.2 动态负载均衡调整

HAProxy支持通过管理接口动态调整负载均衡策略:

  1. 动态权重调整:可以根据服务器的实时性能调整权重
  2. 服务器上下线:可以动态将服务器标记为维护状态或恢复服务
  3. 连接限制调整:可以动态调整服务器的最大连接数

这些功能可以通过HAProxy的管理接口或第三方监控系统实现。

5.3.3 会话保持策略

对于需要保持会话的场景,可以采用以下策略:

  1. 基于源IP的会话保持:将同一客户端的请求始终路由到同一服务器
  2. 基于Cookie的会话保持:在HTTP环境下,可以使用Cookie实现会话保持
  3. 基于特定参数的会话保持:根据请求中的特定参数进行哈希分配

对于数据库访问场景,会话保持通常不是必需的,因为数据库连接本身是无状态的。

六、性能优化建议

6.1 HAProxy性能调优

6.1.1 连接相关参数优化
  1. 调整最大连接数:根据服务器性能和预期负载调整maxconn参数
  2. 优化超时时间
    • timeout connect: 5000ms(默认)
    • timeout client: 50000ms(默认)
    • timeout server: 50000ms(默认)
  3. 启用TCP快速打开:对于支持的客户端,可以启用TCP快速打开
6.1.2 日志优化
  1. 合理配置日志级别:生产环境建议使用notice级别
  2. 使用异步日志:减少日志写入对性能的影响
  3. 远程日志服务器:将日志发送到专用日志服务器,减轻主服务器负担
6.1.3 算法优化
  1. 选择合适的负载均衡算法:对于数据库场景,leastconn通常优于roundrobin
  2. 调整连接队列长度:根据服务器处理能力调整backlog参数
  3. 启用TCP缓冲:适当调整tcp-buffer-size参数,优化数据传输效率

6.2 Keepalived性能调优

6.2.1 VRRP参数优化
  1. 调整通告间隔:默认1秒,可以根据网络环境适当调整
  2. 优化优先级:根据服务器性能设置合理的优先级
  3. 启用抢占模式:根据需求决定是否启用抢占模式
6.2.2 健康检查优化
  1. 减少检查开销:优化健康检查脚本,减少资源消耗
  2. 调整检查频率:根据系统稳定性调整检查频率
  3. 异步检查:使用异步检查方式,减少对主线程的影响

6.3 ObProxy性能优化

6.3.1 ObProxy配置优化
  1. 调整连接池大小:根据负载调整ObProxy的连接池大小
  2. 优化线程池配置:根据CPU核心数调整线程池大小
  3. 启用查询缓存:对于重复执行的查询,启用查询缓存
6.3.2 数据库连接优化
  1. 合理设置连接超时:根据业务需求设置合理的连接超时时间
  2. 优化SQL执行计划:确保数据库查询使用最优执行计划
  3. 使用批量操作:尽可能使用批量操作,减少数据库交互次数

6.4 系统资源优化

6.4.1 CPU资源优化
  1. 绑定CPU核心:将HAProxy和ObProxy进程绑定到特定CPU核心
  2. 调整优先级:提高关键进程的优先级
  3. 避免上下文切换:减少不必要的后台进程,降低CPU竞争
6.4.2 内存资源优化
  1. 调整缓存大小:根据可用内存调整缓存大小
  2. 避免内存碎片:定期重启服务,减少内存碎片
  3. 使用大页内存:对于内存使用量大的应用,可以考虑使用大页内存
6.4.3 网络资源优化
  1. 调整MTU值:根据网络环境调整MTU值,优化网络传输效率
  2. 启用TCP快速重传:优化TCP重传策略
  3. 调整TCP窗口大小:根据网络带宽和延迟调整TCP窗口大小

6.5 监控与调优策略

6.5.1 监控指标设置

建议监控以下关键指标:

  1. HAProxy指标

    • 连接数
    • 请求处理速率
    • 错误率
    • 服务器状态
  2. Keepalived指标

    • VRRP状态
    • 优先级变化
    • 故障切换次数
  3. ObProxy指标

    • 连接池使用情况
    • 请求处理时间
    • 错误率
    • SQL执行统计
6.5.2 性能调优流程
  1. 基准测试:在系统部署初期进行基准测试,建立性能基线
  2. 压力测试:在模拟生产负载下测试系统性能
  3. 监控分析:持续监控系统性能指标
  4. 参数调整:根据监控数据调整系统参数
  5. 效果验证:验证调整后的效果,必要时进行回滚

七、部署与验证流程

7.1 部署前准备

在正式部署前,需要完成以下准备工作:

  1. 服务器准备:按照第2章的要求配置服务器环境
  2. 软件安装:安装HAProxy、Keepalived和ObProxy
  3. 配置文件准备:准备好HAProxy和Keepalived的配置文件
  4. 脚本准备:准备好健康检查和通知脚本
  5. 权限设置:确保所有脚本和配置文件具有正确的权限

7.2 部署流程

建议按照以下流程进行部署:

  1. 部署ObProxy集群:确保ObProxy集群正常运行并连接到OceanBase数据库
  2. 配置HAProxy:在所有HAProxy节点上部署HAProxy配置
  3. 配置Keepalived:在所有HAProxy节点上部署Keepalived配置
  4. 配置监控系统:部署监控系统,监控HAProxy、Keepalived和ObProxy的状态
  5. 测试故障切换:进行故障切换测试,确保系统能正常工作

7.3 验证方法

7.3.1 基础功能验证
  1. 连接测试:使用数据库客户端连接虚拟IP,验证能否正常连接
  2. 负载均衡验证:发送多个请求,验证请求是否均匀分布到不同的ObProxy节点
  3. 健康检查验证:检查HAProxy管理界面,确认所有ObProxy节点状态正常
7.3.2 高可用验证
  1. 模拟ObProxy故障:停止一个ObProxy实例,验证HAProxy是否能自动将其标记为不可用
  2. 模拟HAProxy故障:停止主节点的HAProxy服务,验证VIP是否漂移到备用节点
  3. 模拟节点重启:重启一个HAProxy节点,验证服务是否能快速恢复
  4. 验证自动恢复:恢复故障组件,验证系统是否能自动恢复正常状态
7.3.3 性能验证
  1. 压力测试:使用数据库压力测试工具测试系统性能
  2. 性能指标监控:监控关键性能指标,确保系统在高负载下稳定运行
  3. 故障恢复性能:测试故障恢复过程中的性能影响

八、运维管理建议

8.1 日常维护

  1. 定期检查:定期检查系统状态,包括HAProxy、Keepalived和ObProxy的运行状态
  2. 日志分析:定期分析系统日志,及时发现潜在问题
  3. 配置备份:定期备份HAProxy和Keepalived的配置文件
  4. 软件更新:及时更新系统软件和安全补丁
  5. 资源监控:监控系统资源使用情况,确保资源充足

8.2 故障处理流程

  1. 故障识别:通过监控系统及时发现故障
  2. 故障定位:快速定位故障点,区分是HAProxy、Keepalived还是ObProxy的问题
  3. 故障隔离:必要时手动隔离故障组件
  4. 故障恢复:根据故障类型采取相应的恢复措施
  5. 故障分析:故障恢复后进行故障分析,制定预防措施

8.3 监控与报警策略

  1. 关键指标监控:监控HAProxy、Keepalived和ObProxy的关键指标
  2. 多级报警:设置多级报警阈值,根据严重程度采取不同的通知方式
  3. 报警收敛:避免同一故障产生大量重复报警
  4. 故障自愈:对于常见故障,实现自动恢复机制
  5. 报警响应:建立明确的报警响应流程和责任机制

8.4 应急预案

  1. 紧急恢复流程:制定详细的紧急恢复流程,确保在紧急情况下能快速恢复服务
  2. 备用设备准备:准备必要的备用设备,以便在硬件故障时快速替换
  3. 数据备份策略:确保关键配置和数据有可靠的备份
  4. 应急预案演练:定期进行应急预案演练,确保团队熟悉应急流程
  5. 与厂商支持协调:与OceanBase和HAProxy厂商建立支持渠道,在必要时获取专业支持

九、总结与扩展方向

9.1 方案优势总结

本方案通过Keepalived和HAProxy的结合,为ObProxy 4.2提供了可靠的高可用负载均衡解决方案:

  1. 高可用性:通过VRRP协议实现虚拟IP漂移,确保单点故障不影响服务
  2. 负载均衡:多种负载均衡算法可选,适应不同的负载场景
  3. 故障检测:多层级的故障检测机制,确保及时发现和处理异常
  4. 性能优化:通过参数调优和策略优化,提升系统整体性能
  5. 可扩展性:架构设计灵活,易于扩展和调整

9.2 扩展方向

基于本方案,可以考虑以下扩展方向:

  1. 多数据中心容灾:扩展方案,支持跨数据中心的高可用性
  2. 智能负载均衡:结合AI技术,实现更智能的负载均衡策略
  3. 自动化运维:开发自动化运维工具,简化系统管理
  4. 安全增强:增加安全层,保护数据库访问安全
  5. 性能优化:持续优化系统性能,满足不断增长的业务需求

通过本方案的实施,可以为OceanBase数据库ObProxy 4.2构建一个稳定、高效、可靠的高可用负载均衡平台,为企业关键业务提供坚实的基础支撑。

附录:配置文件完整示例

HAProxy完整配置示例

global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    maxconn 40000
    tune.ssl.default-dh-param 2048

defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend obproxy-frontend
    bind *:2883
    default_backend obproxy-backend

backend obproxy-backend
    balance leastconn
    option tcp-check
    tcp-check connect port 2883
    tcp-check send "show status"
    tcp-check expect string "OK"
    server obproxy1 192.168.1.10:2883 check inter 2000 rise 2 fall 3
    server obproxy2 192.168.1.11:2883 check inter 2000 rise 2 fall 3
    server obproxy3 192.168.1.12:2883 check inter 2000 rise 2 fall 3

listen stats
    bind *:1080
    mode http
    stats enable
    stats hide-version
    stats refresh 30s
    stats uri /haproxy?stats
    stats realm Haproxy\ Statistics
    stats auth admin:password

Keepalived完整配置示例

global_defs {
    router_id OB_PROXY_HA
}

vrrp_script check_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    interval 2
    weight 2
}

vrrp_script check_obproxy {
    script "/etc/keepalived/check_obproxy.sh"
    interval 5
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        192.168.1.200/24
    }
    track_script {
        check_haproxy
        check_obproxy
    }
    notify_master "/etc/keepalived/notify_master.sh"
    notify_backup "/etc/keepalived/notify_backup.sh"
    notify_fault "/etc/keepalived/notify_fault.sh"
}

内容由 AI 生成

更多推荐