• Haproxy+PXC实现负载均衡


    软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第 三方应用的软负载实现。
    LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
    HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、
    内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,
    并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。

    HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于
    那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的
    运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

    环境情况:
    OS: centos release 6.6
    pxc三个节点: 192.168.79.3:3306、192.168.79.4:3306、192.168.79.5:3306
    HAPproxy节点:192.168.79.128 (已搭建完成)
    HAproxy版本: 1.5.2
    PXC集群安装完成后,需要一个负载均衡器来分发连接,我们这里采用haproxy,这也是percona推荐的方式


    一、安装haproxy(仅安装在haproxy的节点上,如果安装在pxcmysql节点注意端口号)
    wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.2.tar.gz
    #tar -zxvf haproxy-1.5.2.tar.gz
    #cd haproxy-1.5.2
    #make TARGET=linux2628
    #make install
    ps:默认安装到/usr/local/sbin/下面,可以用PREFIX指定软件安装路径

    也可以直接使用yum安装:yum install –y haproxy


    二、在haproxy服务器上安装配置HAproxy
    配置文件存/etc/haproxy/haproxy.cfg 内容如下:
    #mkdir /etc/haproxy
    # cp examples/haproxy.cfg /etc/haproxy/
    # cat /etc/haproxy/haproxy.cfg

    global
      log 127.0.0.1 local0
      log 127.0.0.1 local1 notice
      #log loghost local0 info
      maxconn 4096
      uid 99
      gid 99
      daemon
      #debug
      #quiet

    defaults
      log global
      mode http
      option tcplog
      option dontlognull
      retries 3
      option redispatch
      maxconn 2000
      timeout connect 5000
      timeout client 50000
      timeout server 50000
    frontend pxc-front
      bind *:3308
      mode tcp
    default_backend pxc-back


    frontend statas-front
      bind *:8088
      mode http
    default_backend stats-back

    backend pxc-back
    mode tcp
    balance leastconn
    option httpchk
    server taotao 192.168.79.3:3306 check port 9200 inter 12000 rise 3 fall 3
    server candidate 192.168.79.4:3306 check port 9200 inter 12000 rise 3 fall 3
    server slave 192.168.79.5:3306 check port 9200 inter 12000 rise 3 fall 3

    backend stats-back
    mode http
    balance roundrobin
    stats uri /haproxy/stats
    stats auth admin:admin

    配置haproxy的日志:
    安装完HAProxy后,默认情况下,HAProxy为了节省读写IO所消耗的性能,默认情况下没有日志输出,一下是开启日志的过程
    # rpm -qa |grep rsyslog
    rsyslog-5.8.10-8.el6.x86_64
    # rpm -ql rsyslog |grep conf$
    # vim /etc/rsyslog.conf
    ...........
    $ModLoad imudp
    $UDPServerRun 514 //rsyslog 默认情况下,需要在514端口监听UDP,所以可以把这两行注释掉
    .........
    local0.* /var/log/haproxy.log //和haproxy的配置文件中定义的log level一致

    # service rsyslog restart
    Shutting down system logger: [ OK ]
    Starting system logger: [ OK ]

    # service rsyslog status
    rsyslogd (pid 11437) is running...


    三、在每个PXC 每个mysql节点安装mysql健康状态检查脚本:
    1)脚本拷贝
    # cp /usr/local/mysql/bin/clustercheck /usr/bin/
    # cp /usr/local/mysql/xinetd.d/mysqlchk /etc/xinetd.d/

    2)创建mysql用户,用于mysql健康检查(在任一节点即可):
    > grant process on *.* to 'clustercheckuser'@'localhost' identified by 'clustercheckpassword!';
    > flush privileges;
    ps:如不使用clustercheck中默认用户名和密码,将需要修改clustercheck脚本,MYSQL_USERNAME和MYSQL_PASSWORD值

    3)更改/etc/services添加mysqlchk的服务端口号:
    # echo 'mysqlchk 9200/tcp # mysqlchk' >> /etc/services

    4)安装xinetd服务
    # yum -y install xinetd
    # /etc/init.d/xinetd restart
    Stopping xinetd: [FAILED]
    Starting xinetd: [ OK ]
    # chkconfig --level 2345 xinetd on
    # chkconfig --list |grep xinetd
    xinetd 0:off 1:off 2:on 3:on 4:on 5:on 6:off


    测试检测脚本:
    # clustercheck
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    Percona XtraDB Cluster Node is synced.

    # curl -I 192.168.79.5:9200
    HTTP/1.1 503 Service Unavailable
    Content-Type: text/plain
    Connection: close
    Content-Length: 57
    # cp /usr/local/mysql/bin/mysql /usr/bin/
    # curl -I 192.168.79.5:9200
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    ps:要保证状态为200,否则检测不通过,可能是mysql服务不正常,或者环境不对致使haproxy无法使用mysql

    在mysql集群的其他节点执行上面操作,保证各个节点返回状态为200,如下:
    # curl -I 192.168.79.4:9200
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    # curl -I 192.168.79.5:9200
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    四、HAproxy启动和关闭
    在haproxy服务器上启动haproxy服务:
    # /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    关闭:
    #pkill haproxy

    # /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    # ps -ef |grep haproxy
    nobody 5751 1 0 21:18 ? 00:00:00 /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    root 5754 2458 0 21:19 pts/0 00:00:00 grep haproxy
    # netstat -nlap |grep haproxy
    tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 5751/haproxy
    tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 5751/haproxy
    tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 5751/haproxy
    udp 0 0 0.0.0.0:45891 0.0.0.0:* 5751/haproxy


    五、haproxy测试
    在mysql pxc创建测试账号:
    #grant all privileges on *.* to 'taotao'@’%’ identified by ‘taotao’;

    #for i in `seq 1 1000`; do mysql -h 192.168.79.128 -P3307 -utaotao -ptaotao -e "select @@hostname;"; done
    #for i in `seq 1 1000`; do mysql -h 192.168.79.128 -P3308 -utaotao -ptaotao -e "select @@hostname;"; done

    注:其实可以只允许haproxy侧的IP访问即可,因用户通过vip访问mysql集群,haproxy根据调度策略使用自己的ip创建与后端mysql服务器的连接。

    查看Haproxy状态:
    http://192.168.199.75:8088/haproxy/stats
    输入用户密码:stats auth admin admin

    补充内容:
    1、haproxy可以安装在mysql集群节点,但需要将mysql节点监听在非3306端口,以让haproxy监控在3306端口;
    2、为了保证haproxy的高可用,可以结合keepalived;
    3、可以使用haproxy做mysql只读库的负载均衡;

  • 相关阅读:
    Android ExpandableListView的下拉刷新实现
    Android 使用shape来画线
    三种常见的子查询(三十一)
    数据的准备(三十)
    LIMIT语句解析及本章简单回顾(二十九)
    WHERE、ORDER BY、GROUP BY、HAVING语句解析(二十八)
    查询表达式解析(二十七)
    单表的更新UPDATE和删除记录DELETE(二十六)
    插入记录INSERT(二十五)
    修改数据表——修改列定义和更名数据表(二十四)
  • 原文地址:https://www.cnblogs.com/taotaohappy/p/4676860.html
Copyright © 2020-2023  润新知