DRBD+MySQL+keepalived高可用MySQL方案

 

DRBD+MySQL+keepalived高可用MySQL方案

 

DRBD+MySQL+keepalived高可用MySQL方案1

一、DRBD集羣介紹2

1.1 系統介紹2

1.2 工作原理及使用場景2

二、實驗目的2

三、實驗原理3

3.1 實驗拓撲3

3.2 實驗環境設備3

四、配置步驟3

4.1 實驗前準備環境3

4.1.1 修改主機名稱3

4.1.3 同步系統時間4

4.2 DRBD 部署5

4.2.1 DRBD的安裝5

4.2.2 DRBD使用磁盤分區5

4.2.3 DRBD的配置5

4.2.5 DRBD設備角色切換11

4.2.6 DRBD腦裂後的處理12

4.2.7 DRBD的性能優化13

4.3 MySQL部署14

4.3.1  MySQL的安裝與配置14

4.3.2 手動切換DRBD主從,看另外一臺服務器是否有相同數據。15

4.4 keepalived 部署17

4.4.1 keepalivedVIP切換測試19

4.5 DRBD+MySQL+keepalived 服務檢查腳本20

五、實驗結果驗證29

5.1 測試MySQL或者keepalived任意服務出現異常後,DRBD主備節點是否支持自動切換29

5.2 當主節點服務器重啓時,DRBD主備節點是否支持自動切換31



一、DRBD集羣介紹

1.1 系統介紹

    DRBD(DistributedReplicatedBlockDevice)是一個基於塊設備級別在遠程服務器直接同步和鏡像數據的軟件,用軟件實現的、無共享的、服務器之間鏡像塊設備內容的存儲複製解決方案。它可以實現在網絡中兩臺服務器之間基於塊設備級別的實時鏡像或同步複製(兩臺服務器都寫入成功)/異步複製(本地服務器寫入成功),相當於網絡的RAID1,由於是基於塊設備(磁盤,LVM邏輯卷),在文件系統的底層,所以數據複製要比cp命令更快DRBD已經被MySQL官方寫入文檔手冊作爲推薦的高可用的方案之一。通過keepalived服務實現高可用集羣的故障轉移集羣。

1.2 工作原理及使用場景

採用keepalived雙機熱備軟件來保證數據庫的高穩定性和連續性,數據的一致性由DRBD這個工具來保證。默認情況下只有一臺mysql在工作,當主mysql服務器出現問題後,系統將自動切換到備機上繼續提供服務,當主數據庫修復完畢,又將服務切回繼續由主mysql提供服務。

二、實驗目的 

    通過實驗驗證keepalived+DRBD+MySQL的高可用集羣功能,模仿當keepalived或者MySQL服務宕機,熱備服務器是否能繼續提供服務進行測試;當主節點服務器異常重啓或機器故障,熱備服務器是否能繼續提供服務進行測試;通過該實驗驗證keepalived與heartbeat對於DRBD的高可用功能進行對比。

三、實驗原理

3.1 實驗拓撲

       wKiom1ndLxjy4BLtAABB9UakqBU840.png-wh_50      

3.2 實驗環境設備

序號

設備名稱

設備系統

IP地址

軟件環境

DRBD磁盤

1

db-server-01

Centos6.5-64bit

172.16.200.81

DRBD+MySQL+keepalived

/dev/sdb1

2

db-server-01

Centos6.5-64bit

172.16.200.82

DRBD+MySQL+keepalived

/dev/sdb1

3

VIP

N/A

172.16.200.88

N/A

N/A

四、配置步驟

4.1 實驗前準備環境

4.1.1 修改主機名稱

實驗前將兩臺主機的主機名稱進行修改,通過修改/etc/hosts和/etc/sysconfig/network相關的修改內容如下:

wKiom1ndL_aBLNp9AAAg_WfwzpM566.png-wh_50

wKioL1ncwOjwgkf5AAAgETnhxEw815.png-wh_50

4.1.2 關閉防火牆

    關閉服務器系統防火牆,並關閉selinux服務。相關服務的關閉操作在此不在做相關操作。

4.1.3 同步系統時間

對於高可用集羣服務時間的同步是很關鍵的環節,時間不同步將會影響高可用集羣的使用。相關時間同步步驟如下,兩臺機器均做如下操作。

[root@db-server-01 ~]# yum install ntp

[root@db-server-01 ~]# ntpdate 202.120.2.101

注:202.120.2.101爲上海交通大學時間服務器

 

4.2 DRBD 部署

4.2.1 DRBD的安裝

對於DRBD的安裝方式可以採用在官方網站下載源碼包來編譯或直接使用yum來安裝。這裏已yum安裝爲例進行安裝配置。

兩臺主機均進行相同配置,這裏已主機db-server-01配置爲例進行配置。

[root@db-server-01~]# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm #更新rpm包

[root@db-server-01~]# yum -y install drbd83-utils kmod-drbd83 #安裝drbd83

[root@db-server-01~]# modprobe  drbd

[root@db-server-01~]# lsmod |grep drbd  #檢查是否加載drbd模塊

安裝完成之後,在/sbin目錄下面有drbdadm、drbdmeta、drbdsetup命令。以及/etc/init.d/drbd 啓動腳本。

4.2.2 DRBD使用磁盤分區

    保證兩臺機器硬盤的型號和性能一樣好,才能保證在切換後secondary節點能完成原來primary節點所承擔的業務負載。同時考慮DB的大小和未來的增長量,可以使用LVM進行分區。這裏分配大小爲20GB的/data分區給數據使用,兩臺機器完全一樣。

[root@db-server-01 ~]#  fdisk /dev/sdb  # 新建磁盤分區

注:此時不要格式化分區,兩臺主機,創建好磁盤分區報錯即可,無需格式化磁盤。文件系統的掛載只能在Primary節點進行,因此,也只有在設置了主節點後才能對drbd設備進行格式化。

4.2.3 DRBD的配置

DRBD的運行需要讀取/etc/drbd.conf配置文件。可以通過以下命令重建這個配置文件,該文件中描述了DRBD設備與硬盤分區的映射關係和DRBD的一些配置參數。(兩臺主機配置相同,這裏已主機配置db-server-01爲例)

[root@db-server-01 ~]#  vi /etc/drbd.conf

global { usage-count yes; }  # 是否參加DRBD使用者統計

common { syncer { rate 200M; } }       #同步速率,視帶寬而定

resource r0 {                         #創建一個資源,名字叫"r0"

        protocol C;                   #選擇的是drbd的C 協議(數據同步協議,C爲收到數據

並寫入後返回,確認成功)

        startup {

        }

        disk {

                on-io-error detach;

        }

        net {

        }

        on db-server-01 {            #設定一個節點,分別以各自的主機名命名

                device /dev/drbd0;   #設定資源設備/dev/drbd0 指向實際的物理分區 /dev/sdb1

                disk /dev/sdb1;

                address 172.16.200.81:7888;  #設定監聽地址以及端口,用於與另一臺主機通信。

                meta-disk internal;

        }

        on db-server-02 {

                device /dev/drbd0;

                disk /dev/sdb1;

                address 172.16.200.82:7888;

                meta-disk internal;     # drbd的元數據存放方式,internal表示是在同一個局域網內

        }

}

Db-server-01配置

wKioL1ncwQfgADsnAABxjomZoPw581.png-wh_50 

Db-server-02配置

wKioL1ncwR2wHkSoAABt9KDGFtY220.png-wh_50

4.2.4 DRBD的啓動

    啓動DRBD服務之前,首先分別在兩臺主機的/dev/sdb1分區上創建DRBD元數據信息。

執行的命令如下:

[root@db-server-01 ~]# drbdadm create-md  all

[root@db-server-02 ~]# drbdadm create-md  all

    這裏可以使用drbdadm create-md  r0 代替drbdadm create-md all,r0是在配置文件中定義的資源名稱。

現在啓動DRBD服務,分別在兩臺主機上執行啓動操作。

注:如果在通過drbdadm create-md all 創建元數據不成功,使用以下方式處理,操作時確認分區上的數據已備份。

[root@db-server-01 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

[root@db-server-02 ~]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

執行完“dd”命令後,在執行“drbdadm create-md all”命令。啓動DRBD服務。   

設置主節點後格式化主節點的DRBD分區

 

分別在兩臺服務器上啓動DRBD服務:

[root@db-server-01 ~]# /etc/init.d/drbd start

[root@db-server-02 ~]# /etc/init.d/drbd start

wKioL1ncwT_w4tldAADkIjtzXTg362.png-wh_50

查看DRBD狀態:

[root@db-server-01 ~]# /etc/init.d/drbd status

wKiom1ndMFzTfYYJAAAkVpknhxI716.png-wh_50

[root@db-server-02 ~]# /etc/init.d/drbd status

wKiom1ndMG6Dk7PKAAAhnFPd7s8175.png-wh_50

可以看見兩臺主機還都沒有主節點。設置當前節點(db-server-01)爲主節點,並進行格式化和掛載。

注:掛載DRBD分區之前,首先要確認當前主機的DRBD分區是Primary狀態。

執行以下命令:

[root@db-server-01 ~]# drbdadm -- --overwrite-data-of-peer primary all

[root@db-server-01 ~]# mkfs.ext4 /dev/drbd0

[root@db-server-01 ~]# mkdir /data

[root@db-server-01 ~]# mount /dev/drbd0 /data/

wKioL1ncwXOgk9OPAAQqMJrbefM812.png-wh_50

 在另外一臺主機也創建掛載目錄/data ,注意:不要執行格式化該主機分區,也不要掛載相應的磁盤。

[root@db-server-02 ~]# mkdir /data

     磁盤掛載完成後,再次查看DRBD的狀態(可以看見主備各自的節點分爲主備)。

可以使用cat /proc/drbd 和 /etc/init.d/drbd status 命令進行查看。

wKioL1ncwafRL8R9AAAjWLrp5aA017.png-wh_50

wKioL1ncwaeQwvmiAAArAGAxB44419.png-wh_50

從輸出的信息可知,磁盤的狀態都是“UpToDate”,表示數據同步完成了。

輸出中的一些參數的含義如下:

ro是角色信息,Primary/Secondary說明了當前主機是primary節點,另外一臺是secondary節點。

ds是磁盤狀態,顯示數據是否一致(如果顯示 UpToDate/UpToDate表明同步沒有延時)

       ns是網絡發送的數據包,以K字節計算。

       dw是磁盤寫操作。

dr是磁盤讀操作。

4.2.5 DRBD設備角色切換

   DRBD設備在進行角色切換操作前,需要先在主節點上執行umount命令,先掉對DRBD設備的掛載,然後在另一臺主機上把DRBD角色修改爲Primary。最後在執行掛載。操作如下:

primary節點上執行以下操作:

wKiom1ndMMGBVhw9AAAMW5LRzf4256.png-wh_50

secondary節點上執行如下操作:

wKiom1ndMODwvPcfAAAYWDw__Us786.png-wh_50

這是再次查看DRBD的狀態,確認是否完成切換。

wKiom1ndMP3Dd9BuAAAhp3SJb0M040.png-wh_50

wKioL1ncwe_xYIedAAAmbRdht5Y316.png-wh_50

通過以上截圖確認角色切換完成。

還有一種切換策略,先停止primary節點的DRBD服務。

然後在secondary節點上執行如下命令:

#  drbdadm --  --overwrite-data-of-peer primary all

#  mount /dev/drbd0 /data/

相關操作截圖如下:


wKiom1ndNECCUR2-AAAU6zUZv5Y860.png-wh_50

wKiom1ndNECwy5dKAAAugJDWSrE895.png-wh_50

再次查看DRBD狀態,當前節點已爲primary節點。

wKioL1ncxUPgn9vLAAAitedECrA707.png-wh_50

4.2.6 DRBD腦裂後的處理

    DRBD出現腦裂後,會導致drbd兩邊的磁盤數據不一致,在確定要作爲從的節點上切換成secondary,並放棄該資源的數據:

drbdadm secondary r0

drbdadm -- --discard-my-data connect r0

在要作爲primary的節點重新連接secondary(如果這個節點當前的連接狀態爲WFConnection的話,可以省略),使用如下命令連接:

drbdadm connect r0

4.2.7 DRBD的性能優化

    可以考慮以下幾個方面優化DRBD性能。

1)網絡環境

     能使用千兆網卡的不要使用百兆網卡。當前主流服務器都使用千兆網卡,交換機也不例外。同時,DRBD的數據同步使用的網絡最好和提供服務的網絡分開,儘量獨立出來。例如:在兩塊網卡上直接連接一個網線,用做DRBD的數據同步。

(2)用做DRBD分區的磁盤的性能

     用做DRBD分區的磁盤的性能儘量好,例如可以考慮通過RAID提高I/O性能,在網絡環境很好的情況下,DRBD分區可能會由於I/O的寫性能而成爲瓶頸。

(3)更新系統

     儘量把系統更新成最新的內核以及64位的系統,同時使用最新版本的DRBD。

(4)注意syncer參數設置

     Syncer主要用來設置同步相關參數。可以設置“重新”同步(re-synchronization)的速率(rate),當節點間出現不一致的block時,DRBD就需要執行re-synchronization動作,而syncer中的參數rate就是用來設置同步的速率的,rate的設置與網絡和磁盤I/O能力密切相關。

    千兆網絡的同步速率大約是125Mbit/s,百兆網絡的同步速率大約是11Mbit/s。用這個同步速率和磁盤寫入速率(hdparm-Tt/dev/drbd0測試結果)中最小者的30%帶寬來設置re-synchronization是比較合適的,這也是官方給出的建議。

    例如,同步速率爲125Mbit/s,磁盤寫入速度爲119Mbit/s,應該設置rate爲不能超過33Mbit/s。

(5)注意al-extents參數設置

     al-extents控制着一次向磁盤寫入多少個4MB的數據塊。增大這個參數的值有以下幾個好處:

     可以減少更新元數據到DRBD設備的頻率。

     降低同步數據時對I/O流的中斷數量。

     提高修改DRBD設備的速度。

     但是同時也存在一個風險:當主節點出現宕機時,所有活動的數據(al-extends的值X 4M的數據塊)需要在同步連接建立後重新同步,即在主節點出現宕機時,備節點出現數據不一致(outdate)的情況。因此,不建議在HA部署上調整這個參數,可以在某些情況下調整這個參數來×××能。

    總的來說,以上5個方面需要特別注意,調整其他參數影響則較小。

4.3 MySQL部署

4.3.1  MySQL的安裝與配置

安裝MySQL有多種方法,我這裏爲了簡單直接使用yum安裝。

注:兩臺服務器均需要安裝MySQL,兩臺服務器上的MySQL版本需要一致,對於MySQL的用戶uid和gid均需要相同,否則切換後會導致MySQL數據目錄的屬主不正確而導致啓動失敗。關鍵點:在兩臺服務器的MySQL服務安裝完成後,secondary節點的MySQL不需要初始化(就是不啓動數據庫服務,切記)

我這裏以Primary安裝爲例yum安裝MySQL。

[root@db-server-01 ~]# yum install -y mysql-server mysql-devel mysql mysql-bench mysql-test

按裝完成後,使用如下命令啓動MySQL服務:

[root@db-server-01 ~]# /etc/init.d/mysqld start

將數據文件放到DRBD分區上

[root@db-server-01 ~]# cp -R /var/lib/mysql/ /data/mysql/

[root@db-server-01 ~]# chown -R mysql:mysql /data/mysql/

修改/etc/my.cnf文件,在[mysql]組增加如下配置:

datadir=/data/mysql

待兩臺主機均按以上操作將MySQL安裝完成後,分別啓動服務測試,是否能正常啓動。

4.3.2 手動切換DRBD主從,看另外一臺服務器是否有相同數據。

 切換前數據狀況和主備狀態

[root@db-server-01 ~]# ll /data

wKioL1ncxZSBFdaBAAATh2o0_IQ429.png-wh_50

wKioL1ncxZSA20xBAAAe0wgD4Pw212.png-wh_50

 

[root@db-server-02 data]# ll /data

wKiom1ndNLHDhIjSAAAGSXGTePY287.png-wh_50

wKioL1ncxaPhicELAAAe_uOU1x8985.png-wh_50

可以看見當前的primary服務器爲db-server-01,也就是數據在這臺服務器上,secondary服務器爲db-server-02是沒有數據的。

下面我們將主切換成從,需要先卸載文件系統,再執行降級爲從的命令:

[root@db-server-01 ~]# /etc/init.d/mysqld stop  #先停止文件系統的佔用,即停止MySQL服務

Shutting down MySQL. SUCCESS!

[root@db-server-01 ~]# umount /data/     #卸載文件系統

[root@db-server-01 ~]# drbdadm secondary all   #將服務器降級

wKiom1ndNOWB91dRAAAMfdzyXr0405.png-wh_50

從切換成主,要先執行升級成主的命令然後掛載文件系統:

[root@db-server-02 ~]# drbdadm  primary all  #升級爲主

[root@db-server-02 ~]# mount /dev/drbd0 /data/  #掛載文件系統

[root@db-server-02 ~]# ll /data    #查看數據是否存在

total 20

drwx------ 2 root  root 16384 Sep  3 19:35 lost+found

drwx------ 5 mysql root  4096 Sep  3 23:51 mysql

wKioL1ncxfSBUW2XAAAdRTyzTGI690.png-wh_50

4.4 keepalived 部署

   安裝keepalived有多種方法,我這裏爲了簡單直接使用yum安裝.

   兩臺主機均需要進行相同安裝過程,並進行配置,配置的過程中的配置文件不同。

[root@db-server-01~]# yum -y install keepalived  #兩臺機器分別安裝keepalived軟件。

配置keepalived服務,主備均需要配置,配置信息如在:

注:主備配置都不同之處已經標出,注意修改。

! Configuration File for keepalived

global_defs {

   notification_email {

     [email protected]

     [email protected]

     [email protected]

   }

   notification_email_from [email protected]

   router_id LVS_DEVEL

}

vrrp_instance VI_1 {

    state MASTER    #備機:BACKUP

    interface eth0

    virtual_router_id 59

    priority 100     #備機:80

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.16.200.88

    }

}

wKiom1ndNUWhytA9AAA3TbprUDg864.png-wh_50

wKioL1ncxjfjKhlNAAA0x2a4-8Y908.png-wh_50


配置完成後通過ip  addr查看IP漂移信息。

MASTER 的keepalived服務出現異常時,VIP將漂移到BACKUP節點。

4.4.1 keepalivedVIP切換測試

測試前VIP狀態:

wKioL1ncxmWR5Z5CAAA9ba_mfc0393.png-wh_50

wKiom1ndNXPh-FzHAAA3aCTa9ps028.png-wh_50


當主節點keepalived停止後查看VIP狀態是否正常。

wKiom1ndNaPBkhSTAAA6zyujKVY893.png-wh_50

wKioL1ncxpWjD-MkAAA5C_MRoik347.png-wh_50

測試結果反饋,當主節點keepalived服務停止後,VIP將自動切換到備節點。

注:keepalived+MySQL+DRBD服務在安裝完成後,均不要添加開機啓動項。

4.5 DRBD+MySQL+keepalived 服務檢查腳本

腳本檢測的作用:

1. Check.sh 腳本監測的是當MySQL服務和keepalived服務在主節點服務器的MySQL或者keepalived服務出現異常時,將會將DRBD+MySQL+keepalived服務全部切換到備節點。該腳本的存放目錄自行安排,他的執行需要通過crontab -e任務計劃自動執行。所機器中均加入腳本的執行加入crontab -e 中設置爲每分鐘自動執行。(兩臺機器均添加)

    * * * * * sh /root/check.sh &>/tmp/check.log

2. 

3. Drbdmanager 腳本檢查當主服務器出現宕機時熱備服務器將接管所有服務,並自行啓動。該腳本存放在/etc/rc.d/init.d路徑下,添加執行權限。並在開機啓動項中添加開機啓動,相關操作如下:

# chkconfig --add drbdmanager

# chkconfig  drbdmanager on

Check.sh腳本內容如下:

[root@db-server-01 ~]# cat check.sh

#!/bin/bash

# check drbd mysql

# time:2016.09.07

# organization:Anchnet

i=0

while (( i<=10 ));do

sleep 5

Time=`date`

VIP=172.16.200.88

Mysql=/etc/init.d/mysqld

Mysql_Status=/var/lib/mysql/mysqld.pid

Keepalived_Status=/var/run/keepalived.pid

Keepalived=/etc/init.d/keepalived

DRBD_Status=`/etc/init.d/drbd status | tail -1 | awk '{print $3}' | awk -F/ '{print $1}'`

DRBD=r0

Mount_Poit=/data

DRBD_Data=/dev/drbd0

Command_1=/sbin/drbdadm

Command_2=mount

if [[ -f $Keepalived_Status ]];then

echo "$Time Keepalived OK"

else

$Keepalived restart

fi

if `/sbin/ip addr | grep "$VIP" &>/dev/null`;then

echo "$Time Keepalived MASTER"

if [[ "$DRBD_Status" = "Primary" ]];then

echo "$Time DRBD Primary"

if `$Command_2 | grep $Mount_Poit &>/dev/null`;then

echo  "$Time Mount OK."

if [[ -f $Mysql_Status ]];then

echo "$Time Mysql OK"

echo "************華麗的分割線******************"

else

echo "$Time Mysql Fail"

$Mysql restart start

if [[ -f $Mysql_Status ]];then

echo "$Time Mysql OK"

echo "************華麗的分割線******************"

else

$Keepalived stop && sleep 5

fi

fi

else

$Command_2 $DRBD_Data $Mount_Poit

if [[ $? -eq 0 ]];then

echo "$Time  mount disk ok"

else

$Keepalived stop && sleep 5

fi

fi

else

$Command_1 primary $DRBD

                        if [[ $? -eq 0 ]];then

                                echo "$Time Start drbd Primary"

                        else

                                $Keepalived stop && sleep 5

                        fi

fi

else

if [[ -f $Mysql_Status  ]];then

 $Mysql  stop

                        if [[ $? -eq 0 ]];then

                                echo "$Time Stop Mysql OK"

                        else

                                /bin/kill -9 mysqld

echo "$Time Stop Mysql OK"

                        fi

 if `$Command_2 | grep $Mount_Poit &>/dev/null`;then

u$Command_2 $DRBD_Data && echo "$Time umount OK"

if [[ "$DRBD_Status" = "Primary" ]];then

$Command_1 secondary $DRBD && echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

else

echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

fi

 else

echo "$Time Stop Mysql OK"

if `$Command_2 | grep $Mount_Poit &>/dev/null`;then

                        u$Command_2 $DRBD_Data && echo "$Time umount OK"

                        if [[ "$DRBD_Status" = "Primary" ]];then

                                $Command_1 secondary $DRBD && echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                        else

                                echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                        fi

else

                                if [[ "$DRBD_Status" = "Primary" ]];then

                                        $Command_1 secondary $DRBD && echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                                else

                                         echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                                fi


fi

fi


else

                 if `$Command_2 | grep $Mount_Poit &>/dev/null`;then

                        u$Command_2 $DRBD_Data && echo "$Time umount OK"

                        if [[ "$DRBD_Status" = "Primary" ]];then

                                $Command_1 secondary $DRBD && echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                        else

                                echo "$Time Start secondary OK"

                        fi

                 else

                                if [[ "$DRBD_Status" = "Primary" ]];then

                                        $Command_1 secondary $DRBD && echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                                else

                                         echo "$Time Start secondary OK"

echo "************華麗的分割線******************"

                                fi

 

                fi

 

 

fi

fi

let "i++"

done

 

Drbdmanager.sh腳本內容如下:

[root@db-server-01 ~]# cat /etc/rc.c/init.d/drbdmanager

#!/bin/bash

# drbdmanagermanager drbd

# chkconfig: - 75 05

# description:shutdown drbd

 

Mysql=/var/lib/mysql/mysqld.pid

DRBD_Status=`/etc/init.d/drbd status | tail -1 | awk '{print $3}' | awk -F/ '{print $1}'`

DRBD=r0

Mount_Poit=/data

DRBD_Data=/dev/drbd0

Command_1=/sbin/drbdadm

Command_2=mount

crond=/etc/init.d/crond

. /etc/rc.d/init.d/functions

 

function stop(){

if [[ "$DRBD_Status" = "Primary" ]];then

 /bin/kill crond  &>/dev/null && /bin/kill sh && /bin/kill ${`cat $Mysql`} && /bin/umount $DRBD_Data  && $Command_1 secondary $DRBD &>/dev/null

else

::

fi

}

 

function status(){

if [[ $? -eq 0 ]];then

action "Stop DRBD:" /bin/true

else

action "stop DRBD:" /bin/false

fi

}

case "$1" in

stop)

stop

status

;;

start)

action "Start DRBDManager" /bin/true

;;

*)

echo "INPUT STOP"

;;

esac

Exit

 

五、實驗結果驗證

實驗的驗證結果從以下幾個方面進行驗證。

5.1 測試MySQL或者keepalived任意服務出現異常後,DRBD主備節點是否支持自動切換

測試結果如下:

服務停止前狀態如下:

  

wKiom1ndNfHi6LCxAACq3GC_swI242.png-wh_50

wKiom1ndNfKybErKAAC5GrFLNGE575.png-wh_50


Keepalived服務停止後的結果查看:

  

wKioL1ncxwfCWWqYAADqhNw9EUA615.png-wh_50

wKiom1ndNhWA2rIbAAC02Pg3sMY610.png-wh_50


    通過以上截圖測試結果反饋,通過腳本的執行可以滿足當主節點服務宕機後,熱備節點將結果所有服務,保證業務的正常運行。

注:當進行手動停止MySQL或者keepalived服務進行測試時,一定要將服務徹底的停止,否則在腳本執行的時候MySQL或者keepalived服務將對通過腳本自動重啓,不能起到測試的過程

5.2 當主節點服務器重啓時,DRBD主備節點是否支持自動切換

當服務器重啓前的狀態如下:

wKiom1ndNjSx10uiAAEYpZBL9_Q336.png-wh_50

當主節點服務器

wKioL1ncx-GiDAOhAAD7An9sq5A031.png-wh_50

通過已上測試結果反饋當主節點正常關機後,熱備服務器將自動接管所有服務,保證業務的正常運行。

注:服務器關機測試,僅在當服務器正常重啓的情況下進行,當服務器異常重啓,將會導致服務出現腦裂,異常重啓儘量避免。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章