IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    haproxy - MySQl 的负载均衡

    zheng-ji发表于 2015-02-03 23:17:00
    love 0

    服务器上每个PHP进程占用一个数据库链接,当有 n 台服务器, 每台服务器用用100 * m 个PHP 进程的时候,数据库的压力是有点小大。

    为了解决这个问题, 可以有的选择是:

    • 业内炒的比较火的有,奇虎Atlas, 淘宝前架构师写的OneProxy, 官方的MySQL-Proxy;
    • 从连接层解决负载均衡的压力,Haproxy 所擅长的事情

    对于第一个选择,同事做过调研,使用起来不太放心。官方库就无人维护, 于是,最后选择了 Haproxy 来承担数据库的前端代理.链接数下降明显。


    一些关键的配置

    参考连接:

    以下是配置内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    listen mysql-cluster
        bind 127.0.0.1:3306  # 连接本地3306 到后端的DB
        mode tcp
        option mysql-check user haproxy_check # haproxy_check 是该haproxy用户
        balance roundrobin
        server mysql-1 10.0.0.1:3306 check # 后端DB
        server mysql-2 10.0.0.2:3306 check # 后端DB
    
    listen 0.0.0.0:8080 # 监控页面
        mode http
        stats enable
        stats uri /
        stats realm Strictly\ Private
        stats auth A_Username:YourPassword
        stats auth Another_User:passwd

    值得注意的是,我们需要在DB 里面添加用户 haproxy_check,使得它有权限访问这个数据库。一开始我习惯用

    1
    2
    3
    
    假设我的内网ip是 192.168.1.5
    create user 'haproxy_check'@'192.168.1.5' identified by 'xxx';
    flush privileges;

    事实上这样连接 haproxy 会报:

    1
    2
    
    mysql -h127.0.0.1 -uusername -p
    lost connection to mysql server at 'reading initial communication packet'

    后来老实按照 digitalocean 的文章修改成

    1
    2
    
    INSERT INTO mysql.user (Host,User) values ('192.168.1.5','haproxy_check');
    flush privileges;

    测试就通过了.好奇怪,在我的理解中很不应该, 明天继续看看为什么会这么奇怪。



沪ICP备19023445号-2号
友情链接