十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
采用Heartbeat雙機(jī)熱備軟件來(lái)保證數(shù)據(jù)庫(kù)的高穩(wěn)定性和連續(xù)性,數(shù)據(jù)的一致性由DRBD這個(gè)工具來(lái)保證。默認(rèn)情況下只有一臺(tái)mysql在工作,當(dāng)主mysql服務(wù)器出現(xiàn)問(wèn)題后,系統(tǒng)將自動(dòng)切換到備機(jī)上繼續(xù)提供服務(wù),當(dāng)主數(shù)據(jù)庫(kù)修復(fù)完畢,又將服務(wù)切回繼續(xù)由主mysql提供服務(wù)。

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