Rumah pangkalan data tutorial mysql MySQL从库集群方案之HAProxy篇_MySQL

MySQL从库集群方案之HAProxy篇_MySQL

Jun 01, 2016 pm 01:50 PM
basename check haproxy rancangan

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>
Salin selepas log masuk

三、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>
Salin selepas log masuk

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>
Salin selepas log masuk

四、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>
Salin selepas log masuk

重启xinetd

service xinetd restart
Salin selepas log masuk

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>
Salin selepas log masuk

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

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

17 cara untuk menyelesaikan skrin biru kernel_security_check_failure 17 cara untuk menyelesaikan skrin biru kernel_security_check_failure Feb 12, 2024 pm 08:51 PM

Kernelsecuritycheckfailure (kegagalan pemeriksaan kernel) adalah jenis kod henti yang agak biasa Walau bagaimanapun, tidak kira apa sebabnya, ralat skrin biru menyebabkan ramai pengguna merasa tertekan dengan berhati-hati. 17 penyelesaian kepada skrin biru kernel_security_check_failure Kaedah 1: Alih keluar semua peranti luaran Apabila mana-mana peranti luaran yang anda gunakan tidak serasi dengan versi Windows anda, ralat skrin biru Kernelsecuritycheckfailure mungkin berlaku. Untuk melakukan ini, anda perlu mencabut semua peranti luaran sebelum cuba memulakan semula komputer anda.

Ke Arah AI Boleh Disahkan: Lima Cabaran Kaedah Formal Ke Arah AI Boleh Disahkan: Lima Cabaran Kaedah Formal Apr 09, 2023 pm 02:01 PM

Kecerdasan buatan ialah sistem pengkomputeran yang cuba meniru kecerdasan manusia, termasuk beberapa fungsi manusia yang secara intuitif berkaitan dengan kecerdasan, seperti pembelajaran, penyelesaian masalah, dan pemikiran dan tindakan yang rasional. Ditafsirkan secara meluas, istilah AI merangkumi banyak bidang yang berkait rapat seperti pembelajaran mesin. Sistem yang banyak menggunakan AI mempunyai kesan sosial yang ketara dalam bidang seperti penjagaan kesihatan, pengangkutan, kewangan, rangkaian sosial, e-dagang dan pendidikan. Kesan sosial yang semakin meningkat ini juga telah membawa beberapa siri risiko dan kebimbangan, termasuk ralat dalam perisian kecerdasan buatan, serangan siber dan keselamatan sistem kecerdasan buatan. Oleh itu, isu pengesahan sistem AI, dan topik AI yang boleh dipercayai yang lebih luas, telah mula menarik perhatian daripada komuniti penyelidikan. "AI Boleh Disahkan" telah disahkan

Bagaimana untuk melaksanakan laluan SSL dalam HAProxy Bagaimana untuk melaksanakan laluan SSL dalam HAProxy Mar 20, 2024 am 09:30 AM

Mengekalkan beban pelayan web seimbang adalah salah satu langkah utama untuk mengelakkan masa henti. Menggunakan pengimbang beban ialah pendekatan yang boleh dipercayai, dengan HAProxy menjadi pilihan yang dipandang tinggi. Menggunakan HAProxy, anda boleh mengkonfigurasi kaedah pengimbangan beban dengan tepat dan menyokong laluan SSL untuk memastikan keselamatan komunikasi antara pelanggan dan pelayan. Ia bermula dengan meneroka kepentingan melaksanakan laluan SSL dalam HAProxy, diikuti dengan perbincangan terperinci tentang langkah-langkah yang diperlukan untuk melaksanakan ciri ini dan contoh untuk pemahaman yang lebih baik. Apakah laluan SSL? Mengapa ia penting? Sebagai pengimbang beban, HAProxy menerima dan mengagihkan beban yang mengalir ke pelayan web anda merentas pelayan yang dikonfigurasikan. Pengagihan beban disasarkan kepada peranti pelanggan dan

Bagaimana untuk mematikan Palm Check dalam Windows 11/10 Bagaimana untuk mematikan Palm Check dalam Windows 11/10 Feb 19, 2024 pm 09:45 PM

Artikel ini akan membimbing anda untuk mematikan fungsi PalmCheck pada Windows 11/10 PC. PalmCheck ialah ciri yang direka untuk mengelakkan tapak tangan yang tidak disengajakan atau sentuhan lain daripada tersilap dikenali sebagai input semasa menaip pada papan kekunci. Ini biasanya ditemui dalam tetapan pad sentuh, terutamanya pada peranti yang didayakan sentuhan seperti komputer riba. Kadangkala anda mungkin ingin mematikan PalmCheck atau ciri yang serupa untuk memberikan anda lebih fleksibiliti dalam mengawal input dalam situasi di mana anda perlu menggunakan kedua-dua papan kekunci dan pad sentuh. Dalam artikel ini, kami akan memperkenalkan cara untuk melumpuhkan fungsi PalmCheck pada Windows 11/10 PC, supaya anda boleh mengatasi keperluan semasa bermain permainan atau menjalankan aplikasi dengan lebih baik. Apakah P pada pad sentuh?

Bagaimana untuk mengkonfigurasi HAProxy untuk sambungan WebSocket Bagaimana untuk mengkonfigurasi HAProxy untuk sambungan WebSocket Mar 20, 2024 pm 03:51 PM

Aplikasi WebSocket membolehkan komunikasi dua hala masa nyata antara pelanggan dan pelayan. Walaupun sambungan WebSocket digunakan, mekanisme pengurusan trafik yang berkesan masih diperlukan untuk mengelak daripada membebankan pelayan, mengakibatkan gangguan perkhidmatan dan tidak tersedia. HAProxy ialah pengimbang beban percuma dan boleh dipercayai yang juga berfungsi sebagai proksi terbalik. Dengan mengkonfigurasi HAProxy untuk menyokong sambungan WebSocket, anda boleh menggunakan lebih baik ciri penghantaran data masa nyata WebSockets dan mengurangkan beban pelayan. Artikel ini akan menerangkan langkah terperinci untuk mengkonfigurasi HAProxy untuk menyokong sambungan WebSocket. Panduan langkah demi langkah tentang cara mengkonfigurasi HAProxy untuk sambungan WebSocket melalui WebSoc

Bagaimana untuk menganalisis penggunaan semula port Haproxy Bagaimana untuk menganalisis penggunaan semula port Haproxy May 29, 2023 am 09:25 AM

Pengarang artikel ini: Spark (Ahli Pasukan Keselamatan Intranet Ms08067) 1. Gambaran Keseluruhan Haproxy ialah perisian proksi pengimbangan beban berprestasi tinggi yang dibangunkan dalam bahasa C Ia menyediakan proksi aplikasi tcp dan http Ia percuma, pantas dan boleh dipercayai. Sama seperti frp, ia boleh dijalankan menggunakan fail konfigurasi + pelayan. Kelebihan: Aplikasi bidang perniagaan berskala besar menyokong proksi empat lapisan (lapisan pengangkutan) dan proksi tujuh lapisan (lapisan aplikasi Menyokong ACL (senarai kawalan akses), dan boleh mengkonfigurasi penghalaan secara fleksibel selepas menyusun dengan cygwin (boleh merentas platform) senarai kawalan akses (AccessControlLists, ACL) ialah senarai arahan yang digunakan pada antara muka penghala ini

Tafsiran mekanisme pemeriksaan kesihatan Keepalived sistem Linux Tafsiran mekanisme pemeriksaan kesihatan Keepalived sistem Linux Feb 28, 2024 am 09:52 AM

Apabila melakukan pengimbangan beban, alat semakan kesihatan biasanya digunakan untuk memastikan bahawa pelayan sebenar bahagian belakang adalah normal dan boleh menyediakan perkhidmatan Untuk mengelakkan situasi di mana pelayan sebenar bahagian belakang tidak tersedia atau perkhidmatan tidak tersedia, pengimbang beban akan mengedarkan permintaan kepada pengimbang. realserver. Kesan ke atas akses perniagaan secara keseluruhan. Terdapat banyak cara untuk melakukan pemeriksaan kesihatan, dan anda boleh menggunakan skrip sendiri Sudah tentu, yang paling biasa digunakan ialah perkhidmatan keepalived. Terdapat tiga kaedah pemeriksaan kesihatan untuk keepalived, tcp_check, http_check dan misc_check. Konfigurasi Keepalived brief keepalived mempunyai tiga modul utama iaitu teras,

Apakah ciri pengimbang beban LVS, Nginx dan HAProxy dalam Linux Apakah ciri pengimbang beban LVS, Nginx dan HAProxy dalam Linux May 14, 2023 pm 10:49 PM

Ciri-ciri LVS: 1. Rintangan beban yang kuat, menggunakan teknologi pengimbangan beban IP, hanya untuk pengedaran, jadi LVS sendiri tidak menjana banyak trafik 2. Kestabilan dan kebolehpercayaan yang baik, dan mempunyai pelan sandaran panas yang sempurna (seperti: LVS +keepalived ) 3. Ia mempunyai pelbagai aplikasi dan boleh memuatkan baki semua aplikasi 4. Ia tidak menyokong pemprosesan biasa dan tidak boleh memisahkan dinamik dan statik. Empat algoritma yang biasa digunakan: 1.rr: round-robin, diperuntukkan kepada pelayan back-end secara bergilir-gilir 2.wrr: round-robin berwajaran, diperuntukkan mengikut beban pelayan back-end; diperuntukkan kepada pelayan yang mempunyai sambungan yang paling sedikit Di atas 4.wlc: sambungan dengan berat terkecil, diperuntukkan mengikut kapasiti pemprosesan pelayan bahagian belakang. Anda boleh menggunakan ipvsadm–p (pe

See all articles