網站上線流程

上線的流程


1. 上線流程包含下列幾個方面:
1.1. 網絡規劃
1.2. 系統規劃
1.3. 數據遷移
2. 網絡規劃包含的內容
2.1. 挑選機房
2.2. 是否需要劃分多個網段
2.3. 出口是否需要VSRP
2.4. 交換機之間如何進行備份
2.5. 各個交換機之間的連接速度大小
3. 系統規劃包含的內容
3.1. 挑選服務器
3.2. 選擇存儲
3.3. 選擇操作系統
3.4. 網站如何進行分層
3.5. 各個應用如何良好分配到不同的服務器上
3.6. 系統的監控
3.7. 系統的備份
4. 數據遷移
4.1. 靜態存儲的遷移
4.2. 數據庫的遷移

選擇機房
  選擇機房在中國是一個非常頭疼的事情,你必須考慮到你網站所服務的對象是屬於網通還是電信,以及其它小的運營商。不過在國外基本沒有這樣的問題。只要選擇路由好點的基本就可以了。從國內到國外服務器之間如果能夠在保持在20跳以內就算可以的了。要是你還是不放心,要進行世界各地的測試,那可以找類似的測速網站來進行測試。比如Banreee, Networkbench, gamez都是比較好的測試網站。

網段規劃
  在機房選擇好以後,就要進行網段規劃了,特別是當你內部服務器之間交互非常頻繁的情況下,那就更要很好的進行規劃了,不同需求的服務器必須放在不同的VLAN之中,特別嫉劃分非常大的網段,那樣廣播風暴就會比較嚴重。分網段有2種情況我個人認爲,有人是把整套的服務器放在同一網段中,這一整套服務器包含了所有的前端,中間層和後端以及數據庫,這個感覺是遊戲類的會進行這樣的規劃。還有一種是所有前端一個單獨的VLAN,中間層一個單獨網段,後端存儲一個網段,數據庫單獨一個網段。這種當你網站規模比較小的情況下就不能進行這樣的劃分,畢竟交換機沒那麼多,以後如果要把服務器換做其它用途,還必須更改交換機某個端口的VLAN號,一旦改的多了連自己都記不清了。

VSRP
  VSRP是一種交換機的高級協議,用來2個交換機之間進行互相冗餘的協議。如果你2個交換機之間要做VSRP,那一般是需要6個公網IP,3個是指向機房網關,另外3個是做本地服務器的網關。其中有2個是作爲虛擬IP來進行使用的。所有內網服務器都要指向那個內部的虛擬IP。這樣2個交換機之間就算有一個down了,那也不會造成網站無法訪問。但是這種需要比較高端的交換機,比如H3C的S5500 EI系列。而且還要2個交換機起碼要互聯4個光纖,這樣保證2個交換機互相數據的交互。而下面的交換機也要各連2根或者1根光纖到2個交換機,比較佔用交換機端口。所以一般都是要買48口的才比較保險。如果只是小型網站,那這些也就沒有必要了。

交換機備份
  交換機備份有2種,一種是熱備,一種是冷備。
  先說冷備,冷備就是把一個交換機配置成跟線上運行的交換機一樣,一旦線上的出現問題後,通知機房更換交換機,並且重新連線跟服務器之間的和上層交換機之間的。
熱備就是一旦一個交換機出現問題後自動切換到另外一個交換機上,而不需要通知機房重新接線,服務器也不需要重新連線。但是這種方案需要服務器起碼要有4個網卡,然後交換機直接也要做好冗餘設置,這樣比較耗費錢,當然你如果不缺錢完全可以使用這種方案。

交換機之間的連接速度
  這個看具體的業務,核心交換機之間最好要有4G的上行和下行帶寬,而核心有下層的交換機也起碼要有2G的帶寬,不然你數據內部交互非常頻繁就會出現瓶頸。而挑選交換機也要着重考慮交換機的背板帶寬。如果背板帶寬都不高,那交換機之間連接速度再高也沒啥用啊。

挑選服務器
  挑選服務器是個複雜的過程,首先要確定你的需求,比如你的網站數據庫是屬於read多,update和insert比較少,那你硬盤只需要raid1或者raid5就可以了。那就只需要3塊硬盤就可以。而如果你的數據庫屬於Update和insert比較多的話,那硬盤最好是raid0+1,這樣就更好的發揮硬盤性能。而對於CPU和內存的選擇,看你的需求是需要大量的CPU還是內存,如果你只做squid這樣耗內存的程序,那CPU只需要比較低的,而內存就要選要多的,具體看你需求,有些公司直接上到128G內存這樣的。而有些程序只是耗CPU,而對於內存需求比較低,這個就是你要選擇一個平衡,這樣好以後可以更換成其它用途。而選擇好CPU,內存和硬盤之後就要選擇服務器廠商了,現在幾乎主流的服務器廠商都有各種型號的服務器,也可以進行自定義,特別是當你需求量特別大的。選擇服務器的時候還得測試下耗電的情況,就好比以前測試過H品牌的服務器和L品牌的服務器在配置同等情況下耗電量差別有30%。這樣同樣一個機櫃就可以增加幾臺機器。

選擇存儲
  存儲有專業的也有非專業的,專業有NETAPP,EMC這樣的公司。而沒錢而又數據不是增長特別快的只是需要NFS就可以了,也有公司會自己配機器進行存儲,現在2T的SATA硬盤也很便宜的。而一些需求更高的互聯網公司,有些用戶上傳的數據每天就2TB以上,那用NFS肯定是不合適的,在不使用專業存儲的前提下,那隻能選擇GFS這樣的分佈式文件系統來進行存儲了。這個現在有比較多的解決方案,有YAHOO的HADOOP,redhat 的GFS, 還有其它的如Fastfs等等,但是每種GFS都有自己適應的需求,有的是針對大文件例如視頻文件這樣的存儲,而有的是針對小文件如各種日誌的存儲。

選擇操作系統
  操作系統作當然是linux的爲主了,看各種需求也有一些適合其它操作系統,比如做個網關服務器,那使用Freebsd就合適的。而作爲web網站需求還是用Linux好了,操作系統有gentoo, ubuntu, centos, opensusu,這些現在還都是開源免費的。選擇操作系統不光要看操作系統本身,還有所帶的驅動,要是裝上了服務器,運行後發現操作系統自帶的網卡驅動出問題了,那就麻煩了。像這次裝的DELL R710的服務器上,裝了centos居然網卡驅動有問題,還好測試的時候發現了問題,用補丁給解決了。不然要是在線上跑了再出問題就麻煩了。所以買服務器的時候還得去官方網站查它做支持的操作系統。選擇好操作系統就要看選擇什麼內核了,2.6.30和2.6.31在有些應用程序跑起來還是差別很大的。特別是對於多線程程序的支持。選擇好文件系統,這個現在我只是選擇ext3,畢竟非常成熟,而JFS, EXT4還是不敢在線上直接使用。

網站分層
  網站分層,對於大型網站這個是必須的,負載均衡器(LVS, nginx, F5,Netscaler),前端web服務器(Tomcat, apache, resin, lighttpd, nginx等等),中間層(如memcached,ice)等,數據庫(Oracle, postgresql, mysql等等)。這個還是需要程序開發之前就應該計劃好的。而數據庫的分區也是很重要的,可以把不同的數據庫分佈到不同機器上,同時做好master-slave,實現讀寫分離。

系統的監控
  在系統正式上線開放之前可必須是搭建好的,有些公司會有自己的一套監控系統,也有很多自定義的監控內容。但是更多的是使用開源的監控產品nagios, cacti, munin等等。而nagios我個人覺得非常不錯,特別是結合nrpe作爲客戶端,可以自定義很多監控需求,你自己可以編寫監控內容,比如監控內存啊,監控Memcached等等。而nagios更是提供了很多監控腳本。而nagios現在不光能進行發報警郵件,還能發短信,發msn。而對於系統歷史的展示,用cacti和munin就是非常不錯的。Cacti是基於snmp的,易於監控,但是一旦跨網絡,比如跨個電信網通啥的,那你用cacti就會發生經常發生取不到數據的情況發生。而且對於服務器太多的情況下就會發生5分鐘一個輪詢都來不及,這個就需要對cacti本身進行優化,這個直接參考zys.3322.org上面的提示一步步的進行優化,主要是cacti默認的那個數據庫居然所有表都沒有索引。而munin也是基於客戶端,是走tcp協議,這樣就相比snmp的穩定的多。而且也不需要數據庫支持。

系統的備份
  系統的備份也是需要上線之前做好。備份有簡單的tar和比較企業級的開源產品bacula等等。Bacula之前也在內部使用過,對於大型的備份確實是比較好的,備份方式也有增量,全體備份等等各種方式。它有中心服務器,備份服務器,客戶端,也支持磁帶備份等等。也許我不怎麼會用,因爲它備份完成了也是單個文件,這樣對我來說不夠可視化,雖然bacula也支持很好的恢復,但是不夠直接,萬一處理不好就實在沒法恢復了。所以我還是選用了直接的tar來進行備份。首先要選擇好哪些東西是需要備份的,在我這裏主要是數據庫和用戶上傳的數據,而程序性文件本來就是分佈在多臺機器上,只需要簡單的備份就可以了。用戶上傳的數據現在是基本5分就同步到其它文件服務器上,並且進行一次增量備份。同時每天都會一次進行一次完整的備份。
而對於數據庫,首先是必須要有slave,同時還必須每30分鐘備份一次,myisam數據引擎的還是比較容易備份的,可以直接備份數據文件,也可以進行mysqldump,也有mysql默認提供的Hotcopy。而Innodb的可以用mysqldump直接導出sql文件和直接進行xcopy導出數據文件。但是個人覺得xcopy性能上也並不是特別優越,速度上也不是特別快,而且以後需要恢復備份的時候還必須安裝一下xcopy纔可以。每30分鐘備份一次,同時每天凌晨就保留當天唯一一份,而不是全部保留。

靜態數據遷移
  這個完全可以實現通過rsync來進行,而一旦真的開始遷移,還是使用rsync來進行同步,而最好不要進行tar來進行遷移,這樣首先是傳輸的文件太大,其次未必能完全同步。

數據庫遷移
  這個有2種方式,一種是本身就有slave,這樣直接切換的時候把這個slave專成master就可以了,但是如果你是臨時搭建的slave,那很有可能會造成數據庫不同步,畢竟你在搭建slave的時候master肯定是在進行更新,而你就算slave指定了從哪個position開始,你也會發生同步出錯的情況。
所以另外一種方式還是停機進行mysqldump,這個還是最保險的方式,但是當你數據量特別大或者索引特別多的情況下會比較花時間,幾乎都是以小時來進行的,但是其實mysqldump也是可以進行增量式的備份,其實就是根據mysql bin log的position來進行增量式備份。

完整的網站上線過程
  首先確定需要新的網站支持多少在線人數,根據這個來確定網站的帶寬和服務器數量,然後根據這個服務器的數量和帶寬來確定交換機的數量和型號。
確定服務器的配置和相關品牌。
  然後根據這些你必須畫出網站的架構圖,網絡圖,網絡接線圖,服務器接線圖。
  架構圖是網站的整體的邏輯架構,是一個整體的邏輯概覽
  網絡圖是展示網絡交換機的邏輯架構,比如VSRP,VLAN的配置就在這裏展示。
  網絡接線圖這裏展示的網絡交換機直接如何連線,連多少線,要標明到連接哪個端口。
  服務器接線圖,這裏展示了服務器的哪些端口接哪個網絡交換機的哪個端口。
  後面2個圖對於操作人員是最重要的,如果畫的不清楚,很可能會耽誤很多時間在溝通上。
  接上線後就需要安裝操作系統,這個現在基本都是網絡來進行安裝了,不會一臺臺通過光驅來進行安裝,這樣不光買機器的時候多付不必要的錢,而且安裝比較慢,同時光驅有時候還會有使用壽命,有時候時間長了就沒辦法進行安裝了。Redhat系統的都可以選擇kickstart來進行遠程安裝,kickstart在安裝過程中還能安裝時候執行自己的系統初始化腳本。比如指定hostname, 修改相關的tcp/ip設置,設置好Iptables等等。而對於網絡環境特別複雜的服務器必須要在網絡配置文件中指定好去各個vlan之間的網關,這個以前我都是放到rc.local中,而這種雖然能在系統啓動的時候會自動進行加載,而如果手動啓動網卡會丟失這些網絡信息。
  安裝完操作系統後,就要進行各自程序文件的部署。
  相關程序文件部署完畢後就可以進行線上測試,這個不光是應用程序的測試,更要進行壓力測試,測試新的系統到底能夠承受多大的負載。這個當中可能出現各種各樣的瓶頸,這個一般是由於web服務器的問題,特別是resin,tomcat這些出現問題的情況比較大,而Php網站由於fast-cgi現在往往可以承受更大的併發。另外一個可能的瓶頸會是數據庫。比如Mysql就需要根據你選擇的數據引擎來調整buffer的大小,這個是數據庫整體性能的調整,個別的調整就需要根據你的slow log來進行相應的調整。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章