构建高可用Linux服务器(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-27 02:11:40

点击下载

作者:余洪春

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

构建高可用Linux服务器(第3版)

构建高可用Linux服务器(第3版)试读:

前言

我的系统架构师之路

2004年我初识UNIX开源系统。那会儿我正在一家大型国有企业做系统管理员,负责值守公司的Windows Server 2000服务器。当时“震荡波”和“冲击波”这两种病毒很猖狂,虽然我们在防毒方面投入了大量的精力和金钱(当时购买的都是正版Windows 2000系统和正版瑞星杀毒软件),但新上线的机器,偶尔也有遗漏的时候,没有打补丁的机器无一幸免,所以对这个问题比较头疼。有一次去朋友的公司(某省太平洋寿险下面的一个分支机构)参观,我发现他们的服务器和终端系统都很奇怪,只有纯字符界面,没有任何图形界面。一问才知道是UNIX系统,因为运行机制不一样,所以Windows Server下的病毒丝毫影响不了它们。而且这些服务器很稳定,基本上不宕机。当时很是羡慕,心想要是哪一天我们的服务器也换成UNIX系统,那“冲击波”和“震荡波”就奈何不了我们的服务器了,而且也不会有蓝屏现象,那该多好。

后来有幸到北京一家大型广告公司上班,公司的核心业务是CDN系统,所用的服务器基本上都是CentOS系统,内部用的文件服务器是Samba,Web服务器是Apache和Nginx,NAT路由器是iptables,装的几乎全部是CentOS 5.1 x86_64,仅有一台服务器安装的是Windows Server 2003(供程序员开发.NET程序之用)。公司的这套CDN分布式系统要负责处理所有的流量,即使在高峰期PV和并发量特别大的时候,网站也非常稳定。

我当时对CentOS系统产生了浓厚的兴趣,尝试改掉自己多年使用Windows的习惯,换成了纯字符操作,用Vim编辑CentOS下面的配置文件,并且尝试用Shell完成自动化工作。渐渐地,我发现自己越来越喜欢CentOS系统了。公司有一台vsftpd服务器,3年没有重启了,这很令人吃惊。后来我又得知另外一位从事Linux运维工作的朋友所在的公司有一台很老的RH9服务器,因为负责的是公司的核心业务,已经9年没有重启了,当时更加感到震撼,这更加坚定了我要学好Linux/UNIX的决心。

后来在担任项目实施工程师期间,接触到一些客户,他们的核心网站的并发量并不是太大,但比较重要,所以他们都要求部署Linux集群,有时指定要部署LVS或HAProxy负载均衡器。在项目实施的过程中,我发现LVS/HAProxy的负载均衡能力确实非常强大,其能力可以与硬件级的F5负载均衡器相媲美。很快我就被Linux集群这门艺术迷住了,我自己也研究了Nginx+Keepalived这种负载均衡高可用架构,并且在许多项目中成功实施,客户反映效果也不错,所以我开始在很多开源社区推广这些技术。

现阶段我的职务是公司的系统架构师,主要工作是设计、实施及维护本公司的电子商务网站,相对于CDN分布式系统而言,它没有节点冗余,所以对Linux集群技术的要求更高。我前期对所有的网站应用都做了双机高HA、LVS/HAProxy+Keepalived和Nginx+Keepalived,以及DRBD+Heartbeat+NFS文件高可用,MySQL数据库用的是DRBD双主多从架构。后期随着流量和规模日益增大,新机器上线也日益频繁,我采用了Puppet自动化运维来管理线上机器,避免重复劳动。另外,由于电子商务网站涉及支付的问题,所以对安全性的要求非常高,我们平时都会从网络安全(硬件防火墙)、系统安全、代码安全和数据库安全这些方面着手,尽力避免一切影响网站安全的行为。虽然工作辛苦,但看着自己架构的网站顺利稳定运行,心里还是很有成就感的,这也是我目前工作的主要动力。撰写此书的目的

从事系统集成/管理/架构方面的工作已经有9年了,在工作期间,我曾经有幸担任了一段时间的红帽RHCE讲师,到东北大学等高校推广红帽Linux系统。在教学过程中我发现,很多学生在进入企业后都无法胜任自己的工作,更谈不上正确地规划自己的职业道路了。一方面因为企业的生产环境具有一定的复杂性和危险性,另一方面市场上入门书居多,缺乏能真正指导读者解决实际问题的书籍。例如,很多书都只是给出了比较基础的操作及理论,而相对于线上环境,根本没有涉及如何安全操作、如何避免误操、PV、UV、并发数、磁盘I/O压力及数据库压力等相关话题。

之所以写这本书,一方面是想对自己这些年的工作经验和心得进行一次系统的梳理和总结;另一方面是想将自己的经验分享给大家,希望能帮助大家少走弯路。通过本书中的项目实践(包括Linux集群、MySQL高可用方案及Puppet自动化运维工具的使用)和线上环境的Shell脚本,大家能迅速进入工作状态。书中所提供的Shell脚本和iptables脚本均来自于线上的生产服务器,大家均可直接拿来用。关于Linux集群的项目实践和MySQL的高可用方案,大家也可以根据实际项目的需求直接采用,以此来设计自己公司的网站架构。

希望大家能通过本书掌握Linux的精髓,轻松而愉快地工作,从而提高自己的技术水平,这是我非常希望看到的,这也是我写本书的初衷。第3版与第2版的区别

本书是第3版,相对于第1版和第2版而言改动比较大,第3版涉及的Linux服务器系统以现在主流的CentOS 5.8 x86_64为主(第2版以CentOS 5.5为主)。在写作过程中吸收了读者对上一版本的许多意见和建议,继续修正第2版的排版错误、人为错误及其他问题。如果大家能够完全掌握第3版新增的章节和内容,相信无论是在平常的自动化运维工作方面还是系统架构设计方面都会有自己的认识和见解了。

具体改动如下:

·考虑到XEN虚拟化目前应用范围不是特别大,所以删除了第2版第2章Linux服务器虚拟化章节,部分内容并进了附录。

·考虑到目前企业中多采用商业版的邮件系统,所以删除了第2版第8章如何构建开源免费的企业级邮件系统。

·限于篇幅,再加上编辑希望第3版是一本纯粹的技术书籍的原因,删除了第2版第9章系统管理员在企业中的职业定位及发展方向,部分内容会在我的个人博客发出。

·由于现在MySQL在互联网项目中的比重日益增大,所以我特意将第2版第5章构建高可用Linux集群中的MySQL部分重新整理,增加了MySQL性能调优级高可用案例分享章节;考虑到第2版中MySQL双主多从高可用配置方案的受众群范围较小(游戏行业),这里用线上的DRBD+Heartbeat双机高可用方案来代替;还增加了利用sysbench对磁盘I/O作性能测试等新内容,对MySQL有兴趣的读者朋友也可以重点关注这一章节。

·构建高可用Linux集群章节增加了千万级PV网站系统架构拓朴图,限于篇幅,集群章节的内容暂时没有考虑前端有CDN的系统架构方案。

·另外,现在自动化运维是系统运维的流行趋势,所以增加了分布式自动化部署管理工具Puppet章节,对负载均衡技术有兴趣的朋友可以关注Nginx在Puppet部署中的应用。读者对象

本书的读者对象包括:

·系统管理员或系统工程师

·网络管理员或企业网管

·项目实施工程师

·开发人员如何阅读本书

本书的内容是对实际工作经验的总结,涉及大量的知识点和专业术语,建议经验还不是很丰富的读者先了解第1章的内容,这一章比较基础,如果大家在学习过程中根据这章的讲解进行操作,定会达到事半功倍的效果。

系统管理员和系统工程师们则可以重点关注第3章、第4章、第5章及第6章的内容,这些都与日常工作息息相关的,建议大家多花些精力和时间,抱着一切从线上环境考虑的态度去学习。

对于网络管理员来说,如果基础不扎实,建议先学习第1~3章的内容,然后将重点放在第7章和第8章上。

对于项目实施工程师而言,由于大多数都是从事系统集成相关工作的,因此建议顺序学习全书的内容,重心可以放在第4章和第5章上。

对于开发人员来说,由于其只需对系统有一个大概的了解,重点可以放在第1章和第3章上。

大家可以根据自己的职业发展和工作需要选择不同的阅读顺序和侧重点。关于勘误

尽管我花了大量时间和精力去核对文件和语法,但书中难免还会存在一些错误和纰漏,如果大家发现问题,希望及时反馈给我,相关信息可发到我的邮箱yuhongchun027@gmail.com。尽管我无法保证每一个问题都会有正确的答案,但我肯定会努力回答并且指出一个正确的方向。

如果大家对本书有任何疑问或者想与我进行Linux方面的技术交流,可以访问我的个人博客:http://yuhongchun.blog.51cto.com。另外,我在51CTO和CU社区的用户名均为“抚琴煮酒”,大家也可以直接通过此用户名与我在社区进行交流。致谢

感谢我的家人,他们在生活上对我的照顾无微不至,让我有更多精力和动力去工作和创作。

感谢东北大学信息技术学院的付冲教授,感谢他在我生活困难的时候伸出援手。

感谢老男孩在网站架构设计方面给出的专业性指导意见,他的经验和专业知识让我受益匪浅。

感谢朋友刘鑫,他和我一起花了大量时间研究和调试HAProxy+Keepalived。

感谢朋友胡安伟,他为本书提供了许多精美的插图,并就Linux集群相关内容提出了许多宝贵的意见。

感谢朋友崔晓辉、曹孟亚及同事ritto.zhao,崔晓辉和ritto为本书提供了大量的线上Shell脚本。

感谢51CTO的编辑们,尤其是赵克衡、杨赛、张浩,感谢你们的信任和帮助,没有你们,就不会有本书的面世,更不会延续到第3版。

感谢朋友三宝这么多年来对我的信任和支持,是他在我苦闷的时候陪我聊天,从始至终都支持我和信任我。

感谢在工作和生活中给予我帮助的所有人,感谢你们,正是因为有了你们,本书才能问世。第1章Linux服务器的构建基础

在从事目前的系统架构师工作之前,很长一段时间我从事的是系统管理员/高级系统管理员工作。在企业日常运营中,我的工作涉及的内容主要有电子商务网站的运维、内网开发环境的部署、公司外包项目的实施等。在这些工作中,我用到的系统绝大多数是免费开源的CentOS 5.8 x86_64系统,它的稳定和高效令我印象深刻。本章将以CentOS 5.8 x86_64的生产服务器为平台,逐步介绍它的Kickstart无人值守安装、网络配置、日志分析、性能状态监控,以及它的最小化优化等内容,这些都是构建高性能及高可用的Linux系统的基础,希望对大家有所帮助。1.1 使用PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8 x86_64

CentOS 5.8 x86_64的安装方法挺多的,最常见的有光盘安装、Kickstart无人值守安装、优盘安装及ISO硬盘安装等。现阶段的工作由于需要大规模将CentOS 5.8 x86_64系统应用于集群环境,所以这种无人值守安装的方法主要用于在公司内网批量安装新服务器系统,这种方法极大地简化了用光盘重复安装CentOS 5.8 x86_64的过程,再加上通过应用分布式自动化运维工具Puppet进行批量部署,达到了自动化运维的目的,避免了重复性劳动,极大地提高了工作效率。

首先,我们来介绍一下与之相关的原理和概念。

1.什么是PXE

严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装系统的计算机中包含一个PXE支持的网卡(NIC),即网卡中必须有PXE Client。PXE(Pre-boot Execution Environment)协议可以使计算机通过网络启动。此协议采用的是C/S结构,即大家熟知的客户机和服务器结构,其中PXE Client在网卡的ROM中。当计算机处于引导过程时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client(将要安装系统的主机)分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加相应的PXE设置。此外,在PXE Client的ROM中,已经存在了TFTP Client,那么它就可以通过TFTP协议到TFTP Server上下载所需的文件了。

2.什么是Kickstart

Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用这些参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。

3.PXE+Kickstart的安装条件和详细步骤

执行PXE+Kickstart安装需要的设备为:

·DHCP服务器。

·TFTP服务器。

·Kickstart所生成的ks.cfg配置文件。

·一台存放系统安装文件的服务器,如NFS、HTTP或FTP服务器。

·一台带有PXE支持网卡的主机。

系统环境介绍如下:服务器系统为CentOS 5.8 x86_64,IP为192.168.11.29。由于是最小化安装的,我们在后面要用到system-config-kickstart工具,它必须依赖于X Windows,所以我们要提前安装好X Windows及GNOME并重启系统。

安装X Windows及GNOME的步骤如下所示。

先装X Windows和GNOME桌面环境,命令如下所示:yum-y groupinstall 'X Window System'yum-y groupinstall 'GNOME Desktop Environment'

然后修改/etc/inittab文件并重启服务器,使其运行在图形模式下,主要修改的文件内容如下所示:id:5:initdefault:

重启服务器命令如下:reboot

完成上述准备工作后,就可以进行PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8了,安装的步骤如下。

1)首先下载CentOS5.8 x86_64光盘ISO文件至/usr/local/src下,并挂载至/mnt/cdrom目录下,并确认系统已安装好httpd服务,如下:cd/usr/local/srcwget http://mirror.neu.edu.cn/CentOS/5.8/isos/x86_64/CentOS-5.8-x86_64-bin-DVD-1of2.isomkdir–p/mnt/cdrom

接下来我们挂载光盘ISO文件至/mnt/cdrom目录下,命令如下:mount-o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso/mnt/cdrom

CetnOS 5.8 x86_64系列已默认安装Apache,我们可以用命令看下其版本号,如下所示:rpm-q httpd

命令显示结果如下所示:httpd-2.2.3-65.el5.centos

2)接下来复制光盘ISO文件下的所有内容(文件和文件夹)到/var/html/www(此目录为Apache默认DocumentRoot目录)下,无论是红帽系统还是CentOS 5.8系统,如果是最小化安装,基本上第一张DVD光盘文件就足够了,复制命令如下所示:cp-rf /mnt/cdrom/* /var/html/www/

3)安装tftp-server,并启用tftp服务,同时启动xinetd进程,步骤如下所示。

a)我们用命令安装tftp-server,命令如下:yum-y install tftp-server

b)接着修改/etc/xinetd.d/tftp文件,将disable的值由yes变为no,内容如下所示:service tftp{     socket_type               = dgram     protocol                 = udp     wait                   = yes     user                   = root     server                  = /usr/sbin/in.tftpd     server_args               = -s /tftpboot     disable                 = no     per_source                = 11     cps                   = 100 2     flags                  = IPv4

c)接着重启xinetd进程,命令如下所示:service xinetd restart

4)配置支持PXE的启动程序(注意:前面已经将CentOS 5.8 x86_64第一张光盘的内容复制到/var/www/html目录中了,所以只要从/var/www/html目录中复制需要的文件就行了)。

a)建立tftpboot文件夹,命令如下所示,若该文件夹已经存在则不用创建:mkdir -p /tftpboot

b)复制pxelinux.0文件至tftpboot文件夹中,命令如下所示:cp /usr/share/syslinux/pxelinux.0 /tftpboot

c)把DVD光盘上的/image/pxeboot/initrd.img和vmlinuz复制到/tftpboot/中,命令如下所示:cp /var/www/html/images/pxeboot/initrd.img /tftpbootcp /var/www/html/images/pxeboot/vmlinuz /tftpboot

d)复制DVD光盘上的isolinux/*.msg到/tftpboot目录下,命令如下所示:cp /var/www/html/isolinux/*.msg /tftpboot/

e)在tftpboot中新建一个pxelinux.cfg目录:mkdir pxelinux.cfg

f)将isolinux目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default,命令如下所示:cd pxelinux.cfgcp /var/www/html/isolinux/isolinux.cfg  /tftpboot/pxelinux.cfg/default

g)在上一个步骤,即f)中,暂时不要修改default文件,进行到这一步时,虽然已经可以通过网络来引导并手动安装Kickstart了,但是由于这里讨论的是无人值守安装,所以先不修改这个default文件。

5)安装DHCP服务,同时修改如下配置:yum –y install dhcp

然后复制配置模板文件到指定的目录中,并重命名。cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf

接着修改/etc/dhcpd.conf配置文件,文件最后修改内容如下所示:ddns-update-style interim;ignore client-updates;next-server 192.168.11.29;filename "/pxelinux.0";subnet 192.168.11.0 netmask 255.255.255.0 {     option routers           192.168.11.1;     option subnet-mask           255.255.255.0;     option nis-domain "cn7788.com";     option domain-name "cn7788.com";     option domain-name-servers 192.168.11.252;     option time-offset -18000; # Eastern Standard Time     range dynamic-bootp 192.168.11.34 192.168.11.159;     default-lease-time 21600;     max-lease-time 43200;}

最后启动dhcp服务:service dhcpd start

注意 如果机器数量过多,注意DHCP服务器的地址池,不要出现因为耗尽IP而导致DHCP服务器没有IP地址release的情况。

6)用yum工具自动安装Kickstart,同时配置system-config-kickstart。

a)首先我们需要安装Kickstart工具包,在CentOS 5.8 x86_64最小化安装系统时,此软件包默认没有安装,yum安装命令如下所示:yum -y install system-config-kickstart

b)在GNOME环境下配置Kickstart,命令如下所示:system-config-Kickstart

运行上面的命令后可以对系统的一些基本配置进行设置,例如选择时区、设置root密码等。

c)接下来便要进行安装了,建议选择httpd安装,切记不要输入任何账号,而是采用匿名安装。

在安装过程中,根据引导选择安装选项,不需要做更改。

d)Kickstart会让我们选择需要批量安装的CentOS 5.8分区信息,我们创建四个分区,即/、/boot、/data和swap。

e)在进行网络配置时,使用动态分配地址。

f)设置显示配置时可以按照我们的习惯进行。

g)大家可以根据实际的工作需求来选择自己需要的软件包,由于服务器安装后会根据用途不一而安装各种不同的软件包,所以建议大家这里选择最小化安装。

h)其他都选择默认设置,不需要修改。

i)最后将生成的文件ks.cfg保存到/var/www/html下。ks.cfg文件的配置方法为自动化无人值守安装的重点和难点,此文件稍有配置不当就需要人为干预,如果大家遇到问题,建议参考我下面的ks.cfg配置文件。

7)修改/tftpboot/pxelinux.cfg/default文件,指定读取ks.cfg的方法,即修改文件第一行内容,改动后文件第一行内容如下所示:default text ks=http://192.168.11.29/ks.cfg

另外,也建议将timeout时间由原先的600改为1,timeout时间是引导时等待用户手动选择的时间,设为“1”表示直接引导。

8)/var/www/html/ks.cfg文件内容如下所示(此内容是整个实验过程的重点和难点,请关注):#platform=x86, AMD64, or Intel EM64T# System authorization informationauth --useshadow --enablemd5# System bootloader configurationkey --skipbootloader --location=mbr# Partition clearing informationclearpart --none # Use graphical installgraphical# Firewall configurationfirewall --disabled# Run the Setup Agent on first bootfirstboot --disable# System keyboardkeyboard us# System languagelang en_US# Installation logging levellogging --level=info# Use network installationurl --url=http://192.168.11.29/# Network informationnetwork --bootproto=dhcp --device=eth0 --onboot=onreboot#Root passwordrootpw --iscrypted $1$biw2UUzu$/ZrtUhG9gGGGJn6edgUIQ1# SELinux configurationselinux --disabled# System timezonetimezone --isUtc Asia/Shanghai# Install OS instead of upgradeinstall# X Window System configuration informationxconfig --defaultdesktop=GNOME --depth=8 --resolution=640x480# Disk partitioning informationbootloader --location=mbr --driveorder=sdaclearpart --all --initlabelpart / --bytes-per-inode=4096 --fstype="ext3" --size=51200part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128part swap --bytes-per-inode=4096 --fstype="swap" --size=10000part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1%packages@base@development-libs@development-tools

此配置过程中的重点和难点说明如下:

·分区操作按照目前线上分区来操作,即分成/、/boot、/data及swap四个分区,这里的数值是以MB为单位的,大家可以根据自己服务器的实际情况来规划;其中/data分区是存放数据的,我们这里用--grow--size=1参数来将其余的剩余空间全部分配给/data分区。

·key--skip,如果是红帽RHEL系统,此选项可以跳过输入序列号过程;如果是CentOS 5.8系统,则可以不保留此项内容。

·reboot,此选项必须存在,也必须按照前面提到的方式设定位置,否则Kickstart显示一条消息,并等待用户按任意键后才重新引导,此问题是很多读者朋友在论坛上发言提问的,我在实验过程中也遇到了此问题,建议多做几次实验。

·clearpart--all--initlabel,此命令必须添加,否则系统会让用户手动选择是否清除所有数据,这就需要人为干预了,从而导致自动化过程失败。

·其他方面的选项较容易看懂,这里不再重复。

9)启动Kickstart需要的所有服务器后,至此自动化安装系统的过程就完成了,接下来我们就可以将内网机柜中的几十台机器全自动同时安装CentOS 5.8 x86_64系统了。服务器端对应服务启动命令如下:Service httpd startchkconfig httpd onservice dhcpd startchkconfig dhcpd onservice xinetd restart

系统完成最小化后安装后,大家可以根据自己公司的实际情况来进行系统优化。这里用到的最小化优化脚本为init.sh,这个脚本还可以让Puppet服务器进行推送。init.sh脚本的内容如下所示:#/bin/bash#add the epel repocd /usr/local/srcwget http://mirrors.ustc.edu.cn/fedora/epel//5/x86_64/epel-release-5-4.noarch.rpm rpm -ivh epel-release-5-4.noarch.rpm #add the rpmforge repocd /usr/local/srcwget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpmrpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm#yum install sysstat yum -y install gcc gcc-c++ vim-enhanced unzip unrar sysstat #set the ntpyum -y install ntpecho "01 01 ***/usr/sbin/ntpdate ntp.api.bz >> /dev/null 2>&1" >> /etc/crontabntpdate ntp.api.bzservice crond restart#set the file limit ulimit -SHn 65535 echo "ulimit -SHn 65535" >> /etc/rc.localcat >> /etc/security/limits.conf << EOF*      soft  nofile    60000*      hard  nofile    65535EOF#tune kernel parametrescat >> /etc/sysctl.conf << EOFnet.ipv4.tcp_syncookies = 1net.ipv4.tcp_syn_retries = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_fin_timeout = 1net.ipv4.tcp_keepalive_time = 1200net.ipv4.ip_local_port_range = 1024 65535EOF/sbin/sysctl -p#set the control-alt-delete to guard against the misusesed -i 's@ca::ctrlaltdel:/sbin/shutdown -t3 -r now@#ca::ctrlaltdel:/sbin/shutdown -t3 -r now@' /etc/inittab #disable selinuxsed -i 's@SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config#ssh setting sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config sed -i 's@#UseDNS yes@UseDNS no@' /etc/ssh/sshd_configservice sshd restart#disable ipv6echo "alias net-pf-10 off" >> /etc/modprobe.confecho "alias ipv6 off" >> /etc/modprobe.confecho "install ipv6 /bin/true" >> /etc/modprobe.conf echo "IPV6INIT=no" >> /etc/sysconfig/networksed -i 's@NETWORKING_IPV6=yes@NETWORKING_IPV6=no@' /etc/sysconfig/network chkconfig ip6tables off #vim setting echo "syntax on" >> /root/.vimrc echo "set nohlsearch" >> /root/.vimrc #chkconfig off serviceschkconfig bluetooth off chkconfig sendmail off chkconfig kudzu off chkconfig nfslock off chkconfig portmap off chkconfig iptables off chkconfig autofs off chkconfig yum-updatesd off #reboot system Reboot

注意:

·#tune kernel parametres选项:为内核优化部分,在这里我只做了基础处理,大家有需求可以自行修改,记住:一切以系统稳定为最高原则。

·#vim setting选项:为vim的个性化配置,如果想vim语法高亮,则必须安装vim-enhanced包,另外,在使用vim的搜索功能时,搜索选中内容为高亮,感觉不是特别舒服,所以我这里用了set nohlsearch选项,如果大家不介意此项功能,则不需要添加此语句。

·#disable ipv6选项:我在测试时发现,在CentOS 5.8 x86_64系统下,如果不添加install ipv6 /bin/true语句到/etc/modprobe.conf文件里,是无法关闭ipv6选项的,而测试CentOS 5.5或5.6时不添加此句却可以顺利关闭ipv6,这点请大家注意。

·当然,最后要reboot系统让此配置生效。

以上就是用PXE+DHCP+Apache+Kickstart无人值守安装CentOS 5.8 x86_64的完整步骤,如果在工作中有此需求的话,可以结合文档进行相关操作,如果是在公司内部局域网中操作,建议单独划分出一个网段,以免对公司内部的开发环境或办公环境造成影响。1.2 全面了解Linux服务器

我的日常工作之一就是到公司的内部机房或托管的IDC机房从事相关的系统工作,里面的Linux服务器少则十几台,多则上百台。为了便于工作,通常这时候我就会非常想清楚地了解服务器的硬件配置。但是客户往往并不能提供详细的硬件配置清单,仅仅能提供系统管理员的密码,所以我总结了一些查看服务器情况的命令,它们可以很清楚地反映Linux服务器的状态、性能等详细信息。以下内容完全出自项目的实践总结,也希望大家能够熟练掌握,方便自己的工作。

1.2.1 查看Linux服务器的CPU详细情况

判断Linux服务器CPU情况的依据如下:

·具有相同core id的CPU是同一个core的超线程。

·具有相同physical id的CPU是同一个CPU封装的线程或核心。

下面以笔者自己的PowerEdge 2850服务器为例进一步进行说明。

显示物理CPU个数的命令如下所示:cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

命令结果显示如下所示:2

显示每个物理CPU中core的个数(即核数)的命令如下所示:cat /proc/cpuinfo | grep "cpu cores" | uniq

命令结果显示如下所示:cpu cores : 1

显示逻辑CPU的个数的命令如下所示:cat /proc/cpuinfo | grep "processor" | wc -l

命令结果显示如下所示:4

其实大家从这里就可以看出来,按理说应有如下等式:

物理CPU个数×核数=逻辑CPU的个数

如果不相等的话,则表示你的服务器CPU支持超线程技术。我们在配置服务器的应用时,应以服务器的逻辑CPU个数为准。

1.2.2 查看Linux服务器的内存使用情况

查看Linux服务器的内存使用情况,我们可以使用如下命令:free -m

Free命令显示的是当前内存的使用情况,m的意思是以M个字节来显示内容,此命令只在Linux系统下有效,在FreeBSD下是没有此命令的。命令显示结果如下所示:total    used    free   shared  buffers   cachedMem:     3949    1397    2551     0    268    917-/+ buffers/cache:    211    3737Swap:    8001     0    8001

上述结果中各个参数的详细说明如下:

·total:内存总数。

·used:已经使用的内存数。

·free:空闲的内存数。

·shared:多个进程共享的内存总额。

·buffers buffer cache和cached page cache:磁盘缓存的大小。

·-buffers/cache:(已用)的内存数,即used-buffers-cached。

·+buffers/cache:(可用)的内存数,即free + buffers + cached。

由此得出结论,可用内存的计算公式为

可用内存=free+buffers+cached

2551MB+268MB+917MB=3737MB

注意 细心的读者朋友们可能会发现上面等式两边的数值并不相等,但这个没关系,-m参数其实是以整数数值来取舍的。大家如果对这个运算结果有怀疑,可以尝试不带-m参数来观看free命令显示的结果,这样就会一目了然了。

可见-buffers/cache反映的是被程序实实在在占用的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三部分是指交换分区,比较简单,这里不再介绍了。

有可能大家看了上面的解释还是不太明白。比如:第一部分(Mem)与第二部分(-/+buffers/cache)的结果有关,used和free为什么这么奇怪?其实我们可以从两个方面来分析。对操作系统来讲这两项是Mem的参数,buffers/cached都属于被使用,所以它认为free只有2551MB;对应用程序来讲+buffers/cached等同可用的内存,因为buffer/cached可提高程序执行的性能,当程序使用内存时,buffer/cached很快就会被使用。所以从应用的角度来看,应以(-/+ buffers/cache)的free和used为主。那么我们主要看与它相关的free和used就可以了。另外告诉大家一些常识,Linux为了提高磁盘和内存的存取效率,它做了很多精心的设计,除了对dentry进行缓存外(用于VFS、加速文件路径名到inode的转换),还采取了两种主要cache方式:buffer cache和page cache,前者针对磁盘块的读写,后者针对文件inode的读写。这些cache能有效地缩短I/O系统调用(比如read、write、getdents)的时间。

在Linux系统中,内存是拿来用的,不是用来看的。而在Windows系统中,无论你的真实物理内存有多少,它都会用硬盘交换文件来读,即使是内存还有一大部分。这也就是Windows系统常常提示虚拟空间不足的原因。可以想象得到,硬盘的速度怎么会快过内存,所以我们在观察Linux系统的内存使用情况时,只要没发现用swap的交换空间,就不用担心自己的内存太小。如果常常看到swap用了很多,你可能就要考虑增加物理内存了。这也是在Linux服务器上看内存是否够用的标准。

1.2.3 查看Linux服务器的硬盘使用情况

想要了解Linux服务器的硬盘使用情况,可以根据以下步骤查看。

1)查看硬盘及分区信息,如下所示:fdisk –l

命令显示结果如下:Disk /dev/sda: 160.0 GB, 160040803840 bytes255 heads, 63 sectors/track, 19457 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes  Device Boot   Start     End   Blocks  Id System/dev/sda1  *      1     13   104391  83 Linux/dev/sda2       14    3200  25599577+ 83 Linux/dev/sda3      3201    3582   3068415  82 Linux swap / Solaris/dev/sda4      3583    19457  127515937+  5 Extended/dev/sda5      3583    19457  127515906  83 Linux

以上结果表明这是一块160GB的服务器硬盘。

2)检查文件系统的磁盘空间占用情况,命令如下所示:df –h

命令显示结果如下:Filesystem      Size Used Avail Use% Mounted on/dev/sda2       24G 5.9G  17G 26% //dev/sda5       118G 8.8G 103G  8% /data/dev/sda1       99M  20M  75M 21% /boottmpfs         859M   0 859M  0% /dev/shmnone         859M 104K 858M  1% /var/lib/xenstored

3)查看硬盘的I/O性能,命令如下所示:iostat –d -x –k 1 10

其中,iostat是含在套装sysstat中的,在CentOS 5.8下可以用如下命令进行安装:yum –y install sysstat

以笔者的生产环境下的MySQL数据库服务器为例说明,在Pietty下输入以下命令:iostat –d –x –k 1 5

得到的结果如下所示:Linux 2.6.9-34.ELsmp (ud50053)  01/18/2012  _i686_ (4 CPU)Device:     rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await svctm %utilhda        0.19  63.84  0.48  26.94  12.84  363.08  27.43   0.07  2.64  8.36  2.54  0.62  1.70Device:     rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await svctm %utilhda        0.00  44.00  3.00  29.00  16.00  292.00  19.25   0.06  1.88  12.67  0.76  1.50  4.80Device:     rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await svctm %utilhda        0.00   2.00  0.00  16.00   0.00  76.00   9.50   0.01  0.69  0.00  0.69  0.38  0.60Device:     rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await svctm %utilhda        0.00  380.00  0.00  79.00   0.00 1832.00  46.38   0.32  4.01  0.00  4.01  0.65  5.10Device:     rrqm/s  wrqm/s   r/s   w/s  rkB/s  wkB/s avgrq-sz avgqu-sz  await r_await w_await svctm %utilhda        0.00   7.00  0.00  8.00   0.00  60.00  15.00   0.01  0.88  0.00  0.88  0.38  0.30

参数说明:

·rrqm/s:每秒进行merge的读操作数目,即delta(rmerge)/s。

·wrqm/s:每秒进行merge的写操作数目,即delta(wmerge)/s。

·r/s:每秒完成的读I/O设备的次数,即delta(rio)/s。

·w/s:每秒完成的写I/O设备的次数,即delta(wio)/s。

·rsec/s:每秒读扇区数,即delta(rsect)/s。

·wsec/s:每秒写扇区数,即delta(wsect)/s。

·rkB/s:每秒读千字节数,是rsect/s的一半,因为每扇区大小为512字节。

·wkB/s:每秒写千字节数,是wsect/s的一半。

·avgrq-sz:平均每次设备I/O操作的数据大小(即扇区),即delta(rsect+wsect)/delta(rio+wio)。

·avgqu-sz:平均I/O队列的长度。即delta(aveq)/s/1000(除以1000是因为aveq的单位为毫秒)。

·await:平均每次设备I/O操作的等待时间(单位:毫秒),即delta(ruse+wuse)/delta(rio+wio)。

·svctm:平均每次设备I/O操作的服务时间(单位:毫秒),即delta(use)/delta(rio+wio)。

·%util:一秒中有百分之多少的时间用于I/O操作,或者说一秒中有多少时间I/O队列是非空的,即delta(use)/s/1000(因为use的单位为毫秒)。

大家可能对这些参数和名词解释不太明白,不要紧,其实在工作中我们只需关注以下几个方面即可:

·如果%util接近100%,则说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。

·await的大小一般取决于服务时间(svctm),以及I/O队列的长度和I/O请求的发出模式。这个响应时间应该低于5ms,如果大于5ms就表示磁盘I/O压力很大,这时就可以考虑更换响应速度更快的磁盘,调整内核elevator的算法、优化应用或者升级CPU。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载