HAProxy+mysql实现负载均衡实践

 更新时间:2026年04月17日 10:04:23   作者:搬砖的梦先生  
文章简要介绍了HAProxy的安装配置方法,包括准备服务器环境、安装HAProxy、配置balance算法和mysql负载均衡等,最后给出了配置文件示例和查看状态的方法

1、准备

服务器作用
192.168.0.1HAProxy
192.168.0.2mysql
192.168.0.3mysql

HAProxy下载地址:https://www.haproxy.org

2、HAProxy简介

HAProxy 是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于 TCP 和 HTTP 的应用程序代理。

相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健康状态检测机制和负载均衡算法。

haproxy 是工作在四层之上的,这也就意味着它可以代理的服务要比 nginx 更广泛,性能比 nginx 也要更高一些。

相比较 lvs,可配置性又比较好,需要的机器没有 lvs 那么多。因此 haproxy 在一定需求下使用还是不错的。

使用haproxy 来对 mysql 的从节点进行负载均衡。

3、HAProxy 安装

tar -zxvf haproxy-2.7.3.tar.gz 
cd haproxy-2.7.3/
make TARGET=linux31
make install PREFIX=/usr/local/haproxy
cd /usr/local/haproxy/
mkdir conf
cd conf/
cp /home/haproxy/haproxy-2.7.3/examples/option-http_proxy.cfg haproxy.cfg

TARGET参数查看

[root@localhost conf]# uname -r
3.10.0-1160.el7.x86_64

haproxy.cfg 编辑

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        root
    group       root
    daemon
    stats socket /usr/local/haproxy/stats

defaults
    mode        tcp
    log        global
    option      tcplog
    option      dontlognull
    option      http-server-close
    option      redispatch
    retries                     3
    timeout     http-request    10s
    timeout     queue           1m
    timeout     connect                 10s
    timeout     client          1m
    timeout     server          1m
    timeout     http-keep-alive 10s
    timeout     check           10s
    maxconn                     3000


#客户端配置
listen  admin_status
        mode  http
        bind 0.0.0.0:8899
        option httplog
        log global
        stats enable
        stats refresh 10s
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri  /admin-status
        stats auth  admin:123456

/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg

使用地址查看haproxy状态:http://192.168.0.1:8899/admin-status

注意关闭防火墙,或者开放端口

4、balance算法

roundrobin

  • 支持权重的运行时调整,支持慢启动;
  • 每个后端中最多支持4095个server。

leastconn:

  • 推荐使用在具有较长会话的场景中,例如MySQL、LDAP等。
  • 连接数量最少的服务器接收连接。循环在相同负载的服务器组中执行,以确保使用所有服务器。
  • 建议在需要很长会话的地方使用此算法,如LDAP、SQL、TSE等……但是不太适合使用短会话(如HTTP)的协议。
  • 该算法是动态的,这意味着服务器的权重可以动态调整,例如,慢启动。

first:

  • 根据服务器在列表中的位置,自上而下进行调度;
  • 前面服务器的连接数达到上限,新请求才会分配给下一台服务。

source:

  • 源IP地址被散列并除以总数正在运行的服务器的权重,以指定哪个服务器将接收该请求。
  • 这确保了相同的客户端IP地址将总是到达相同的服务器,只要没有服务器宕机或宕机。

uri:

  • 对URI的左半部分做hash计算,并由服务器总权重相除以后派发至某挑出的服务器。

static-rr:

  • 静态算法:不支持权重的运行时调整及慢启动;后端主机数量无上限。
  • 每台服务器根据各自的权重依次使用。这个算法与roundrobin类似,只是它是静态的,这意味着动态地更改服务器的权重不会有任何影响。
  • 另一方面,它对服务器的数量没有设计限制,当一个服务器启动时,它总是在重新计算完整的映射后立即被重新引入集群。它运行时使用的CPU也稍微少一些(大约-1%)。

url_param

  • 对用户请求的uri的部分中的参数的值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;
  • 通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server

hdr

  • 对于每个http请求,此处由指定的http首部将会被取出做hash计算,并由服务器总权重相除以后派发至某挑出的服务器;
  • 没有有效值的会被轮询调度

rdp-cookie

  • 将被查找并对每个传入的TCP请求进行散列处理,该名称不区分大小写。
  • 这种机制作为降级的持久性模式非常有用,因为它可以始终将相同的用户(或相同的会话ID)发送到相同的服务器,如果没有找到cookie,则使用普通的roundrobin算法

5、mysql负载均衡配置

在haproxy.cfg 中添加以下配置

#配置haproxy可连接的地址,与绑定固定的域名
frontend        mysql
        bind    0.0.0.0:3306
        mode    tcp
        log     global
        default_backend mysql_server

backend         mysql_server
    balance leastconn
    server  mysql1 192.168.0.2:3306 check inter 5s rise 2 fall 3
    server  mysql2 192.168.0.3:3306 check inter 5s rise 2 fall 3
    #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用

重启haproxy,进入haproxy地址查看mysql状态

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Linux下mysql异地自动备份的方法

    Linux下mysql异地自动备份的方法

    这篇文章主要介绍了Linux下mysql异地自动备份的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • MySQL无法输入中文字符问题的解决办法

    MySQL无法输入中文字符问题的解决办法

    MySQL无法输入中文的问题大多是由于字符集不匹配所导致的,下面这篇文章主要给大家介绍了关于MySQL无法输入中文字符问题的解决办法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • MySQL日志系统之错误日志、慢查询日志、二进制日志详解

    MySQL日志系统之错误日志、慢查询日志、二进制日志详解

    MySQL日志系统是数据库管理的重要组成部分,它帮助数据库管理员监控数据库活动、优化查询、恢复数据以及诊断问题,这篇文章主要介绍了MySQL日志系统之错误日志、慢查询日志、二进制日志的相关资料,需要的朋友可以参考下
    2025-05-05
  • mysql 读写分离(基础篇)

    mysql 读写分离(基础篇)

    MySQL Proxy最强大的一项功能是实现“读写分离(Read/Write Splitting)”。
    2009-04-04
  • Mysql 5.7.14 使用常见问题汇总(推荐)

    Mysql 5.7.14 使用常见问题汇总(推荐)

    本文给大家分享Mysql 5.7.14 使用常见问题汇总的相关知识及结合自己的实践总结了相关原因,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-09-09
  • 详解监听MySQL的binlog日志工具分析:Canal

    详解监听MySQL的binlog日志工具分析:Canal

    Canal主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费,目前主要支持MySQL。接下来通过本文给大家介绍监听MySQL的binlog日志工具分析:Canal的相关知识,感兴趣的朋友一起看看吧
    2020-10-10
  • MySQL中的窗口函数使用及说明

    MySQL中的窗口函数使用及说明

    这篇文章主要介绍了MySQL中的窗口函数使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • mysql 修改用户密码图文介绍

    mysql 修改用户密码图文介绍

    有许多朋友经常需要修改mysql修改用户密码,今天提供图文并茂来解决此类问题,需要的朋友可以参考下
    2012-11-11
  • mybatis统计每条SQL的执行时间的方法示例

    mybatis统计每条SQL的执行时间的方法示例

    这篇文章主要介绍了mybatis统计每条SQL的执行时间的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • MySQL无法重启报错Warning: World-writable config file ‘/etc/my.cnf’ is ignored的解决方法

    MySQL无法重启报错Warning: World-writable config file ‘/etc/my.cnf’

    最近在维护公司服务器的时候,在关闭数据库的命令发现mysql关不了了,提示错误为Warning: World-writable config file '/etc/my.cnf' is ignored,通过查找网上的资料终于解决了,现在将解决的方法分享给大家,同样遇到这个问题的朋友们可以参考借鉴。
    2016-12-12

最新评论