建議在安裝線上的生產服務器軟件包時都用源碼安裝,這是因為源碼安裝可以自行調整編譯參數,最大化地定制安裝結果。這里以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編譯出來的文件安裝到指定位置(或默認位置)。
在本節中,我們從服務器的硬件選擇、安裝及內核等方面對單機服務器的性能進行了優化,不過對于網站和系統來說,單機優化對整體性能提升的作用畢竟有限,整體性能提升主要靠服務器的高可用和高擴展性來實現,這部分內容在后面的章節中再來說明。