首页  >  文章  >  运维  >  如何使用haproxy负载均衡mysql

如何使用haproxy负载均衡mysql

坏嘻嘻
坏嘻嘻原创
2018-09-15 15:54:592959浏览

本篇文章给大家带来的内容是关于如何使用haproxy负载均衡mysql ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

  系统是一主多从的模式,读写分离是在应用程序的层面实现的,insert、delete、update、alter走主库,select给从库。然后给从库做了load balancing,用keepalived组合haproxy。

20180908230146645.png

  话不多说,直接开干。

  系统环境 :centos7

  话说回来,不知何时起haproxy的社区官网被墙了...唉唉唉,可以通过这个地址下载最新稳定版本的haproxy 。

# wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.gz

建议朋友们在安装之前读一读自述文件

# cat /usr/src/haproxy-1.8.9/README

安装haproxy,这里前缀关键字PREFIX指定安装目录,用的是大写字母。一般常规源码安装,是在configure指令后加选项"--prefix",要加以区分

# tar -zxf haproxy-1.8.9.tar.gz -C /usr/src/
# cd /usr/src/haproxy-1.8.9/
# make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy
# make install  PREFIX=/usr/local/haproxy

 创建haproxy程序用户以及配置文件目录

# useradd -M -s /sbin/nologin haproxy
# mkdir /etc/haproxy

 haproxy配置文件在这个版本的包里没有提供样例,需要手动建立的

# touch /etc/haproxy/haproxy.cfg
# more /etc/haproxy/haproxy.cfg
#global    log  /dev/log   local0 info    log  /dev/log 
  local1 notice    pidfile   
    /var/run/haproxy.pid    maxconn     400000  
      user        haproxy    group    
         haproxy    nbproc      1    daemon
#defaults    mode   http    log   global 
   option http-server-close    option            
         redispatch    retries          
      0    timeout http-request  
        10s    timeout queue     
              1m    timeout connect     
                  10s    timeout client      
                      1m    timeout server     
                           1m    timeout http-keep-alive  300s  
             timeout check           10s    maxconn    
                   100000
listen mysql_select  bind *:3306  mode tcp  balance roundrobin 
 #balance source  #option mysql-check user haproxy  timeout server  15s  
 timeout connect 15s  server mysql162 192.168.5.162:3306 check port 3306 inter 5000 fall 5 
  server mysql163 192.168.5.163:3306 check port 3306 inter 5000 fall 5  
  server mysql164 192.168.5.164:3306 check port 3306 inter 5000 fall 5
listen stats        mode http        bind 0.0.0.0:7979        stats enable            stats hide-version        stats uri /haproxy?hello        stats realm Haproxy\ Statistics        stats auth qkc:pwd@123        stats admin if TRUE


  haproxy的日志默认是输出到系统的syslog中,查看起来不是非常方便,为了更好地管理haproxy

日志,我们在生产线一般都是独立定义出来,定义方法如下:

 (1)修改 haproxy.cfg 关于日志配置的选项,在global中加入如下配置,将info及notice日志分别记录到不同文件中。

log  /dev/log   local0 info
log  /dev/log   local1 notice

 (2)修改rsyslog配置

   为了便于管理,将haproxy相关的配置独立定义到 /etc/rsyslog.d/haproxy.conf 中。这部分配置将info和notice日志分别记录到 /var/log/haproxy181/{haproxy181-info.log,haproxy181-notice.log} 文件中,其中" & ~"表示当日志写入到日志文件后,rsyslog停止处理这个信息。这里配置的语法是rainerscript脚本语言写的。

# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
 then -/var/log/haproxy181/haproxy181-info.log& ~if 
 ($programname == 'haproxy' and $syslogseverity-text == 'notice') 
 then -/var/log/haproxy181/haproxy181-notice.log& ~

  检测haproxy.cfg配置文件语法是否正确

# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c

  没有问题的话,就去掉-c选项,启动haproxy

# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
[root@server181 haproxy]# ss -antulp | grep haproxy
tcp    LISTEN   0  128   *:3306     *:*    users:(("haproxy",pid=3315,fd=4))
tcp    LISTEN   0  128    *:7979   *:*    users:(("haproxy",pid=3315,fd=6))

  配置haproxy开机自启动

# chmod +x /etc/rc.d/rc.local
# echo '/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg' >> /etc/rc.d/rc.local

  连接haproxy进行测试

# for i in $(seq 1 10); do mysql -utest -p123456 -h192.168.5.181 -e 'select @@server_id;'; done | egrep '[0-9]'
3306164
3306162
3306163
3306164
3306162
3306163
3306164
3306162
3306163
3306164

然后再拿一台服务器同样做haroxy,整合keepalived。远程系统用mysql客户端连接负载均衡vip进行登录,再逐个进行health check、failover等项目测试。

总结:

  haproxy在中等规模负载之上有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着haproxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上haproxy的7层性能可轻易超过硬件负载均衡设备。

  haproxy支持给tcp做代理的特性使得其还可以为mysql读库做负载均衡,并且能够发挥相当不错的性能。

以上是如何使用haproxy负载均衡mysql的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn