精華資料整理:服務(wù)器遷移經(jīng)驗(yàn)談
原創(chuàng)【51CTO精選編譯】有關(guān)服務(wù)器遷移,一般的實(shí)際需求是怎樣的?遷移過(guò)程中常見(jiàn)的問(wèn)題又有哪些?以下內(nèi)容采集編譯自Server Fault網(wǎng)站有關(guān)migration詞條的FAQs,整理了有關(guān)服務(wù)器遷移方面的常見(jiàn)問(wèn)題。
遷移單臺(tái)服務(wù)器需要注意什么?
Q:我有臺(tái)Ubuntu Server 9.04,跑著web,數(shù)據(jù)庫(kù)和mail,整個(gè)硬盤(pán)有5GB數(shù)據(jù)。打算換臺(tái)好機(jī)子,但是我沒(méi)做過(guò)遷移,能不能給些入門(mén)指導(dǎo)?
A:首先,備份所有的東東,并在新機(jī)子上恢復(fù)。這包括:
1、所有的數(shù)據(jù)庫(kù)dump出來(lái),在新機(jī)子上restore
2、webserver、數(shù)據(jù)庫(kù)、email的配置文件復(fù)制過(guò)去
當(dāng)然,免不了會(huì)有些停機(jī)時(shí)間。想減少停機(jī)時(shí)間,還有幾個(gè)建議:
1、遷移前先對(duì)所有email數(shù)據(jù)做一次rsync,在所有都配置、測(cè)試完畢之后,將舊服務(wù)器上的服務(wù)停掉,僅rsync***的數(shù)據(jù),啟動(dòng)新服務(wù)器
2、直到切換之前,使用MySQL replication確保兩臺(tái)服務(wù)器的數(shù)據(jù)庫(kù)內(nèi)容一致
3、rsync可以用于一切數(shù)據(jù),甚至數(shù)據(jù)庫(kù)也可以,當(dāng)然為了避免錯(cuò)誤,數(shù)據(jù)庫(kù)還是使用dump或replication吧。
如果配置文件比較多比較零散,怕出錯(cuò)的話,建議列一張清單,然后一條一條執(zhí)行。另外,所有的配置文件都應(yīng)該在 /etc 下面,除非沒(méi)用軟件包或者安裝了專(zhuān)有軟件的情況才有在 /opt 下面的。
如何把用戶(hù)賬戶(hù)遷移到新的Linux機(jī)器?
Q:我們有個(gè)內(nèi)部Subversion庫(kù)運(yùn)行在Linux機(jī)子上,Ubuntu 8,通過(guò)svn+ssh驗(yàn)證方式登錄。最近入手了臺(tái)新機(jī)子,也裝了Linux,Ubuntu 9,用RAID 1+0配置了更大磁盤(pán)空間,所以想把Subversion庫(kù)遷移過(guò)去。
我怎么把所有的user,group和文件信息都遷移過(guò)去?我打算把 /etc/passwd 和 /etc/group 以及所有 /home 下的用戶(hù)目錄都復(fù)制過(guò)去,這樣就可以了么?
A:你需要復(fù)制的內(nèi)容包括:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
/var/spool/mail
/home
詳細(xì)情況可參考本篇文章。
A:用戶(hù)不多的話,直接useradd(定義同樣的uid和gid)會(huì)比較快一些。
另外,在新機(jī)子上創(chuàng)建號(hào)用戶(hù)之后,記得將老機(jī)子上的登錄禁止掉,并用rsync把用戶(hù)的home目錄同步過(guò)來(lái)。遷移完畢之后,重置一下密碼即可。
之所以要避免復(fù)制 /etc/passwd 和 /etc/group ,是防止你把機(jī)子搞亂之后自己(或root)登錄不進(jìn)去了。而去如果發(fā)行版不同,對(duì)這些文件的解讀也會(huì)有區(qū)別,所以要謹(jǐn)慎。一個(gè)不小心,可能會(huì)開(kāi)放了guest登錄,或?qū)е缕渌踩珕?wèn)題。當(dāng)然了,雖然說(shuō)復(fù)制密碼文件要謹(jǐn)慎,但是也不用過(guò)于神經(jīng)質(zhì)。
從Apache遷移到Nginx好嗎?有什么經(jīng)驗(yàn)分享?
Q:我目前使用Apache的以下模塊:多個(gè)虛擬主機(jī),Server Side Include,以及FastCGI,想問(wèn)問(wèn)各位有關(guān)遷移到Nginx的問(wèn)題。大家有什么經(jīng)驗(yàn)分享,比如遷移過(guò)程中的問(wèn)題,遷移之后有沒(méi)有好處,nginx上有用的模塊等?
A:我個(gè)人經(jīng)驗(yàn)而言是值得的。比如我有個(gè)Magento搭建的電子商務(wù)站(大家都知道Magento是很慢的)。遷移到nginx+php-fcgi/php-fpm+apc之后,我這邊的性能提高了100%。所以,除非Apache上有必要的模塊,否則我推薦Nginx。具體情況可以參考我的Magento調(diào)優(yōu)筆記。
A:你要的這三個(gè)模塊:多個(gè)虛擬主機(jī),SSI,還有FastCGI,Nginx都支持。我這邊同時(shí)應(yīng)用Lighttpd,Apache和Nginx。無(wú)法徹底拋棄Apache,是因?yàn)槲覀冃枰\(yùn)行一些自定義模塊(包含一個(gè)改良版mod_pubcookie),而這些功能很難遷移到Lighttpd/Nginx上。
我用Lighttpd做輕量?jī)?nèi)容服務(wù)器,但是它在FreeBSD上的表現(xiàn)不是很好(尤其是使用FreeBSD的sendfile / kqueue syscalls 的時(shí)候Lighttpd會(huì)死掉,還連帶著把整個(gè)服務(wù)器也弄宕機(jī))。而Nginx方面我就沒(méi)遇到過(guò)任何問(wèn)題。所以我正在用Nginx替換掉所有的Lighttpd。
如何快速遷移MySQL?
Q:我有大概40來(lái)個(gè)中小規(guī)模的MySQL數(shù)據(jù)庫(kù),需要把它們從一個(gè)whm服務(wù)器的數(shù)個(gè)cpanel帳號(hào)遷移到另一個(gè)服務(wù)器上。我本來(lái)的想法是手動(dòng)一個(gè)一個(gè)dump然后import,但是很費(fèi)時(shí)間,有什么更快的辦法么?
A:能用ssh的話,我知道一個(gè)很快的方法:mysqldump配合幾個(gè)參數(shù),并和ssh鏈起來(lái)使用。這樣可以讓源數(shù)據(jù)庫(kù)一邊不中斷的輸出,目標(biāo)數(shù)據(jù)庫(kù)一邊不中斷的導(dǎo)入,而去也不會(huì)用到任何臨時(shí)文件:)
源服務(wù)器# mysqldump --user=user1 --all-databases | ssh 目標(biāo)服務(wù)器 'mysql --user=user2'
如果你在源服務(wù)器上使用你的私人密鑰和ssh-agent驗(yàn)證過(guò),就可以使用ssh的-A參數(shù)來(lái)建立連接,就不用被目標(biāo)服務(wù)器的驗(yàn)證信息煩來(lái)煩去了。當(dāng)然,Agent forwarding有安全隱患,要謹(jǐn)慎使用。
Q:我的MySQL備份文件怎么在SQL Server 2008里恢復(fù)?
A:你不能在SQL Server 2008里自動(dòng)restore一個(gè)MySQL的備份文件。你可以寫(xiě)一個(gè)轉(zhuǎn)換腳本,或者使用微軟提供的DTS等工具。
服務(wù)器配置如何遷移?
Q:我有臺(tái)Debian Lenny服務(wù)器,慢得很,所以最近買(mǎi)了臺(tái)新機(jī)子,想要將整個(gè)Debian配置——包括用戶(hù)賬戶(hù)、路徑、安裝的軟件等——遷移過(guò)去。有什么比較快速的做法推薦?
A:網(wǎng)絡(luò)安全而給力的話,netcat配合tar是***的方式。具體執(zhí)行方法參考這篇文章。不要忘記用live distro重啟服務(wù)器,chroot進(jìn)系統(tǒng)重裝一下MBR。如果用ACL的話,也不要忘記使用bsdtar。
A:Puppet或Cfengine這樣的配置管理工具會(huì)比較簡(jiǎn)單些。如果之前做過(guò)部署,那么只要應(yīng)用相同的classes就能讓它自動(dòng)部署你的配置。就算沒(méi)做過(guò),現(xiàn)在開(kāi)始也不晚,給puppet做下描述,在原機(jī)子上應(yīng)用檢查一下,再應(yīng)用到新機(jī)子上,這樣以后就可以隨時(shí)建立同樣配置的新服務(wù)器了。雖然***次使用puppet做配置會(huì)更加費(fèi)時(shí)間,但長(zhǎng)遠(yuǎn)來(lái)看,絕對(duì)是更加節(jié)省時(shí)間的。
A:直接把整臺(tái)機(jī)器rsync過(guò)去。
虛擬機(jī)實(shí)時(shí)遷移的相關(guān)問(wèn)題?
Q:以前一直以為AMD和英特爾服務(wù)器之間是沒(méi)有虛擬系統(tǒng)支持實(shí)時(shí)遷移的,直到今天才從KVM FAQ上看到KVM是支持這個(gè)實(shí)時(shí)遷移,而去2008年就有案例的。現(xiàn)在2011年了,想問(wèn)一下現(xiàn)在有哪些主流的虛擬系統(tǒng)(ESXi,Xen,Hyper-V等)支持AMD和英特爾服務(wù)器之間的實(shí)時(shí)遷移的?
A:ESX/ESXi的話,可以通過(guò)一系列“高級(jí)配置”和VM CPU-bit設(shè)置實(shí)現(xiàn)AMD和英特爾之間的vmotion——不過(guò),這樣造成的問(wèn)題比它帶來(lái)的便利要多得多。
ESX/ESXi之所以不默認(rèn)允許跨CPU架構(gòu)的實(shí)時(shí)遷移,因?yàn)椴煌腃PU家族的能力各有不同。比如一個(gè)現(xiàn)代的英特爾CPU上跑著一個(gè)使用了SSE4.2指令的實(shí)例,那么你把它vMotion到一個(gè)不支持該指令的CPU上,實(shí)例就會(huì)崩潰。
解決方法之一是設(shè)定一個(gè)“***公約數(shù)”,即在一個(gè)集群中,采用最爛的CPU來(lái)設(shè)定VM的運(yùn)行方式,忽略那些新CPU里面的各種功能和指令。
【51CTO.com獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明原文作者和出處。】
【編輯推薦】