设为首页 收藏本站
查看: 2573|回复: 0

[经验分享] Haproxy+PXC实现负载均衡

[复制链接]

尚未签到

发表于 2015-9-4 13:29:15 | 显示全部楼层 |阅读模式
  软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第 三方应用的软负载实现。
LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。
HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、
内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,
并且能通过允许、拒绝、交换、增加、修改或者删除请求(request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。
DSC0000.png
   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
   DSC0001.png
  补充内容:
1、haproxy可以安装在mysql集群节点,但需要将mysql节点监听在非3306端口,以让haproxy监控在3306端口;
2、为了保证haproxy的高可用,可以结合keepalived;
3、可以使用haproxy做mysql只读库的负载均衡;
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109419-1-1.html 上篇帖子: haproxy之配置文件解析 下篇帖子: 七层负载均衡——HAProxy
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表