|
|
| FreeBSDhandbook中文版6配置与调整 | | 发布日期:2005-3-28 浏览:435次 | | 关键字: | 目录 6配置与调整 6.1概要 6.2初步配置 6.3核心配置 6.4应用程序配置 6.5启动服务 6.6虚拟主机 6.7配置文件 6.8用sysctl调整 6.9调整磁盘 6.10调整内核限制 =============================================================
(翻译中出现的任何问题或错误,请广大读者及时反馈给我:FreeBSDhandbook@163.com) 6.1概要 FreeBSD系统管理配置的情况。这章也会描述一些用来调整FreeBSD系统性能的参数。 . . . . . . . . . 6.2初步配置 6.2.1分区设计 6.2.1.1基础分区 磁道传输数据要比从内磁道传输数据来得快,这一点很重要。记住这点,你可以把比较小的, FreeBSD使用手册 II.系统管理 第6章配置与调整 正确地配置系统能充分地减少以后维护和升级系统所需的工作量。这章将描述一些 读完这章你将了解到这些: 为什么和如何在你的硬盘上分配空间,规划和放置文件系统和交换分区。 rc.conf配置文件和/usr/local/etc/rc.d启动系统的基础。 如何在你网络设备上分配虚拟主机。 如何在/etc上使用不同的配置。 如何使用sysctl变量调节FreeBSD。 如何调整磁盘的性能和修改内核的限制。 在阅读这章之前你应当: 了解UNIX和FreeBSD的基础知识(第3章)。 熟悉如何与FreeBSD的源文件保持同步。 内核配置和编译的基础(第9章)。 当使用disklabel或sysinstall命令划分你的文件系统时,需要记住硬盘驱动器从外 第1页FreeBSD使用手册 经常访问的如root和swap放在靠近外磁道的地方。可以把比较大的分区如/usr放在内磁 道上。这样做,按照相同的顺序创建分区:root,swap,/var,/usr。 你的/var分区的大小能反映你机器的使用状况。/var主要用来存放:邮箱,打印spool和 日志文件。邮箱和日志文件可能会达到一个无法预料的数量,这主要取决于在你的系统上有 多少用户和你的日志文件可以保存多长时间。如果你想要运行一个邮件服务器,一个超过G 数量级的/var分区是必要的。另外,/var/tmp要足够大,以便于能够包含足够的你可能会 添加的packages。 /usr分区保存了支持系统所需的文件和一个叫做/usr/local的用来保存从ports安装 文件的子目录。如果你不使用ports也不希望把系统源代码保存在机器上,你可以节省超过 1G的/usr分区。如果你安装许多ports,我们建议至少要为/usr保留2G的空间,如果你也 想把系统源代码保存在你的机器上,我们建议为/usr保留3G的空间。不要低估了这个分区 所需要的空间的大小,它可能会不断增加,让你非常吃惊!当你调整分区的大小时,记住你 的系统可能会不断增加对空间的需求。 注意:一些使用sysinstall的自动默认分区的用户会发现,一段时间以后他们的root 或/var分区会变得很小。建议尽可能把分区分的大一些。 6.2.1.2Swap分区 通常你的交换分区应当是主内存的两倍。例如,如果机器有128M的内存,交换分区应 当是256MB。带有比较少内存的机器可以通过增加交换分区来提高机器的性能。我们并不建 议你配置少于256MB的SWAP分区,你应当记住将来随着内存的扩充,你的swap分区也要相 应地扩大。当swap分区至少是主内存的两倍时,内核的VM页面调度程序将被用来调节系统 到最佳状态。如果你给你的机器添加更多的内存,配置太少的swap,会导致在VM页面扫描 代码时变得效率低下。 最后,在配置有很多SCSI(或IDE)磁盘的较大系统中,我们强烈建议你给每一个硬盘 都创建一个SWAP。Swap分区应当拥有同样的大小。内核可能会处理成任意大小,但内部数 据结构则是最大swap分区的4倍。保持swap分区同样的大小,可以允许内核最佳地调度 swap空间来访问磁盘。不要为此过分担心,交换空间正是UNIX系统的长处。 6.2.1.3为什么要分区? 第2页FreeBSD使用手册 为什么要分区?为什么不创建一个大的根分区?我并不介意大小问题!有很多原因证实 这不是一个好主意。首先,每个分区有不同的操作特性,把它们分开可以允许文件系统去自 动调节自己以适应那些特性。例如,根和/usr分区通常是读得比较频繁,写得比较少,而 象/var和/var/tmp则读写都比较频繁。 6.3核心配置 负责系统配置信息的主要是/etc/rc.conf。这个文件包含了配置文件很宽的范围。在系 统启动时主要被用来配置系统。它的名字直接表明了这点;配置信息一般是rc*这样类型的 文件。一个系统管理员应当在rc.conf文件中建立一个记录来修改/etc/defaults/rc.conf 的默认配置。默认文件不应当被逐字地拷到/etc。所有系统的任何变化将被记录在rc.conf 文件中。由于rc.conf可以被sh命令打开阅读,所以完成这点很简单。例如: rc.conf: ·rc.conf.site ·hostname=”node15.webcompany.com” ·network_interfaces=”fxp0lo0” ·ifconfig_fxp0=”inet10.1.1.1” rc.conf.site: ·defaultrouter=”10.1.1.254” ·saver=”daemon” ·blanktime=”100” Rc.conf.site文件会被分发给每一个使用eg.rsync的系统,而rc.conf文件仍保持独立。 通过使用sysinstall或makeworld来升级系统不会覆盖rc.conf文件,所以系统配置信 息不会被丢失。 第3页FreeBSD使用手册 6.4应用程序配置 典型的,已安装的应用程序有它自己的配置文件,有它自己的语法。这些文件与基本系 统相分离是很重要的,以至于它们能被package管理工具很好地定位和管理。另外,这些文 件被安装在/usr/local/etc中。一个应用程序有许多配置文件,一个子目录将被创建以支 持它们。 通常,当一个port或package被安装时,默认的配置文件也会被安装。这些通常可以 通过.default后缀来辨别。如果不存在应用程序的配置文件,他们会通过拷贝.default文 件来创建。例如,这儿是/usr/local/etc/apache: ·rw-r—r--1rootwheel2184May201998access.conf ·rw-r—r--1rootwheel2184May201998access.conf.default ·rw-r—r--1rootwheel9555May201998httpd.conf ·rw-r—r--1rootwheel9555May201998httpd.conf.default ·rw-r—r--1rootwheel12205May201998magic ·rw-r—r--1rootwheel12205May201998magic.default ·rw-r—r--1rootwheel2700May201998mime.types ·rw-r—r--1rootwheel2700May201998mime.types.default ·rw-r—r--1rootwheel7980May201998srm.conf ·rw-r—r--1rootwheel7933May201998srm.conf.default 可以看到只有srm.conf文件已发生了变化。一个后来的apache的升级不会修改这个变 化的文件。 6.5启动服务 对一个系统来说,支持许多服务是很普通的。这些可能是用不同的形式来启动,每一个 都有不同的长处。 第4页一个port或packagescollection安装软件通常把一个脚本放在/usr/local/etc/rc.d中, 它可以在系统启动的时候被自动调用,在系统关闭的时候自动停止。这是一种我们推荐使用 的启动服务的方法。这些脚本会作为安装package的一部分被注册,当package被删除的时 候它也会被删除。在/usr/local/etc/rc.d中,一个普通的启动脚本是这样的: #!/bin/sh echo-n‘FooBar’ case“$1”in start) /usr/local/bin/foobar ;; stop) kill-9‘cat/var/run/foobar.pid‘ ;; *) echo“Usage:‘basename$0‘{start|stop}”>&2 exit64 ;; esac exit0 这个脚本随着系统的启动而被呼叫,随着系统的关闭而停止。当一个连接被一个相配的 port接收到时,一些服务会被inetd所调用。这个对邮件阅读服务器来说使用比较普遍 (POP,IMAP等)。这些服务可以通过编辑/etc/inetd.conf文件来启用。可以看看inetd 命令的说明就可以了。 FreeBSD使用手册 第5页FreeBSD使用手册 一些额外的系统功能不太可能会被隐藏在/etc/rc.conf中。这些通常能够使用命令来 调用它们。就象在FreeBSD3.1中,没有默认的/etc/rc.local。如果它被系统管理员创建, 它将不可能以普通的形式得到尊重。注意rc.local通常被作为是最后一个访问的记录;如 果有一个比较好的地方能启动一个服务,就是在那儿。 注意:不要把任何命令都放在/etc/rc.conf中。要启动后台程序,或在启动时运行任 何命令,可以在/usr/local/etc/rc.d中添加一行脚本。 使用cron程序来启动系统服务也是可以的。这种方法有很多优势,不仅仅是cron能运 行这些进程,这些服务也可以被没有root权限的用户来启动和操作。 这利用了cron的一个非正式文件的特性;时钟的形式可能会被“@reboot”这种形式所 取代,当系统启动以后,cron程序被很快执行,这将导致工作暂停运行。 6.6虚拟主机 FreeBSD的一个非常普通的应用是虚拟主机功能,一台服务器可以虚拟成多台服务器来 提供网络服务。这只需要分配多个网络地址给一个简单的接口就可以实现。 一个给定的网络接口有一个“real”地址,也会有很多“alias”地址。这些别名通常 被添加到/etc/rc.conf中。 一个接口“fxp0”的别名记录是这样的: ifconfig_fxp0_alias0=“inetxxx.xxx.xxx.xxxnetmaskxxx.xxx.xxx.xxx” 注意:别名记录必须用alias0启动,然后按顺序向上处理,如_alias1,_alias2等。 配置进程将在第一个丢失的数字时停止。别名的子网掩码的计算是很重要的,但幸运的是它 非常简单。对于一个给定的接口,必须有一个正确反映网络的子网掩码的地址。 例如:假设fxp0接口连接到两个网络,10.1.1.0的子网掩码是255.255.255.0,而 202.0.75.16的子网掩码是255.255.255.240。我们要求系统显示从10.1.1.1到10.1.1.5 和202.0.75.17到202.0.75.20。 要正确配置适配器可以这样做: ifconfig_fxp0=”inet10.1.1.1netmask255.255.255.0” ifconfig_fxp0_alias0=”inet10.1.1.2netmask255.255.255.255” 第6页FreeBSD使用手册 ifconfig_fxp0_alias1=”inet10.1.1.3netmask255.255.255.255” ifconfig_fxp0_alias2=”inet10.1.1.4netmask255.255.255.255” ifconfig_fxp0_alias3=”inet10.1.1.5netmask255.255.255.255” ifconfig_fxp0_alias4=”inet202.0.75.17netmask255.255.255.240” ifconfig_fxp0_alias5=”inet202.0.75.18netmask255.255.255.255” ifconfig_fxp0_alias6=”inet202.0.75.19netmask255.255.255.255” ifconfig_fxp0_alias7=”inet202.0.75.20netmask255.255.255.255” 6.7配置文件 6.7.1/etc规划 在配置信息中有很多的目录。这些包括: 一般的系统配置信息:这儿的数据是系统指定的。/etc 系统配置文件的默认版本。/etc/defaults 额外的sendmail配置,其他MTA配置文件。/etc/mail /etc/pppprograms.user-和kernel-ppp程序的配置。 /etc/namedbBind数据的默认定位。通常启动文件是定位在这儿,在/var/db中 参考其他数据的一个指示。 安装应用程序的配置文件。可以参考每个应用程序的子目录。/usr/local/etc /usr/local/etc/rc.d安装应用程序的启动/停止的脚本。 稳定的系统指定的数据文件:bind区域文件,数据库文件等等。/var/db 6.7.2主机名 6.7.2.1/etc/resolv.conf /etc/resolv.conf描述了FreeBSD如何访问internet的域名系统(DNS)。最普通的 resolv.conf的记录是: nameserver要查询的域名服务器的IP地址。服务器按照顺序查询。 搜索域名的列表。这通常是由本地的域名决定的。search 本地域名。domain 第7页FreeBSD使用手册 一个典型的resolv.conf: searchfoobar.com nameserver147.11.1.11 nameserver147.11.100.30 Dhclient通常会把DHCP服务器接收到的信息重写resolv.conf。 6.7.2.2/etc/hosts /etc/hosts是一个文本数据库。它是用来联合DNS和NIS给IP地址的影射表提供名字。 本地的电脑通过一个LAN进行连接,可能会作为一个简单的命名目的而放在这儿,以代替设 置一个名称服务器。另外,/etc/hosts能被用来提供一个本地internet名称的记录,减少 搜索普通访问名称的需求。 #$FreeBSD$ # #HostDatabase #Thisfileshouldcontaintheaddressesandaliases #forlocalhoststhatsharethisfile. #InthepresenceofthedomainnameserviceorNIS,thisfilemay #notbeconsultedatall;see/etc/nsswitch.conffortheresolutionorder. # # ::1localhostlocalhost.my.domainmyname.my.domain 127.0.0.1localhostlocalhost.my.domainmyname.my.domain # 第8页FreeBSD使用手册 #Imaginarynetwork. #10.0.0.2myname.my.domainmyname #10.0.0.3myfriend.my.domainmyfriend # #AccordingtoRFC1918,youcanusethefollowingIPnetworksfor #privatenetswhichwillneverbeconnectedtotheInternet: # #10.0.0.0-10.255.255.255 #172.16.0.0-172.31.255.255 #192.168.0.0-192.168.255.255 # #IncaseyouwanttobeabletoconnecttotheInternet,youneed #realofficialassignednumbers.PLEASEPLEASEPLEASEdonottry #toinventyourownnetworknumbersbutinsteadgetonefromyour #networkprovider(ifany)orfromtheInternetRegistry(ftpto #rs.internic.net,directory‘/templates’). # /etc/hosts的简单格式: [Internetaddress][officalhostname][alias1][alias2]... 例如: 10.0.0.1myRealHostname.foobar.commyRealHostnamefoobar1foobar2 第9页FreeBSD使用手册 6.7.3日志文件配置 6.7.3.1syslog.conf Syslog.conf是syslogd程序的配置文件。它指出记录到日志文件的syslog信息的类 型。 #$FreeBSD$ # #SpacesAREvalidfieldseparatorsinthisfile.However, #other*nix-likesystemsstillinsistonusingtabsasfield #separators.Ifyouaresharingthisfilebetweensystems,you #maywanttouseonlytabsasfieldseparatorshere. #Consultthesyslog.confmanpage. *.err;kern.debug;auth.notice;mail.crit/dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err/var/log/messages security.*/var/log/security mail.info/var/log/maillog lpr.info/var/log/lpd-errs cron.*/var/log/cron *.errroot *.notice;news.errroot *.alertroot *.emerg* #uncommentthistologallwritesto/dev/consoleto/var/log/console.log 第10页FreeBSD使用手册 #console.info/var/log/console.log #uncommentthistoenableloggingofalllogmessagesto/var/log/all.log #*.*/var/log/all.log #uncommentthistoenableloggingtoaremoteloghostnamedloghost #*.*@loghost #uncommenttheseifyou’rerunninginn #news.crit/var/log/news/news.crit #news.err/var/log/news/news.err #news.notice/var/log/news/news.notice !startslip ./var/log/slip.log !ppp ./var/log/ppp.log 6.7.3.2newsyslog.conf Newsyslog.conf是newsyslog程序的配置文件。一个被cronnewsyslog安排来运行的 程序决定了什么时候日志文件要求重新存档或整理。Logfile会被改为logfile.1, logfile.1会被改为logfile.2等等。另外,日志文件会用gzip格式进行存档。它们是这 样命名的:logfiel.0.gz,logfile.1.gz等等。 Newsyslog.conf指出了哪个文件需要被管理,有多少需要被保存,什么时候他们会被 调用。当他们达到一定大小或到一个适当的周期时,日志文件需要被重新整理。 #configurationfilefornewsyslog #$FreeBSD$ # 第11页FreeBSD使用手册 #logfilename[owner:group]modecountsizewhen[ZB][/pid_file] [sig_num] /var/log/cron6003100*Z /var/log/amd.log6447100*Z /var/log/kerberos.log6447100*Z /var/log/lpd-errs6447100*Z /var/log/maillog6447*@T00Z /var/log/sendmail.st64410*168B /var/log/messages6445100*Z /var/log/all.log6007*@T00Z /var/log/slip.log6003100*Z /var/log/ppp.log6003100*Z /var/log/security60010100*Z /var/log/wtmp6443*@01T05B /var/log/daily.log6407*@T00Z /var/log/weekly.log64051$W6D0Z /var/log/monthly.log64012*$M1D0Z /var/log/console.log6405100*Z 6.7.4sysctl.conf 第12页FreeBSD使用手册 Sysctl.conf看起来象rc.conf。它的值以这种形式来设置:variable=value。指定的 值需要在进入多用户模式时才能被设置。在这种模式中不是所有的变量都能被设置。 一个sysctl.conf关闭引起重大错误产生的日志,然后让Linux程序知道他们真的运行 在FreeBSD下面。 kern.logsigexit=0#Donotlogfatalsignalexits(e.g.sig11) compat.linux.osname=FreeBSD compat.linux.osrelease=4.3-STABLE 6.8用sysctl进行调整 sysctl是一个允许你对一个运行着的FreeBSD系统进行修改的接口。这包括许多TCP/IP 堆栈和虚拟内存系统的高级选项,它通常可以为一个有经验的系统管理员提高系统的性能。 能够使用sysctl来阅读和设置超过5百个系统变量。 基于这点,sysctl起到两个功能:阅读和修改系统设置。去看看所有可读的变量: sysctl-a 阅读一个详细的变量,例如,kern.maxproc: sysctlkern.maxproc kern.maxproc:1044 设置一个特殊的变量,使用=选项: #sysctlkern.maxfiles=5000 kern.maxfiles:2088->5000 Sysctl变量的设置通常不是字符,数字,就是布尔类型的。一个布尔类型的树1代表 yes,0代表no。 6.9调整磁盘 6.9.1Sysctl变量 6.9.1.1vfs.vmiodirenable 第13页FreeBSD使用手册 vfs.vmiodirenablesysctl变量默认为0(off),也可以被设置成0或1。很多目录 是比较小,只使用一小片段(典型的:1k),甚至更少(典型的:512bytes)。然而,当 在默认的模式下操作时,即使你有很多内存,缓存器只缓存一些固定的目录。打开这个 sysctl可以允许缓存器使用VM页面缓存来缓存目录。这样的优势是所有的内存都能被缓存 目录所利用。不利的是最小的用来缓存目录的核心内存要大于512bytes(典型的是:4K)。 如果你运行有大量文件处理的服务时,我们建议把这个选项打开。这样的服务包括web缓存、 大邮件系统和新闻系统。打开这项服务通常不会降低系统的性能,只是会浪费一点内存,但 你要仔细检查一下。 6.9.1.2hw.ata.wc FreeBSD通常把IDE写入缓存关闭掉。这可以减少写入磁盘时需要的带宽。基本上,当 写入完成后,IDE基本上就没事了。由于IDE写入缓存被打开,IDE驱动器将不再按顺序把 数据写入到硬盘中。当磁盘处于比较大的负荷时,它们通常能缓冲写入的数据。不幸的是, 这样会丢失很多性能,最好还是改回默认值。你应当通过观察hw.ata.wcsysctl变量来检 查你的系统的默认情况。如果IDE的写入缓存被关闭,你可以在内核变量中把它改回1就可 以把它打开。这必须在启动时从引导程序过程中进行。在内核启动之后再这样做就没有用了。 6.9.2SoftUpdates Tunefs能被用来很好地调整文件系统。可以这样做: #tunefs-nenable/filesystem #tunefs-ndisable/filesystem 一个文件系统当被挂上的时候不能使用tunefs进行修改。在单用户模式下,在所有分 区都没有被挂上之前,起用SoftUpdates是最佳时机。 通过使用内存缓冲器,SoftUpdates能够极大地提高文件的性能,只要是文件创建和删 除。我们建议在你的所有文件系统上都打开SoftUpdates。你应当清楚两点:第一, SoftUpdates能在系统出现错误时保证系统的一致性,但在升级了物理磁盘后可能只需要几 秒钟。如果你的系统崩溃了,你可能会丢失很多的工作。第二,SoftUpdates可以推迟文件 系统块的释放时间。如果你有一个接近满了的文件系统,对它作一个主升级,make installworld,可能会超出运行空间,从而引起升级失败。 第14页FreeBSD使用手册 6.10调整内核限制 6.10.1文件/进程限制 6.10.1.1kern.maxfiles kern.maxfiles可以根据你系统的要求加大或减小。这个变量指出了在你系统上描述的 最大数量文件。可以用dmesg来显示文件描述符的情况。 每一个打开的文件,套接字,或fifo使用的文件描述符,都依赖于当前运行的服务的 种类和数量。 kern.maxfile的默认值可以在你的内核配置中通过maxusers选项来指定。 kern.maxfiles可以按比例地增加maxuser的值。 6.10.2网络限制 NMBCLUSTERS内核配置选项指出了系统可用的网络mbufs的数量。一个具有大量负载的 服务器如果MBUFs比较少,就会影响FreeBSD的性能。每一个cluster大概需要2K的内存, 所以1024个cluster就需要保留2MB的内存给网络缓存。如果你的服务器超过一个并发连 接,那每个连接需要吃掉一个16k的接收缓存和一个16K的发送缓存,你需要提供32MB的 内存给网络缓存以确保web服务器的稳定。一个最笨的计算方法是乘以2,所以 32MBx2=64MB/2K=32768。 第15页 | | 关键字: |
|
|