DRBD+HEARTBEAT+MYSQL實踐過程

### 知識補充,一定要看哦:

工作原理:指定heartbeat服務器作爲主服務器,則另外一臺將自動成爲熱備服務器,然後熱備服務器上的配置heartbeat守護程序來監聽來自主服務器的心跳,如果熱備服務器在指定時間內未監聽到來自主服務器的心跳,就會啓動故障轉移程序,並取得主服務器上的相關資源及服務的所有權,階梯主服務器繼續提供不間斷服務從而達到資源及服務高可用性的目的。

和keepalived服務器一樣,heartbeat高可用是服務器級別的,不是服務級別的。

heartbeat切換的常見條件:

1、服務器宕機

2、heartbeat服務本身故障

3、心跳連接故障(心跳線壞了,網卡,驅動壞了,ip配置及衝突問題 ,心跳線間連接的設備故障(網卡雞交換機),仲裁的機器出問題)

服務故障不會導致切換。可以通過服務宕機 把heartbeat服務停掉

心跳連接:

 heartbeat主機之間通信的一些常用的可行方法:

1、串行電纜,通過交換機等網絡設備連接

2、一根以太網電纜兩網卡直連(交叉線)

3、以臺網電纜,通過交換機等網絡設備連接(增加交換機故障點,同時線路不是專用心跳線,容易受其他數據傳輸的影響。導致心跳報文發送問題)

裂腦:

由於兩臺高可用服務器之間在指定時間內,無法相互檢測到對方心跳而各自啓動故障轉移功能,取得了資源及服務的所有權,而此時的兩臺高可用服務都還存活着並在正常運行,這樣會導致同一個IP或者服務在兩端同時啓動二發生衝突的嚴重問題,最嚴重問題是兩臺主機佔用同一個VIP地址,當用戶寫入數據時可能會分別寫入到兩端,這樣可能會導致服務器兩端的數據不一致或造成數據丟失,爲腦裂,分區集羣或者大腦垂直分割

HEARTBEAT消息類型:

心跳消息:150字節的數據包,可能是單播,廣播或多播方式控制心跳

集羣轉換消息:ip-request主服務器請求接管資源ip-request-resp:得到請求後,背機回覆主機信息(可以人工控制或者參數控制)

重傳請求:

 

心跳控制消息都使用UDP協議發送到ha.cf文件指定的任意端口或指定的多播地址

heartbeat是通過IP地址接管和ARP廣播進行故障轉移的

ARP廣播,在主服務器故障時,備用節點接管資源後,會立即強制更新所有客戶端本地的ARP表(清除失敗服務器的VIP和MAC地址的解析記錄)

 ######測試過程看測試報告

1、操作前準備:兩臺機器各加一塊10G的硬盤及配置網卡IP

IPem1:192.168.28.28   IPem1:192.168.28.29

M:em2:172.16.0.1/25   S:172.16.0.2/25心跳IP地址(心跳網卡不要配置網關,使用直連線

 

軟件版本:drbd-8.4.3.tar.gz

黃色字體是我們需輸入的,綠色字體是我們需看到的信息

操作步驟如下:

2、 修改主機名 (兩臺主機都需操作)

[[email protected] ~]# vi /etc/hosts

  1. 168.28.28  node1

  2. 168.28.29  node2

注:將如上兩行添加到hosts文件

[[email protected] ~]# vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=node1    ##從機上寫node2

3、 停止IPTABLES:service iptables stop ###避免端口被阻塞,如drbd設置的端口

4、添加心跳路由:

主機A上:添加心跳路由/sbin/routeadd -host 172.16.0.2 dev eth2###ip爲對端的IP地址(B主機)

主機B上:添加心跳路由/sbin/route add -host 172.16.0.1dev eth2 

對端的IP地址(A主機)

永久生效:echo '/sbin/route add -host 172.16.0.2 dev eth1'>>/etc/rc.local  對端##的IP地址(A主機)從備3機上,主一樣

route -n

5、 MSDRBDHEARBEAT的配置文件一模一樣

6、 添加互信,rsa添加主機之間的互信

 

  • 爲新添加的磁盤sbd分區並格式化, MS都要分區,只要格式一邊磁盤即可(mkfs.ext4 /dev/sdb1),

[[email protected] ~]#fdisk /dev/sdb

…………

Command (m for help): n  ##輸入n

Command action

  e   extended

  p   primary partition (1-4)

p                       ##輸入P

Partition number (1-4): 1       ##輸入1

First cylinder (1-1305, default 1):

Using default value 1

Last cylinder, +cylinders or +size{K,M,G}(1-1305, default 1305):

Using default value 1305

 

Command (m for help): w      ##輸入w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

Syncing disks.

 

[[email protected] ~]# ls /dev |grep sdb

sdb

sdb1

[[email protected] ~]# mkfs.ext4 /dev/sdb1

[[email protected] ~]#mkdir /data ###MS都要添加此目錄

[[email protected] ~]# mount /dev/sdb1 /data

[[email protected] ~]# df –h          ##可以查看到已掛載上

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              26G  1.2G  24G   5% /

tmpfs                 244M     0 244M   0% /dev/shm

/dev/sdb1             9.9G  151M 9.2G   2% /data

  • 安裝

   [[email protected] ~]#yum -yinstall flexkernel-headers  ##安裝後再安裝kernel-devel###這裏是個坑,如果直接yum –y kernel後面操作會有問題,不能這麼幹,需要執行yum update –y kernel 直接匹配當前的內核版本,升級後重啓服務器,即可用uname –a 和/usr/src/kernels看到信息是一致的,否則必出問題。

 

    [[email protected] ~]# cat /proc/version ###查看內核信息

Linux version 2.6.32-358.el6.x86_64([email protected]) (gcc version 4.4.7 20120313 (Red Hat4.4.7-3) (GCC) ) #1 SMP Fri Feb 22 00:31:26 UTC 2013

         [[email protected] ~]#cd /usr/local

     [[email protected]]# tar zxvfdrbd-8.4.3.tar.gz

     [[email protected]]# cd drbd-8.4.3

[[email protected] drbd-8.4.3]# ./configure--prefix=/usr/local/drbd --with-km   ##--with-km是啓用內核模塊

checking for gcc... no

checking for cc... no

checking for cl.exe... no

configure:error: in `/usr/local/drbd-8.4.3':

configure:error: no acceptable C compiler found in $PATH

See `config.log' for more details

注:如出現如上報錯,執行如下安裝

[[email protected] drbd-8.4.3]# yum -y install gcc make automakeautoconf  rpm-build

[[email protected] drbd-8.4.3]# ./configure--prefix=/usr/local/drbd --with-km

[[email protected] drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/

注意KDIR的路徑,這個內核源碼路徑2.6.32-358.el6.x86_64需要根據自己的系統修改

[[email protected] drbd-8.4.3]# make install

[[email protected] drbd-8.4.3]#  mkdir -p /usr/local/drbd/var/run/drbd

[[email protected] drbd-8.4.3]# cp/usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/

安裝drbd模塊

[[email protected] drbd-8.4.3]# cd drbd

[[email protected] drbd]# make clean

rm -rf .tmp_versions Module.markersModule.symvers modules.order

rm -f *.[oas] *.ko .*NaNd .*.d .*.tmp*.mod.c .*.flags .depend .kernel*

rm -f compat/*.[oas] compat/.*NaNd

[[email protected] drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/

[[email protected] drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

[[email protected] drbd]# modprobe drbd  ##加載drbd模塊

[[email protected] drbd]# lsmod|grep drbd    ##查看模塊是否加載成功

drbd                 325658  0

libcrc32c               1246  1 drbd

[[email protected] drbd]# cd /usr/local/drbd/etc/

[[email protected] etc]# cat drbd.conf      ##查看drbd的主配置文件

# You can find an example in  /usr/share/doc/drbd.../drbd.conf.example

 

include"drbd.d/global_common.conf";

include"drbd.d/*.res";

以上可見:主配置文件裏面已經包含了全部配置文件和drbd目錄下以.res結尾的文件。

[[email protected] etc]# cd drbd.d/

[[email protected] drbd.d]# pwd

/usr/local/drbd/etc/drbd.d

[[email protected] drbd.d]# ls

global_common.conf

[[email protected] drbd.d]# vim global_common.conf    ##修改全局配置文件

pri-on-incon-degr

pri-lost-after-sb

local-io-error

注:將文件中上面的三行前的#號去掉

[[email protected] drbd.d]# pwd

/usr/local/drbd/etc/drbd.d

[[email protected] drbd.d]# vim drbd.res

resource r1{

 onnode1 {    ##主機名

  device /dev/drbd0;

  disk /dev/sdb1;  #前面格式化磁盤分區的名字

  address 172.16.0.1:7789;  M心跳IP

  meta-disk internal;

         }

 onnode2 {

  device /dev/drbd0;

  disk /dev/sdb1;   #前面格式化磁盤分區的名字

  address 172.16.0.1:7789; #S心跳IP

  meta-disk internal;

         }

}

##這裏寫心跳IP地址,不建議寫管理IP地址,DRBD數據傳輸直接通過心跳,速度什麼都比通過管理IP的來的快,而且還更穩定 等等。

 

[[email protected] drbd.d]# drbdadm create-md r1   ##在node1上初始化資源 如果出現

##「no resources defined! 」的錯誤時,用-c指定需初始化的資源

##  drbdadm -c /usr/local/drbd/etc/drbd.d/drbd.res  create-md r1 

--== Thank you for participating in the global usage survey  ==--

The server's response is:

you are the 19713th user to install thisversion

Writing meta data...

md_offset 10733953024

al_offset 10733920256

bm_offset 10733592576

Found ext3 filesystem

   10482380 kB data area apparently used

   10482024 kB left usable by current configuration

Device size would be truncated, which

would corrupt data and result in

'access beyond end of device' errors.

You need to either

   *use external meta data (recommended)

   * shrinkthat filesystem first

   *zero out the device (destroy the filesystem)

Operation refused.

 

Command'drbdmeta 0 v08 /dev/sdb1 internal create-md' terminated with exit code 40

若出現如上錯誤,這是因爲sdb1已經有文件系統了,已經有數據存在了,請執行如下語句,

[[email protected] drbd.d]# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100

100+0 records in

100+0 records out

104857600 bytes (105 MB) copied, 0.197574 s,531 MB/s

[[email protected] drbd.d]# drbdadm create-md r1  ###執行上面語句後再重新創建drbd設備

Writing meta data...

initializing activity log

NOT initializing bitmap

New drbd meta data block successfullycreated.

Success

 

[[email protected] drbd.d]# umount /data       ##umount/dev/sdb1設備

[[email protected] drbd.d]# service drbd restart   ##重啓drbd服務

Stopping all DRBD resources: .

Starting DRBD resources: [

     create res: r1

   preparedisk: r1

    adjustdisk: r1

    adjust net: r1

]

.#######

到此DRBD配置完成,若出現一端起來一段還在等待過程,說明配置有問題,若啓動DRBD不能同時出現如上信息,說明配置前期工作沒做好,如網絡或者磁盤,MS操作基本一致

[[email protected] drbd.d]# netstat -anput|grep 7789      ##查看監聽端口,如啓動防火牆,需把該端口打開

tcp  0   0 192.168.28.28:35114    192.168.28.29:7789          ESTABLISHED -   

tcp  0   0 192.168.28.28:7789    192.168.28.29:33549         ESTABLISHED -  

[[email protected] drbd.d]# drbdadm role r1  

Secondary/Secondary

#### ##第一次啓動drbd時,兩個drbd節點默認都處於Secondary狀態

由於默認沒有主次節點之分,因而需要設置兩個主機的主次節點,選擇需要設置爲主節點的主機,然後執行如下命令:

[[email protected] drbd.d]# drbdadm -- --overwrite-data-of-peer primary all

第一次執行完此命令後,在後面如果需要設置哪個是主節點時,就可以使用另外一個命令drbdadm primary r1(r1是定義資源的角色)或者drbdadm primary all

在選擇的設置主節點的主機上執行該命令

[[email protected] drbd.d]#  drbdadm cstate r1      ##查看資源的連接狀態

Connected

資源的連接狀態;一個資源可能有以下連接狀態中的一種

StandAlone獨立的:網絡配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由於出現認證失敗或是腦裂的情況

Disconnecting 斷開:斷開只是臨時狀態,下一個狀態是StandAlone獨立的

Unconnected 懸空:是嘗試連接前的臨時狀態,可能下一個狀態爲WFconnection和WFReportParams

Timeout 超時:與對等節點連接超時,也是臨時狀態,下一個狀態爲Unconected懸空

BrokerPipe:與對等節點連接丟失,也是臨時狀態,下一個狀態爲Unconected懸空

NetworkFailure:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空

ProtocolError:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空

TearDown 拆解:臨時狀態,對等節點關閉,下一個狀態爲Unconected懸空

WFConnection:等待和對等節點建立網絡連接

WFReportParams:已經建立TCP連接,本節點等待從對等節點傳來的第一個網絡包

Connected連接:DRBD已經建立連接,數據鏡像現在可用,節點處於正常狀態

StartingSyncS:完全同步,有管理員發起的剛剛開始同步,未來可能的狀態爲SyncSource或PausedSyncS

StartingSyncT:完全同步,有管理員發起的剛剛開始同步,下一狀態爲WFSyncUUID

WFBitMapS:部分同步剛剛開始,下一步可能的狀態爲SyncSource或PausedSyncS

WFBitMapT:部分同步剛剛開始,下一步可能的狀態爲WFSyncUUID

WFSyncUUID:同步即將開始,下一步可能的狀態爲SyncTarget或PausedSyncT

SyncSource:以本節點爲同步源的同步正在進行

SyncTarget:以本節點爲同步目標的同步正在進行

PausedSyncS:以本地節點是一個持續同步的源,但是目前同步已經暫停,可能是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

PausedSyncT:以本地節點爲持續同步的目標,但是目前同步已經暫停,這可以是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

VerifyS:以本地節點爲驗證源的線上設備驗證正在執行

VerifyT:以本地節點爲驗證目標的線上設備驗證正在執行

[[email protected] drbd.d]# drbdadm role r1   #在主上執行,顯示的是主/從。前面爲當前節點

Primary/Secondary

[[email protected] drbd.d]# drbdadm role r1   ##在從上執行,顯示的是從/主,前面爲當前節點

Secondary/Primary

Parimary 主:資源目前爲主,並且可能正在被讀取或寫入,如果不是雙主只會出現在兩個節點中的其中一個節點上

Secondary 次:資源目前爲次,正常接收對等節點的更新

Unknown 未知:資源角色目前未知,本地的資源不會出現這種狀態

[[email protected] drbd.d]#  drbdadm dstate r1  ##查看磁盤狀態

UpToDate/UpToDate

本地和對等節點的硬盤有可能爲下列狀態之一:

Diskless 無盤:本地沒有塊設備分配給DRBD使用,這表示沒有可用的設備,或者使用drbdadm命令手工分離或是底層的I/O錯誤導致自動分離

Attaching:讀取無數據時候的瞬間狀態

Failed 失敗:本地塊設備報告I/O錯誤的下一個狀態,其下一個狀態爲Diskless無盤

Negotiating:在已經連接的DRBD設置進行Attach讀取無數據前的瞬間狀態

Inconsistent:數據是不一致的,在兩個節點上(初始的完全同步前)這種狀態出現後立即創建一個新的資源。此外,在同步期間(同步目標)在一個節點上出現這種狀態

Outdated:數據資源是一致的,但是已經過時

DUnknown:當對等節點網絡連接不可用時出現這種狀態

Consistent:一個沒有連接的節點數據一致,當建立連接時,它決定數據是UpToDate或是Outdated

UpToDate:一致的最新的數據狀態,這個狀態爲正常狀態

 

 

[[email protected] drbd.d]# cat /proc/drbd    ##查看同步進度

version: 8.4.3 (api:1/proto:86-101)

GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2014-08-2017:03:49

 0:cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----

ns:10482024 nr:0 dw:0 dr:10482688 al:0bm:640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

注: ds是磁盤狀態信息

dw是磁盤寫信息

dr是磁盤讀信息

[[email protected] drbd.d]# ls /dev |grep drbd  ##查看drbd設備

drbd0

[[email protected] drbd.d]# mkfs.ext4 /dev/drbd0  ##格式化文件系統(文件格式根據自己的系統環境選擇是ext3,還是ext4,可以根據如下命令來判斷:

[[email protected] drbd.d]# df -Th

Filesystem   Type    Size  Used Avail Use% Mounted on

/dev/sda1    ext4     26G 1.5G   23G   7% /

mke2fs 1.41.12 (17-May-2010)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

655360 inodes, 2620506 blocks

131025 blocks (5.00%) reserved for the superuser

First data block=0

Maximum filesystem blocks=2684354560

80 block groups

32768 blocks per group, 32768 fragments pergroup

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912,819200, 884736, 1605632

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystemaccounting information: done

This filesystem will be automaticallychecked every 30 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[[email protected] drbd.d]# mount /dev/drbd0 /data/   ##掛載DRBD資源必須把DRBD設置成MS模式纔可以。

[[email protected] drbd.d]# mkdir /data/test

[[email protected] drbd.d]# ls /data/

lost+found  test

[[email protected] drbd.d]# umount /data/  ##在切換主從節點前,必須先umount

 [[email protected]]# drbdadm secondaryr1    ##將node1變成備用節點

[[email protected] drbd.d]# drbdadm role r1 ##查看Node1的角色

Secondary/Secondary

[[email protected] drbd.d]# drbdadm primary r1    ##將node2變成主節點

[[email protected] drbd.d]# drbdadm role r1    ##查看Node2的角色

Primary/Secondary

[[email protected] drbd.d]# cat /proc/drbd  

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 buildby [email protected], 2014-08-20 18:01:37

 0: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r-----

    ns:0 nr:10779912dw:10779912 dr:664 al:0 bm:640 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected] drbd.d]# mount /dev/drbd0 /data/

 [[email protected]]# ls /data/       ##看到數據同步進來了。

lost+found test

 

下面可以在裏面寫入數據,umount,從主切換成從,從上切換成主,查看數據的同步情況

第二節:在兩臺主機上都安裝MYSQL實例,在主的/data目錄裏安裝mysql數據庫,進行主從切換,看數據同步情況

在主節點安裝好數據庫,數據目錄爲/data/的目錄(爲DRBD的掛載目錄),配置文件存放在/etc/my.cnf下。備節點只要設置好basedir和my.cnf和主幾點一樣即可

1、數據庫安裝省略,在數據庫裏建庫,建表

mysql> create database otdb;

mysql> use otdb;

mysql> create table t_players ( id intauto_increment primary key,c_userid int ,c_playername varchar(24) );

mysql> show tables;

+----------------+

| Tables_in_otdb |

+----------------+

| t_players      |

+----------------+

1 row in set (0.00 sec)

在數據庫裏添加新表t_players.

第三節:安裝HEARTBEAT

根據系統的版本下載下應的heartbeat 的rpm包

[[email protected] ~]# cat /etc/redhat-release

CentOS release 6.4 (Final



wKioL1gl9KziMUL8AAB44RfnprY156.png-wh_50

                             

使用yum安裝heartbeat

yum--enablerepo=epel install heartbeat

或報錯:

運行yum報錯Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

輯/etc/yum.repos.d/epel.repo,把基礎的恢復,鏡像的地址註釋掉

#baseurl

mirrorlist

改成

baseurl

#mirrorlist

再次執行:

yum --enablerepo=epel install heartbeat

[[email protected] local]#cp/usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/

[[email protected] local]#cp/usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/

[[email protected] local]#cp/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

[[email protected] local]#vi /etc/ha.d/ha.cf

debugfile /var/log/ha-debug

    logfile/var/log/ha-log

    logfacilitylocal0

    keepalive 2

    deadtime 30

    warntime 10

    initdead     120

    udpport 694

 

   mcast eth1 255.0.0.181 694 1 0 ##心跳廣播方式,

這裏需要特別說明的是,我在這裏遇到兩個問題,

1) ha.cf裏面的心跳信息傳播方式如果選擇ucast會有如下報錯導致服務啓動不 了,在網上查資料說是內核得升級才能解決問題:

Mar 17 14:34:59 node3.xxx.com heartbeat: [24573]: ERROR: glib: ucast:error setting option SO_REUSEPORT(w): Protocol not available

Mar 17 14:34:59 node3.xxx.com heartbeat: [24573]: ERROR:make_io_childpair: cannot open ucast eth0

2) 在啓動heartbeat服務之前,我沒有啓動drbd服務,導致下面的錯誤產生:

ResourceManager(default)[28960]: 2014/03/17_14:49:47 ERROR: Return code 1from /etc/ha.d/resource.d/drbddisk

碰到如此問題,可以改變檢測方式

Bcast eth0檢測

 #使用DRBD,一般都要置爲OFF

   auto_failback off

 #PING 網關,不建議PING對端的管理ip或者心跳IP地址,可以開啓PING-GROUP1設置多個IP地址,避免單一網絡線路檢測

    ping192.168.28.254

    node node1

node node2

 

[[email protected] local]#vi /etc/ha.d/authkeys

auth 1

  1crc

 [[email protected] local]#ll /etc/ha.d/authkeys

-rw-r--r-- 1 root root 647 Aug 27 17:27 /etc/ha.d/authkeys

[[email protected] local]# chmod 600/etc/ha.d/authkeys

禁止隨機啓動,防止他起在DRBD前面,而要加載/etc/rc.local裏面

[[email protected] local]#chkconfig heartbeat off  (#chkconfig - - list | grep heart 查看)

[[email protected] local]# chkconfig --list |grep heart

heartbeat       0:off  1:off   2:off   3:off  4:off   5:off   6:off

[[email protected] local]# vi /etc/rc.local

service heartbeat start

[[email protected] data]#vim/etc/ha.d/haresources  #在節點1上添加如下行

Node1IPaddr::192.168.28.208/24/eth0:0 drbddisk::r1Filesystem::/dev/drbd0::/data::ext4 mysql

 

[[email protected] data]#vim/etc/ha.d/haresources  #在節點2上添加如下行

Node1IPaddr::192.168.28.208/24/eth0:0 drbddisk::r1Filesystem::/dev/drbd0::/data::ext4 mysql

上面資源組中的各項含義如下:

Node1 指當前primary節點名。192.168.28.208 指讓heartbeat幫你管理一個server ip,會跟着主節點一起漂移。Drbddisk告訴heartbeat要管理drdb的資源,在這裏是r1Filesystem指告訴heartbeat需要管理文件系統資源,實際上就是執行mount/umount的命令,後面跟的是設備名和mount的目錄。Mysql指告訴需要管理mysql

 

IPaddr::192.168.28.208/24/eth0:0 設置虛擬IP,

drbddisk::r1 告訴heartbeat要管理DRBD的資源r1

Filesystem::/dev/drbd0::/data::ext4 設定需要掛載的DRBD設備採用的文件系統,即執行mount與umount操作

Mysql 設定要隨heartbeat啓動的服務

[[email protected] ~]# service heartbeat start   #DRBD先啓動,在主機子上啓動heartbeat,再在從機子上啓動

故障解決:

Heartbeat正常啓動,但是日誌發現cannot locate resource script ***,進入heartbeat配置文件目錄/etc/ha.d/resource.d,查看下是否存在***腳本文件;若不存在,需要建立該腳本文件。一般在相關服務安裝後,在系統中會生成相關的腳本文件,可以find命令找到***的腳本文,cp或者ln到/etc/ha.d/resource.d 下即可。注意mysql腳本中用的是my.cnf文件,我們將我們的數據庫配置文件設成my.cnf, 這樣就不用做任何myql腳本的改動。

/etc/rc.d/init.d/mysql

/etc/ha.d/resource.d/drbddisk

腳本在後面附上

Heartbeat啓動正常後,我們可以看到mysql啓動,虛擬IP在主的機子上。

[[email protected] ~]#ifdown eth0  #在主的機子上斷網卡eth0,看VIP漂移到從機子上不

[[email protected] data]# ip a    ##大致30秒內,看到VIP在從機上,而且MYSQL啓動了

[[email protected] data]# cat /proc/drbd  ##這時會看到兩節點的連接狀態不一樣。稱爲腦裂

version: 8.4.3 (api:1/proto:86-101)

GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2014-08-2018:01:37

 0:cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----

   ns:120 nr:1724 dw:2672 dr:18276 al:10 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:596

 

以下是處理方法:

在現有的從節點上執行:

[[email protected] ~]# service heartbeat stop   ###也可以不執行

[[email protected] ~]# drbdadm -- --discard-my-dataconnect r1

在現在的主節點上執行:

[[email protected] data]# drbdadm disconnect r1

r1: Failure: (162) Invalid configurationrequest

additional info from kernel:

unknown connection

Command 'drbdsetup disconnectipv4:192.168.28.29:7789 ipv4:192.168.28.28:7789' terminated with exit code 10

[[email protected] data]# drbdadm connect r1

[[email protected] data]# drbdadm primary r1

[[email protected] data]# cat /proc/drbd

version: 8.4.3 (api:1/proto:86-101)

GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2014-08-2018:01:37

 0:cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDateC r-----

   ns:696 nr:0 dw:2672 dr:18972 al:10 bm:10 lo:0 pe:0 ua:0 ap:0 ep:1 wo:foos:0

 

在從節點上執行:

[[email protected] ~]# service heartbeat start

###若裂腦出現一個狀態是uptodate/dunknow主要是是因爲drbd/heartbeat設置自啓動的緣故,所以要設置chkconfig drbdoff/heartbeat

解決腦裂:

在Slave節點:

#drbdadm disconnect r2

#drbdadm -- --discard-my-dataconnect r2

在主節點操作,連接下即可:

#drbdadm connect r2

###heartbeat的配置文件MS都要一致即可

檢測DRBD+MYSQL+HEARTBEAT架構在數據庫停止是否能夠自動切換(需要MYSQL檢測腳本msyqlmon.sh)

##腳本的配置的連接的用戶名和密碼一定要成TCP/IP方式連接,否則在線上必出問題,此腳本只要在主庫後臺執行即可。從庫可存放一個

當在運行時候 停止數據庫,查看是否會切換到備庫上。


 


本文轉自 DBAspace 51CTO博客,原文鏈接:http://blog.51cto.com/dbaspace/1871976