安装配置Haproxy代理MySQL Galera集群

Posted 开源技术社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装配置Haproxy代理MySQL Galera集群相关的知识,希望对你有一定的参考价值。

这篇文章,我讲介绍如何为MariaDB Galera 集群添加负载均衡,大致步骤如下:
确认所有Galera节点作为一个单一集群运行(所有节点都是主节点而且相互同步)

  1. 安装Haproxy(你可以安装到独立的服务器或者应用服务器)

  2. 配置集群监控检测脚本,用于检测每个backend server服务器健康

  3. 配置Haproxy统计页面

  4. 将应用程序指向Haproxy

 
大致架构图如下:


 
配置集群检测脚本
**本节中所描述的步骤应该是所有数据库节点上执行,除非另有指定。
 
1、首先,我们需要配置后端健康检查报告。 我们将使用现有的Percona的clustercheck 。 拿到脚本,并把它放在/usr/local/bin目录运行以下命令:

$ git clone https://github.com/olafz/percona-clustercheck
$ cp percona-clustercheck/clustercheck /usr/local/bin


 2、 clustercheck脚本执行通过监控mysql的几个变量/状态 Galera节点上定期检查。 它会产生一个相应的HTTP返回代码一个简单的html输出(无论是503 - 服务不可用或200 - OK)。 为了让事情更容易为HAProxy的触发脚本,并获得后端的最新状态,我们必须让它侦听的端口。 我们可以使用xinetd打开脚本到一个服务进程,并使其听一个自定义的端口,在这种情况下,我将使用9200。
 
创建一个名为/etc/xinet.d/mysqlchk的新文件,并添加以下几行:

# default: on# description: mysqlchkservice mysqlchk
{  disable = no
  flags = REUSE
  socket_type = stream
  port = 9200  wait = no
  user = nobody
  server = /usr/local/bin/clustercheck  log_on_failure += USERID
  only_from = 0.0.0.0/0
  per_source = UNLIMITED
}


3、添加Mysqlchk服务到xinetd

echo 'mysqlchk      9200/tcp    # MySQL check' >> /etc/services


4、默认情况下,该脚本将使用MySQL用户名为“clustercheckuser”,密码为“clustercheckpassword!”。 我们需要确保这个MySQL用户与对应的密码存在的脚本将能够执行健康检查之前。 运行下面的DB节点之一(Galera应该复制该语句到其他节点)DDL语句:

mysql> GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
mysql> FLUSH PRIVILEGES;

你可以改变clustercheck script的32,33行,这篇文章我们使用默认用户名和密码。
 
5、验证脚本返回一个正确的值

$ /usr/local/bin/clustercheck > /dev/null$ echo $?0

如果DB节点在已同步,你应该得到0,否则1应该是输出。 后端健康检查配置。
 
安装Haproxy
1、最简单的安装方法就是使用(yum/apt)包管理器,然而,强烈建议使用上HAProxy的网站提供的最新版本。无论哪种方式,我下面都会介绍到。
 
A)如果您选择通过软件包管理器安装HAProxy的:

$ yum install haproxy # Redhat/CentOS$ sudo apt-get install haproxy # Debian/Ubuntu


B)通过Haproxy官网下载源码

$ yum install php-curl gcc make # Redhat/CentOS$ apt-get install php5-curl gcc make # Debian/Ubuntu$ wget http://www.haproxy.org/download/1.5/src/$ tar xvzfz
$ cd
$ make TARGET=linux26
$ cp -f haproxy /usr/sbin/haproxy

从源代码(选项B)安装带有没有初始化脚本。所以你需要手动的通过命令行启动。
 
配置HAproxy
现在,我们已经安装了HAProxy的。 我们需要将其配置为在端口3307监听MySQL服务,并执行后端健康检查。


在/etc/haproxy/haproxy.cfg,确保以下行存在:

global
        pidfile /var/run/haproxy.pid
        daemon
        user haproxy
        group haproxy
        stats socket /var/run/haproxy.socket user haproxy group haproxy mode 600 level admin
 
        maxconn 8192
        spread-checks 3
        quiet
defaults
        mode    tcp
        option  dontlognull
        option tcp-smart-accept
        option tcp-smart-connect
        retries 3
        option redispatch
        maxconn 8192
        timeout check   3500ms        timeout queue   3500ms        timeout connect 3500ms        timeout client  10800s        timeout server  10800s
 
userlist STATSUSERS        group admin users admin
        user admin insecure-password admin
        user stats insecure-password yourpassword
 
listen admin_page 0.0.0.0:9600
        mode http
        stats enable
        stats refresh 60s
        stats uri /
        acl AuthOkay_ReadOnly http_auth(STATSUSERS)
        acl AuthOkay_Admin http_auth_group(STATSUSERS) admin
        stats http-request auth realm admin_page unless AuthOkay_ReadOnly
 
listen  mysql_3307
        bind *:3307
        mode tcp        timeout client  10800s        timeout server  10800s
        balance leastconn        option httpchk        option allbackups        default-server port 9200 inter 2s downinter 5s rise 3 fall 2 slowstart 60s maxconn 64 maxqueue 128 weight 100
        server db1 10.0.0.187:3306 check
        server db2 10.0.0.188:3306 check
        server db3 10.0.0.189:3306 check

现在开机启用该服务,让其工作。
 
RHEL/CentOS 6:

$ chkconfig haproxy on # RHEL6$ service haproxy start # RHEL6


Ubuntu 14.04 and lower, Debian 7 and lower:

$ update-rc.d haproxy defaults$ sudo service haproxy start


RHEL/CentOS 7, Debian 8, Ubuntu 15.04:

$ systemctl enable haproxy
$ systemctl start haproxy


 
验证Haproxy端口监听是否正常:

sudo netstat -tulpn | grep haproxy
tcp        0      0 0.0.0.0:9600            0.0.0.0:*               LISTEN      370/haproxy
tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      370/haproxy


 3307是MySQL的负载平衡端口,而9600是HAProxy的统计页面。 您可以登录访问http检查状态:// haproxy_ip_address:9600 /,以用户名“管理员”和密码登录“你的密码”作为配置的内部haproxy.cfg。 你应该看到类似下面的内容:


现在你可以把你的应用程序或者Mysql的客户端执行harproxy代理的3307端口,用于Mysql的负载均衡和故障自动转移。


以上是关于安装配置Haproxy代理MySQL Galera集群的主要内容,如果未能解决你的问题,请参考以下文章

haproxy+mysql实现代理mysql

MySQL之galera集群部署

haproxy 配置mysql的代理

miradb+galera+haproxy

LB_之HAProxy 反向代理;代理mysql;高可用

Haproxy代理Mysql服务