新聞中心
采用Heartbeat雙機(jī)熱備軟件來保證數(shù)據(jù)庫的高穩(wěn)定性和連續(xù)性,數(shù)據(jù)的一致性由DRBD這個工具來保證。默認(rèn)情況下只有一臺mysql在工作,當(dāng)主mysql服務(wù)器出現(xiàn)問題后,系統(tǒng)將自動切換到備機(jī)上繼續(xù)提供服務(wù),當(dāng)主數(shù)據(jù)庫修復(fù)完畢,又將服務(wù)切回繼續(xù)由主mysql提供服務(wù)。

為月湖等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及月湖網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、月湖網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
1. 架構(gòu)
MySQL:
master
10.24.6.4:3306
VIP:
10.24.6.20
必須使得VIP和mysql處于同一網(wǎng)段,否則無法ping通過
2. 參考文檔
http://www.linuxidc.com/Linux/2012-05/60478.htm
3. DRBD 共享內(nèi)存設(shè)置
共享硬盤/dev/sdb1
3.1. 創(chuàng)建一個新硬盤/dev/sdb1但是不要掛載任何目錄
3.2. 修改hosts文件和主機(jī)名
在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
3.3.安裝drbd
在10.24.6.4/10.24.6.6上
sudo apt-get install drbd8-utils
3.4.配置drbd.conf(/etc/drbd.conf)的配置文件(主從都要做)
vim /etc/drbd.conf默認(rèn)信息為:
include “/etc/drbd.d/global_common.conf”;
include “/etc/drbd.d/*.res”;
這樣你需要去配置global_common.conf以及新建一個以res結(jié)尾的資源文件,這里為r0.res
3.5. 配置global_common.conf(主從都要做)
vim /etc/drbd.d/global_common.conf
global {
usage-count no; //幫LINBIT公司統(tǒng)計drbd使用量 }
common {
protocol C;//C為最安全同時也是性能最好的一種確認(rèn)寫操作完成的方法
syncer {
rate 100M; //同步的速率
}
}
3.6.配置ro.res(主從都要做)
sudo vim /etc/drbd.d/r0.res
resource r0 {//r0資源名稱,以后很多地方會用到
on drbd01 {
? device /dev/drbd0; //邏輯設(shè)備的路徑
? disk /dev/sdb1; //物理設(shè)備
? address 10.24.6.4:7788; //主節(jié)點
? meta-disk internal;
}
on drbd02 {
? device /dev/drbd0;
? disk /dev/sdb1;
? address 10.24.6.6:7788; //從節(jié)點
? meta-disk internal;
}
}
不可以有注釋
3.7. 初始化drbd的metadata(在主節(jié)點上操作)
10.24.6.4:
Sudo drbdadm create-md r0
3.8. 錯誤處理
執(zhí)行如下命令: dd if=/dev/zero bs=1M count=1 of=/dev/sdb1;sync
再次執(zhí)行drbdadm create-md r0看到success則表示成功。
3.9. 啟動drbd服務(wù)(主從都執(zhí)行)
/etc/init.d/drbd start
cat /proc/drbd
ro:Secondary/ Secondary表示還沒有建立主盤
ds:Inconsistent/Inconsistent表示兩節(jié)點(master/slave)的邏輯設(shè)備(即/dev/drbd0)中的數(shù)據(jù)未同步
本地和對等節(jié)點的硬盤有可能為下列狀態(tài)之一:Diskless 無盤:本地沒有塊設(shè)備分配給DRBD使用,這表示沒有可用的設(shè)備,或者使用drbdadm命令手工分離或是底層的I/O錯誤導(dǎo)致自動分離Attaching:讀取無數(shù)據(jù)時候的瞬間狀態(tài)Failed 失敗:本地塊設(shè)備報告I/O錯誤的下一個狀態(tài),其下一個狀態(tài)為Diskless無盤Negotiating:在已經(jīng)連接的DRBD設(shè)置進(jìn)行Attach讀取無數(shù)據(jù)前的瞬間狀態(tài)Inconsistent:數(shù)據(jù)是不一致的,在兩個節(jié)點上(初始的完全同步前)這種狀態(tài)出現(xiàn)后立即創(chuàng)建一個新的資源。此外,在同步期間(同步目標(biāo))在一個節(jié)點上出現(xiàn)這種狀態(tài)Outdated:數(shù)據(jù)資源是一致的,但是已經(jīng)過時DUnknown:當(dāng)對等節(jié)點網(wǎng)絡(luò)連接不可用時出現(xiàn)這種狀態(tài)Consistent:一個沒有連接的節(jié)點數(shù)據(jù)一致,當(dāng)建立連接時,它決定數(shù)據(jù)是UpToDate或是OutdatedUpToDate:一致的最新的數(shù)據(jù)狀態(tài),這個狀態(tài)為正常狀態(tài)
3.10. 端口檢測
10.24.6.4:
10.24.6.6:
3.11. 初始化網(wǎng)絡(luò)硬盤(主節(jié)點執(zhí)行)
drbdadm — –overwrite-data-of-peer primary r0
查看同步進(jìn)度
cat /proc/drbd
ds:UpToDate/Inconsistent表示兩節(jié)點正在同步數(shù)據(jù)
3.12. 啟用和禁用資源(不必須)
######手動啟用資源 drbdadm up ######手動禁用資源 drbdadm down 注釋: resource:為資源名稱;當(dāng)然也可以使用all表示[停用|啟用]所有資源
3.13. 升級和降級資源(不必須)
######升級資源 drbdadm primary ######降級資源 drbdadm secondary 注釋:在單主模式下的DRBD,兩個節(jié)點同時處于連接狀態(tài),任何一個節(jié)點都可以在特定的時間內(nèi)變成主;但兩個節(jié)點中只能一為主,如果已經(jīng)有一個主,需先降級才可能升級;在雙主模式下沒有這個限制
3.14. 如何查看資源連接狀態(tài)
[root@nod1 ~]# drbdadm cstate r0 #r0為資源名稱 Connected
狀態(tài)意義:
資源的連接狀態(tài);一個資源可能有以下連接狀態(tài)中的一種StandAlone 獨立的:網(wǎng)絡(luò)配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由于出現(xiàn)認(rèn)證失敗或是腦裂的情況Disconnecting 斷開:斷開只是臨時狀態(tài),下一個狀態(tài)是StandAlone獨立的Unconnected 懸空:是嘗試連接前的臨時狀態(tài),可能下一個狀態(tài)為WFconnection和WFReportParamsTimeout 超時:與對等節(jié)點連接超時,也是臨時狀態(tài),下一個狀態(tài)為Unconected懸空BrokerPipe:與對等節(jié)點連接丟失,也是臨時狀態(tài),下一個狀態(tài)為Unconected懸空NetworkFailure:與對等節(jié)點推動連接后的臨時狀態(tài),下一個狀態(tài)為Unconected懸空ProtocolError:與對等節(jié)點推動連接后的臨時狀態(tài),下一個狀態(tài)為Unconected懸空TearDown 拆解:臨時狀態(tài),對等節(jié)點關(guān)閉,下一個狀態(tài)為Unconected懸空WFConnection:等待和對等節(jié)點建立網(wǎng)絡(luò)連接WFReportParams:已經(jīng)建立TCP連接,本節(jié)點等待從對等節(jié)點傳來的第一個網(wǎng)絡(luò)包Connected 連接:DRBD已經(jīng)建立連接,數(shù)據(jù)鏡像現(xiàn)在可用,節(jié)點處于正常狀態(tài)StartingSyncS:完全同步,有管理員發(fā)起的剛剛開始同步,未來可能的狀態(tài)為SyncSource或PausedSyncSStartingSyncT:完全同步,有管理員發(fā)起的剛剛開始同步,下一狀態(tài)為WFSyncUUIDWFBitMapS:部分同步剛剛開始,下一步可能的狀態(tài)為SyncSource或PausedSyncSWFBitMapT:部分同步剛剛開始,下一步可能的狀態(tài)為WFSyncUUIDWFSyncUUID:同步即將開始,下一步可能的狀態(tài)為SyncTarget或PausedSyncTSyncSource:以本節(jié)點為同步源的同步正在進(jìn)行SyncTarget:以本節(jié)點為同步目標(biāo)的同步正在進(jìn)行PausedSyncS:以本地節(jié)點是一個持續(xù)同步的源,但是目前同步已經(jīng)暫停,可能是因為另外一個同步正在進(jìn)行或是使用命令(drbdadm pause-sync)暫停了同步PausedSyncT:以本地節(jié)點為持續(xù)同步的目標(biāo),但是目前同步已經(jīng)暫停,這可以是因為另外一個同步正在進(jìn)行或是使用命令(drbdadm pause-sync)暫停了同步VerifyS:以本地節(jié)點為驗證源的線上設(shè)備驗證正在執(zhí)行VerifyT:以本地節(jié)點為驗證目標(biāo)的線上設(shè)備驗證正在執(zhí)行
3.15. 資源同步完成
10.24.6.4:
10.24.6.6:
3.16. 數(shù)據(jù)同步測試
現(xiàn)在將磁盤格式化后并可以向其中寫數(shù)據(jù),這些數(shù)據(jù)會同步到從節(jié)點中
mkfs.ext4 /dev/drbd0
mount /dev/drbd0 /mnt/data
(注意:只有主盤節(jié)點才能掛載磁盤)
cd /mnt/data
mkdir testfile //新建名為testfile的測試文件
umount /dev/drbd0 //卸載磁盤
drbdadm secondary r0 //主降為次,即剛開始主節(jié)點的磁盤是主盤,現(xiàn)在降為從盤,往主盤里寫數(shù)據(jù),從從盤里讀數(shù)據(jù)。 在drbd02上(從節(jié)點)
drbdadm primary r0 //次升為主,即將從節(jié)點的磁盤升為主盤資格這樣才能從從節(jié)點的機(jī)器讀取磁盤的數(shù)據(jù)。
mount /dev/drbd0 /mnt/data //升主后才有掛在權(quán)限 cd /mnt/data ls –l
將會看到我們在主節(jié)點中建立的名為testfile的文件夾。 (啰嗦一下:
要想完成主從Mysql數(shù)據(jù)的備份,到這里大家應(yīng)該有點啟發(fā)了,我么只需要將Mysql的數(shù)據(jù)保存到/mnt/data(我們將/dev/drbd0掛在的路徑)中即可這樣主Mysql往這個區(qū)域?qū)憯?shù)據(jù),drbd會幫我們自動將這些數(shù)據(jù)同步到從節(jié)點中,這樣裝在從節(jié)點機(jī)
器上的Mysql也從這里讀取數(shù)據(jù)。這樣便實現(xiàn)了兩份???據(jù)的自動備份。 )
3.17. 問題
主降為次失敗:
因為降級的本身的目錄正在使用
4. MYSQL 設(shè)置
4.1. 更改Mysql數(shù)據(jù)庫的存儲位置為共享目錄(主從都執(zhí)行)
默認(rèn)情況下數(shù)據(jù)庫的存儲位置是/var/lib/mysql(可以在/etc/mysql/my.cnf中的datadir位置找到),現(xiàn)在要將其改為存在/share_mysql下。
將/var/lib/mysql下的數(shù)據(jù)復(fù)制到/share_mysql下
cp -r /var/lib/mysql /share_mysql
vim /etc/mysql/my.cnf
找到datadir這一行將其值改為/share_mysql/mysq
4.2. 賦予數(shù)據(jù)庫用戶訪問權(quán)限
4.3. 系統(tǒng)級別修改權(quán)限
140602 22:36:39 mysqld_safe Starting mysqld daemon with databases from /home/mysql
140602 22:36:39 [Warning] Can’t create test file /home/mysql/localhost.lower-test
140602 22:36:39 [Warning] Can’t create test file /home/mysql/localhost.lower-test
/usr/libexec/mysqld: Can’t change dir to ‘/home/mysql/’ (Errcode: 13)
140602 22:36:39 [ERROR] Aborting
140602 22:36:39 [Note] /usr/libexec/mysqld: Shutdown complete
140602 22:36:39 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
你已經(jīng)修改了my.cnf中的datadir的值你已經(jīng)chown和chmod了數(shù)次新數(shù)據(jù)目錄或者其父路徑的屬主和權(quán)限你無數(shù)次地試圖service mysql start,或者 /etc/init.d/mysql start,以及mysql_install_db!
恭喜你看見這篇文章,我在被系統(tǒng)坑了幾個小時之后,找到了解決的方法。
這個原因有二,其中任意的一個原因都會造成你被系統(tǒng)告知這個warning。如果你不是一個專業(yè)的linux系統(tǒng)安全工程師,或者你只是個PHP程序員,并沒有對系統(tǒng)安全有深入的研究,你就不會太容易找到它的答案。
第一,selinux,記得當(dāng)年念書時,字符界面安裝RedHat(很古老的操作系統(tǒng)么。。。)的時候,有這么一個選項,通常大家都聽取前輩的建議,改變默認(rèn)值以不安裝它。但如果你恰好要操作的這臺機(jī)器開著selinux,它確實能夠使你的mysql無法在新目標(biāo)位置進(jìn)行mysql_install_db的操作,并爆出標(biāo)題所示的警告。一個簡單的解決辦法是使用命令暫時關(guān)閉selinux,以便讓你的操作可以繼續(xù)下去setenforce 0但最好使用一個永久方法,以便在重啟后繼續(xù)不要這貨。修改/etc/selinux/config文件中設(shè)置SELINUX=disabled ,然后重啟或等待下次重啟。
第二,apparmor,這個坑爹貨和selinux一樣的坑爹,它也對mysql所能使用的目錄權(quán)限做了限制在 /etc/apparmor.d/usr.sbin.mysqld 這個文件中,有這兩行,規(guī)定了mysql使用的數(shù)據(jù)文件路徑權(quán)限
/var/lib/mysql/ r,/var/lib/mysql/** rwk,
你一定看到了,/var/lib/mysql/就是之前mysql安裝的數(shù)據(jù)文件默認(rèn)路徑,apparmor控制這里mysqld可以使用的目錄的權(quán)限我想把數(shù)據(jù)文件移動到/data/mysql下,那么為了使mysqld可以使用/data/mysql這個目錄,照上面那兩條,增加下面這兩條就可以了
/data/mysql/ r,/data/mysql/** rwk,
重啟apparmor,/etc/init.d/apparmor restart之后,就可以順利地干你想干的事兒了!
4.4. 數(shù)據(jù)庫同步測試
在10.24.6.4上啟動mysql 建立一個名為share_mysql的數(shù)據(jù)庫。
第一步保證10.24.6.4為primary,10.24.6.6為secondary
主從切換掛載
service mysql stop # 關(guān)閉mysql服務(wù)
drbdadm secondary r0 # 將10.24.6.4降為備用
umount /dev/drbd0 # 卸載虛擬硬盤
在drbd02上
drbdadm primary r0 #將10.24.6.6升為主用
mount /dev/drbd0 # 掛載虛擬硬盤
service mysql start # 啟動數(shù)據(jù)庫
進(jìn)去mysql中查看是否已有從drbd01同步過來的名為test的數(shù)據(jù)庫。
OK至此測試就完成了。
(啰嗦下:聰明的讀者可能會問,每次都這樣操作效率也太低了吧,對的,接下來heartbeat會自動幫我們做好這些事,它會監(jiān)聽服務(wù),一旦服務(wù)停止,則從服務(wù)會接管服務(wù))
當(dāng)前標(biāo)題:通過DRBD+Heartbeat部署MySQL高可用
路徑分享:http://www.dlmjj.cn/article/djpdhpc.html


咨詢
建站咨詢
