AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 416633
Accepted
Jonathan
Jonathan
Asked: 2012-08-12 18:34:40 +0800 CST2012-08-12 18:34:40 +0800 CST 2012-08-12 18:34:40 +0800 CST

适用于 MySQL 的 HA 代理 - 仅限故障转移

  • 772

我有兴趣在我们的 MySQL 环境中使用 HA 代理作为故障转移/负载平衡器。我们有一个 master-master + 2 slaves 设置。

我希望主/主设置,即使它们是为它设置的,也只写给一个主。这是为了避免裂脑问题。

我确实计划在 HA 代理上有一个单独的端口用于读取和负载平衡。

是否可以仅将 HA 代理用作故障转移,如果可以,您将如何设置?

是不是有点像循环法的平衡,但是给其中一台服务器的权重为 1 而另一台服务器的权重为 0?如果第一台服务器脱机,第二台服务器将被使用,无论其重量如何?

mysql
  • 2 2 个回答
  • 6593 Views

2 个回答

  • Voted
  1. Best Answer
    quanta
    2012-08-13T02:17:22+08:002012-08-13T02:17:22+08:00

    是否可以仅将 HA 代理用作故障转移,如果可以,您将如何设置?

    是的,可以通过将backup选项添加到server行尾来实现,如下所示:

    frontend FE_mysql_writer
        bind V.I.P.A:3306
        default_backend BE_mysql_writer
    
    backend BE_mysql_writer
        mode tcp
        balance roundrobin
        option tcpka
        option httpchk
        server mysql1 ip1:3306 weight 1 check port 9199 inter 12000 rise 3 fall 3
        server mysql2 ip2:3306 weight 1 check port 9199 inter 12000 rise 3 fall 3 backup
    

    9199端口用于监控MySQL状态:

    /etc/services

    mysqlchk    9199/tcp            # mysqlchk
    

    /etc/xinetd.d/mysqlchk

    # /etc/xinetd.d/mysqlchk
    # default: on
    # description: mysqlchk
    service mysqlchk
    {
            flags           = REUSE
            socket_type     = stream
            port            = 9199
            wait            = no
            user            = nobody
            server          = /opt/mysqlchk
            log_on_failure  += USERID
            disable         = no
            only_from       = 0.0.0.0/0 # recommended to put the IPs that need
                                        # to connect exclusively (security purposes)
            per_source      = UNLIMITED # Recently added (May 20, 2010)
                                        # Prevents the system from complaining
                                        # about having too many connections open from
                                        # the same IP. More info:
                                        # http://www.linuxfocus.org/English/November2000/article175.shtml
    }
    

    /opt/mysqlchk

    #!/bin/bash
    # /opt/mysqlchk 
    # This script checks if a mysql server is healthy running on localhost. It will
    # return:
    #
    # "HTTP/1.x 200 OK\r" (if mysql is running smoothly)
    #
    # - OR -
    #
    # "HTTP/1.x 500 Internal Server Error\r" (else)
    #
    # The purpose of this script is make haproxy capable of monitoring mysql properly
    #
    # Author: Unai Rodriguez
    #
    # It is recommended that a low-privileged-mysql user is created to be used by
    # this script. Something like this:
    #
    # mysql> GRANT SELECT on mysql.* TO 'mysqlchkusr'@'localhost' \
    #     -> IDENTIFIED BY '257retfg2uysg218' WITH GRANT OPTION;
    # mysql> flush privileges;
    
    MYSQL_HOST="localhost"
    MYSQL_PORT="3306"
    MYSQL_USERNAME="mysqlchkusr"
    MYSQL_PASSWORD="pa$$w0rd"
    
    TMP_FILE="/tmp/mysqlchk.out"
    ERR_FILE="/tmp/mysqlchk.err"
    
    #
    # We perform a simple query that should return a few results :-p
    #
    /usr/bin/mysql --host=$MYSQL_HOST --port=$MYSQL_PORT --user=$MYSQL_USERNAME \
        --password=$MYSQL_PASSWORD -e"show databases;" > $TMP_FILE 2> $ERR_FILE
    
    #
    # Check the output. If it is not empty then everything is fine and we return
    # something. Else, we just do not return anything.
    #
    if [ "$(/bin/cat $TMP_FILE)" != "" ]
    then
        # mysql is fine, return http 200
        /bin/echo -e "HTTP/1.1 200 OK\r\n"
        /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
        /bin/echo -e "\r\n"
        /bin/echo -e "MySQL is running.\r\n"
        /bin/echo -e "\r\n"
    else
        # mysql is fine, return http 503
        /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
        /bin/echo -e "Content-Type: Content-Type: text/plain\r\n"
        /bin/echo -e "\r\n"
        /bin/echo -e "MySQL is *down*.\r\n"
        /bin/echo -e "\r\n"
    fi
    

    来源:http ://sysbible.org/2008/12/04/having-haproxy-check-mysql-status-through-a-xinetd-script/


    但是等一下,当一个 master 失败时,你如何将 slaves 指向新的 master?您最好使用 HAProxy 来负载平衡读取操作,并让Percona Pacemaker 资源代理处理写入操作(包括故障转移)。

    • 7
  2. Tommy
    2012-08-13T04:44:35+08:002012-08-13T04:44:35+08:00

    请注意,mysql 的某些客户端实现(例如官方的JDBC 连接器)支持此功能,而无需使用负载平衡器软件。如果您碰巧(或不幸)拥有这样的连接器并控制它的配置,那么有一些好处,即:

    • 客户端故障转移。少一个可能出错的例子。

    • 通过使用故障转移节点进行读取来提高读取性能。

    • 更低的延迟(这主要是吹毛求疵,但在某些设置中非常重要)

    请参阅JDBC示例。

    并且有mysqlproxy或多或少以与 ha-proxy 相同的方式解决它。

    • 1

相关问题

  • 开源与专有关系 db mgt 系统的优缺点是什么?

  • 在 solaris 10 上为 mysql 设置 max_allowed_pa​​cket

  • 如何移动 MySQL 的数据目录?

  • 通过 VPN 连接什么是远程服务器 IP?

  • mysql崩溃

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve