### 知識補充,一定要看哦:
工作原理:指定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
主IP:em1:192.168.28.28 從IP:em1: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、 修改主機名 (兩台主機都需操作)
[root@localhost ~]# vi /etc/hosts
168.28.28 node1
168.28.29 node2
注:将如上兩行添加到hosts檔案
[root@localhost ~]# 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、 MS的DRBD和HEARBEAT的配置檔案一模一樣
6、 添加互信,rsa,添加主機之間的互信
為新添加的磁盤sbd分區并格式化, MS都要分區,隻要格式一邊磁盤即可(mkfs.ext4 /dev/sdb1),
[root@localhost ~]#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.
[root@localhost ~]# ls /dev |grep sdb
sdb
sdb1
[root@localhost ~]# mkfs.ext4 /dev/sdb1
[root@localhost ~]#mkdir /data ###MS都要添加此目錄
[root@localhost ~]# mount /dev/sdb1 /data
[root@localhost ~]# 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
安裝
[root@node1 ~]# 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
[root@node1 ~]#cd /usr/local
[root@node1local]# tar zxvfdrbd-8.4.3.tar.gz
[root@node1local]# cd drbd-8.4.3
[root@node1 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
注:如出現如上報錯,執行如下安裝
[root@node1 drbd-8.4.3]# yum -y install gcc make automakeautoconf rpm-build
[root@node1 drbd-8.4.3]# ./configure--prefix=/usr/local/drbd --with-km
[root@node1 drbd-8.4.3]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
注意KDIR的路徑,這個核心源碼路徑2.6.32-358.el6.x86_64需要根據自己的系統修改
[root@node1 drbd-8.4.3]# make install
[root@node1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd
[root@node1 drbd-8.4.3]# cp/usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/
安裝drbd子產品
[root@node1 drbd-8.4.3]# cd drbd
[root@node1 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
[root@node1 drbd]# make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64/
[root@node1 drbd]# cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
[root@node1 drbd]# modprobe drbd ##加載drbd子產品
[root@node1 drbd]# lsmod|grep drbd ##檢視子產品是否加載成功
drbd 325658 0
libcrc32c 1246 1 drbd
[root@node1 drbd]# cd /usr/local/drbd/etc/
[root@node1 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結尾的檔案。
[root@node1 etc]# cd drbd.d/
[root@node1 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[root@node1 drbd.d]# ls
global_common.conf
[root@node1 drbd.d]# vim global_common.conf ##修改全局配置檔案
pri-on-incon-degr
pri-lost-after-sb
local-io-error
注:将檔案中上面的三行前的#号去掉
[root@node1 drbd.d]# pwd
[root@node1 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 {
disk /dev/sdb1; #前面格式化磁盤分區的名字
address 172.16.0.1:7789; #S心跳IP
}
##這裡寫心跳IP位址,不建議寫管理IP位址,DRBD資料傳輸直接通過心跳,速度什麼都比通過管理IP的來的快,而且還更穩定 等等。
[root@node1 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已經有檔案系統了,已經有資料存在了,請執行如下語句,
[root@node1 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
[root@node1 drbd.d]# drbdadm create-md r1 ###執行上面語句後再重新建立drbd裝置
initializing activity log
NOT initializing bitmap
New drbd meta data block successfullycreated.
Success
[root@node1 drbd.d]# umount /data ##umount/dev/sdb1裝置
[root@node1 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操作基本一緻
[root@node1 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 -
[root@node1 drbd.d]# drbdadm role r1
Secondary/Secondary
#### ##第一次啟動drbd時,兩個drbd節點預設都處于Secondary狀态
由于預設沒有主次節點之分,因而需要設定兩個主機的主次節點,選擇需要設定為主節點的主機,然後執行如下指令:
[root@node1 drbd.d]# drbdadm -- --overwrite-data-of-peer primary all
第一次執行完此指令後,在後面如果需要設定哪個是主節點時,就可以使用另外一個指令drbdadm primary r1(r1是定義資源的角色)或者drbdadm primary all
在選擇的設定主節點的主機上執行該指令
[root@node1 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:以本地節點為驗證目标的線上裝置驗證正在執行
[root@node1 drbd.d]# drbdadm role r1 #在主上執行,顯示的是主/從。前面為目前節點
Primary/Secondary
[root@node2 drbd.d]# drbdadm role r1 ##在從上執行,顯示的是從/主,前面為目前節點
Secondary/Primary
Parimary 主:資源目前為主,并且可能正在被讀取或寫入,如果不是雙主隻會出現在兩個節點中的其中一個節點上
Secondary 次:資源目前為次,正常接收對等節點的更新
Unknown 未知:資源角色目前未知,本地的資源不會出現這種狀态
[root@node1 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:一緻的最新的資料狀态,這個狀态為正常狀态
[root@node1 drbd.d]# cat /proc/drbd ##檢視同步進度
version: 8.4.3 (api:1/proto:86-101)
GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 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是磁盤讀資訊
[root@node1 drbd.d]# ls /dev |grep drbd ##檢視drbd裝置
drbd0
[root@node1 drbd.d]# mkfs.ext4 /dev/drbd0 ##格式化檔案系統(檔案格式根據自己的系統環境選擇是ext3,還是ext4,可以根據如下指令來判斷:
[root@node2 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.
[root@node1 drbd.d]# mount /dev/drbd0 /data/ ##挂載DRBD資源必須把DRBD設定成MS模式才可以。
[root@node1 drbd.d]# mkdir /data/test
[root@node1 drbd.d]# ls /data/
lost+found test
[root@node1 drbd.d]# umount /data/ ##在切換主從節點前,必須先umount
[[email protected]]# drbdadm secondaryr1 ##将node1變成備用節點
[root@node1 drbd.d]# drbdadm role r1 ##檢視Node1的角色
[root@node2 drbd.d]# drbdadm primary r1 ##将node2變成主節點
[root@node2 drbd.d]# drbdadm role r1 ##檢視Node2的角色
[root@node2 drbd.d]# cat /proc/drbd
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 buildby root@node2, 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
[root@node2 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包
[root@node1 ~]# cat /etc/redhat-release
CentOS release 6.4 (Final
<a href="http://s2.51cto.com/wyfs02/M02/8A/14/wKioL1gl9KziMUL8AAB44RfnprY156.png-wh_500x0-wm_3-wmp_4-s_1497317617.png" target="_blank"></a>
使用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
[root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
[root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
[root@node1 local]#cp/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
[root@node1 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
[root@node1 local]#vi /etc/ha.d/authkeys
auth 1
1crc
[root@node1 local]#ll /etc/ha.d/authkeys
-rw-r--r-- 1 root root 647 Aug 27 17:27 /etc/ha.d/authkeys
[root@node1 local]# chmod 600/etc/ha.d/authkeys
禁止随機啟動,防止他起在DRBD前面,而要加載/etc/rc.local裡面
[root@node1 local]#chkconfig heartbeat off (#chkconfig - - list | grep heart 檢視)
[root@node1 local]# chkconfig --list |grep heart
heartbeat 0:off 1:off 2:off 3:off 4:off 5:off 6:off
[root@node1 local]# vi /etc/rc.local
service heartbeat start
[root@node1 data]#vim/etc/ha.d/haresources #在節點1上添加如下行
Node1IPaddr::192.168.28.208/24/eth0:0 drbddisk::r1Filesystem::/dev/drbd0::/data::ext4 mysql
[root@node2 data]#vim/etc/ha.d/haresources #在節點2上添加如下行
上面資源組中的各項含義如下:
Node1 指目前primary節點名。192.168.28.208 指讓heartbeat幫你管理一個server ip,會跟着主節點一起漂移。Drbddisk告訴heartbeat要管理drdb的資源,在這裡是r1。Filesystem指告訴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啟動的服務
[root@node1 ~]# 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在主的機子上。
[root@node1 ~]#ifdown eth0 #在主的機子上斷網卡eth0,看VIP漂移到從機子上不
[root@node2 data]# ip a ##大緻30秒内,看到VIP在從機上,而且MYSQL啟動了
[root@node2 data]# cat /proc/drbd ##這時會看到兩節點的連接配接狀态不一樣。稱為腦裂
GIT-hash:89a294209144b68adb3ee85a73221f964d3ee515 build by root@node2, 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
以下是處理方法:
在現有的從節點上執行:
[root@node1 ~]# service heartbeat stop ###也可以不執行
[root@node1 ~]# drbdadm -- --discard-my-dataconnect r1
在現在的主節點上執行:
[root@node2 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
[root@node2 data]# drbdadm connect r1
[root@node2 data]# drbdadm primary r1
[root@node2 data]# cat /proc/drbd
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
在從節點上執行:
[root@node1 ~]# 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