<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-09 20:17:57
        文檔

        Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL

        Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL: Keepalived 由于在生產(chǎn)環(huán)境使用了mysqlcluster,需要實現(xiàn)高可用負載均衡,這里提供了keepalived+haproxy來實現(xiàn). keepalived主要功能是實現(xiàn)真實機器的故障隔離及負載均衡器間的失敗切換.可在第3,4,5層交換.它通過VRRPv2(Virtual Route
        推薦度:
        導(dǎo)讀Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL: Keepalived 由于在生產(chǎn)環(huán)境使用了mysqlcluster,需要實現(xiàn)高可用負載均衡,這里提供了keepalived+haproxy來實現(xiàn). keepalived主要功能是實現(xiàn)真實機器的故障隔離及負載均衡器間的失敗切換.可在第3,4,5層交換.它通過VRRPv2(Virtual Route
        Keepalived

        由于在生產(chǎn)環(huán)境使用了mysqlcluster,需要實現(xiàn)高可用負載均衡,這里提供了keepalived+haproxy來實現(xiàn).

        keepalived主要功能是實現(xiàn)真實機器的故障隔離及負載均衡器間的失敗切換.可在第3,4,5層交換.它通過VRRPv2(Virtual Router Redundancy Protocol) stack實現(xiàn)的.

        Layer3:Keepalived會定期向服務(wù)器群中的服務(wù)器.發(fā)送一個ICMP的數(shù)據(jù)包(既我們平時用的Ping程序),如果發(fā)現(xiàn)某臺服務(wù)的IP地址沒有激活,Keepalived便報告這臺服務(wù)器失效,并將它從服務(wù)器群中剔除,這種情況的典型例子是某臺服務(wù)器被非法關(guān)機。Layer3的方式是以服務(wù)器的IP地址是否有效作為服務(wù)器工作正常與否的標準。

        Layer4:主要以TCP端口的狀態(tài)來決定服務(wù)器工作正常與否。如web server的服務(wù)端口一般是80,如果Keepalived檢測到80端口沒有啟動,則Keepalived將把這臺服務(wù)器從服務(wù)器群中剔除。

        Layer5:在網(wǎng)絡(luò)上占用的帶寬也要大一些。Keepalived將根據(jù)用戶的設(shè)定檢查服務(wù)器程序的運行是否正常,如果與用戶的設(shè)定不相符,則Keepalived將把服務(wù)器從服務(wù)器群中剔除。

        Software Design

        2016228164756604.jpg (597×381)

        keepalived啟動后會有單個進程

        8352 ? Ss 0:00 /usr/sbin/keepalived
        8353 ? S 0:00 \_ /usr/sbin/keepalived
        8356 ? S 0:01 \_ /usr/sbin/keepalived
        

        父進程:內(nèi)存管理,子進程管理等等

        子進程:VRRP子進程

        子進程:Healthchecking 子進程
        實例

        2臺mysqlcluster 10.1.6.203 master 10.1.6.205 backup

        vip 10.1.6.173

        目的訪問10.1.6.173 3366端口 分別輪詢通過haproxy轉(zhuǎn)發(fā)到10.1.6.203 3306 和10.1.6.205 3306

        mysqlcluster搭建參照之前博客,這里在2臺機上安裝keepalived

        root@10.1.6.203:~# apt-get install keepalived
        root@10.1.6.203:~# cat /etc/keepalived/keepalived.conf 
        vrrp_script chk_haproxy {
         script "killall -0 haproxy" # verify the pid existance
         interval 2 # check every 2 seconds
         weight -2 # add 2 points of prio if OK
        }
         
        vrrp_instance VI_1 {
         interface eth1 # interface to monitor
         state MASTER 
         virtual_router_id 51 # Assign one ID for this route
         priority 101 # 101 on master, 100 on backup
         nopreempt
         debug
         
         virtual_ipaddress {
         10.1.6.173
         }
         
         track_script { #注意大括號空格
         chk_haproxy
         }
         
         notify_master /etc/keepalived/scripts/start_haproxy.sh #表示當切換到master狀態(tài)時,要執(zhí)行的腳本
         notify_fault /etc/keepalived/scripts/stop_keepalived.sh #故障時執(zhí)行的腳本
         notify_stop /etc/keepalived/scripts/stop_haproxy.sh #keepalived停止運行前運行notify_stop指定的腳本 }
        

        VRRPD配置包括三個類:

      1. VRRP同步組(synchroization group)
      2. VRRP實例(VRRP Instance)
      3. VRRP腳本
      4. 這里使用了 VRRP實例, VRRP腳本

        注意配置選項:

        stat:指定instance(Initial)的初始狀態(tài),就是說在配置好后,這臺服務(wù)器的初始狀態(tài)就是這里指定的,但這里指定的不算,還是得要通過競選通過優(yōu)先級來確定,里如果這里設(shè)置為master,但如若他的優(yōu)先級不及另外一臺,那么這臺在發(fā)送通告時,會發(fā)送自己的優(yōu)先級,另外一臺發(fā)現(xiàn)優(yōu)先級不如自己的高,那么他會就回搶占為master

      5. interface:實例綁定的網(wǎng)卡,因為在配置虛擬IP的時候必須是在已有的網(wǎng)卡上添加的
      6. priority 101:設(shè)置本節(jié)點的優(yōu)先級,優(yōu)先級高的為master
      7. debug:debug級別
      8. nopreempt:設(shè)置為不搶占
      9. vrrp_script chk_haproxy {
         script "killall -0 haproxy" # verify the pid existance
         interval 2 # check every 2 seconds 腳本執(zhí)行間隔
         weight -2 # add 2 points of prio if OK 腳本結(jié)果導(dǎo)致的優(yōu)先級變更:2表示優(yōu)先級+2;-2則表示優(yōu)先級-2
        }
        
        

        然后在實例(vrrp_instance)里面引用,有點類似腳本里面的函數(shù)引用一樣:先定義,后引用函數(shù)名

         track_script {
         chk_haproxy
         }
        

        注意:VRRP腳本(vrrp_script)和VRRP實例(vrrp_instance)屬于同一個級別

        root@10.1.6.203:scripts# cat start_haproxy.sh 
        #!/bin/bash
         
        sleep 5
        get=`ip addr |grep 10.1.6.173 |wc -l`
        echo $get >> /etc/keepalived/scripts/start_ha.log
         
        if [ $get -eq 1 ]
        then
         echo "`date +%c` success to get vip" >> /etc/keepalived/scripts/start_ha.log
         /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
        else
         echo "`date +%c` can not get vip" >> /etc/keepalived/scripts/start_ha.log
        fi
        root@10.1.6.203:scripts# cat stop_keepalived.sh 
        #!/bin/bash
         
        pid=`pidof keepalived`
        if [ $pid == "" ]
        then
         echo "`date +%c` no keepalived process id" >> /etc/keepalived/scripts/stop_keep.log
        else
         echo "`date +%c` will stop keepalived " >> /etc/keepalived/scripts/stop_keep.log
         /etc/init.d/keepalived stop
        fi
         
        /etc/init.d/keepalived stop
         
        root@10.1.6.203:scripts# cat stop_haproxy.sh 
        #!/bin/bash
         
        pid=`pidof haproxy`
        echo "`date +%c` stop haproxy" >> /etc/keepalived/scripts/stop_ha.log
        kill -9 $pid
        

        同理配置10.1.6.205

        root@10.1.6.205:~# cat /etc/keepalived/keepalived.conf 
        vrrp_script chk_haproxy {
         script "killall -0 haproxy" # verify the pid existance
         interval 2 # check every 2 seconds
         weight 2 # add 2 points of prio if OK
        }
         
        vrrp_instance VI_1 {
         interface eth1 # interface to monitor
         state BACKUP
         virtual_router_id 51 # Assign one ID for this route
         priority 100 # 101 on master, 100 on backup
         virtual_ipaddress {
         10.1.6.173
         }
         
         track_script {
         chk_haproxy
         }
         
        notify_master /etc/keepalived/scripts/start_haproxy.sh
        notify_fault /etc/keepalived/scripts/stop_keepalived.sh
        notify_stop /etc/keepalived/scripts/stop_haproxy.sh
         
        }
        

        HAProxy

        下面再介紹下haproxy

        HAProxy是一款基于TCP(第四層)和HTTP(第七層)應(yīng)用的代理軟件,它也可作為負載均衡器.可以支持數(shù)以萬計的并發(fā)連接.同時可以保護服務(wù)器不暴露到網(wǎng)絡(luò)上,通過端口映射.它還自帶監(jiān)控服務(wù)器狀態(tài)的頁面.

        安裝haproxy

        wget -O/tmp/haproxy-1.4.22.tar.gz http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.22.tar.gz
        tar xvfz /tmp/haproxy-1.4.22.tar.gz -C /tmp/
        cd /tmp/haproxy-1.4.22
        make TARGET=linux26
        make install
        

        haproxy需要對每一個mysqlcluster服務(wù)器進行健康檢查

        1.在2臺主機分別配置haproxy.cfg

        root@10.1.6.203:scripts# cat /etc/haproxy/haproxy.cfg 
        global
         maxconn 51200 #默認最大連接數(shù) 
         #uid 99
         #gid 99
         daemon #以后臺形式運行haproxy
         #quiet
         nbproc 1 #進程數(shù)量(可以設(shè)置多個進程提高性能) 
         pidfile /etc/haproxy/haproxy.pid #haproxy的pid存放路徑,啟動進程的用戶必須有權(quán)限訪問此文件 
         
        defaults
         mode tcp #所處理的類別 (#7層 http;4層tcp ) 
         option redispatch #serverId對應(yīng)的服務(wù)器掛掉后,強制定向到其他健康的服務(wù)器 
         option abortonclose #當服務(wù)器負載很高的時候,自動結(jié)束掉當前隊列處理比較久的連接 
         timeout connect 5000s #連接超時
         timeout client 50000s #客戶端超時
         timeout server 50000s #服務(wù)器超時
         log 127.0.0.1 local0 #錯誤日志記錄
         balance roundrobin #默認的負載均衡的方式,輪詢方式 
         
        listen proxy
         bind 10.1.6.173:3366 #監(jiān)聽端口 
         mode tcp #http的7層模式
         option httpchk #心跳檢測的文件
         server db1 10.1.6.203:3306 weight 1 check port 9222 inter 12000 rise 3 fall 3 #服務(wù)器定義,check inter 12000是檢測心跳頻率 rise 3是3次正確認為服務(wù)器可用, fall 3是3次失敗認為服務(wù)器不可用,weight代表權(quán)重 
         server db2 10.1.6.205:3306 weight 1 check port 9222 inter 12000 rise 3 fall 3
         
        listen haproxy_stats
         mode http
         bind 10.1.6.173:8888
         option httplog
         stats refresh 5s 
         stats uri /status #網(wǎng)站健康檢測URL,用來檢測HAProxy管理的網(wǎng)站是否可以用,正常返回200,不正常返回503 
         stats realm Haproxy Manager
         stats auth admin:p@a1SZs24 #賬號密碼
        
        root@10.1.6.205:~$ cat /etc/haproxy/haproxy.cfg 
        global
         maxconn 51200
         #uid 99
         #gid 99
         daemon
         #quiet
         nbproc 1
         pidfile /etc/haproxy/haproxy.pid
         
        defaults
         mode tcp
         option redispatch 
         option abortonclose
         timeout connect 5000s
         timeout client 50000s
         timeout server 50000s
         log 127.0.0.1 local0
         balance roundrobin 
         
        listen proxy
         bind 10.1.6.173:3366
         mode tcp
         option httpchk
         server db1 10.1.6.203:3306 weight 1 check port 9222 inter 12000 rise 3 fall 3
         server db2 10.1.6.205:3306 weight 1 check port 9222 inter 12000 rise 3 fall 3
         
        listen haproxy_stats
         mode http
         bind 10.1.6.173:8888
         option httplog
         stats refresh 5s 
         stats uri /status 
         stats realm Haproxy Manager
         stats auth admin:p@a1SZs24
        
        

        2.安裝xinetd

        root@10.1.6.203:~# apt-get install xinetd
        

        3.在每個節(jié)點添加xinetd服務(wù)腳本和mysqlchk端口號

        root@10.1.6.203:~# vim /etc/xinetd.d/mysqlchk 
        # default: on
        # description: mysqlchk
        service mysqlchk #需要在servive定義
        {
         flags = REUSE
         socket_type = stream
         port = 9222
         wait = no
         user = nobody
         server = /opt/mysqlchk 
         log_on_failure += USERID
         disable = no
         per_source = UNLIMITED
         bind = 10.1.6.173
        }
         
        root@10.1.6.203:~# vim /etc/services 
        mysqlchk 9222/tcp # mysqlchk
        

        4.編寫mysqlchk監(jiān)控服務(wù)腳本

        root@10.1.6.203:~# ls -l /opt/mysqlchk 
        -rwxr--r-- 1 nobody root 1994 2013-09-17 11:27 /opt/mysqlchk
        root@10.1.6.203:~# cat /opt/mysqlchk 
        #!/bin/bash
        #
        # 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
        #
         
        MYSQL_HOST="localhost"
        MYSQL_SOCKET="/var/run/mysqld/mysqld.sock"
        MYSQL_USERNAME="mysqlchkusr" #該賬戶密碼需要在mysql里添加
        MYSQL_PASSWORD="secret"
        MYSQL_OPTS="-N -q -A"
        TMP_FILE="/dev/shm/mysqlchk.$$.out"
        ERR_FILE="/dev/shm/mysqlchk.$$.err"
        FORCE_FAIL="/dev/shm/proxyoff"
        MYSQL_BIN="/opt/mysqlcluster/mysql-cluster-gpl-7.2.6-linux2.6-x86_64/bin/mysql"
        CHECK_QUERY="select 1"
         
        preflight_check()
        {
         for I in "$TMP_FILE" "$ERR_FILE"; do
         if [ -f "$I" ]; then
         if [ ! -w $I ]; then
         echo -e "HTTP/1.1 503 Service Unavailable\r\n"
         echo -e "Content-Type: Content-Type: text/plain\r\n"
         echo -e "\r\n"
         echo -e "Cannot write to $I\r\n"
         echo -e "\r\n"
         exit 1
         fi
         fi
         done
        }
         
        return_ok()
        {
         echo -e "HTTP/1.1 200 OK\r\n"
         echo -e "Content-Type: text/html\r\n"
         echo -e "Content-Length: 43\r\n"
         echo -e "\r\n"
         echo -e "MySQL is running.\r\n"
         echo -e "\r\n"
         rm $ERR_FILE $TMP_FILE
         exit 0
        }
        return_fail()
        {
         echo -e "HTTP/1.1 503 Service Unavailable\r\n"
         echo -e "Content-Type: text/html\r\n"
         echo -e "Content-Length: 42\r\n"
         echo -e "\r\n"
         echo -e "MySQL is *down*.\r\n"
         sed -e 's/\n$/\r\n/' $ERR_FILE
         echo -e "\r\n"
         rm $ERR_FILE $TMP_FILE
         exit 1
        }
        preflight_check
        if [ -f "$FORCE_FAIL" ]; then
         echo "$FORCE_FAIL found" > $ERR_FILE
         return_fail;
        fi
        $MYSQL_BIN $MYSQL_OPTS --host=$MYSQL_HOST --socket=$MYSQL_SOCKET --user=$MYSQL_USERNAME --password=$MYSQL_PASSWORD -e "$CHECK_QUERY" > $TMP_FILE 2> $ERR_FILE
        if [ $? -ne 0 ]; then
         return_fail;
        fi
        return_ok;
        
        

        測試

        2個節(jié)點開啟keepalived(主節(jié)點會獲得vip,自動拉起haproxy),xinetd

        root@10.1.6.203:~# ip add
        1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
         link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
         inet 127.0.0.1/8 scope host lo
        2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
         link/ether 00:26:b9:36:0f:81 brd ff:ff:ff:ff:ff:ff
         inet 211.151.105.186/26 brd 211.151.105.191 scope global eth0
        3: eth1:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
         link/ether 00:26:b9:36:0f:83 brd ff:ff:ff:ff:ff:ff
         inet 10.1.6.203/24 brd 10.1.6.255 scope global eth1
         inet 10.1.6.173/32 scope global eth1
        4: eth2:  mtu 1500 qdisc noop state DOWN qlen 1000
         link/ether 00:26:b9:36:0f:85 brd ff:ff:ff:ff:ff:ff
        5: eth3:  mtu 1500 qdisc noop state DOWN qlen 1000
         link/ether 00:26:b9:36:0f:87 brd ff:ff:ff:ff:ff:ff
        root@10.1.6.203:~# netstat -tunlp | grep ha
        tcp 0 0 10.1.6.173:3366 0.0.0.0:* LISTEN 1042/haproxy 
        tcp 0 0 10.1.6.203:8888 0.0.0.0:* LISTEN 1042/haproxy 
        udp 0 0 0.0.0.0:56562 0.0.0.0:* 1042/haproxy 
        root@10.1.6.203:~# netstat -tunlp | grep xine
        tcp 0 0 10.1.6.203:9222 0.0.0.0:* LISTEN 30897/xinetd 
        root@10.1.6.203:~# ps -ef | grep haproxy
        root 1042 1 0 Sep17 ? 00:00:00 /usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg
        
        

        測試:

        通過vip10.1.6.173 3366訪問cluster數(shù)據(jù)庫(注意賬戶dave權(quán)限需要加3個ip10.1.6.203,10.1.6.205,10.1.6.173)

        root@10.1.6.203:mgm# mysql -udave -p -h 10.1.6.173 -P 3366
        Enter password: 
        Welcome to the MySQL monitor. Commands end with ; or \g.
        Your MySQL connection id is 1344316
        Server version: 5.5.22-ndb-7.2.6-gpl-log MySQL Cluster Community Server (GPL)
         
        Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
         
        mysql> show databases;
        +--------------------+
        | Database |
        +--------------------+
        | information_schema | 
        | dave | 
        | test | 
        +--------------------+
        3 rows in set (0.01 sec)
         
        mysql>
        

        手動分別使keepalive,haproxy,數(shù)據(jù)庫掛掉.vip10.1.6.173會自動漂到10.1.6.205從上,并不影響vip的訪問

        通過vip,haproxy查看各節(jié)點狀態(tài)

        http://10.1.6.173:8888/status

        2016228164844383.jpg (1158×481)

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL

        Keepalived+HAProxy實現(xiàn)MySQL高可用負載均衡的配置_MySQL: Keepalived 由于在生產(chǎn)環(huán)境使用了mysqlcluster,需要實現(xiàn)高可用負載均衡,這里提供了keepalived+haproxy來實現(xiàn). keepalived主要功能是實現(xiàn)真實機器的故障隔離及負載均衡器間的失敗切換.可在第3,4,5層交換.它通過VRRPv2(Virtual Route
        推薦度:
        標簽: keep mysql 高可
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 59pao成国产成视频永久免费 | 亚洲国产精品尤物yw在线| 亚洲日韩精品国产一区二区三区| 3344永久在线观看视频免费首页| 亚洲综合无码一区二区| 91短视频在线免费观看| 久久狠狠高潮亚洲精品| 永久免费在线观看视频| 亚洲欧洲在线播放| 成人免费无遮挡无码黄漫视频| 精品国产日韩久久亚洲| 手机看片久久国产免费| 免费精品视频在线| 综合亚洲伊人午夜网| 暖暖日本免费中文字幕| 亚洲狠狠狠一区二区三区| 日韩精品亚洲专区在线观看| 久久精品国产亚洲av品善| 免费人成无码大片在线观看| 国产V片在线播放免费无码| 国产av天堂亚洲国产av天堂| 91免费人成网站在线观看18| 亚洲国产视频久久| 亚洲人妻av伦理| 99视频免费播放| 免费一级毛片清高播放| 久久99精品免费一区二区| 久久精品国产亚洲AV高清热| 免费人成视频在线| 一区二区免费在线观看| 亚洲AV无码一区东京热久久 | 永久免费av无码网站大全| 美女的胸又黄又www网站免费| 亚洲无线码在线一区观看| 久草视频在线免费| 黄色大片免费网站| 亚洲伊人久久大香线蕉苏妲己| 成人免费777777| a在线观看免费视频| 亚洲综合av一区二区三区不卡 | 久久久久久AV无码免费网站下载 |