zoukankan      html  css  js  c++  java
  • 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇

    前言

    有一段时间没有写blogs,乘着周末开始整理下haproxy + keeplived 实现 mysql mariadb galera cluster 集群访问环境的搭建工作。

    本文集中讲haproxy 和 keeplived 的环境安装配置与访问。

    mariadb galera cluster搭建点这里的传送门 《MyCat 学习笔记 第五篇 . Mycat 1.5 集成 Galera Cluster 10.1.10 读写分离 Centos 7》  

    HAProxy是高性能的代理服务器,其可以提供7层和4层代理,具有healthcheck,负载均衡等多种特性,性能卓越,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用

    KeepAlived是 一个高可用方案,通过VIP(即虚拟IP)和心跳检测来实现高可用。其原理是存在一组(两台)服务器,分别赋予Master,Backup两个角色,默认 情况下Master会绑定VIP到自己的网卡上,对外提供服务。Master,Backup会在一定的时间间隔向对方发送心跳数据包来检测对方的状态,这 个时间间隔一般为2秒钟,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,把VIP绑定到自己的网卡,此时Backup对 外提供服务,实现自动化的故障转移,当Master恢复的时候会重新接管服务。

    环境说明

    由于本地环境有限,因此将mysql集群环境与ha环境安装在相同的服务器上,具体情况如下所示

    192.168.31.187  galera cluster db1 haproxy + keeplived 

    192.168.31.212  galera cluster db2 haproxy + keeplived

    192.168.31.150  galera cluster db3 无ha环境

    环境安装与配置

    HAProxy 1.6.3  下载地址:http://www.haproxy.org/download/1.6/src/haproxy-1.6.3.tar.gz 

    haproxy.org 有可能会被黑名单,翻墙下载即可( lantern 懂的入~ )

    习惯性在 /usr/local 目录下安装应用程序

    [root@miwifi-r1cm-srv haproxy]# tar xvf haproxy-1.6.3.tar.gz

    [root@miwifi-r1cm-srv haproxy-1.6.3]# make TARGET=linux26 PREFIX=/usr/local/haproxy ARCH=x86_64

    [root@miwifi-r1cm-srv haproxy-1.6.3]# make install PREFIX=/usr/local/haproxy

    install -d "/usr/local/haproxy/sbin"
    install haproxy "/usr/local/haproxy/sbin"
    install -d "/usr/local/haproxy/share/man"/man1
    install -m 644 doc/haproxy.1 "/usr/local/haproxy/share/man"/man1
    install -d "/usr/local/haproxy/doc/haproxy"
    for x in configuration management architecture cookie-options lua proxy-protocol linux-syn-cookies network-namespaces close-options intro; do
    install -m 644 doc/$x.txt "/usr/local/haproxy/doc/haproxy" ;
    done

    [root@miwifi-r1cm-srv haproxy]# pwd
    /usr/local/haproxy
    [root@miwifi-r1cm-srv haproxy]# touch haproxy.cfg

    [root@miwifi-r1cm-srv haproxy]# vi haproxy.cfg

    global
      log 127.0.0.1 local0 #日志记录功能
      maxconn 4096
      chroot /usr/local/haproxy
      user root #最好是haproxy用户
      group root #最好是haproxy用户
      daemon

    defaults
      log global
      option dontlognull #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包。
      option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
      retries 3
      maxconn 2000
      contimeout 5000
      clitimeout 50000
      srvtimeout 50000


    frontend galera_front #描述允许客户端连接的监听套接字 本机接收的服务端口
      bind *:23306
      mode tcp
      default_backend galera_back #当没有匹配use_backend时,默认的backend

    frontend stats_front
      bind *:80
      mode http
      default_backend stats_back

    backend galera_back #描述进来的连接将转发到哪些后端服务器
      mode tcp
      option tcplog
      option httpchk OPTIONS * HTTP/1.1 Host: www
      option httpchk #启用HTTP协议检查服务器监控状态,通过调用脚本检查节点的状态
      balance leastconn #负载均衡算法,使用最少连接算法,适合长连接应用
      server cluster_187 192.168.31.187:13306 check port 19200 inter 5s rise 2 fall 3
      server cluster_212 192.168.31.212:13306 check port 19200 inter 5s rise 2 fall 3
      server cluster_150 192.168.31.150:13306 check port 19200 inter 5s rise 2 fall 3 #fall连续3次检查错误后,将表明服务器死亡,默认为3;inter连续两次检查的间隔时间值,单位为毫秒,默认为2s;rise连续3次检查成功,表明服务可用
      srvtimeout 20000


    backend stats_back #开启haproxy的状态页面
      mode http
      option httplog
      balance roundrobin
      stats uri /haproxy/stats #定义访问统计信息的URI
      stats auth admin:admin #设置查看统计信息的用户名和密码
      stats admin if TRUE #管理界面,如果认证成功了,可通过webui管理节点
      stats refresh 30s #统计页面自动刷新时间

    galera cluster 验证9200端口的配置

    [root@miwifi-r1cm-srv ~]# sudo yum install xinetd -y

    /etc/xinetd.conf

    defaults
    {
    instances = 60
    #log_type = SYSLOG authpriv
    log_type = FILE /var/adm/xinetd.log
    log_on_success = HOST PID
    log_on_failure = HOST
    cps = 25 30
    }
    includedir /etc/xinetd.d

    [root@miwifi-r1cm-srv ~]# wget -O /usr/bin/clustercheck https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck

    [root@miwifi-r1cm-srv ~]# sudo chmod 755 /usr/bin/clustercheck

    [root@miwifi-r1cm-srv ~]# sudo cat > /etc/xinetd.d/mysqlchk <<EOF

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

    EOF

    手动将mysql验证加入services,以供xinetd守护进程调用,更多xinetd相关介绍见本文底部相关链接。

    [root@miwifi-r1cm-srv ~]# sudo echo "mysqlchk   19200/tcp" | tee -a /etc/services

    重启服务的2种方法,建议首次启动时先用第2种方案,手动启动后方便排查异常情况

    [root@miwifi-r1cm-srv ~]# sudo service xinetd restart

    或可将filelog配置到 /etc/xinetd.conf 的default域里

    [root@miwifi-r1cm-srv xinetd.d]# /usr/sbin/xinetd -filelog /var/adm/xinetd.log -f /etc/xinetd.conf

    19200检测脚本配置完成后记录要调整具体的数据库用户及相关配置信息

    /usr/bin/clustercheck

    MYSQL_USERNAME="clustercheckuser"
    MYSQL_PASSWORD="clustercheckpassword!"
    AVAILABLE_WHEN_DONOR="0"
    #ERR_FILE="/tmp/maria_db_check_19200.err" 如果脚本验证失败则可以选择打印错误原因
    ERR_FILE="/dev/null"
    AVAILABLE_WHEN_READONLY="1"
    DEFAULTS_EXTRA_FILE="/usr/local/mariadb/mariadb-10.1.10-13306/my.cnf"

    进入数据库配置访问用户

    MariaDB [mysql]> grant process on *.* to 'clustercheckuser'@'%' identified by 'clustercheckpassword!';

     验证脚本是否正常

    [root@miwifi-r1cm-srv ~]# sh /usr/bin/clustercheck
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    Percona XtraDB Cluster Node is synced.

    手动查询下服务是否可以使用

    [root@miwifi-r1cm-srv xinetd.d]# netstat -alpn |grep 19200
    tcp 0 0 192.168.31.187:19200 0.0.0.0:* LISTEN 11449/xinetd
    tcp 0 0 192.168.31.187:19200 192.168.31.187:59248 TIME_WAIT -

    [root@miwifi-r1cm-srv xinetd.d]# telnet 192.168.31.187 19200
    Trying 192.168.31.187...
    Connected to 192.168.31.187.
    Escape character is '^]'.
    HTTP/1.1 200 OK
    Content-Type: text/plain
    Connection: close
    Content-Length: 40

    Percona XtraDB Cluster Node is synced.
    Connection closed by foreign host.

    HAProxy使用syslog作用日志记录,需要额外安装与配置

    [root@miwifi-r1cm-srv sbin]# yum –y install rsyslog

    针对haproxy进行日志参数配置

    修改

    vi /etc/rsyslog.conf

    # Save boot messages also to boot.log
    local7.* /var/log/boot.log
    local0.* /usr/local/haproxy/logs/haproxy.log

    配置完成后重启rsyslog服务

    启动haproxy

    cd /usr/local/haproxy/sbin
    ./haproxy -f /usr/local/haproxy/haproxy.cfg

    访问 http://192.168.31.187/haproxy/stats   

    admin/admin

    回头把相关的配置在 212 服务器上再配置一次,即可准备安装keeplived,上篇完。

    参考文档

    这个比较赞-->MySQL-Galera Cluster With HAproxy  http://www.sebastien-han.fr/blog/2012/04/08/mysql-galera-cluster-with-haproxy/

    http://my.oschina.net/anthonyyau/blog/277450 

    Linux守护进程(init.d和xinetd) http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html

  • 相关阅读:
    System.ServiceModel.CommunicationException:The underlying connection was closed: The connection was closed unexpectedly
    研究jBPM和NetBPM
    研究:Microsoft Solution Framework
    iOS银联,支付宝,微信,ping++开发文档
    Xampp+Openfire+Spark的简单使用
    ObjectiveC与Swift混编
    网络抓包教程
    iOS版微信开发小结(微信支付,APP跳转微信公众号)
    七牛上传图片问题总结
    2012年之总结
  • 原文地址:https://www.cnblogs.com/kaye0110/p/5202659.html
Copyright © 2011-2022 走看看