mysql 主從配置和叢集負載平衡

來源:互聯網
上載者:User

標籤:href   pidfile   top   blog   str   server-id   客戶   整合   流程   

  • 閱讀目錄

    1、簡介
    2、基本環境
    3、配置MySQL主主複製
    4、中介軟體簡述
      4.1、Haproxy介紹
      4.2、keepalived介紹
    5、中介軟體的安裝與配置(haproxy、keepalived)
      5.1、安裝haproxy
      1)、編譯安裝haproxy
      2)、提供啟動指令碼
      3)、提供設定檔
      4)、開機記錄
      5)、啟動haproxy
      6)、測試haproxy
      5.2、安裝keepalived
      1)、解決缺少的軟體庫檔案
      2)、編譯安裝keepalived軟體
      3)、建立設定檔
      4)、建立指令碼檔案
    6、功能測試
      6.1、流程簡述
      6.2、測試haproxy監聽前端連接埠3306
      6.3、測試高可用+keepalived不搶佔vip
      6.4、測試負載平衡
    7、總結與建議

 

1、簡介

  使用MySQL時隨著時間的增長,使用者量以及資料量的逐漸增加,訪問量更是劇增,最終將會使MySQL達到某個瓶頸,那麼MySQL的效能將會大大降低。這一結果也不利於軟體的推廣。

  那麼如何跨過這個瓶頸,提高MySQL的並發量呢?方法有很多,分散式資料庫、讀寫分離、高可用負載平衡、增加快取服務器等等。之前的文章裡已經介紹了讀寫分離的方案了,接下來我將講解MySQL高可用負載平衡這一方法。

  其中實現高可用負載平衡的方法有很多,例如LVS+keepalived組合實現、haproxy+keepalived組合實現等等,這裡我們採用haproxy+keepalived組合實現MySQL高可用負載平衡這一技術。

 

回到頂部2、基本環境

四台linux虛擬機器主機

Linux版本CentOS6.6

MySQL 5.5(已安裝好)

haproxy-1.5.14

keepalived-1.2.19

IP:192.168.95.11(mysql1)、192.168.95.12(mysql2)、192.168.95.13(haproxy+keepalived)、192.168.95.14(haproxy+keepalived)、192.168.95.55(vip)

 

回到頂部3、配置MySQL主主複製

詳細配置步驟可以參考這篇文章:

http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7

以下簡要介紹一下mysql的主主複製:

何為主主複製?就是兩個mysql都能讀能寫,資料記錄通過二進位傳達給對方從而保持資料的一致性。

(192.168.95.11主從複製+192.168.95.12主從複製==192.168.95.11、192.168.95.12主主複製)

  因此主主複製中必須要解決的事情就是自增主鍵的問題。如果mysql1主鍵id增加到12了,此時位元據還沒到達mysql2,那麼mysql2恰好要插入資料,那麼新資料主鍵id也是12,那不就是亂套了麼!解決這一問題我們可以直接更改MySQL中的設定檔即可。

1)、更改設定檔

--192.168.95.11:MySQLserver-id=11   #任意自然數n,只要保證兩台MySQL主機不重複就可以了。log-bin=mysql-bin   #開啟二進位日誌auto_increment_increment=2   #步進值auto_imcrement。一般有n台主MySQL就填nauto_increment_offset=1   #起始值。一般填第n台主MySQL。此時為第一台主MySQLbinlog-ignore=mysql   #忽略mysql庫【我一般都不寫】binlog-ignore=information_schema   #忽略information_schema庫【我一般都不寫】replicate-do-db=aa   #要同步的資料庫,預設所有庫--192.168.95.12:MySQLserver-id=12log-bin=mysql-binauto_increment_increment=2auto_increment_offset=2replicate-do-db=aa

配置好後重啟MySQL

2)、配置192.168.95.11主從複製

  1、在192.168.95.12中建立一個192.168.95.11主機中可以登入的MySQL使用者

      使用者:mysql11

      密碼:mysql11

mysql>GRANT REPLICATION SLAVE ON *.* TO ‘mysql11’@’192.168.95.11’ IDENTIFIED BY ’mysql11’;mysql>FLUSH PRIVILEGES;

  2、查看192.168.95.12二進位日誌

mysql> show master status;

 

  3、告知二進位檔案名與位置

mysql> change master to    -> master_host=‘192.168.95.11‘,    -> master_user=‘mysql11‘,    ->master_password=‘mysql11‘,    ->master_log_file=‘mysql-bin.000097‘,    -> master_log_pos=107;

  4、查看結果

mysql> slave start;mysql> show slave status\G

 

配置主從複製成功

3)、配置192.168.95.12主從複製

同上

配置主從複製成功。

 

回到頂部4、中介軟體簡述回到頂部   4.1 、Haproxy 介紹

Haproxy是一個開源的高效能的反向 Proxy或者說是負載平衡服務軟體之一,它支援雙機熱備、虛擬機器主機、基於TCP和HTTP應用代理等功能。其配置簡單,而且擁有很好的對伺服器節點的健全狀態檢查功能(相當於keepalived健全狀態檢查),當其代理的後端伺服器出現故障時,Haproxy會自動的將該故障伺服器摘除,當伺服器的故障恢複後Haproxy還會自動將RS伺服器。

HAProxy特別適用於那些負載特大的web網站,這些網站通常又需要會話保持或七層處理。HAProxy運行在當前的硬體上,完全可以支援數以萬計的並發串連。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web伺服器不被暴露到網路上。

Haproxy軟體引入了frontend,backend的功能,frontend(acl規則匹配)可以根據任意HTTP要求標頭做規則匹配,然後把請求定向到相關的backend(server pools等待前端把請求轉過來的伺服器組)。通過frontend和backup,我們可以很容易的實現haproxy的7層代理功能,haproxy是一款不可多得的優秀代理服務軟體。

回到頂部   4.2 、keepalived 介紹

keepalived是以VRRP協議為實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。

虛擬路由冗餘協議,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在區域網路內其他機器的預設路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先順序來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模組,分別是core、check和vrrp。core模組為keepalived的核心,負責主進程的啟動、維護以及全域設定檔的載入和解析。check負責健全狀態檢查,包括常見的各種檢查方式。vrrp模組是來實現VRRP協議的。

 

回到頂部5、中介軟體的安裝與配置(haproxy、keepalived)

百度雲下載:http://pan.baidu.com/s/1qYoCjDE  密碼:7cef

回到頂部  5.1、安裝haproxy

在192.168.95.13、192.168.95.14安裝haproxy(一模一樣安裝)

回到頂部  1)、編譯安裝haproxy
# tar -zxvf haproxy-1.5.14.tar.gz# cd haproxy-1.5.14# make TARGET=linux26 ARCH=x86_64 # make install SBINDIR=/usr/sbin/ MANDIR=/usr/share/man/ DOCDIR=/usr/share/doc/

 

注意:

1、為什麼不用configure,請看。haproxy-1.5.14已經存在Makefile檔案了。

2、make的時候,target以及arch需要根據自己的linux主機設定

3、make install的時候我增加了一些額外選項。這可加可不加由自己配置,不加的話將會按預設路徑安裝,請看。

回到頂部  2)、提供啟動指令碼

將haproxy這個啟動指令碼放在/etc/init.d/檔案夾下,以便我們可以直接service啟動它

【注意】:此啟動指令碼僅僅適合我以上的安裝路徑。假若安裝路徑不同,則需要進行相應的修改方可使用。

 View Code

 

#給執行權力#chmod +x /etc/init.d/haproxy 
回到頂部  3)、提供設定檔

根據上面的啟動指令碼建立相應的目錄以及設定檔

# mkdir /etc/haproxy# mkdir /var/lib/haproxy# useradd -r haproxy       #建立指令碼啟動使用者# vi /etc/haproxy/haproxy.cfg

 

【設定檔】

#這裡的設定檔僅僅只是貼出來進行解析說明。

#如果需要這個設定檔最好將注釋解析全部刪除掉,因為我在使用的過程中,正是因為存在注釋解析而導致出錯,刪除後就能正常運行。

#可以下載這個設定檔進行使用,與下面貼出來的設定檔一致,只是不存在注釋解析

#百度雲下載該設定檔(不含注釋):連結:http://pan.baidu.com/s/1gfOMtKB  密碼:zl9o

 

global    log         127.0.0.1 local2         //記錄定義層級    chroot      /var/lib/haproxy         //當前工作目錄    pidfile     /var/run/haproxy.pid     //進程id    maxconn     4000                     //最大串連數    user        haproxy                  //運行改程式的使用者    group       haproxy    daemon                               //後台形式運行    stats socket /var/lib/haproxy/statsdefaults    mode                    tcp            //haproxy運行模式(http | tcp | health)    log                     global    option                  dontlognull    option                  redispatch     //serverId對應的伺服器掛掉後,強制定向到其他健康的伺服器    retries                 3              //三次串連失敗則伺服器不用    timeout http-request    10s    timeout queue           1m    timeout connect         10s            //連線逾時    timeout client          1m             //用戶端逾時    timeout server          1m             //伺服器逾時    timeout http-keep-alive 10s    timeout check           10s            //心跳檢測    maxconn                 600            //最大串連數listen stats                               //配置haproxy狀態頁(用來查看的頁面)    mode http    bind :8888    stats enable    stats hide-version                    //隱藏haproxy版本號碼stats uri     /haproxyadmin?stats     //一會用於開啟狀態頁的uri    stats realm   Haproxy\ Statistics     //輸入賬戶密碼時的提示文字    stats auth    admin:admin             //使用者名稱:密碼frontend  main bind 0.0.0.0:3306                     //使用3306連接埠。監聽前端連接埠【表示任何ip訪問3306連接埠都會將資料輪番轉寄到mysql伺服器群組中】    default_backend             mysql     //後端伺服器組名backend mysql    balance     leastconn                 //使用最少串連方式調度    server mysql1 192.168.95.11:3306 check port 3306 maxconn 300    server mysql2 192.168.95.12:3306 check port 3306 maxconn 300

 

回到頂部  4)、開機記錄
# vi /etc/rsyslog.conf 

#service rsyslog restart
回到頂部  5)、啟動haproxy
# service haproxy start

回到頂部  6)、測試haproxy

安照設定檔進行相應的測試

開啟瀏覽器輸入192.168.95.13:8888/haproxyadmin?stats

登陸後如下如所示,表明安裝haproxy成功。

回到頂部  5.2、安裝keepalived

官網下載:http://www.keepalived.org/download.html

在192.168.95.13、192.168.95.14安裝keepalived

回到頂部  1)、解決缺少的軟體庫檔案

【這一步驟視具體的linux版本而定,有些已經安裝openssl了。具體情況可以執行./configure就能夠確定缺不缺少軟體庫檔案了】

首先我們先將keepalived-1.2.19.tar.gz解壓,然後進入目錄./configure查看

# tar -zxvf keepalived-1.2.19.tar.gz# ./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/

 由可見keepalived的安裝需要先安裝軟體OpenSSL

缺少標頭檔,只需要安裝openssl和openssl-devel即可

最簡單的方法是:yum -y install openssl openssl-devel

沒網的朋友也不用怕,接下來將介紹的是rpm方法安裝:

#掛載光碟片,在光碟片中尋找軟體。若光碟片找不到就直接下載,再傳入linux進行安裝

# mount /dev/cdrom  /home/suifeng2/rom/# cd rom/# cd Packages/# ls |grep openssl

安裝keepalived軟體時存在各種依賴,是我安裝軟體後整理的依賴關係圖:

既然已經知道各軟體依賴,則可按最後面的軟體開始安裝:

(你也可以從前面開始進行安裝,一步一步的查看各個依賴關係)

1、安裝openssl

# rpm -ivh openssl-1.0.1e-30.el6.x86_64.rpm

安裝openssl成功

2、安裝openssl-devel

安裝libsepol-devel:

# rpm -ivh libsepol-devel-2.0.41-4.el6.x86_64.rpm

安裝pkgconfig(libsepol):

# rpm -ivh pkgconfig-0.23-9.1.el6.x86_64.rpm

安裝libselinux-devel:

# rpm -ivh libselinux-devel-2.0.94-5.8.el6.x86_64.rpm

安裝keyutils-libs-devel:

# rpm -ivh keyutils-libs-devel-1.4-5.el6.x86_64.rpm

安裝libcom_err-devel:

# rpm -ivh libcom_err-devel-141.12-21.el6.x86_64.rpm

 

安裝krb5-devel:

# rpm -ivh krb5-devel-1.10.3-33.el6.x86_64.rpm

安裝zlib-devel:

# rpm -ivh zlib-devel-1.2.3-29.el6.x86_64.rpm

安裝openssl-devel

# rpm -ivh openssl-devel-1.0.1e-30.el6.x86_64.rpm

回到頂部  2)、編譯安裝keepalived軟體
# cd keepalived-1.2.19# ./configure --prefix=/usr/local/keepalived  --sbindir=/usr/sbin/ --sysconfdir=/etc/ --mandir=/usr/local/share/man/ --with-kernel-dir=/usr/src/kernels/2.6.32-504.el6.x86_64/# make && make install
# chkconfig --add keepalived #添加開機自啟(我暫時沒添加)# chkconfig keepalived on

 

【注意】:

1、安裝時./configure中的—prefix後的幾個選擇可選可不選,選了就可以採用service直接啟動了。建議最好都加上吧

2、--with-kernel-dir這個選項根據自己的linux版本進行填寫(在linux中使用命令uname –a可以查到)

回到頂部  3)、建立設定檔

/etc/keepalived/檔案夾已存在keepalived.conf檔案,我們將它改名為keepalived.conf.back,再建立一個我們自己keepalived.conf設定檔。

vi /etc/keepalived/keepalived.conf(13與14設定檔路徑一致)

【以下是簡單的設定檔,使用時最好去掉注釋】

設定檔下載(不含注釋):

192.168.95.13設定檔:

! Configuration File for keepalived#簡單的頭部,這裡主要可以做郵件通知警示等的設定,此處就暫不配置了;global_defs {        notificationd LVS_DEVEL}#預先定義一個指令碼,方便後面調用,也可以定義多個,方便選擇;vrrp_script chk_haproxy {    script "/etc/keepalived/chk.sh"  #具體指令碼路徑    interval 2  #指令碼迴圈運行間隔}#VRRP虛擬路由冗餘協議配置vrrp_instance VI_1 {   #VI_1 是自訂的名稱;    state BACKUP    #MASTER表示是一台主裝置,BACKUP表示為備用裝置【我們這裡因為設定為開啟不搶佔,所以都設定為備用】    nopreempt      #開啟不搶佔    interface eth0   #指定VIP需要綁定的物理網卡    virtual_router_id 11   #VRID虛擬路由辨別碼,也叫做分組名稱,該組內的裝置需要相同    priority 130   #定義這台裝置的優先順序 1-254;開啟了不搶佔,所以此處優先順序必須高於另一台    advert_int 1   #生存檢測時的組播資訊發送間隔,組內一致    authentication {    #設定驗證資訊,組內一致        auth_type PASS   #有PASS 和 AH 兩種,常用 PASS        auth_pass asd    #密碼    }    virtual_ipaddress {        192.168.95.55    #指定VIP地址,組內一致,可以設定多個IP    }    track_script {    #使用在這個域中使用預先定義的指令碼,上面定義的        chk_haproxy       }    notify_backup "/etc/init.d/haproxy restart"   #表示當切換到backup狀態時,要執行的指令碼    notify_fault "/etc/init.d/haproxy stop"     #故障時執行的指令碼}

192.168.95.14設定檔:

設定檔與上面的幾乎一樣,僅僅改變priority 120【只需要比上面的小即可】

回到頂部  4)、建立指令碼檔案

建立上面設定檔所需的指令檔(13、14一樣)

(檢測haproxy有沒有發生故障,發生故障則將keepalived停掉,讓出vip)

# vi /etc/keepalived/chk.sh#!/bin/bash#if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then       /etc/init.d/keepalived stopfi
給執行許可權# chmod +x /etc/keepalived/chk.sh

啟動keepalived:# service keepalived start

安裝keepalived成功!

 

回到頂部6、功能測試

測試之前先在mysql1和mysql2中建立一個mysql使用者,此使用者可以允許13、14linux主機登陸:

使用者:jack

密碼:321

host:192.168.95.%

mysql> GRANT ALL ON *.* TO ‘jack‘@‘192.168.95.%‘ IDENTIFIED BY ‘321‘;mysql> FLUSH PRIVILEGES;
回到頂部  6.1、流程簡述

大概講述一下整體的運作流程:

首先兩個11,12的mysql以及13、14的haproxy、keepalived都啟動;

keepalived在keepalived群組中擷取虛擬IP,以及檢測haproxy是否被kill;

haproxy負責將進來的資料轉寄到11或者12的mysql中。

是我畫的簡單理解圖:(相對來說比較簡潔哈,湊合湊合哈)

接下來我們將一個個功能的進行測實驗證。

回到頂部  6.2、測試haproxy監聽前端連接埠3306

1、frontend監聽連接埠3306時,將mysql、haproxy、keepalived全部開啟

2、使用任意一個mysql用戶端登陸使用者jack

登陸成功(windowns上登陸mysql)

3、更改frontend監聽連接埠為3307,繼續操作登陸測試

登陸失敗

結果:說明了frontend監聽連接埠的用處,有助於我們理解haproxy用法。

回到頂部  6.3、測試高可用+keepalived不搶佔vip

可以通過haproxy監控頁面獲知誰擷取了vip

1、依次啟動13、14的keepalived、haproxy(啟動keepalived後將會自動開啟haproxy)

2、訪問http://192.168.95.55:8888/haproxyadmin?stats

13擷取了vip

3、# kill -9 8923

重新整理http://192.168.95.55:8888/haproxyadmin?stats

14擷取了vip,機器正常工作

結果:證明了高可用,掛了一台另一台繼續工作

4、重新啟動13的haproxy以及keepalived

並重新整理http://192.168.95.55:8888/haproxyadmin?stats

結果:此時vip仍在14手中,證明了keepalived配置了不搶佔vip,不必浪費資源去擷取vip。

回到頂部  6.4、測試負載平衡

1、全部正常啟動,此時vip在14手中

2、分別在11、12中開啟抓包

# tcpdump -n -i eth0 host 192.168.95.11 and 192.168.95.14# tcpdump -n -i eth0 host 192.168.95.12 and 192.168.95.14

3、使用不同用戶端登陸jack使用者,不斷向資料庫添加資料

結果:此時14向11、12都有發送資料,此時證明負載平衡

【我們設定的haproxy中balance方式是最少串連方式,假若採用roundrobin方式測試結果將會更加明顯】

注意:

當某一台mysql掛了以後,haproxy會將其踢出mysql伺服器群組。

當有命令傳來時會將其轉寄到正常的伺服器上。

當出問題的mysql恢複後,haproxy又會自動地將它放回mysql伺服器群組中,並且自動同步沒有同步的資料

測試:

1、全部正常啟動

mysql1、mysql2都正常

 2、將mysql2關掉

mysql2出問題,將其踢出mysql群組

3、啟動mysql2

mysql2恢複後又將其放回mysql群組裡

【當mysql2掛掉時,若有資料插入,將會轉寄給mysql1,當mysql恢複後,又會將這些資料同步到mysql2中】

 

回到頂部7、總結與建議

  在這篇博文中我們不僅僅只關注這一整個mysql高可用負載平衡的實現方式,我們還應該理解haproxy以及keepalived的工作方式。Haproxy和keepalived這兩個工具很強大,瞭解他們的實現方式,那麼就可以以此類推與其他伺服器組合構建強大健壯的服務叢集。例如它可以與apache組合,構成高可用負載平衡的web叢集。

  這篇文章中只是簡簡單單的搭建了一個mysql高可用負載平衡的環境,真正應用到生產環境中,還需要根據具體項目進行相應的修改。

  最後我的小建議就是看完這篇部落格可以去瞭解瞭解更多的haproxy和keepalived的相應配置,以及學習與haproxy功能差不多的LVS。

 

(以上是自己的一些見解與總結,若有不足或者錯誤的地方請各位指出)

mysql 主從配置和叢集負載平衡

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.