NEIL's_學而時習之x不學無術~私藏IT技術經驗分享部落

關於部落格
NEIL. Cheng....寫作只是為了日後工作之備忘操作參考

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


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

  • 153344

    累積人氣

  • 44

    今日人氣

    0

    訂閱人氣

LVS+Keepalived 打造資料庫伺服器兼具"負載平衡" 及"高可用性(容錯移轉)叢集架構by Neil

 
實驗開始:

LVS Master / Backup  兩台負載平衡器需預先安裝以下服務(LVS+Keepalived Role)


LVS 必裝: ipvsadm-26-2

Keepalived 必裝: keepalived-1.2.7-3

yum -y install  ipvsadm

yum -y install  keepalived 



MariaDB 資料庫服務安裝 兩台DB需安裝於Cent223,Cent224 機器上(DB Role)

vi   /etc/yum.repos.d/mariadb

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


然後手動匯入簽署驗證金鑰

rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB


安裝Mariadb 服務/開機自動啟用

yum install MariaDB-server MariaDB-client

chkconfig mysql on 

/etc/init.d/mysql start


登入MariaDB 配置好root 密碼(略過)我們檢視 主主同步(Cent223 <->Cent224) 狀況

下圖: 登入測試

 Show slave status G;   #查看Slave 同步狀況,確認Slave OK (指定彼此為自己Master)

 Slave_IO_Running: Yes

 Slave_SQL_Running: Yes



OK 兩台DB 主主(Master TO Master Replication) 已搞定,接下來我們要搞定頂層

兩台LVS 負載平衡器(Cent221及Cent222)

登入Cent221 撰寫keepalived 配置檔案&參考配置範例如下(BACKUP請參考下範例修改,不贅述)

現以Master Role 演示

vi /etc/keepalvied/keepalived.conf

global_defs {
   notification_email {
     neil@neil0918u.com                 #通知服務節點掛點後,收發警訊者,一行一E-MAIL Address
   }
   notification_email_from neil3@neil0918u.com   #使用哪個帳號發信?
   smtp_server 192.168.11.201          #SMTP Server IP 
   smtp_connect_timeout 30
   router_id LVS_DB_1
}

vrrp_sync_group DB {     # 兩台LVS 需一致加入配置(Master LVS故障時方可切換Backup LVS)
group {
VI_mariadb
}
}

vrrp_instance VI_mariadb {
    state MASTER          #state  必須 一為MASTER 另一設為BACKUP不可相同            
    interface eth0
    lvs_sync_daemon_interface eth0
    virtual_router_id 10     # router-id  Master Backup 需相異 
    priority 100                #優先權: 在此我們Master:100 , Backup:80
    advert_int 1
    authentication {         #兩台LVS之間驗證資訊/密碼必須一致
        auth_type PASS
        auth_pass 7788
    }
    virtual_ipaddress {
        192.168.11.251   #在此可以增加對組VIP,區分不同virtual_server 對應服務處理所需
    }
}

virtual_server 192.168.11.251 3306 {  #綁定VIP服務與對應服務Port: 3306 即MariaDB
    delay_loop 6    #檢查間隔時間
    lb_algo wrr      #負載平衡演算法:wrr 參考權重值決定輪詢分配比例
    lb_kind DR      #DR模式: 連線進來由LVS決定調配,回覆則由實體主機(Realserver直接回覆client)
    #persistence_timeout 120
    protocol TCP
   
    #sorry_server 192.168.11.224 3306
 
real_server 192.168.11.223 3306 {     #將後端實體DB加入此
    weight 10              #.223 權重設較低
    TCP_CHECK {
    connect_timeout 5     #連線超時秒數
    nb_get_retry 2          #失敗重新嘗試連線次數
    connect_port 3306
}
}
real_server 192.168.11.224 3306 {
weight 20          #.224 權重設較高
TCP_CHECK {
connect_timeout 5
nb_get_retry 2
connect_port 3306
}
}
}

vrrp_instance  第一段快照

real_server  第二段快照:  "nb_get_retry_3  修正為   nb_get_retry 2"

撰寫組態完成後重新啟動Master & Backup 生效以上設定

/etc/init.d/keepalived restart

chkconfig keepalived on 


切換Cent223/Cent224 兩台MariaDB 接下來我們需要


撰寫啟動指令搞"/usr/local/bin/mariasd"  開機時自動附掛eth0:1  VIP: 192.168.11.251   


  vi /usr/local/bin/mariasd   

  
 #!/bin/bash
    #desciription : start realserver
    MYSQLHA=192.168.11.251   #虛擬IP綁定192.168.11.251
    . /etc/rc.d/init.d/functions
   case "$1" in
    start)
    echo " start LVS of REALServer"
    /sbin/ifconfig eth0:1 $MYSQLHA broadcast $MYSQLHA netmask 255.255.255.255 up
    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore           #忽略arp需求
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    stop)
    /sbin/ifconfig eth0:1 down
    echo "close LVS Directorserver"
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    exit 1
    esac

  chmod +x /usr/local/bin/mariasd 

  echo   " /usr/local/bin/mariasd start >  /dev/null 2 &1 " >> /etc/rc.local

 分別 於兩台Mariadb啟動mariasd 指令搞

  /usr/local/bin/mariasd  start

  接者檢視eth0:1 是否成功掛載VIP:192.168.11.251

  當我執行start 指令搞自動掛載VIP, 當執行stop 指令稿後,將自動卸離VIP,並讓arp 需求回應正常




[OK 到目前為止我們環境佈署已完成-現在我們要最終測試 叢集failover HA]

首先我用局網 Navicat for MySQL 連線測試 VIP:192.168.11.251: 3306 是否正常? 

  下圖: 配置連線MariaDB(VIP:192.168.11.251) 資訊=> 連線測試


   下圖: 成功連線至VIP:192.168.11.251 : 然後我再chunju 做幾項SQL語法測試也正常無問題
 
    表示VIP已經順利幫我們轉發 Port: 3306  到後端 Realserver 

    由於權重值配置Cent224 (20) > Cent223(10) 推估目前連線是被派發CentOS224這台

    機器上運作!!   





接者我們手動關閉Cent224 這台Mariadb 服務

   /etc/init.d/mysql stop

回頭檢視LVS_Master Log 資訊 :我們可看出一些訊息變化

cent221 Keepalived_vrrp[2221]: IPVS: Daemon has already run
cent221 Keepalived_vrrp[2221]: VRRP_Group(DB) Syncing instances to MASTER state
cent221 Keepalived_vrrp[2221]: VRRP_Instance(VI_mariadb) Sending gratuitous ARPs on eth0 for 192.168.11.251
cent221 Keepalived_healthcheckers[2220]: TCP connection to [192.168.11.224]:3306 failed !!!
cent221 Keepalived_healthcheckers[2220]: Removing service [192.168.11.224]:3306 from VS [192.168.11.251]:3306
cent221 Keepalived_healthcheckers[2220]: Remote SMTP server [192.168.11.201]:25 connected.cent221 Keepalived_healthcheckers[2220]: SMTP alert successfully sent.

解析: 偵測到.224 MariaDB 連線失效,將其移除LVS派送名單,並傳E-Mail訊息給管理員通報



再來看看ipvsadm -Ln 顯示訊息:   確認.224 已經被移除轉發名單,改由.223 接手


再次遠程連線MariaDB做測試: 測試新插入一筆資料做測試

實際過程中在HA 轉移過程中會中斷 < 5 秒 後恢復運行


  當我修復Cent224 後重新同步Cent223 數據發現(剛剛在.223 新增一筆資料已順利被同步

  到.224)
證明方才操作是在.223上新增一筆資料
   

最終測試: 測試當 LVS Master 被摧毀 , LVS Backup  使否會順利接管LVS Master 工作?

Shutdown eth0 (LVS Masetr)  後 ,來 Cent222(LVS Backup) 底下檢視LOG

當偵測到原Master 掛點時,Backup 角色開始接手工作=>  Entering MASTER STATE

Keepalived_healthcheckers[2114]: Using LinkWatch kernel netlink reflector...
Keepalived_healthcheckers[2114]: Activating healthchecker for service [192.168.11.223]:3306
 cent222 Keepalived_healthcheckers[2114]: Activating healthchecker for service [192.168.11.224]:3306
cent222 kernel: IPVS: sync thread started: state = BACKUP, mcast_ifn = eth0, syncid = 20
cent222 Keepalived_vrrp[2115]: VRRP_Instance(VI_mariadb) Transition to MASTER STATE
cent222 Keepalived_vrrp[2115]: VRRP_Group(DB) Syncing instances to MASTER state
cent222 Keepalived_vrrp[2115]: VRRP_Instance(VI_mariadb) Entering MASTER STATE
cent222 Keepalived_vrrp[2115]: VRRP_Instance(VI_mariadb) setting protocol VIPs.
cent222 Keepalived_healthcheckers[2114]: Netlink reflector reports IP 192.168.11.251 added
cent222 Keepalived_vrrp[2115]: VRRP_Instance(VI_mariadb) Sending gratuitous ARPs on eth0 for 192.168.11.251
 cent222 kernel: IPVS: stopping backup sync thread 2116 ...



於Cent222 底下檢視ipvsadm -Ln : VIP服務運行正常


使用遠程.201 遠端連線VIP:192.168.11.251:3306  持續操作SQL 語法(叢集轉移成功)

 mysql -uneil -p -h 192.168.11.251 

insert into chun1(no,name,address,tel)values(4,"GGGG","大中華",0889765678);

select no,name,address from chun1 where no <=4 and address like "%中華$"
 


另外方才我們配置偵測服務掛點會發送E-Mail訊息給網管或系統管理員(警訊TCP_Check

 簡單訊息如下, 警訊通報管理員及時處理,本LAB到此圓滿演示結束



LAB實驗後心得:  

本人於二年前曾發布過"LVS+Keepalived For Apache 打造多網站(Website)負載平衡解決方案

主要是考量企業網站需要達到SLB(Server Load blance) 且同時須要有高可用(HA) 設計而實作

今日再度此用LVS+Keepalived 架構 保護對象是DB, 使用此解決方案彈性很高只要是TCP/UDP運作

服務(Samba,FTP..等)大多皆可以導入此解決方案運作(這方面極具彈性)故推薦給有需要企業參考
 
相簿設定
標籤設定
相簿狀態