分享FreeBSD 8.0的十四條優化策略
原創【51CTO獨家特稿】筆者目前是一位外企linux/unix系統工程師與項目實施工程師,而FreeBSD一直作為我們企業內部的開發服務器,具有穩定和高效的特點。本文根據筆者經驗總結了十四條FreeBSD的優化策略。如無其它,以下所指FreeBSD均指FreeBSD 8.0_release。
推薦專題:企業內網開發環境部署與管理全攻略(FreeBSD+PHP)
一、提高ports安裝速度
FreeBSD中的ports安裝工具默認工具是用fetch,下載時經常出現龜速現象。為了提高ports安裝速度,我推薦axel工具。相關make.conf文件配置步驟如下:
- cd /usr/ports/ftp/axel
- make install
- #修改/et/make.conf
- vi /etc/make.conf
- #加入以下內容
- 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}
以上路徑是為了用速度比較快的網站代替程序默認的下載源,達到加速的目的。配置成功后,享受axel帶來的極速快感吧。
二、安裝vim編輯器
工欲善其事,必先利其器。用了段時間后的FreeBSD,居然發現沒有vim,我還是習慣使用Linux下的vim,先安裝vim后再工作吧。安裝方法如下:
①如果安裝了X Windows
- cd /usr/ports/editors/vim6
- make install
②如果沒安裝X Windows,則可安裝vim7.2+ruby,Ruby是一門面向對象的服務器腳步語言,相當與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
三、配置遠程連接工具
我使用的遠程連接工具是Xmanager3.0企業版,因為習慣了Linux的顏色顯示,這里將其改成與linux一致:
- #vim /etc/csh.cshrc
- #加入如下
- setenv LSCOLORS ExGxFxdxCxegedabagExEx
- setenv CLICOLOR yes
- source /etc/csh.cshrc
#p#
四、列出無法補齊的候選文件
想要讓FreeBSD的csh像bash那樣按tab列出無法補齊的候選文件,標準的方法是按Ctrl+D。但如果一定要用tab的話,在/etc/csh.cshrc中加入:
set autolist
五、使用portsnap升級port的目錄樹
我們使用portsnap,首先要設置一下它的配置文件/etc/portsnap.conf:
- [root@bsd01 /usr/ports]# vi /etc/portsnap.conf
把SERVERNAME=portsnap.freebsd.org
修改成:
SERVERNAME=portsnap.hshh.org
在你的freebsd首次使用portsnap必須執行下面2步:
- [root@bsd01 ~]# portsnap fetch
- [root@bsd01 ~]# portsnap extract
這2步可以合成使用:
- [root@bsd01 ~]# portsnap fetch extract
portsnap fecth是從網上獲取portsnap快照的最新壓縮包,聽聞這個壓縮包官方每小時更新一次。
portsnap extract 則是把這個壓縮包創立到/usr/ports。哪怕你以前已經手工安裝了ports,他也會重新創立一次。
以后更新,只需要執行下面2步:
- [root@bsd01 ~]# portsnap fetch
- [root@bsd01 ~]# portsnap update
這2步可以合成使用:
- [root@bsd01 ~]# portsnap fetch update
portsnap第一次運行extract命令時,可能需要一段時間,以后更新使用update的時候,速度就塊很多了。
六、系統內核級優化+防止ddos
根據某位unix前輩的觀點:本來就很好,加加更健康。加載文件修改方法如下:
- # vim /boot/loader.conf加入如下文本
- kern.dfldsiz="2147483648"
- kern.maxdsiz="2147483648"
- kern.ipc.nmbclusters="0"
- kern.ipc.nsfbufs="66560"
解釋:
a、第一、二行主要是為了突破1G內存設置的。
b、第三行其實是bsd的一個bug,當系統并發達到一個數量級的時候,系統會crash,這個是非常糟糕的事情。所幸更改了這個參數后,在高并發的時候,基本可以沒有類似情況,當然非常bt的情況,還得進一步想辦法。
c、第四行是讀取的文件數,如果你下載的文件比較大,且比較多,加大這個參數,是非常爽的。
Sysctl修改方法如下:
- #vi /etc/rc.local
- sysctl kern.ipc.maxsockets=100000 ##增加并發的socket,對于ddos很有用
- sysctl kern.ipc.somaxconn=65535 ##打開文件數
- sysctl net.inet.tcp.msl=2500 ##timeout時間
#p#
七、FreeBSD的pf防火墻
眾所周知,FreeBSD的ipfw是移植自OPENBSD的防火墻,其強大我這里就不多說了。因為其用途主要用于內部開發,所以我這里就是關閉了防火墻,pfctl -d。在對外實施項目的過程中發現,Linux下的iptables及FreeBSD的ipfw均不可能防DDOS攻擊,所以在安全方面我就轉向于硬件防火墻,而將iptables和ipfw主要用于內網NAT路由器這塊。
這里簡單介紹下ipfw的語法吧:
pfctl -e #啟動ipfw防火墻 pfctl -d #停止ipfw防火墻 pfctl -sa | grep Status #查看狀態 pfctl -f /etc/pf.conf #載入 pf.conf 文件 pfctl -nf /etc/pf.conf #檢查配置文件錯誤,但不載入 pfctl -Nf /etc/pf.conf #只載入文件中的NAT規則 pfctl -Rf /etc/pf.conf #只載入文件中的過濾規則 pfctl -sn #顯示當前的NAT規則 pfctl -sr #顯示當前的過濾規則 pfctl -ss #顯示當前的狀態表 pfctl -si #顯示過濾狀態和計數 pfctl -sa #顯示任何可顯示的 pfctl -t http_table -T show #查看動態表 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會緩存環境變量PATH中指定的目錄里的可執行文件,以加快查找速度,這會造成一些新安裝的命令無法運行,最典型的例子就是剛安裝的vim居然提示找不到命令。用如下命令解決問題:
rehash
感覺此習慣跟linux下用locate查找某文件比較類似。linux下一般也會在安裝前軟件后用updatedb來更新文件最新數據庫,然后用locate命令令其生效。
九、進行安全的遠程登錄
很多人會修改/etc/ssh/sshd_config文件,以便讓root遠程登陸FreeBSD服務器,但這樣做是極不安全的,建議還是添加一個wheel組的用戶,然后再su – root更為安全。
- PermitRootLogin yes #允許root登錄
- PermitEmptyPasswords no #不允許空密碼登錄
- PasswordAuthentication yes #設置是否使用口令驗證
#p#
十、檢查網絡流量是否異常
如果你感覺你的網絡流量異常,可采用如下方法來檢查排障:
systat -if 1
1表示1秒刷新屏幕一次,Traffic流量平均值,peak 峰值,total流量總值,很實用的命令;缺省情況下systat是報告處理器的使用率,包括總利用狀態、空閑使用率和各個進程的使用率。通過指定參數,systat也能進行I/O的統計、虛存的統計、網絡的統計等。
十一、查看FreeBSD服務器的一些基礎情況和信息
①查看CPU:
- sysctl hw.model hw.ncpu
- dmesg | grep "CPU:"
②查看內存:
- 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
⑤查看服務器品牌:
- dmesg | grep "ACPI APIC"
⑥查看系統內核,命令跟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
十二、關于Linux二進制兼容模式
許多公司和開發人員只為Linux開發程序,因為這是目前計算機世界最熱門的技術;這時FreeBSD能夠做什么呢,答案就是使用FreeBSD所提供的Linux二進制兼容性,方法是:
- kldstat linux
讓Linux兼容在系統初始化自動啟動,在/etc/rc.conf中加入
- linux_enable="YES"
檢查KLD模塊是否加載:
- mail# kldstat
- Id Refs Address Size Name
- 1 1 0xc0400000 b6dfe0 kernel
如果您不想或者無法將Linux KLD加載,您就需要在內核中靜態鏈接進Linux二進制兼容性模式。您必須在您的內核配置文件里面加入options COMPAT_LINUX,然后重新編譯內核。
十三、有關于FreeBSD的網絡配置
雖然sysinstall也能修改主機的網絡相關,但修改完網卡的相關參數后sysinstall會提示Would you liketo bring the le0 interface up right now?(你想讓le0生效嗎?)但我興沖沖的執行此步后,發現新改的網卡參數并沒重新重獎;所以我建議修改/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是網關地址
修改后需要讓修改立即生效。這里不建議reboot服務器,有個小技巧與大家分享下,即
- 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,它的執行順序是優于DNS,現階段多用于集群環境,如DRDB+Heartbeat,配置過程如下
- #vim /etc/hosts
- 192.168.1.100 HA1
- 192.168.1.101 HA2
十四、LVS腳本
在用Freebsd作LVS后端的web集群時,發現用其作的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
【編輯推薦】