HA Proxy für MySQL – Nur Failover

Ich bin daran interessiert, HA Proxy als Failover / Load Balancer in unserer MySQL Umgebung zu verwenden. Wir haben ein Master-Master + 2 Slaves Setup.

Ich möchte für die Master / Master-Setup, obwohl sie für sie eingerichtet sind, um nur an einen Master zu schreiben. Dies ist, um Probleme mit Split-Gehirn zu vermeiden.

  • ERROR 2013 bei der Verbindung zu mysql über HAProxy
  • Ich plane, einen separaten Port auf HA-Proxy zu haben, um zu lesen und dafür, dass die Last balanciert wird.

    Ist es möglich, HA Proxy als Ausfall nur und wenn ja, wie würden Sie es setzen?

    Ist es so etwas wie Balance mit Roundrobin, aber geben Sie einem der server ein Gewicht von 1 und das andere ein Gewicht von 0? Mit der Idee, wenn der erste server offline geht, wird der zweite egal sein Gewicht?

  • ERROR 2013 bei der Verbindung zu mysql über HAProxy
  • 2 Solutions collect form web for “HA Proxy für MySQL – Nur Failover”

    Ist es möglich, HA Proxy als Ausfall nur und wenn ja, wie würden Sie es setzen?

    Ja, es ist möglich durch Hinzufügen der backup Option zum Ende der server Zeile, so etwas wie folgt:

     frontend FE_mysql_writer bind VIPA: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 

    Port 9199 wird zur Überwachung des MySQL-Status verwendet:

    /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 

    Quelle: http://sysbible.org/2008/12/04/having-haproxy-check-mysql-status-through-a-inin-dcript/


    Aber warten Sie, wenn ein Meister scheitert, wie zeigen Sie die Sklaven an den neuen Meister? Du musst HAProxy besser verwenden, um die Leseoperationen auszugleichen und die Schreiboperation (inklusive Failover) an die Percona Pacemaker Resource Agents zu übergeben .

    Beachten Sie, dass einige Client-Implementierungen von mysql (wie der offizielle JDBC-Connector ) dies ohne Load-Balancer-Software unterstützt. Wenn du random so glücklich bist (oder Unglück), dass du so einen Verbinder hast und die Kontrolle über die configuration hast, gibt es ein paar Vorteile, nämlich:

    • Client-Seiten-Failover Ein kleiner Fall, wo etwas schief gehen kann

    • Erhöhte Leseleistung durch Verwendung der Failover-Knoten für Lesevorgänge.

    • Niedrigere Latenz (die meistens nitpicking, aber sehr wichtig in einigen Setups)

    Siehe Beispiele für JDBC.

    Und es gibt mysqlproxy , das es mehr oder weniger genauso triggers wie ha-proxy.

    Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.