建議在安裝線上的生產伺服器軟體包時都用源碼安裝,這是因為源碼安裝可以自行調整編譯參數,最大化地定製安裝結果。這裡以MySQL 5線上環境的編譯安裝來說明之,其編譯參數如下所示:
./configure -prefix=/usr/local/mysql -without-debug -without-bench -enable-thread-safe-client -enable-assembler -enable-profiling -with-mysqld-ldflags=-all-static - with-client-ldflags=-all-static -with-charset=latin1 - with-extra-charset=utf8,gbk -with-innodb -with-csv-storage -engine -with-federated-storage-engine -with-mysqld-user=mysql -without-embedded-server -with-server-suffix=-community -with-unix-socket-path=/usr/local/mysql/sock/mysql.sock && make && make install
在安裝MySQL時,源碼安裝與rpm安裝相較,其特點如下:
我們可以針對自己的硬體平台選用合適的編譯器來最佳化編譯後的二進位代碼。
根據不同的軟體平台環境調整相關的編譯參數(源碼安裝不僅適用於rhel/centos,其他系統像FreeBSD、Solaris、Ubuntu等一樣適用)。
可針對特定的應用情境選擇需要什麼組件或不需要什麼組件。
同一台主機上可以安裝多個MySQL(rpm安裝則僅能安裝一個MySQL)。
根據需要儲存的資料內容選擇只安裝需要的字元集。
理論上源碼靜態編譯方式安裝效率會高一點,但到底比rpm方式高多少得看具體情況,一般在5%左右。
某次線上上環境工作,我用yum卸載一個軟體包時遇到了極其危險的情況,這裡也跟大家分享一下:當時,yum remove自動卸載了許多這個軟體包自身依賴的系統包,導致系統崩潰了,SSH不能登入,並且SCP及RSYNC也都不能用了,幸虧FTP命令還能用, 所以資料很快被FTP傳到其他伺服器上了,但系統已經徹底崩潰,只有重裝了。如果是源碼安裝的軟體包就沒有這種危險,需要卸載時只需要刪除軟體包安裝的目 錄即可。
綜上所述,源碼安裝的好處如下:
最大的好處就是可以自行調整編譯參數,最大化地定製安裝結果。
源碼安裝可以選擇最新的軟體包,而Linux系統(包括FreeBSD)內建的軟體包一般都是最穩定的版本,但不能保證是最新的。
相對而言,源碼安裝的效能是最優異的。
源碼包安裝的軟體卸載時極為方便和簡單,更重要的是,它比較安全,尤其是對線上的生產環境而言。
遷徙也比較方便,如果不涉及系統庫檔案,複製到另一台機器上也可以使用。
這裡也簡單介紹一下在Linux/Unix下安裝軟體的源碼三部曲,在後面我們會經常看到它們的身影。
./configure make make install
./configure是用來檢查環境變數及配置編譯選項的,make是用來將原始碼編譯成二進位檔案的,而make install則會將make編譯出來的檔案安裝到指定位置(或預設位置)。
在本節中,我們從伺服器的硬體選擇、安裝及核心等方面對單機伺服器的效能進行了最佳化,不過對於網站和系統來說,單機最佳化對整體效能提升的作用畢竟有限,整體效能提升主要靠伺服器的高可用和高擴充性來實現,這部分內容在後面的章節中再來說明。