分享FreeBSD 8.0的十四條優(yōu)化策略
原創(chuàng)【51CTO獨家特稿】筆者目前是一位外企linux/unix系統(tǒng)工程師與項目實施工程師,而FreeBSD一直作為我們企業(yè)內(nèi)部的開發(fā)服務(wù)器,具有穩(wěn)定和高效的特點。本文根據(jù)筆者經(jīng)驗總結(jié)了十四條FreeBSD的優(yōu)化策略。如無其它,以下所指FreeBSD均指FreeBSD 8.0_release。
推薦專題:企業(yè)內(nèi)網(wǎng)開發(fā)環(huán)境部署與管理全攻略(FreeBSD+PHP)
一、提高ports安裝速度
FreeBSD中的ports安裝工具默認(rèn)工具是用fetch,下載時經(jīng)常出現(xiàn)龜速現(xiàn)象。為了提高ports安裝速度,我推薦axel工具。相關(guān)make.conf文件配置步驟如下:
- cd /usr/ports/ftp/axel
- make install
- #修改/et/make.conf
- vi /etc/make.conf
- #加入以下內(nèi)容
- FETCH_CMD=axel
- FETCH_BEFORE_ARGS= -n 10 -a
- FETCH_AFTER_ARGS=
- DISABLE_SIZE=yes
- MASTER_SITE_OVERRIDE?=\
- http://ports.hshh.org/${DIST_SUBDIR}/\
- http://ports.cn.freebsd.org/${DIST_SUBDIR}/\
- ftp://ftp.freeBSDchina.org/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/
- MASTER_SITE_OVERRIDE?=${MASTER_SITE_BACKUP}
以上路徑是為了用速度比較快的網(wǎng)站代替程序默認(rèn)的下載源,達(dá)到加速的目的。配置成功后,享受axel帶來的極速快感吧。
二、安裝vim編輯器
工欲善其事,必先利其器。用了段時間后的FreeBSD,居然發(fā)現(xiàn)沒有vim,我還是習(xí)慣使用Linux下的vim,先安裝vim后再工作吧。安裝方法如下:
①如果安裝了X Windows
- cd /usr/ports/editors/vim6
- make install
②如果沒安裝X Windows,則可安裝vim7.2+ruby,Ruby是一門面向?qū)ο蟮姆?wù)器腳步語言,相當(dāng)與Perl。
- cd /usr/ports/editors/vim6+ruby
- make -DWITHOUT_X11 install clean
③還可采用pkd_add的方式安裝
pkg_add -r -v vim-lite
成功安裝完vim后配置下vim,讓其有語法檢查及顏色顯示等功能。
- #echo "syntax on">>/root/.vimrc
- #echo "alias vi vim" >>/root/.cshrc
三、配置遠(yuǎn)程連接工具
我使用的遠(yuǎn)程連接工具是Xmanager3.0企業(yè)版,因為習(xí)慣了Linux的顏色顯示,這里將其改成與linux一致:
- #vim /etc/csh.cshrc
- #加入如下
- setenv LSCOLORS ExGxFxdxCxegedabagExEx
- setenv CLICOLOR yes
- source /etc/csh.cshrc
#p#
四、列出無法補齊的候選文件
想要讓FreeBSD的csh像bash那樣按tab列出無法補齊的候選文件,標(biāo)準(zhǔn)的方法是按Ctrl+D。但如果一定要用tab的話,在/etc/csh.cshrc中加入:
set autolist
五、使用portsnap升級port的目錄樹
我們使用portsnap,首先要設(shè)置一下它的配置文件/etc/portsnap.conf:
- [root@bsd01 /usr/ports]# vi /etc/portsnap.conf
把SERVERNAME=portsnap.freebsd.org
修改成:
SERVERNAME=portsnap.hshh.org
在你的freebsd首次使用portsnap必須執(zhí)行下面2步:
- [root@bsd01 ~]# portsnap fetch
- [root@bsd01 ~]# portsnap extract
這2步可以合成使用:
- [root@bsd01 ~]# portsnap fetch extract
portsnap fecth是從網(wǎng)上獲取portsnap快照的最新壓縮包,聽聞這個壓縮包官方每小時更新一次。
portsnap extract 則是把這個壓縮包創(chuàng)立到/usr/ports。哪怕你以前已經(jīng)手工安裝了ports,他也會重新創(chuàng)立一次。
以后更新,只需要執(zhí)行下面2步:
- [root@bsd01 ~]# portsnap fetch
- [root@bsd01 ~]# portsnap update
這2步可以合成使用:
- [root@bsd01 ~]# portsnap fetch update
portsnap第一次運行extract命令時,可能需要一段時間,以后更新使用update的時候,速度就塊很多了。
六、系統(tǒng)內(nèi)核級優(yōu)化+防止ddos
根據(jù)某位unix前輩的觀點:本來就很好,加加更健康。加載文件修改方法如下:
- # vim /boot/loader.conf加入如下文本
- kern.dfldsiz="2147483648"
- kern.maxdsiz="2147483648"
- kern.ipc.nmbclusters="0"
- kern.ipc.nsfbufs="66560"
解釋:
a、第一、二行主要是為了突破1G內(nèi)存設(shè)置的。
b、第三行其實是bsd的一個bug,當(dāng)系統(tǒng)并發(fā)達(dá)到一個數(shù)量級的時候,系統(tǒng)會crash,這個是非常糟糕的事情。所幸更改了這個參數(shù)后,在高并發(fā)的時候,基本可以沒有類似情況,當(dāng)然非常bt的情況,還得進一步想辦法。
c、第四行是讀取的文件數(shù),如果你下載的文件比較大,且比較多,加大這個參數(shù),是非常爽的。
Sysctl修改方法如下:
- #vi /etc/rc.local
- sysctl kern.ipc.maxsockets=100000 ##增加并發(fā)的socket,對于ddos很有用
- sysctl kern.ipc.somaxconn=65535 ##打開文件數(shù)
- sysctl net.inet.tcp.msl=2500 ##timeout時間
#p#
七、FreeBSD的pf防火墻
眾所周知,F(xiàn)reeBSD的ipfw是移植自O(shè)PENBSD的防火墻,其強大我這里就不多說了。因為其用途主要用于內(nèi)部開發(fā),所以我這里就是關(guān)閉了防火墻,pfctl -d。在對外實施項目的過程中發(fā)現(xiàn),Linux下的iptables及FreeBSD的ipfw均不可能防DDOS攻擊,所以在安全方面我就轉(zhuǎn)向于硬件防火墻,而將iptables和ipfw主要用于內(nèi)網(wǎng)NAT路由器這塊。
這里簡單介紹下ipfw的語法吧:
pfctl -e #啟動ipfw防火墻 pfctl -d #停止ipfw防火墻 pfctl -sa | grep Status #查看狀態(tài) pfctl -f /etc/pf.conf #載入 pf.conf 文件 pfctl -nf /etc/pf.conf #檢查配置文件錯誤,但不載入 pfctl -Nf /etc/pf.conf #只載入文件中的NAT規(guī)則 pfctl -Rf /etc/pf.conf #只載入文件中的過濾規(guī)則 pfctl -sn #顯示當(dāng)前的NAT規(guī)則 pfctl -sr #顯示當(dāng)前的過濾規(guī)則 pfctl -ss #顯示當(dāng)前的狀態(tài)表 pfctl -si #顯示過濾狀態(tài)和計數(shù) pfctl -sa #顯示任何可顯示的 pfctl -t http_table -T show #查看動態(tài)表 pfctl -t http_table -T add 192.168.1.X #添加一個IP到表 pfctl -t http_table -T del 192.168.1.X #從表中刪除IP
八、運行新安裝的命令
FreeBSD 8.0的cshell會緩存環(huán)境變量PATH中指定的目錄里的可執(zhí)行文件,以加快查找速度,這會造成一些新安裝的命令無法運行,最典型的例子就是剛安裝的vim居然提示找不到命令。用如下命令解決問題:
rehash
感覺此習(xí)慣跟linux下用locate查找某文件比較類似。linux下一般也會在安裝前軟件后用updatedb來更新文件最新數(shù)據(jù)庫,然后用locate命令令其生效。
九、進行安全的遠(yuǎn)程登錄
很多人會修改/etc/ssh/sshd_config文件,以便讓root遠(yuǎn)程登陸FreeBSD服務(wù)器,但這樣做是極不安全的,建議還是添加一個wheel組的用戶,然后再su – root更為安全。
- PermitRootLogin yes #允許root登錄
- PermitEmptyPasswords no #不允許空密碼登錄
- PasswordAuthentication yes #設(shè)置是否使用口令驗證
#p#
十、檢查網(wǎng)絡(luò)流量是否異常
如果你感覺你的網(wǎng)絡(luò)流量異常,可采用如下方法來檢查排障:
systat -if 1
1表示1秒刷新屏幕一次,Traffic流量平均值,peak 峰值,total流量總值,很實用的命令;缺省情況下systat是報告處理器的使用率,包括總利用狀態(tài)、空閑使用率和各個進程的使用率。通過指定參數(shù),systat也能進行I/O的統(tǒng)計、虛存的統(tǒng)計、網(wǎng)絡(luò)的統(tǒng)計等。
十一、查看FreeBSD服務(wù)器的一些基礎(chǔ)情況和信息
①查看CPU:
- sysctl hw.model hw.ncpu
- dmesg | grep "CPU:"
②查看內(nèi)存:
- dmesg | grep "real memory" | awk -F '[( )]' '{print $2,$4,$7,$8}'
查看swap:
- top | grep "Swap:" | awk '{print $1,$2}'
③查看硬盤:
- diskinfo -vt /dev/ad0
④看硬盤大小及硬件使用情況:
- dmesg | grep "sector" | awk '{print $1,$2}'
- df -h
⑤查看服務(wù)器品牌:
- dmesg | grep "ACPI APIC"
⑥查看系統(tǒng)內(nèi)核,命令跟Linux下一樣:
- uname -a
- mail# uname -a
- FreeBSD mail.cn7788.com 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21 15:48:17 UT
十二、關(guān)于Linux二進制兼容模式
許多公司和開發(fā)人員只為Linux開發(fā)程序,因為這是目前計算機世界最熱門的技術(shù);這時FreeBSD能夠做什么呢,答案就是使用FreeBSD所提供的Linux二進制兼容性,方法是:
- kldstat linux
讓Linux兼容在系統(tǒng)初始化自動啟動,在/etc/rc.conf中加入
- linux_enable="YES"
檢查KLD模塊是否加載:
- mail# kldstat
- Id Refs Address Size Name
- 1 1 0xc0400000 b6dfe0 kernel
如果您不想或者無法將Linux KLD加載,您就需要在內(nèi)核中靜態(tài)鏈接進Linux二進制兼容性模式。您必須在您的內(nèi)核配置文件里面加入options COMPAT_LINUX,然后重新編譯內(nèi)核。
十三、有關(guān)于FreeBSD的網(wǎng)絡(luò)配置
雖然sysinstall也能修改主機的網(wǎng)絡(luò)相關(guān),但修改完網(wǎng)卡的相關(guān)參數(shù)后sysinstall會提示W(wǎng)ould you liketo bring the le0 interface up right now?(你想讓le0生效嗎?)但我興沖沖的執(zhí)行此步后,發(fā)現(xiàn)新改的網(wǎng)卡參數(shù)并沒重新重獎;所以我建議修改/etc/rc.conf文件后用命令使其立即生效。
- vim /etc/rc.conf
- hostname="mail.bolaninfo.com"
- ifconfig_le0="inet 192.168.1.108 netmask 255.255.255.0"
- defaultrouter="192.168.1.1"
- #defaultrouter是網(wǎng)關(guān)地址
修改后需要讓修改立即生效。這里不建議reboot服務(wù)器,有個小技巧與大家分享下,即
- sh /etc/rc
測試修改defaultroute="192.168.1.103",然后sh /etc/rc,最后用命令測試了,大家注意下Gateway這行,即改動生效了。
域名解析DNS配置如下
- #vim /etc/resolv.conf
- nameserver 210.5.4.116
- nameserver 210.51.176.71
另外這里稍為解釋下名字解析hosts,它的執(zhí)行順序是優(yōu)于DNS,現(xiàn)階段多用于集群環(huán)境,如DRDB+Heartbeat,配置過程如下
- #vim /etc/hosts
- 192.168.1.100 HA1
- 192.168.1.101 HA2
十四、LVS腳本
在用Freebsd作LVS后端的web集群時,發(fā)現(xiàn)用其作的lvs腳本比linux簡單多了,尤其是arp抑制。腳本如下:
- mail# vim /usr/local/bin/lvs_real_bsd
- #!/usr/local/bin/bash
- #description : start realserver
- VIP=192.168.1.188
- case "$1" in
- start)
- echo " start LVS of REALServer"
- /sbin/ifconfig lo0 $VIP netmask 255.255.255.255 alias -arp up
- ;;
- stop)
- /sbin/ifconfig lo0 alias down
- echo "close LVS Directorserver"
- /sbin/ifconfig lo0 127.0.0.1 arp up
- ;;
- *)
- echo "Usage: $0 {start|stop}"
- exit 1
- esac
【編輯推薦】
- 小規(guī)模DDoS(拒絕服務(wù))用Freebsd+IPFW搞定
- FreeBSD系統(tǒng)安裝與配置之準(zhǔn)備篇
- FreeBSD 7.3發(fā)布 7系列最穩(wěn)定版本