【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
【编辑推荐】