haproxy负载均衡 xtracluster

标签: haproxy 负载均衡 xtracluster | 发表时间:2014-08-26 11:16 | 作者:xmarker
出处:http://xmarker.blog.163.com
上一篇为xtracluster的安装(http://xmarker.blog.163.com/blog/static/226484057201472610520306/),本篇将记录下使用haproxy在三个数据节点做负载均衡,haproxy可以安装在数据节点,也可以安装在别的节点,如果安装在数据节点,需要注意端口号不能和mysql的3306冲突


1.haproxy安装( 仅一个节点即可

下载地址:http://www.haproxy.org/,选择最新稳定版。这里我选择数据节点ddb169作为haproxy的负载均衡服务器

[[email protected] soft]# tar -zxvf haproxy-1.5.3.tar.gz

[[email protected] soft]# cd haproxy-1.5.3

[[email protected] haproxy-1.5.3]# make TARGET=linux2628

[[email protected] haproxy-1.5.3]# make install

[[email protected] haproxy-1.5.3]# mkdir /etc/haproxy;cp examples/haproxy.cfg /etc/haproxy/

[[email protected] haproxy-1.5.3]# groupadd -g 1001 haproxy

[[email protected] haproxy-1.5.3]# useradd -g haproxy haproxy


2.配置haproxy(仅一个节点即可)

配置haproxy.cnf文件

[[email protected] haproxy-1.5.3]# mkdir /etc/haproxy/

[[email protected] haproxy-1.5.3]# cat /etc/haproxy/haproxy.cfg

# this config needs haproxy-1.1.28 or haproxy-1.2.1


global

log 127.0.0.1 local0

log 127.0.0.1 local1 notice

#log loghost local0 info

maxconn 4096

chroot /usr/share/haproxy

uid haproxy

gid haproxy

daemon

#debug

#quiet

pidfile  /var/run/haproxy.pid


defaults

log global

mode http

#option httplog

option dontlognull

retries 3

redispatch

maxconn 2000

contimeout 5000

clitimeout 50000

srvtimeout 50000


frontend pxc-front  #描述允许客户端连接的监听套接字

        bind    *:3307

mode    tcp

default_backend pxc-back #当没有匹配use_backend时,默认的backend

frontend stats-front

  bind    *:8099

mode    http

default_backend stats-back

backend pxc-back #描述进来的连接将转发到哪些后端服务器

mode    tcp

balance leastconn    #负载均衡算法,使用最少连接算法,适合长连接应用

option httpchk #启用HTTP协议检查服务器监控状态,通过调用脚本检查节点的状态

server db169 192.168.1.169:3306 check port 9200 inter 12000 rise 3 fall 3 #fall连续3次检查错误后,将表明服务器死亡,默认为3;inter连续两次检查的间隔时间值,单位为毫秒默认为2s;rise连续3次检查成功,表明服务可用

server db172 192.168.1.172:3306 check port 9200 inter 12000 rise 3 fall 3

server db173 192.168.1.173:3306 check port 9200 inter 12000 rise 3 fall 3


backend stats-back  #开启haproxy的状态页面

mode http

balance roundrobin

stats   uri /haproxy/stats #定义访问统计信息的URI

stats   auth    admin:admin #设置查看统计信息的用户名和密码


3.安装检测脚本(每个节点都需要)

[[email protected]db169 haproxy-1.5.3]# cp /opt/pxc/bin/clustercheck /usr/bin/

[[email protected] haproxy-1.5.3]# cp /opt/pxc/xinetd.d/mysqlchk /etc/xinetd.d/

[[email protected] haproxy-1.5.3]# echo 'mysqlchk 9200/tcp # mysqlchk' >> /etc/services

安装xinetd服务

[[email protected] haproxy-1.5.3]# yum -y install xinetd

[[email protected] haproxy-1.5.3]# /etc/init.d/xinetd restart

停止 xinetd:                                              [失败]

正在启动 xinetd:                                          [确定]

[[email protected] haproxy-1.5.3]# chkconfig --level 2345 xinetd on


创建检查脚本的用户(在任一节点即可):

grant process on *.* to 'clustercheckuser'@'localhost' identified by 'clustercheckpassword!';

测试检测脚本

[[email protected] haproxy-1.5.3]# clustercheck

HTTP/1.1 200 OK

Content-Type: text/plain

Connection: close

Content-Length: 40


[[email protected] haproxy-1.5.3]# curl -I 127.0.0.1:9200

HTTP/1.1 200 OK

Content-Type: text/plain

Connection: close

Content-Length: 40


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

如果不为200,可以手工修改下检测脚本,时期输出到日志,然后排错,比如我的检测就有个错误,一直报503:

[[email protected] examples]# curl -I 192.168.1.172:9200

HTTP/1.1 503 Service Unavailable

Content-Type: text/plain

Connection: close

Content-Length: 44


我修改db172后的检测脚本如下:

[[email protected] data]# cat /usr/bin/clustercheck 

#!/bin/bash 

#

# Script to make a proxy (ie HAProxy) capable of monitoring Percona XtraDB Cluster nodes properly

#

# Authors:

# Raghavendra Prabhu <[email protected]>

# Olaf van Zandwijk <[email protected]>

#

# Based on the original script from Unai Rodriguez and Olaf (https://github.com/olafz/percona-clustercheck)

#

# Grant privileges required:

# GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';

if [[ $1 == '-h' || $1 == '--help' ]];then

    echo "Usage: $0 <user> <pass> <available_when_donor=0|1> <log_file> <available_when_readonly=0|1> <defaults_extra_file>"

    exit

fi


MYSQL_USERNAME="${1-clustercheckuser}" 

MYSQL_PASSWORD="${2-clustercheckpassword!}" 

AVAILABLE_WHEN_DONOR=${3:-0}

ERR_FILE="${4:-/tmp/mcl2.log}" 

AVAILABLE_WHEN_READONLY=${5:-1}

DEFAULTS_EXTRA_FILE=${6:-/etc/my.cnf}

#Timeout exists for instances where mysqld may be hung

TIMEOUT=10

echo "MYSQL_USERNAME : $MYSQL_USERNAME" >>/tmp/mcl.log

echo "MYSQL_PASSWORD : $MYSQL_PASSWORD" >>/tmp/mcl.log

echo "AVAILABLE_WHEN_DONOR : $AVAILABLE_WHEN_DONOR" >>/tmp/mcl.log

echo "ERR_FILE : $ERR_FILE" >>/tmp/mcl.log

echo "AVAILABLE_WHEN_READONLY : $AVAILABLE_WHEN_READONLY" >>/tmp/mcl.log

echo "DEFAULTS_EXTRA_FILE : $DEFAULTS_EXTRA_FILE" >>/tmp/mcl.log

然后再测试:

[[email protected] data]# more /tmp/mcl.log

/usr/bin/clustercheck

/usr/bin/clustercheck

MYSQL_USERNAME : clustercheckuser

MYSQL_PASSWORD : clustercheckpassword!

AVAILABLE_WHEN_DONOR : 0

ERR_FILE : /dev/null

AVAILABLE_WHEN_READONLY : 1

DEFAULTS_EXTRA_FILE : /etc/my.cnf

[[email protected] data]# more /tmp/mcl2.log

/usr/bin/clustercheck: line 44: mysql: command not found

看到问题了,原来是找不到mysql这个可执行文件

[[email protected] data]# which mysql

/opt/pxc/bin/mysql

明明是有的,但这个脚本可能找不到,所以把它复制到/usr/bin下面,在测试就通过了


4.启动haproxy:

[[email protected] ~]# haproxy -f /etc/haproxy/haproxy.cfg

[WARNING] 236/190345 (21350) : parsing [/etc/haproxy/haproxy.cfg:22]: keyword 'redispatch' is deprecated in favor of 'option redispatch', and will not be supported by future versions.

[WARNING] 236/190345 (21350) : parsing [/etc/haproxy/haproxy.cfg:24] : the 'contimeout' directive is now deprecated in favor of 'timeout connect', and will not be supported in future versions.

[WARNING] 236/190345 (21350) : parsing [/etc/haproxy/haproxy.cfg:25] : the 'clitimeout' directive is now deprecated in favor of 'timeout client', and will not be supported in future versions.

[WARNING] 236/190345 (21350) : parsing [/etc/haproxy/haproxy.cfg:26] : the 'srvtimeout' directive is now deprecated in favor of 'timeout server', and will not be supported in future versions.

[ALERT] 236/190345 (21350) : [haproxy.main()] Cannot chroot(/usr/share/haproxy).

报错了,解决方法:

[[email protected] ~]# mkdir /usr/share/haproxy

再次启动:

[[email protected] ~]# haproxy -f /etc/haproxy/haproxy.cfg

[WARNING] 236/190744 (21400) : parsing [/etc/haproxy/haproxy.cfg:22]: keyword 'redispatch' is deprecated in favor of 'option redispatch', and will not be supported by future versions.

[WARNING] 236/190744 (21400) : parsing [/etc/haproxy/haproxy.cfg:24] : the 'contimeout' directive is now deprecated in favor of 'timeout connect', and will not be supported in future versions.

[WARNING] 236/190744 (21400) : parsing [/etc/haproxy/haproxy.cfg:25] : the 'clitimeout' directive is now deprecated in favor of 'timeout client', and will not be supported in future versions.

[WARNING] 236/190744 (21400) : parsing [/etc/haproxy/haproxy.cfg:26] : the 'srvtimeout' directive is now deprecated in favor of 'timeout server', and will not be supported in future versions.

[[email protected] ~]# netstat -anp|grep 3307

tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      21401/haproxy

已经在3307端口监听了


5.添加开机自启动脚本:

[[email protected] examples]# cp /usr/local/sbin/haproxy /usr/sbin/haproxy
cd /opt/soft/haproxy-1.5.3/examples
[[email protected] examples]# cp haproxy.init /etc/init.d/haproxy
[[email protected] examples]# chmod +x /etc/init.d/haproxy 

6.测试

[[email protected] ~]# mysql -p123456 -P3307 -h 192.168.1.169

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 47

Server version: 5.6.19-67.0-25.6-log Percona XtraDB Cluster binary (GPL) 5.6.19-25.6, Revision 824, wsrep_25.6.r4111


Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql>

关闭任意一个节点不影响haproxy的连接。


6.haproxy web端:

http://192.168.1.169:8099/haproxy/stats

输入用户名密码分别为配置文件里的配置即可登录查看负载等情况。

相关 [haproxy 负载均衡 xtracluster] 推荐:

haproxy负载均衡 xtracluster

- - x-marker的博客
上一篇为xtracluster的安装(http://xmarker.blog.163.com/blog/static/226484057201472610520306/),本篇将记录下使用haproxy在三个数据节点做负载均衡,haproxy可以安装在数据节点,也可以安装在别的节点,如果安装在数据节点,需要注意端口号不能和mysql的3306冲突.

Haproxy+KeepAlived 负载均衡

- - CSDN博客系统运维推荐文章
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现. LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. 还可以使用nginx来实现,不过nginx只工作在7层网络之上. 详细请参考 抚琴煮酒写的“ 软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比”这篇文章,简单很详细,很好.

RabblitMQ Cluster + HAProxy(负载均衡)

- - 飞翔的荷兰人
        在本节中,我们主要来学习软件负载均衡器HAProxy在RabbitMQ集群中的使用.         软件负载均衡器HAProxy.         HAProxy的特点是:.         1、HAProxy是支持虚拟主机的,,并能支持上万级别的连接;.         2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;.

使用HAProxy对MySQL进行负载均衡和状态监控

- Kevin - Michael`s blog
转载请保留原文内容,并声明转载地址:http://www.toplee.com/blog/1284.html. 乐搜(lesoo.com)使用HAProxy已经很久了,但主要用在前端web请求的负载均衡和状态监控上,对于后端的Memcached以及MySQL却一直没有应用,最近对系统架构进行了小规模的整理,把MySQL也收编到了HAProxy下,经过一段时间的使用,体验还是不错的.

使用haproxy做TCP协议负载均衡

- - 行业应用 - ITeye博客
之前有使用过Nginx进行tcp负载均衡,但后来发现nginx总是会跟服务端进行断开连接、断开连接的操作,所以选择一下别的代理进行处理. 写这个的时候,我也只是把haproxy运行成功,而且简单测试了一下,具体适不适合自己的系统还有待测试. 1.下载haproxy:. 从主页下载,我使用的是最新版本,haproxy-1.4.24.tar.gz.

常见分布式负载均衡工具介绍nginx lighttpd haproxy

- - 互联网 - ITeye博客
       在架构系统的时候,通常会涉及到分布式,而处分布式里面最前端的是负载均衡器(当然还有cdn). 在网上搜寻一份,对目前常见的负载均衡器做一些介绍和常见组合,不涉及具体配置. 第一种是常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;.

基于域名负载均衡的Haproxy配置

- - 互联网 - ITeye博客
log 127.0.0.1 local0 info #[err warning info debug] //日志位置. daemon #设置成后台运行. nbproc 1 #进程数量. option httplog #http日志格式. retries 3 #三次失败后认为服务器不可用. option redispatch #如果cookie写入了serverId而客户端不会刷新cookie,当serverId对应的服务器挂掉后,强制定向到其他健康的服务器.

(总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

- - 服务器运维与网站架构|Linux运维|X研究
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术. 具体的应用需求还得具体分析,如果是中小型的Web应用,比如日PV小于1000万,用Nginx就完全可以了;如果机器不少,可以用DNS轮询,LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时,可以考虑用LVS.

软件级负载均衡器(LVS/HAProxy/Nginx)的特点简介和对比

- - 开源软件 - ITeye博客
原文: http://andrewyu.blog.51cto.com/1604432/697466. 现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:. 在这里我也有一点要跟大家申明下:很多朋友担心软件级别的负载均衡在高并发流量冲击下的稳定情况,事实是我们通过成功上线的许多网站发现,它们的稳定性也是非常好的,宕机的可能性微乎其微,所以我现在做的项目,基本上没考虑服务级别的高可用了.

nginx负载均衡配置

- - 开心平淡对待每一天。热爱生活
  使用负载均衡的话,可以修改配置http节点如下:. #设定http服务器,利用它的反向代理功能提供负载均衡支持. #设定mime类型,类型由mime.type文件定义. #省略上文有的一些配置节点. #设定负载均衡的服务器列表. #weigth参数表示权值,权值越高被分配到的几率越大. server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口.