master<=slave
10.24.6.4:3306<=10.24.6.6:3306
10.24.6.20
必須使得VIP和mysql處於同一網段,否則無法ping通過
http://wenku.baidu.com/link?url=QF1pG6DGMtl2uV1yt998xCduKsiEO7Bwn4CW79g0nx6EUw4iNgcBUz_jAA1W0FigPhjpiIs8FPLc9TxvFq_Yx7G-VvWeikFLzZchifM_tSS
共享硬盤/dev/sdb1
在10.24.6.4上
echo "10.24.6.4 drbd01" >> /etc/hosts
echo "drbd01" > /etc/hostname
在10.24.6.6上
echo "10.24.6.6 drbd02" >> /etc/hosts
echo "drbd02" > /etc/hostname
在10.24.6.4/10.24.6.6上
sudo apt-get install drbd8-utils
vim /etc/drbd.conf默認信息為:
include "/etc/drbd.d/global_common.conf";
include "/etc/drbd.d/*.res";
這樣你需要去配置global_common.conf以及新建一個以res結尾的資源文件,這裡為r0.res
vim /etc/drbd.d/global_common.conf
global {
usage-count no; //幫LINBIT公司統計drbd使用量 }
common {
protocol C;//C為最安全同時也是性能最好的一種確認寫操作完成的方法
syncer {
rate 100M; //同步的速率
}
}
sudo vim /etc/drbd.d/r0.res
resource r0 {//r0資源名稱,以後很多地方會用到
on drbd01 {
device /dev/drbd0; //邏輯設備的路徑
disk /dev/sdb1; //物理設備
address 10.24.6.4:7788; //主節點
meta-disk internal;
}
on drbd02 {
device /dev/drbd0;
disk /dev/sdb1;
address 10.24.6.6:7788; //從節點
meta-disk internal;
}
}
不可以有注釋
10.24.6.4:
Sudo drbdadm create-md r0
執行如下命令: dd if=/dev/zero bs=1M count=1 of=/dev/sdb1;sync
再次執行drbdadm create-md r0看到success則表示成功。
/etc/init.d/drbd start
cat /proc/drbd
ro:Secondary/ Secondary表示還沒有建立主盤
ds:Inconsistent/Inconsistent表示兩節點(master/slave)的邏輯設備(即/dev/drbd0)中的數據未同步
本地和對等節點的硬盤有可能為下列狀態之一:
Diskless 無盤:本地沒有塊設備分配給DRBD使用,這表示沒有可用的設備,或者使用drbdadm命令手工分離或是底層的I/O錯誤導致自動分離
Attaching:讀取無數據時候的瞬間狀態
Failed 失敗:本地塊設備報告I/O錯誤的下一個狀態,其下一個狀態為Diskless無盤
Negotiating:在已經連接的DRBD設置進行Attach讀取無數據前的瞬間狀態
Inconsistent:數據是不一致的,在兩個節點上(初始的完全同步前)這種狀態出現後立即創建一個新的資源。此外,在同步期間(同步目標)在一個節點上出現這種狀態
Outdated:數據資源是一致的,但是已經過時
DUnknown:當對等節點網絡連接不可用時出現這種狀態
Consistent:一個沒有連接的節點數據一致,當建立連接時,它決定數據是UpToDate或是Outdated
UpToDate:一致的最新的數據狀態,這個狀態為正常狀態
10.24.6.4:
10.24.6.6:
drbdadm -- --overwrite-data-of-peer primary r0
查看同步進度
cat /proc/drbd
ds:UpToDate/Inconsistent表示兩節點正在同步數據
######手動啟用資源
drbdadm up <resource>
######手動禁用資源
drbdadm down <resource>
注釋:
resource:為資源名稱;當然也可以使用all表示[停用|啟用]所有資源
######升級資源
drbdadm primary <resource>
######降級資源
drbdadm secondary <resource>
注釋:在單主模式下的DRBD,兩個節點同時處於連接狀態,任何一個節點都可以在特定的時間內變成主;但兩個節點中只能一為主,如果已經有一個主,需先降級才可能升級;在雙主模式下沒有這個限制
[root@nod1 ~]# drbdadm cstate r0 #r0為資源名稱
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:以本地節點為驗證目標的線上設備驗證正在執行
10.24.6.4:
10.24.6.6:
現在將磁盤格式化後並可以向其中寫數據,這些數據會同步到從節點中
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /mnt/data
(注意:只有主盤節點才能掛載磁盤)
cd /mnt/data
mkdir testfile //新建名為testfile的測試文件
umount /dev/drbd0 //卸載磁盤
drbdadm secondary r0 //主降為次,即剛開始主節點的磁盤是主盤,現在降為從盤,往主盤裡寫數據,從從盤裡讀數據。 在drbd02上(從節點)
drbdadm primary r0 //次升為主,即將從節點的磁盤升為主盤資格這樣才能從從節點的機器讀取磁盤的數據。
mount /dev/drbd0 /mnt/data //升主後才有掛在權限 cd /mnt/data ls –l
將會看到我們在主節點中建立的名為testfile的文件夾。 (啰嗦一下:
要想完成主從Mysql數據的備份,到這裡大家應該有點啟發了,我麼只需要將Mysql的數據保存到/mnt/data(我們將/dev/drbd0掛在的路徑)中即可這樣主Mysql往這個區域寫數據,drbd會幫我們自動將這些數據同步到從節點中,這樣裝在從節點機
器上的Mysql也從這裡讀取數據。這樣便實現了兩份數據的自動備份。 )
主降為次失敗:
因為降級的本身的目錄正在使用
默認情況下數據庫的存儲位置是/var/lib/mysql(可以在/etc/mysql/my.cnf中的datadir位置找到),現在要將其改為存在/share_mysql下。
將/var/lib/mysql下的數據復制到/share_mysql下
cp -r /var/lib/mysql /share_mysql
vim /etc/mysql/my.cnf
找到datadir這一行將其值改為/share_mysql/mysq