zoukankan      html  css  js  c++  java
  • haproxy实现mysql集群负载均衡

    有兴趣的同学可以移步笔者的个人博客 更多博客

    开始使用

    Ubuntu 下载安装

     apt-get install haproxy
    

    配置

    global
            log /dev/log    local0
            log /dev/log    local1 notice
            chroot /var/lib/haproxy
            user haproxy
            group haproxy
            daemon
    
    defaults
            log     global
            mode    tcp
            option  dontlognull
            contimeout 5000
            clitimeout 50000
            srvtimeout 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
    listen status
            mode http
            bind *:11199
            stats enable
            stats uri /admin
            stats auth admin:admin
            stats admin if TRUE
            stats realm Haproxystatistics
    frontend main
            bind 0.0.0.0:3506
            default_backend mysql
    backend mysql
            balance leastconn
            server mysql1 114.215.29.139:3406 check
            server mysql2 114.215.29.139:3407 check 
    

    linux启动

     haproxy -f /etc/haproxy/haproxy.cfg
    

    负载均衡算法

    1. roundrobin,表示简单的轮询,每个服务器根据权重轮流使用,在服务器的处理时间平均分配的情况下这是最流畅和公平的算法。该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。

    2. static-rr,表示根据权重,建议关注;每个服务器根据权重轮流使用,类似roundrobin,但它是静态的,意味着运行时修改权限是无效的。另外,它对服务器的数量没有限制。

    3. leastconn,表示最少连接者先处理,建议关注;leastconn建议用于长会话服务,例如LDAP、SQL、TSE等,而不适合短会话协议。如HTTP.该算法是动态的,对于实例启动慢的服务器权重会在运行中调整。

    4. source,表示根据请求源IP,建议关注;对请求源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个客户端IP地址总是访问同一个服务器。如果哈希的结果随可用服务器数量而变化,那么客户端会定向到不同的服务器;该算法一般用于不能插入cookie的Tcp模式。它还可以用于广域网上为拒绝使用会话cookie的客户端提供最有效的粘连;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

    5. uri,表示根据请求的URI;表示根据请求的URI左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个URI地址总是访问同一个服务器。一般用于代理缓存和反病毒代理,以最大限度的提高缓存的命中率。该算法只能用于HTTP后端;该算法一般用于后端是缓存服务器;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

    6. url_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name在HTTP GET请求的查询串中查找中指定的URL参数,基本上可以锁定使用特制的URL到特定的负载均衡器节点的要求;该算法一般用于将同一个用户的信息发送到同一个后端服务器;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

    7. hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;在每个HTTP请求中查找HTTP头,HTTP头将被看作在每个HTTP请求,并针对特定的节点;如果缺少头或者头没有任何值,则用roundrobin代替;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

    8. rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。为每个进来的TCP请求查询并哈希RDP cookie;该机制用于退化的持久模式,可以使同一个用户或者同一个会话ID总是发送给同一台服务器。如果没有cookie,则使用roundrobin算法代替;该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据“hash-type”的变化做调整。

    acl规则

    ACL策略定义

    1. 如果请求的域名满足正则表达式返回true -i是忽略大小写
      acl denali_policy hdr_reg(host) -i ^(www.inbank.com|image.inbank.com)$

    2. 如果请求域名满足www.inbank.com 返回 true -i是忽略大小写
      acl tm_policy hdr_dom(host) -i www.inbank.com

    3. 在请求url中包含sip_apiname=,则此控制策略返回true,否则为false
      acl invalid_req url_sub -i sip_apiname=#定义一个名为invalid_req的策略

    4. 在请求url中存在timetask作为部分地址路径,则此控制策略返回true,否则返回false
      acl timetask_req url_dir -i timetask

    5. 当请求的header中Content-length等于0时返回 true
      acl missing_cl hdr_cnt(Content-length) eq 0

    acl策略匹配相应

    1. 当请求中header中Content-length等于0 阻止请求返回403
      block if missing_cl

    2. block表示阻止请求,返回403错误,当前表示如果不满足策略invalid_req,或者满足策略timetask_req,则阻止请求。
      block if !invalid_req || timetask_req

    3. 当满足denali_policy的策略时使用denali_server的backend
      use_backend denali_server if denali_policy

    4. 当满足tm_policy的策略时使用tm_server的backend
      use_backend tm_server if tm_policy

    5. reqisetbe关键字定义,根据定义的关键字选择backend
      reqisetbe ^Host: img dynamic
      reqisetbe [ ] /(img|css)/ dynamic
      reqisetbe [ ]
      /admin/stats stats

    6. 以上都不满足的时候使用默认mms_server的backend
      default_backend mms

    连接池失效问题
    timeout client 300m 这个参数配置程序与haproxy的链接超时时间
    timeout server 300m 将这两个参数设置大

  • 相关阅读:
    tomcat https 启用8443加证书
    深刻理解Python中的元类metaclass(转)
    为什么数据科学家们选择了Python语言?
    谷歌如何管理世界上最聪明的工程师(转)
    前百度首席科学家张栋:36岁以前做到这8点再谈梦想(转)
    MySQL索引原理及慢查询优化(转)
    地理空间距离计算优化(转)
    Innodb中的事务隔离级别和锁的关系(转)
    关于大型网站技术演进的思考(转)
    应用引擎BAE3.0(转)
  • 原文地址:https://www.cnblogs.com/anning1994/p/10028043.html
Copyright © 2011-2022 走看看