追蹤
NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落
關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

本部落格文章撰寫前進邁向第五年(since 2009 ~至今)仍繼續推進分享IT學習!!About Windows/Linux Server,Virtualization


分享網誌: 由於,本人預先完成LAB後,才補上撰寫文章與截圖,若發現文圖對照說明有誤..本人將盡快校正,也請不吝指教! Thanks!

  • 174780

    累積人氣

  • 11

    今日人氣

    1

    追蹤人氣

使用 Haproxy 搭建高可用與負載平衡叢集(二)MariaDB 應用..by Neil


 
(1.)編寫官方"REPO"檔案(在.201,202 .203) Server 上編寫並安裝MariaDB相關套件 

#MariaDB 5.5 CentOS repository list - created 2013-06-19 02:50 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
~

安裝MariaDB 相關套件

yum -y install MariaDB-Galera-server MariaDB-client MariaDB-shared MariaDB-test galera



(2.)啟動MariaDB並配置Galera同步配置  以.201 為例: 202  請照做(這邊略過203)

   
啟動MariaDB 並配置資料庫root 帳號與權限 & Galera Cluster 複寫同步

   帳號密碼驗證配置
 
   本例以: angel 帳戶為例  (帳號/密碼 配置部分.201,202,203 請預先配置OK)

       Grant all  privileges  on    *.*    to angel@localhost identified by 'xxxxx';

      Grant  all  privilehes  on   *.*   to  angel@'192.168.11.%' identified by 'xxxxx';


vi /etc/my.cnf.d/server.cnf       # .201 編寫組態如下,因為第叢集裡第一台啟動須讓其他同步

wsrep_cluster_address="gcomm://" 



[mariadb-5.5]
max_connect_errors=1000                                     #連線錯誤訊息flush-hosts錯誤解決
wsrep_provider=/usr/lib64/galera/libgalera_smm.so   
wsrep_cluster_address="gcomm://"                              
wsrep_sst_auth=angel:xxxx                                  #叢集裡成員間同步訊息傳輸時帳戶/密碼驗證設定

vi /etc/my.cnf.d/server.cnf              #以下是202 配置



依序啟動MariaDB(.201) 與 (.202): 並檢查:3306 與 4567(galera) 服務埠是否起來 

/etc/init.d/mysql restart

chkconfig mysql on 




驗證.201  & .202 檢視是否同步Messages

mysql -e "SHOW STATUS LIKE 'wsrep%';" -p 

wsrep_connectedon
wsrep_incoming_addressess
wsrep_local_state_comment

wsrep_ready on              #下圖.201



wsrep_connectedon
wsrep_incoming_addressess
wsrep_local_state_comment

wsrep_ready on  #下圖.202


登入.201 新增資料庫測試是否可複寫寫到.202

  <.201 建立資料庫anglea>

   回到.202 檢視是否存在資料庫"Angela"?  Ans: Angela 已從.201 同步過來

(.3)擴充測試節點.203

vi /etc/my.cnf.d/server.conf

[mariadb-5.5]
max_connect_errors=1000
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.11.201"
wsrep_sst_auth=angel:xxxxxx

-----------

/etc/init.d/mysql restart

chkconfig mysql on  

 
 

再來查看一次(這三台機器已被綁定)

mysql -e "SHOW STATUS LIKE 'wsrep%';" -p 

WSREP_INCOMING_ADDRESSESS: 192.168.11.203:3306,
                                                          192.168.11.202:3306,
                                                          192.168.11.201:3306




重新登入203 查看看node 1 & node 2 資料是否已被複寫到新增加叢集nod2(.201)

未加入叢集前資料庫未有anglea & neil 2個 資料庫當納入叢集架構後:

資料一併複寫(平行式擴充)

確實是比以往Master to Master (主/主) 複製更有彈性(容易)可以輕易達到我們要

galera cluster 有助於我們實現 Muti-Master to Master Replication 目標.

接下來我們只要放上Haproxy 做 galera cluster 負載平衡+高可姓(容錯自動轉移)

可完成中小型的資料庫叢集系統

(.4) 裝上Haproxy 使 Galers Cluster 可達成HA 與 Round Robin 負載平衡營運架構 

本人過去曾寫過一邊關於傳統MySQL 主/主 複寫 搭配Haproxy 完成叢集架構現在

不介紹安裝過程: 請參祥:
 
http://blog.yam.com/keynes0918/article/63269343 

 配置畫面如下: 綁定 192.168.11.205:3306 Port 供前端程式(EX:PHP,JSP)存取

               前端程式存取MySQL: 請配置一個可供遠端存取帳戶/密碼,以利前端

               (程式端)透過Haproxy介面與後端真實DB連寫存取(read/write)之用

               我們在haproxy 指定使用RounRobin 負載平衡方式,並配置三台機器權重

               值分別是 .201(weight 1) & .202(weight 2)  & .203 (weight 3)
 
               另外Haproxy 會check Port:3306 倘若三台機器中某一台掛點

               將重新連結叢集裡的其他Member(Take Over),繼續提供服務,達成高可用性

測試遠端連線存取資料庫讀寫

mysql -u angel -h 192.168.11.205 -p    #測試透過Haproxy 中繼介面成功連線後端DB



新增資料庫: chun_ju 測試是否三個DB皆被寫入(確認三台DB皆有被寫入紀錄)


node1: Cent201


node1: Cent202

node1: Cent203



測試HA 高可用性:容錯自動移轉

登入Cent202 修改Wsrep 配置

SET GLOBAL wsrep_cluster_address='gcomm://192.168.11.201:4567,192.168.11.203:4567'

我們計畫幹掉.201 & .202 測試 MariaDB是否還可以繼續使用

下圖中將MariaDB .201這台主機幹掉

 


再次遠端測試連線.205 刪除chun_ju 資料庫


mysql -u angel -h 192.168.11.205 -p    #偵測到原先連結不存在,就會轉向尋求其他

                                        節點成員切換維持運作

檢視202,203 同步刪除DB Chun_Ju狀況: 一致證明容錯轉移/高可用性是可行的!!

最後觀看叢集狀況: 下圖中叢集成員將失效節點.201 自動移除

 wsrep_cluster_size = 2


當我將失效成員.201 加回來即刻找線上其他成員進行資料同步動作(本Lab結束)

 wsrep_cluster_size = 3

相簿設定
標籤設定
相簿狀態