ホームページ データベース mysql チュートリアル MySQL从库集群方案之HAProxy篇_MySQL

MySQL从库集群方案之HAProxy篇_MySQL

Jun 01, 2016 pm 01:50 PM
basename check haproxy プラン

Mysql集群Proxy

HAProxy反向代理服务器支持双机热备支持虚拟主机,其配置简单,拥有非常不错的服务器健康检查功能。当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

这里有两台HAProxy机器,分别安装keepalived,组成热备形式。作用:当一台有问题,另一台可以在1秒内接管。

xinetd服务的作用是检测端口,本文中使用8890端口。HAProxy用http协议检测这个端口是否正常。

MySQL同步状态脚本,是放在从库本地,由xinetd服务来激活脚本,正常就会输出200状态码给HAProxy,证明从库正常;否则,就剔除。(这里就可以加上短信报警了)

系统架构图

HAProxy系统架构图

使用软件

  • HAProxy 1.4.16
  • Keepalived 1.1.20
  • Xinetd 2.3.14
  • MySQL 同步状态脚本 0.2

一、系统约定

系统环境

  • OS:CentOS 5.6 x86_64
  • MASTER:192.168.1.65
  • BACKUP:192.168.1.66
  • VIP:192.168.1.67
  • serivce Port:3306

工作流程

准备工作:应用配置好slave的VIP 192.168.1.67 端口3306

(1)应用服务器

(2)连接HAProxy的vip 192.168.1.67:3306,根据算法,分配到一台slave。

(3)检测slave的8890端口是否返回http 200状态码。

(4)返回200 状态码,HAProxy 返回正常,继续服务。

(5)返回503,剔除该slave,并将mysql请求转发到另外一台slave。

(6)有问题的slave,发送短信报警,相关人员检查。

二、Keepalived 1.1.20的安装于配置

#cd /var/tmp/
#wget http://www.keepalived.org/software/keepalived-1.1.20.tar.gz
#tar zxvf keepalived-1.1.20.tar.gz
#cd keepalived-1.1.20
#./configure –prefix=/usr
#make && make install
#cp /usr/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
#cp /usr/etc/sysconfig/keepalived /etc/sysconfig/
#mkdir /etc/keepalived


vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
    coralzd@gmail.com
   }
   notification_email_from coralzd@gmail.com
   smtp_server 192.168.1.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_HAProxy {   
    script "killall -0 HAProxy"  
    interval 2   
    weight 2   
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_interface {   
       eth0   
          
    } 
    virtual_ipaddress {
        192.168.1.67
        
    }
    track_script {   
        chk_HAProxy   
    }  
}<br>
ログイン後にコピー

三、HAProxy 1.4.16的安装与配置

#cd /var/tmp/
#wget http://HAProxy.1wt.eu/download/1.4/src/HAProxy-1.4.16.tar.gz
#tar -zxvf HAProxy-1.4.16.tar.gz
#cd HAProxy-1.4.16
#make install
#mkdir -p /usr/local/HAProxy/etc
#mkdir -p /usr/local/HAProxy/sbin
#cp examples/HAProxy.cfg /usr/local/HAProxy/etc
#ln -s /usr/local/sbin/HAProxy /usr/local/HAProxy/sbin/HAProxy
#mkdir /usr/share/HAProxy

/etc/HAProxy/HAProxy.cfg

global
        log 127.0.0.1   local1 notice
        maxconn 4096
        chroot /usr/share/HAProxy
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        #option httplog
        option  dontlognull
        retries 3
        option  redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen  DZW_MYSQL_SLAVE  192.168.1.67:3306
        #cookie SERVERID rewrite
        mode tcp 
        maxconn 200
        balance roundrobin
        option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www 
        server  mysql_192_168_1_23 192.168.1.23:3306  check port 8890 inter 5s rise 2 fall 3
        server  mysql_192_168_1_24 192.168.1.24:3306  check port 8890 inter 5s rise 2 fall 3
      
        srvtimeout      20000  
listen  admin_status
        mode  http
        bind 192.168.1.65:8899
        option httplog
        log global
        stats enable
        stats refresh 10s
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri  /admin-status 
        stats auth  admin:123456 
        stats admin if TRUE<br>
ログイン後にコピー

HAProxy 启动脚本

/etc/init.d/HAProxy

#!/bin/sh
#
# chkconfig: - 85 15
# description: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited \
#              for high availability environments.
# processname: HAProxy
# config: /etc/HAProxy/HAProxy.cfg
# pidfile: /var/run/HAProxy.pid

# Script Author: Simon Matter <simon.matter>
# Version: 2004060600

# Source function library.
if [ -f /etc/init.d/functions ]; then
  . /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
  . /etc/rc.d/init.d/functions
else
  exit 0
fi

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# This is our service name
BASENAME=HAProxy
if [ -L ___FCKpd___2 ]; then
  BASENAME=`find ___FCKpd___2 -name $BASENAME -printf %l`
  BASENAME=`basename $BASENAME`
fi

[ -f /etc/$BASENAME/$BASENAME.cfg ] || exit 1

RETVAL=0

start() {
  /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg
  if [ $? -ne 0 ]; then
    echo "Errors found in configuration file, check it with '$BASENAME check'."
    return 1
  fi

  echo -n "Starting $BASENAME: "
  daemon /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -p /var/run/$BASENAME.pid
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$BASENAME
  return $RETVAL
}

stop() {
  echo -n "Shutting down $BASENAME: "
  killproc $BASENAME -USR1
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$BASENAME
  [ $RETVAL -eq 0 ] && rm -f /var/run/$BASENAME.pid
  return $RETVAL
}

restart() {
  /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg
  if [ $? -ne 0 ]; then
    echo "Errors found in configuration file, check it with '$BASENAME check'."
    return 1
  fi
  stop
  start
}

reload() {
  /usr/sbin/$BASENAME -c -q -f /etc/$BASENAME/$BASENAME.cfg
  if [ $? -ne 0 ]; then
    echo "Errors found in configuration file, check it with '$BASENAME check'."
    return 1
  fi
  /usr/sbin/$BASENAME -D -f /etc/$BASENAME/$BASENAME.cfg -p /var/run/$BASENAME.pid -sf $(cat /var/run/$BASENAME.pid)
}

check() {
  /usr/sbin/$BASENAME -c -q -V -f /etc/$BASENAME/$BASENAME.cfg
}

rhstatus() {
  status $BASENAME
}

condrestart() {
  [ -e /var/lock/subsys/$BASENAME ] && restart || :
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  reload)
    reload
    ;;
  condrestart)
    condrestart
    ;;
  status)
    rhstatus
    ;;
  check)
    check
    ;;
  *)
    echo ___FCKpd___2quot;Usage: $BASENAME {start|stop|restart|reload|condrestart|status|check}"
    exit 1
esac
 
exit $?

chkconfig –add HAProxy 
chkconfig HAProxy on
service HAProxy start<br></simon.matter>
ログイン後にコピー

四、xinetd安装和配置

yum install -y xinetd
vim /etc/xinetd.d/mysql_status.sh
service mysqlrep_status
{ 
        flags           = REUSE 
        socket_type     = stream 
        port            = 8890
        wait            = no 
        user            = nobody 
        server          = /usr/local/bin/mysqlrep_status.sh
        log_on_failure  += USERID 
        disable         = no 
        
}<br>
ログイン後にコピー

重启xinetd

service xinetd restart
ログイン後にコピー

MySQL同步检测脚本(脚本检测同步sql和IO进程是否都为真,以及select是否达到20个进程以上)

#!/bin/bash 
# 
# /usr/local/bin/mysqlchk_status.sh 
# 
# 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 503 Internal Server Error\r" (else) 
# 

MYSQL_HOST="localhost"
MYSQL_PORT="3306"
MYSQL_USERNAME="repdb63"
MYSQL_PASSWORD="mylqs9eyex7s"
# 
# We perform a simple query that should return a few results 
#/usr/local/mysql/bin/mysql  -hlocalhost –urepdb63 –pmylqs9eyex7s -e "show slave status\G;"   > /tmp/rep.txt
mysql -urepdb63 -pmylqs9eyex7s -e "show full processlist;" >/tmp/processlist.txt
mysql -urepdb63 -pmylqs9eyex7s -e "show slave status\G;" >/tmp/rep.txt
iostat=`grep "Slave_IO_Running" /tmp/rep.txt  |awk '{print $2}'`            
sqlstat=`grep "Slave_SQL_Running" /tmp/rep.txt |awk '{print $2}'`           
result=$(cat /tmp/processlist.txt|wc -l)
#echo iostat:$iostat and sqlstat:$sqlstat 
# if slave_IO_Running and Slave_sql_Running ok,then return 200 code 
if [ "$result" -lt "20" ] && [ "$iostat" = "Yes" ] && [ "$sqlstat" = "Yes" ];

then
        # mysql is fine, return http 200 
        /bin/echo -e "HTTP/1.1 200 OK\r\n" 
        
else
        # mysql is down, return http 503 
        /bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n" 
        
fi<br>
ログイン後にコピー

注意:在mysql slave另行建立一个具有process和slave_client权限的账号。

作者简介:崔晓辉,网名coralzd,大众网系统管理员,精通网站系统架构、Unix技术。gtalk:coralzd@gmail.com

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

kernel_security_check_failure ブルー スクリーンを解決する 17 の方法 kernel_security_check_failure ブルー スクリーンを解決する 17 の方法 Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (カーネルチェック失敗) は比較的一般的な停止コードですが、理由が何であれ、ブルースクリーンエラーは多くのユーザーを悩ませます、当サイトでは 17 種類のエラーをユーザーに丁寧に紹介します。 kernel_security_check_failure ブルー スクリーンに対する 17 の解決策 方法 1: すべての外部デバイスを削除する 使用している外部デバイスが Windows のバージョンと互換性がない場合、Kernelsecuritycheckfailure ブルー スクリーン エラーが発生することがあります。これを行うには、コンピュータを再起動する前に、すべての外部デバイスを取り外しておく必要があります。

検証可能な AI に向けて: 形式手法の 5 つの課題 検証可能な AI に向けて: 形式手法の 5 つの課題 Apr 09, 2023 pm 02:01 PM

人工知能は、人間の知能を模倣しようとするコンピューティング システムであり、学習、問題解決、合理的な思考と行動など、知能に直観的に関連する人間の機能が含まれます。広義に解釈すると、AI という用語は、機械学習などの密接に関連する多くの分野をカバーします。 AI を多用するシステムは、医療、交通、金融、ソーシャル ネットワーク、電子商取引、教育などの分野で社会に大きな影響を与えています。この社会的影響の増大は、人工知能ソフトウェアのエラー、サイバー攻撃、人工知能システムのセキュリティなど、一連のリスクと懸念ももたらしています。したがって、AI システムの検証の問題、および信頼できる AI というより広範なテーマが研究コミュニティの注目を集め始めています。 「検証可能なAI」を確認

HAProxy で SSL パススルーを実装する方法 HAProxy で SSL パススルーを実装する方法 Mar 20, 2024 am 09:30 AM

Web サーバーの負荷分散を維持することは、ダウンタイムを防ぐための重要な対策の 1 つです。ロード バランサーの使用は信頼性の高いアプローチであり、HAProxy は高く評価されています。 HAProxy を使用すると、負荷分散方法を正確に構成し、SSL パススルーをサポートして、クライアントとサーバー間の通信のセキュリティを確保できます。まず、HAProxy で SSL パススルーを実装することの重要性を検討し、その後、この機能を実装するために必要な手順の詳細な説明と、理解を深めるための例を示します。 SSLパススルーとは何ですか?どうしてそれが重要ですか? HAProxy はロード バランサーとして、Web サーバーに流れる負荷を受け入れ、構成されたサーバー全体に分散します。負荷分散はクライアントデバイスを対象とし、

Windows 11/10でパームチェックをオフにする方法 Windows 11/10でパームチェックをオフにする方法 Feb 19, 2024 pm 09:45 PM

この記事では、Windows 11/10 PC で PalmCheck 機能をオフにする方法を説明します。 PalmCheck は、キーボード入力時に手のひらやその他の接触が誤って入力として認識されるのを防ぐために設計された機能です。これは通常、タッチパッドの設定、特にラップトップなどのタッチ対応デバイスで見られます。キーボードとタッチパッドの両方を使用する必要がある状況で、より柔軟に入力を制御できるように、PalmCheck または同様の機能をオフにすることが必要な場合があります。この記事では、ゲームやアプリケーションの実行時のニーズにうまく対応できるように、Windows 11/10 PC で PalmCheck 機能を無効にする方法を紹介します。タッチパッドの「P」とは何ですか?

Haproxy ポートの再利用を分析する方法 Haproxy ポートの再利用を分析する方法 May 29, 2023 am 09:25 AM

この記事の著者: Spark (Ms08067 イントラネット セキュリティ チームのメンバー) 1. 概要 Haproxy は、C 言語で開発された高性能ロード バランシング プロキシ ソフトウェアであり、tcp および http アプリケーション プロキシを提供します。無料、高速、信頼性が高いです。 frp と同様に、設定ファイル + サーバーを使用して実行できます。利点: 大規模なビジネス分野のアプリケーションは、4 層プロキシ (トランスポート層) と 7 層プロキシ (アプリケーション層) を幅広くサポートします。acl (アクセス コントロール リスト) をサポートし、ルーティング ウィンドウを柔軟に設定できます。 cygwin (クロスプラットフォーム可能) アクセス コントロール リスト (AccessControlLists、ACL) は、ルーター インターフェイスに適用されるコマンドのリストです。

WebSocket 接続用に HAProxy を構成する方法 WebSocket 接続用に HAProxy を構成する方法 Mar 20, 2024 pm 03:51 PM

WebSocket アプリケーションにより、クライアントとサーバー間のリアルタイムの双方向通信が可能になります。 WebSocket 接続が使用されている場合でも、サーバーの過負荷によるサービスの中断や利用不能を避けるために、効果的なトラフィック管理メカニズムが依然として必要です。 HAProxy は、リバース プロキシとしても機能する、無料で信頼性の高いロード バランサーです。 WebSocket 接続をサポートするように HAProxy を構成すると、WebSocket のリアルタイム データ送信特性をより適切に活用し、サーバーの負荷を軽減できます。この記事では、WebSocket 接続をサポートするように HAProxy を構成する詳細な手順について説明します。 WebSoc 経由の WebSocket 接続用に HAProxy を構成する方法に関するステップバイステップのガイド

Linux システムの Keepalived ヘルスチェックメカニズムの解釈 Linux システムの Keepalived ヘルスチェックメカニズムの解釈 Feb 28, 2024 am 09:52 AM

ロード バランシングを実行する場合、通常、バックエンド リアルサーバーが正常でサービスを提供できることを確認するためにヘルス チェック ツールが導入され、バックエンド リアルサーバーがダウンしたりサービスが利用できなくなったりする状況を回避するために、ロード バランサーはリクエストをrealserver. ビジネス アクセス全体への影響。ヘルスチェックを実行するにはさまざまな方法があり、スクリプトを自分でデプロイすることもできますが、最も一般的に使用されるのは keepalived サービスです。 keepalived には、tcp_check、http_check、misc_check の 3 つのヘルス チェック メソッドがあります。 Keepalived 構成の概要 keepalived には 3 つの主要なモジュールがあります。

Linux の LVS、Nginx、HAProxy ロード バランサの特徴は何ですか Linux の LVS、Nginx、HAProxy ロード バランサの特徴は何ですか May 14, 2023 pm 10:49 PM

LVS の特徴: 1. IP ロード バランシング テクノロジを使用した強力な負荷耐性、分散専用であるため、LVS 自体は多くのトラフィックを生成しません; 2. 優れた安定性と信頼性、完璧なホット バックアップ プランを備えています (例: LVS +keepalived) ) 3. 幅広いアプリケーションがあり、すべてのアプリケーションの負荷分散が可能; 4. 定期的な処理をサポートせず、動的と静的を分離できません。一般的に使用される 4 つのアルゴリズム: 1.rr: ラウンドロビン、バックエンド サーバーに順番に割り当てられます; 2.wrr: 加重ラウンドロビン、バックエンド サーバーの負荷に応じて割り当てられます; 3.lc: 最小接続、確立された接続が最も少ないサーバーに割り当てられる 上記; 4.wlc: バックエンド サーバーの処理能力に応じて割り当てられる、重みが最小の接続。 ipvsadm–p (pe

See all articles