跟老男孩学linux运维:web集群实战


Linux/Unix 技术丛书 跟老男孩学 Linux 运维: Web 集群实战 老男孩 著 图书在版编目(CIP)数据 跟老男孩学 Linux 运维:Web 集群实战 / 老男孩著 . —北京:机械工业出版社,2016.3 (Linux/Unix 技术丛书) ISBN 978-7-111-52983-5 I. 跟… II. 老… III. Linux 操作系统 IV. TP316.89 中国版本图书馆 CIP 数据核字(2016)第 030639 号 跟老男孩学 Linux 运维:Web 集群实战 出版发行:机械工业出版社(北京市西城区百万庄大街 22 号 邮政编码:100037) 责任编辑:佘 洁 责任校对:董纪丽 印  刷: 版  次:2016 年 3 月第 1 版第 1 次印刷 开  本:186mm×240mm 1/16 印  张:43.25 书  号:ISBN 978-7-111-52983-5 定  价:99.00 元 凡购本书,如有缺页、倒页、脱页,由本社发行部调换 客服热线:(010)88379426 88361066 投稿热线:(010)88379604 购书热线:(010)68326294 88379649 68995259 读者信箱:hzit@hzbook.com 版权所有 • 侵权必究 封底无防伪标均为盗版 本书法律顾问:北京大成律师事务所 韩光 / 邹晓东 前言 为什么要写这本书 不知不觉接触 Linux(之前用的是 Solaris)已经有 16 个年头了,在这 16 年的运维 职业生涯中,我走了相当多的弯路,特别是头两年,相当迷茫、彷徨,最要命的是无论 怎么努力学习和坚持,就是感觉自己没有入门。那时,优秀的学习书籍寥寥无几,工作 中也无人指导,更没有规范的培训机构,一遇到服务器故障就会无所适从,无数次都是 在痛苦的挣扎中度过的,也有无数次想要放弃学习 Linux。 后来我慢慢地积累了一些经验,有了自己的运维心得。在我的运维技术有了质的飞 跃之后,我开始酝酿一套 Linux 培训体系课程,最初的目的就是希望大家不要重走我走 过的弯路,因为这条路充满了荆棘,一不小心就可能走不出来了。 经过一段时间的酝酿,我将自己的想法写成一份项目策划书,发给了公司领导,希 望公司能够开展 IT 培训相关的业务,而我可以负责这块业务。领导首肯了我的策划书, 但是在接下来的日子没有任何行动,可能是觉得时机不够成熟吧。 但是我的心却被策划书给拽走了,于是开始了我的兼职 IT 培训生涯,这就是“老 男孩 IT 教育”的前身。在多年的培训过程中我发现,很多小伙伴因为条件的限制无法 到北京现场学习,虽然我们也录制了大量网络视频,但还是有网友非常希望老男孩能够 把讲课的内容整理成书,以便深入学习。看到小伙伴们热切的期盼,我心动了,于是开 始计划把讲课的内容整理成书,让全国的小伙伴都能够从中受益。 但是由于培训讲课的排期很紧,课程很多,平时还要在企业里工作,而且写书和讲 课也是不同的路数,因此写书计划被一次次地搁浅,直至遇到了她——机械工业出版社 华章公司的 Lisa,正是因为她的执着、包容、鼓励,使得我有足够的信心和动力完成此 IV 书,并且即将策划与 Linux 运维实战相关的更多图书,这些书后续会一一与大家见面。 目前,全球进入了“互联网 +”时代,越来越多的传统企业都在考虑通过网络提供 产品和服务,包括互联网 + 教育、互联网 + 金融、互联网电商、互联网 + 出租车、互 联网 + 保险等。而互联网的背后就是 Linux 技术的时代(包括移动互联网在内),掌握 Linux 运维技术已经成为每一个 IT 技术人员的必经之路,本书的中小规模网站集群架构 实战就是构建在 Linux 系统上的高性能、高并发企业级网站集群架构上的解决方案! 读者对象 ‰‰ Linux 系统管理员和运维工程师 ‰‰ 互联网网站开发及数据库管理人员 ‰‰ 网络管理员和项目实施工程师 ‰‰ Linux 相关售前售后技术工程师 ‰‰ 开设 Linux 相关课程的大中专院校 ‰‰ 对 Linux 感兴趣的人群 如何阅读本书 本书针对中小规模网站集群的搭建、部署、优化进行了详细讲解,全书可分为三大 部分,其中第一部分介绍与 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭建及企业级 Web 优化等进行了讲解,第三部分介绍 Web 集 群后端的数据存储及 Web 集群前端的负载均衡和高可用。如果你是一名经验丰富的资深 Linux 用户,可以直接阅读第二部分内容;如果你是一名 Linux 初学者,请务必从第 1 章的基础知识开始学习。 第一部分为基础篇(第 1~4 章),简单地介绍了 Linux 的历史沿革、Linux 的企业级 选型、学习环境的搭建、Linux 的企业级系统安装、Linux 系统的基础优化,以及远程连 接 Linux 及客户端 SSH 的设置等,最后比较深入地讲解了 HTTP 协议和 WWW 服务相 关知识,为读者搭建企业级 Web 集群环境做好了准备。 第二部分为Web 服务篇(第5~8 章),着重讲解了Linux、Nginx、MySQL、PHP (LNMP)等当下流行的 Web 环境架构的搭建、开源 blog 网站产品的安装部署、Web 优 V 化等知识。为读者搭建企业级完整的网站 Web 集群架构做好了准备。 第三部分为集群篇(第9~15 章),着重讲解了Web 集群后端的MySQL 数据库、 Web 集群共享存储 NFS、Nginx 反向代理负载均衡、Keepalived 高可用、Memcached 缓 存及 session 共享、Nagios 企业级监控等技术实战,最后为读者规划了一个中等规模的 网站集群架构解决方案。 勘误和支持 由于作者的水平有限,加之编写的时间仓促,书中难免会出现一些错误或者不准确 的地方,不妥之处在所难免,恳请读者批评指正。你可以将书中的错误发布到我专门为 本书准备的博客地址处:http://oldboy.blog.51cto.com/2561410/1713128,或者在我的微 博(http://weibo.com/oldboy8)上留言。同时如果你遇到任何问题,可以加入我为本书 提供的两个 QQ 交流群(339128815 和 226199808),我将尽量为读者提供最满意的解 答。书中所需的各种工具及程序文件也都将发布在上述 QQ 群及我的博客网站上,我也 会将本书的勘误等及时更新。如果你有更多的宝贵意见,也欢迎你发送邮件至我的邮箱 (oldboy@oldboyedu.com),我很期待能够听到你们的真挚反馈。 致谢 首先要感谢伟大的 Linux 系统开发者 Linus Torvalds,是他开创了一款影响我一生的 软件。 感谢李泳谊、王洪志,感谢你们在百忙之中为本书供图! 感谢王硕导师及每一个运维课程班级的班长及班干部,感谢你们替我分担老男孩 IT 教育众多学员的批改作业、答疑、就业指导和管理工作。 感谢老男孩 IT 教育的每一位学员——是你们的长期支持使得老男孩 IT 教育的业绩 蒸蒸日上,让我有较多时间持续写作。感谢你们对老男孩 IT 教育的支持。 感谢我的同事 Python 自动化开发课程的 Alex(李杰)老师和武老师,高级架构师课 程的赵班长老师,高薪运维就业课程的张耀助教老师,课程顾问歪歪老师、小雨老师、 飞雪老师、环宇老师及其他未提及名字的老师,正是你们辛勤努力的工作,使得我有时 间完成此书。 VI 感谢中网志腾的郭威和实利通和的王斐和梁露,感谢你们提供给我的多台 DELL 物 理服务器,使得本书得以高效顺利地完成! 感谢森华易腾的陆锦云女士及其同事,感谢你们提供 IDC 机房带宽资源并长期支 持,使得本书得以顺利完成! 感谢机械工业出版社华章公司的编辑 Lisa,感谢你的执着支持、包容和鼓励,在近 一年的时间中始终支持我的写作,是你的鼓励和帮助引导我能顺利完成全部书稿。 最后要感谢我的父母、家人,感谢你们将我培养成人,并时时刻刻为我灌输着信心 和力量! 谨以此书,献给支持老男孩 IT 教育的每一位朋友、学员,以及众多热爱 Linux 运 维技术的朋友。 老男孩 X 3.2.8 配置本地机器上传和下载的目录 / 71 3.2.9 实现批量部署和管理功能 / 73 3.2.10 配置 SecureCRT 标签路径 / 75 3.2.11 配置标签模板 / 75 3.2.12 调整命令行颜色方案(目录和注释) / 76 3.3 Linux 系统应用管理 / 77 3.3.1 添加普通用户账号 / 77 3.3.2 基本的 Linux 命令操作示例 / 79 3.4 安装 Linux 系统后调优及安全设置 / 83 3.4.1 关闭 SELinux 功能 / 83 3.4.2 设定运行级别为 3(文本模式) / 84 3.4.3 精简开机系统自启动 / 84 3.4.4 关闭 iptables 防火墙 / 88 3.4.5 Linux 系统安全最小原则说明 / 88 3.4.6 更改 SSH 服务器端远程登录的配置 / 89 3.4.7 利用 sudo 控制用户对系统命令的使用权限 / 91 3.4.8 Linux 中文显示设置 / 95 3.4.9 设置 Linux 服务器时间同步 / 96 3.4.10 历史记录数及登录超时环境变量设置 / 98 3.4.11 调整 Linux 系统文件描述符数量 / 99 3.4.12 Linux 服务器内核参数优化 / 100 3.4.13 定时清理邮件服务临时目录垃圾文件 / 103 3.4.14 隐藏 Linux 版本信息显示 / 104 3.4.15 锁定关键系统文件,防止被提权篡改 / 104 3.4.16 清除多余的系统虚拟账号 / 105 3.4.17 为 grub 菜单加密码 / 105 3.4.18 禁止 Linux 系统被 ping / 106 3.4.19 升级具有典型漏洞的软件版本 / 107 3.5 Linux 基础优化与安全重点小结 / 107 XIII 5.2.5 如何正确选择 Web 服务器 / 147 5.3 编译安装 Nginx / 147 5.4 Nginx 技术的深入剖析 / 156 5.4.1 Nginx 软件功能模块说明 / 156 5.4.2 Nginx 的目录结构说明 / 157 5.4.3 Nginx 主配置文件 nginx.conf / 158 5.4.4 Nginx 其他配置文件 / 160 5.5 Nginx 虚拟主机配置实战 / 162 5.5.1 虚拟主机的概念和类型介绍 / 162 5.5.2 基于域名的虚拟主机配置实战 / 162 5.5.3 基于端口的虚拟主机配置实战 / 169 5.5.4 基于 IP 的虚拟主机配置实战 / 171 5.5.5 Nginx 配置虚拟主机的步骤 / 172 5.5.6 企业场景中重启 Nginx 后的检测策略 / 173 5.6 Nginx 常用功能配置实战 / 174 5.6.1 规范优化 Nginx 配置文件 / 174 5.6.2 Nginx 虚拟主机的别名配置 / 179 5.6.3 Nginx 状态信息功能实战 / 180 5.6.4 为 Nginx 增加错误日志(error_log)配置 / 183 5.7 Nginx 访问日志(access_log) / 184 5.7.1 Nginx 访问日志介绍 / 184 5.7.2 访问日志参数 / 184 5.7.3 访问日志配置说明 / 184 5.7.4 访问日志配置实战 / 186 5.7.5 Nginx 访问日志轮询切割 / 188 5.8 Nginx location / 190 5.8.1 location 作用 / 190 XV 6.4 LNMP 之 PHP(FastCGI 方式)服务的安装准备 / 218 6.4.1 检查 Nginx 及 MySQL 的安装情况 / 218 6.4.2 检查安装 PHP 所需的 lib 库 / 219 6.4.3 安装 yum 无法安装的 libiconv 库 / 220 6.4.4 安装 libmcrypt 库 / 221 6.4.5 安装 mhash 加密扩展库 / 221 6.4.6 安装 mcrypt 加密扩展库 / 221 6.5 开始安装 PHP(FastCGI 方式)服务 / 222 6.5.1 获取 PHP 软件包 / 222 6.5.2 解压配置 PHP / 222 6.5.3 编译 PHP / 224 6.5.4 安装 PHP 生成文件到系统 / 225 6.5.5 配置 PHP 引擎配置文件 php.ini / 226 6.5.6 配置 PHP 服务(FastCGI 方式)的配置文件 php-fpm.conf / 226 6.5.7 启动 PHP 服务(FastCGI 方 式) / 227 6.6 配置 Nginx 支持 PHP 程序请求访问 / 227 6.6.1 修改 Nginx 配置文件 / 227 6.6.2 检查并启动 Nginx / 228 6.6.3 测试 LNMP 环境生效的情况 / 229 6.7 部署一个 blog 程序服务 / 230 6.7.1 开源博客程序 WordPress 介绍 / 230 6.7.2 WordPress 博客程序的搭建准备 / 231 6.7.3 开始安装 blog 博客程序 / 234 6.7.4 实现 WordPress 博客程序 URL 静态化 / 237 6.8 有关使用高版本 PHP 5.5 的说明 / 240 6.9 本章重点回顾 / 241 6.10 本章参考资料 / 241 XIX 9.1.2 MariaDB 数据库的诞生背景介绍 / 345 9.2 MySQL 多实例介绍 / 346 9.2.1 什么是 MySQL 多实例 / 346 9.2.2 MySQL 多实例的作用与问题 / 346 9.3 MySQL 多实例的生产应用场景 / 347 9.4 MySQL 多实例常见的配置方案 / 348 9.4.1 单一配置文件、单一启动程序的多实例部署方案 / 348 9.4.2 多配置文件、多启动程序的部署方案 / 349 9.5 安装并配置多实例 MySQL 数据库 / 350 9.5.1 安装 MySQL 多实例 / 350 9.5.2 创建 MySQL 多实例的数据文件目录 / 352 9.5.3 创建 MySQL 多实例的配置文件 / 353 9.5.4 创建 MySQL 多实例的启动文件 / 355 9.5.5 配置 MySQL 多实例的文件权限 / 358 9.5.6 MySQL 相关命令加入全局路径的配置 / 358 9.5.7 初始化 MySQL 多实例的数据库文件 / 359 9.5.8 启动 MySQL 多实例数据库 / 361 9.5.9 MySQL 多实例启动故障排错说明 / 362 9.6 配置及管理 MySQL 多实例数据库 / 363 9.7 MySQL 主从复制介绍 / 367 9.7.1 概述 / 367 9.7.2 MySQL 主从复制的企业应用场景 / 369 9.7.3 实现 MySQL 主从读写分离的方案 / 370 9.7.4 MySQL 主从复制原理介绍 / 371 9.7.5 MySQL 主从复制原理过程详细描述 / 372 9.8 MySQL 主从复制实践 / 373 9.8.1 主从复制实践准备 / 373 XXI 10.4.5 配置 NFS 服务器端服务开机自启动 / 409 10.5 实战配置 NFS 服务器端 / 410 10.5.1 NFS 服务器端配置文件路径 / 410 10.5.2 exports 配置文件格式 / 410 10.5.3 企业生产场景 NFS exports 配置实例 / 411 10.6 NFS 配置参数权限 / 411 10.7 NFS 服务企业案例配置实践 / 413 10.8 NFS 服务的重点知识梳理 / 417 10.9 NFS 客户端挂载命令 / 418 10.9.1 NFS 客户端挂载命令格式 / 418 10.9.2 NFS 客户端挂载排错思路 / 419 10.9.3 NFS 客户端开机自启动挂载 / 421 10.10 生产环境高级案例配置实战 / 422 10.10.1 指定固定 UID 用户配置 NFS 共享的实例 / 422 10.10.2 NFS 服务器端的操作步骤 / 422 10.10.3 NFS 客户端的操作步骤 / 423 10.11 NFS 客户端挂载深入 / 424 10.11.1 NFS 客户端挂载参数说明 / 424 10.11.2 NFS 客户端挂载优化 / 426 10.12 NFS 系统应用的优缺点说明 / 429 10.13 本章涉及的相关知识 / 430 10.13.1 showmount 命令说明 / 430 10.13.2 exportfs 命令说明 / 431 10.13.3 RPC / 432 10.13.4 NFS 服务器端的防火墙控制 / 433 10.13.5 NFS 常见故障排查 / 433 XXVII 15.1.1 企业级中小规模网站集群架构逻辑图及说明 / 633 15.1.2 集群服务器硬件及操作系统规划 / 634 15.1.3 集群节点的 IP 地址及主机名规划 / 635 15.1.4 集群节点网络服务规划 / 639 15.1.5 集群节点服务应用的目录结构规划 / 640 15.2 集群服务搭建详细规划设计说明 / 641 15.2.1 集群服务搭建最佳部署顺序 / 641 15.2.2 集群架构服务搭建规划设计 / 642 15.3 中小规模网站集群架构综合说明 / 662 15.3.1 概述 / 662 15.3.2 运维人员的两大核心工作主题 / 664 第1 章 Linux 系统介绍与环境搭建准备 本章以操作系统的介绍作为开篇,首先介绍操作系统的基础概念及操作系统的原 理;然后,带领读者了解 UNIX 的发展史以及市面上常见的 UNIX 系统版本,并对 UNIX/ Linux 诞生及发展情况进行了说明,附带介绍了发展过程中的关键人物;之后,讲解需 要重点掌握的 GNU、GPL 等名词知识,并对本书“主人公”Linux 的优秀特性、常见的 Linux 发行版本及不同场景下的选择进行了分析;最后,带读者了解互联网常用的两个重 点 Linux 版本:CentOS 和 Red Hat Linux,并完成 CentOS Linux 的基本环境搭建准备工作。 1.1 Linux 简介 1.1.1 什么是操作系统 如果被问到什么是操作系统,可能很多初学者都会一脸茫然。虽然我们都知道平时 一直在用的 Windows XP、Windows 7、Windows 8 其实就是操作系统,却无法准确给出 操作系统的定义,或者向提问者解释清楚什么是操作系统。 操作系统,英文名称为 Operating System,简称 OS,是计算机系统中必不可少的基 础系统软件,它是应用程序运行及用户操作必备的基础环境支撑,是计算机系统的核心。 操作系统的作用是管理和控制计算机系统中的硬件和软件资源,它除了直接管理计 算机系统的各种硬件资源(如 CPU、内存、磁盘等)以外,还会对系统资源供需的优先 顺序进行管理。此外,操作系统还可以控制设备的输入、输出及操作网络与管理文件系 统等事务。同时,它也负责对计算机系统中各类软件资源进行管理(例如各类应用软件 跟老男孩学 Linux 运维:Web 集群实战2 的安装、运行环境设置等)。图 1-1 是操作系统与计算机硬件、软件之间的关系示意图。 综上所述,可以给操作系统一个基本的定义: 操作系统是计算机系统中必不可少的基础系统软件,它的作用是管理和控制计算机 系统中的硬件和软件资源,合理地组织计算机系统的工作流程,以便有效地利用这些资 源为使用者提供一个功能强大、使用方便的操作环境。它在计算机系统(硬件)与使用 者之间起到接口的作用。 上面的定义听起来是不是有些复杂?那老男孩就来帮助大家更简单快速地理解什么 是操作系统。操作系统就是处于用户与计算机系统硬件之间用于传递信息的系统程序软 件。例如:操作系统会在接收到用户输入的信息后,将其传给计算机系统硬件核心进行 处理,然后再把处理结果返回给使用者。图 1-2 是简单理解操作系统作用的示意图。 外围应用程序 命令解释器 shell 系统核心 硬件 kernel LIB API ᅺଋ ఩ϩᐹᒇ ዏε 图 1-1 操作系统与计算机软硬件关系示意图 图 1-2 简单理解操作系统作用的示意图 目前 PC(Intel x86 系列)上比较常见的操作系统有 Windows、Linux、DOS、UNIX 等。 1.1.2 什么是 Linux 与大家熟知的 Windows 操作系统软件一样,Linux 也是一个操作系统软件。但是与 Windows 不同的是,Linux 是一套开放源代码程序的,并可以自由传播的类 UNIX 操作 系统软件(UNIX 系统是 Linux 系统的前身,具备很多优秀特性)。其在设计之初,就是 基于 Intel x86 系列 CPU 架构计算机的。它是一个基于 POSIX 的多用户、多任务并且 支持多线程和多 CPU 的操作系统。1 Linux 是由世界各地成千上万的程序员设计和开发实现的。当初开发 Linux 系统的 目的就是建立不受任何商业化软件版权制约的、全世界都能自由使用的类 UNIX 操作系 统兼容产品。在过去的 20 年里,Linux 系统主要被应用于服务器端、嵌入式开发和个人 PC 桌面 3 大领域,其中服务器端领域是重中之重。 我们熟知的大型、超大型互联网企业(百度、新浪、淘宝等)都使用 Linux 系统作 为其服务器端的程序运行平台,全球及国内排名前十的网站使用的主流系统几乎都是  POSIX 全称为 Portable Operating System Interface,中文翻译为可移植操作系统接口,POSIX 标准定 义了操作系统应该为应用程序提供的接口标准。 第 1 章 Linux 系统介绍与环境搭建准备 3 Linux 系统。 从上面的内容可以看出,Linux 操作系统之所以如此流行,是因为它具有如下一些特点: ‰‰ 是开放源代码的程序软件,可自由修改。 ‰‰ UNIX 系统兼容,具备几乎所有 UNIX 的优秀特性。 ‰‰ 可自由传播,无任何商业化版权制约。 ‰‰ 适合 Intel 等 x86 CPU 系列架构的计算机。 技巧: 好的总结习惯很重要,学会主动对阶段性的知识进行小结是学好 Linux 运维 的重要习惯。 1.2 Linux 的起源 1.2.1 UNIX 的历史 说到 Linux 的起源,就不得不提到 Linux 之前的 UNIX 系统。UNIX 系统于 1969 年在 AT&T 的贝尔实验室诞生,20 世纪 70 年代它逐步盛行,这期间又产生了一个比 较重要的分支,就是大约 1977 年诞生的 BSD(Berkeley Software Distribution)系统。 从 BSD 系统开始,各大厂商及商业公司根据自身公司的硬件架构,并以 BSD 系统为 基础进行 UNIX 系统的研发,从而产生了各种版本的 UNIX 系统,例如:SUN 公司的 Solaris、IBM 公司的 AIX、HP 公司的 HP UNIX 等。图 1-3 给出了 UNIX 系统诞生、发 展的时间及版本分支介绍,供读者参考。 UNIX PDF/7 UNIX 1st Edition PDP/11 [1975]UNIX 5th/6th Edition -c [1979]UNIX 7th Edition[1977] BSD [1984] BSD 4.2 [1985] BSD 4.3 FreeBSD [1988] SVR4 [1992] OSF/1 SunOS Solaris 1.0 Solaris 2.6 LINUX Solaris 8 OSF/1 Tru64 SCO UNIX HP-UX9 HP-UX10 HP-UX11 Unixware 1 Unixware 7 Xenix[1982]System III [1984]System V.2 [1986]System V.3 AIX AIX 3.1 AIX 4.2 AIX 4.3 1969 1971 1981 1991 2000 2002 图 1-3 UNIX 诞生及版本分支发展简略图解 跟老男孩学 Linux 运维:Web 集群实战4 在图 1-3 中可以看到,本书的“主人公”Linux 系统诞生于 1991 年左右,可以说 Linux 是从 UNIX 发展而来的。 1.2.2 UNIX 的 5 大优秀特性 细心的读者应该看到前文曾提到“类 UNIX 操作系统兼容产品”或“类 UNIX 操作 系统软件”吧?可为什么都要开发类 UNIX 系统呢?那是因为 UNIX 是一个非常棒的操 作系统,它很像一个非常聪明伶俐但不太听话的孩子,而开发者们在开发系统时,一方 面想要继承它的“聪明伶俐”,另一方面又想改善它不听话的一面,故而会有如此考虑。 那么 UNIX 都有哪些“聪明伶俐”的特点呢?一起来看看吧。 1. 技术成熟,可靠性高 使用 UNIX 系统时,即使连续运行若干年也无需重启,它依然可以工作得非常好。 毫不夸张地说,只要计算机硬件不坏,UNIX 就很难出现问题。 2. 极强的可伸缩性 UNIX 支持的CPU 处理器体系架构非常多,包括Intel/AMD 及 HP-PA、MIPS、 PowerPC、UltraSPARC、ALPHA 等 RISC 芯片,以及 SMP、MPP 等技术。 提示: 可能是由于早期各大厂商都基于 UNIX 进行适合自己的硬件开发,因此, UNIX 支持的 CPU 架构才更多。 3. 强大的网络功能 Internet 互联最重要的协议 TCP/IP 就是在 UNIX 上开发和发展起来的。此外,UNIX 还支持很多常用的网络通信协议,如 NFS、DCE、IPX/SPX、SLIP、PPP 等。 4. 强大的数据库支持能力 Oracle、DB2、Sybase、Informix 等大型数据库,都把 UNIX 作为其主要的数据库 开发和运行平台,一直到目前为止,依然如此。 5. 强大的开发功能 正是 UNIX 促使了 C 语言的诞生,并相互促进与发展,成为当时工程师的首选操 作系统和开发环境。互联网早期有重大意义的软件新技术的出现几乎都在 UNIX 上,例 如:TCP/IP、WWW、Java、XML 等。在互联网早期具有重大意义的软件及新技术几乎 都出现在 UNIX 上。 1.2.3 UNIX 操作系统的革命 20 世纪 70 年代中后期,由于各厂商及商业公司开发的 UNIX 及内置软件都是针对 自己公司特定硬件的,因此在其他公司的硬件上基本上无法直接运行,而且当时没有人 对开发基于 x86 架构 CPU 的系统感兴趣。另外,20 世纪 70 年代末,UNIX 又面临了突 第 1 章 Linux 系统介绍与环境搭建准备 5 如其来地被 AT&T 回收版权等重大问题,特别是要求禁止对学生群体提供 UNIX 系统源 代码,这一度引起当时 UNIX 业界的恐慌,也因此产生了商业纠纷。 UNIX 面临版权回收,以及代码不开源等的问题,直接或间接导致了新的类 UNIX 系统的诞生,以及自由软件运动的建立和发展。 1984 年,Richard Stallman 发起了开发自由软件的运动,并成立了自由软件基金 会(Free Software Foundation,FSF)和 GNU 项目。当时发起这个自由软件运动和创建 GNU 项目的目的其实很简单,就是想开发一个类似 UNIX 系统,并且是自由软件的完 整操作系统,也就是要解决 20 世纪 70 年代末 UNIX 版权及软件源代码面临闭源的问 题,这个系统叫做 GNU 操作系统。 也是在 20 世纪 80 年代初期,同样是由于之前的 UNIX 系统版权和源代码限制等问 题,当时大学里教学 UNIX 系统的束缚很大。因此,一个大学的教授(名字为 Andrew Tanenbaum,谭邦宁),大概于 1984 年开始着手编写新的用于教学的 UNIX 系统,目标 是开发新 UNIX 系统,使其尽可能地与原有的 UNIX 系统兼容,并且可以运行于 x86 PC 平台,这个系统的名字为 Minix。 老男孩补充:由于谭邦宁开发这个 Minix 系统的目的只是用于教学,因此,Minix 系统 的功能无法满足商用的需求,但是 Minix 的产生对于 Linux 的诞生是至关重要的,且看下文。 1.2.4 Linux 的诞生 Linux 系统的诞生始于芬兰赫尔辛基大学的一位计算机系名为 Linus Torvalds 的学 生。在大学期间,他接触到了学校的 UNIX 系统,但是当时的 UNIX 系统仅为一台主 机,且对应了多个终端,使用时存在操作等待时间很长等一些问题,无法满足年轻的 Linus Torvalds 的使用需求。因此他萌生了自己开发一个 UNIX 的想 法。不久,他找到了前文提到的谭邦宁教授开发的用于教学的 Minix 操作系统,和我们现在一样,他把 Minix 安装到了他的 I386 个人计 算机上。此后,Torvalds 又陆续阅读了Minix 系统的源代码,从 Minix 系统中学到了很多重要的系统核心程序设计理念和设计思想, 从而逐步开始了 Linux 系统雏形的设计和开发。 Linux 的标志和吉祥物为一只名字叫作 Tux 的企鹅——Torvalds’ UNIX,如图 1-4 所示。 1.2.5 Linux 的发展历程 1. Linux 的发展历程简介 1984 年,Andrew S. Tanenbaum 开发了用于教学的 UNIX 系统,命名为 Minix。 1989 年,Andrew S. Tanenbaum 将 Minix 系统运行于 x86 的 PC 平台。 1990 年,芬兰赫尔辛基大学学生 Linus Torvalds 首次接触 Minix 系统。 图 1-4 企鹅 Tux 跟老男孩学 Linux 运维:Web 集群实战6 1991 年,Linus Torvalds 开始在 Minix 上编写各种驱动程序等操作系统内核组件。 1991 年年底,Linus Torvalds 公开了Linux 内核源码0.02 版(http://www.kernel. org),注意,这里公开的 Linux 内核源码并不是我们现在使用的 Linux 系统的全部,而 仅仅是 Linux 内核(kernel)部分的代码。 1993 年,Linux 1.0 版发行,Linux 转向 GPL 版权协议。 1994 年,Linux 的第一个商业发行版 Slackware 问世。 1996 年,美国国家标准技术局的计算机系统实验室确认 Linux 版本 1.2.13(由 Open Linux 公司打包)符合 POSIX 标准。 1999 年,Linux 的简体中文发行版问世。 2000 年后,Linux 系统日趋成熟,涌现大量基于 Linux 服务器平台的应用,并广泛 应用于基于 ARM 技术的嵌入式系统中。 2. Linux 发展历程中相关人物 我们一定要向前辈们致以深深的敬意,没有他们,就没有今天优秀的 Linux 系统 (如 图 1-5 所 示 )。 Richard Stallman (自由软件与 GNU 项目发起人) Andrew S. anenbaum (Minix 开发者) Linus Torvalds (Linux 之 父) 图 1-5 Linux 系统诞生发展过程中关键代表人物 1.3 Linux 核心概念知识 1.3.1 自由软件与 FSF 1. 自由软件 简单地理解,自由软件的核心就是没有商业化软件版权制约,源代码开放,可无约 束自由传播。 注意: 自由软件强调的是权利问题,而非是否免费的问题。大家一定要理解这个概 念,自由软件中的自由是“言论自由”中的“自由”,而不是“免费啤酒” 中的“免费”。 第 1 章 Linux 系统介绍与环境搭建准备 7 自由意味着 freedom,而免费意味着 free,这是完全不同的概念。例如:Red Hat Linux 自由但不免费,CentOS Linux 是自由且免费的。 自由软件关乎使用者运行、复制、发布、研究、修改和改进该软件的自由。更精确 地说,自由软件赋予软件使用者四种自由 :2 ‰‰ 不论目的为何,有运行该软件的自由。 ‰‰ 有研究该软件如何运行,以及按需改写该软件的自由。当然,取得该软件源代码 为达成此目的之前提。 ‰‰ 有重新发布拷贝的自由。 ‰‰ 有改进该软件,以及向公众发布改进的自由,这样整个社群都可受惠。同样,取 得该软件的源码为达成此目的之前提。 2. FSF FSF(Free Software Foundation)的中文意思是自由软件基金会,是Richard Stallman 于 1984 年发起和创办的。FSF 的主要项目是 GNU 项目。它的目的是建立可自 由发布和可移植的类 UNIX 操作系统产品。GNU 项目本身产生的主要软件包括:Emacs 编辑软件、gcc 编译软件、bash 命令解释程序和编程语言,以及 gawk(GNU’s awk)等。 1.3.2 GNU 知识 GNU 的全称为GNU’s not unix,意思是“GNU 不是 UNIX”。 GNU 计划又称革奴计划,是由 Richard Stallman 在 1984 年公开发起的,是FSF 的主要项目(如图1-6 所 示)。前面已经提到过,这个项目的目标是建立一套完全自 由的和可移植的类 UNIX 操作系统。 GNU 类 UNIX 操作系统是由一系列应用程序、系统库 和开发工具构成的软件集合,并加上了用于资源分配和硬件 管理的内核。 但是 GNU 自己的内核 Hurd 仍在开发中,离实用还有一定的距离。因此,这个 GNU 系统并没有流行起来。现在的GNU 系统通常是使用Linux 系统的内核,加上 GNU 项目贡献的一些组件,以及其他相关程序组成的,这样的组合被称为 GNU/Linux 操作系统。 到 1991 年 Linux 内核发布的时候,GNU 项目已经完成了除系统内核之外的各种必 备软件的开发。在 Linus Torvalds 和其他开发人员的努力下,GNU 项目的部分组件又运 行到了 Linux 内核之上,例如:GNU 项目里的 Emacs、gcc、bash、gawk 等,至今都是 Linux 系统中很重要的基础软件。  此部分内容参考自 GNU 官方网站。 图 1-6 GNU 相关图片纪念 跟老男孩学 Linux 运维:Web 集群实战8 1.3.3 GPL 知识 1. GPL GPL 全称为 General Public License,中文名为通用公共许可,是一个最著名的开源 许可协议,开源社区最著名的 Linux 内核就是在 GPL 许可下发布的。GPL 许可是由自 由软件基金会创建的。 1984 年,Richard Stallman 发起开发自由软件的运动后不久,在其他人的协作下他 创立了通用公共许可证(GPL),这对推动自由软件的发展起到至关重要的作用,那么, 这个 GPL 到底是什么意思呢? 简单地理解,GPL 许可的核心是保证任何人有共享和修改自由软件的自由,任何人有 权取得、修改和重新发布自由软件的源代码权利,但都必须同时给出具体更改的源代码。 虽然整个 Linux 内核是基于 GNU 通用公共许可的,但是 Linux 内核并不是 GNU 计 划的一部分,这一点请读者不要混淆。 2. LGPL LGPL(Lesser General Public License)相对于 GPL 较为宽松,允许不公开全部源代 码,为基于 Linux 平台开发商业软件提供了更广阔的空间。对于该知识点,本书仅提及 一下,有兴趣的读者可到网上查询相关信息。 1.3.4 Linux 系统组成 Linux 操作系统的核心为 Linus Torvalds 开发的 kernel,Linux 内核之上的组件分为 几部分:一部分是 GNU 组件,如 Emacs、gcc、bash、gawk 等;另一些重要组成部分则 来自于加利福尼亚大学伯克利分校的 BSD UNIX 项目和麻省理工学院的 X Windows 系 统项目,以及在这之后成千上万的程序员开发的应用程序等(见表 1-1)。正是 Linux 内 核与 GNU 项目、BSD UNIX 及 MIT 的 X11(X Windows)的结合,才使得整个 Linux 操作系统很快形成,并得到了发展,进而组成了今天优秀的 Linux 系统。 Linux 操作系统 =Linux 内核 +GNU 软件及系统软件 + 必要的应用程序 表 1-1 Linux 系统各组成部分的贡献人员 Linux 内核 GNU 组件(gcc、bash) 其他必要应用程序 开发者 Linus Torvalds 项目发起人 Richard Stallman BSD UNIX 和 X Windows 以及成千上万的程序员 Linux 系统的核心组成原理示意图参照图 1-1。 1.4 Linux 的特点 1.4.1 Linux 为什么受欢迎 Linux 以高效和灵活著称。Linux 运行于 PC 上,可以实现几乎全部的 UNIX 特性, 第 1 章 Linux 系统介绍与环境搭建准备 9 同时具有多任务、多用户的能力,支持多线程、多 CPU。Linux 是在 GNU 通用公共许 可(GPL)权限下免费获得的,是一个符合 POSIX 标准的操作系统。 Linux 操作系统软件包不仅包括完整的 Linux 操作系统,而且还包括了文本编辑器、高级 语言编译器,以及 X-Windows 图形用户界面等应用软件,使用 Linux 也可以像使用 Windows 7、Windows 8 一样,通过窗口、图标和菜单对系统进行操作,当然,这是 Linux 个人桌面 领域的应用,在服务器领域绝大多数场景下都还是使用命令行、文本模式操作 Linux 的。 Linux 系统之所以受到广大计算机爱好者的喜爱,主要原因有两个: 一是,Linux 属于自由软件,用户不用支付任何费用就可以获得系统和系统的源代 码,并且可以根据自己的需要对源代码进行必要的修改,无偿使用,无约束地自由传播。 二是,Linux 具有 UNIX 的全部优秀特性,任何使用 UNIX 操作系统或想要学习 UNIX 操作系统的人,都可以通过学习 Linux 来了解 UNIX,同样可以获得 UNIX 中的 几乎所有优秀功能,并且 Linux 系统更开放,社区开发和全世界的使用者也更活跃。 1.4.2 Linux 更多特点介绍 还记得前文对 Linux 操作系统特性的小结么?除了那些特点以外,其实 Linux 还具 有如下一些特点: ‰‰ 可以说 Linux 是 UNIX 在 PC 上的克隆版,仿 UNIX 内核构建,几乎与 UNIX 指 令集向下完全兼容。 ‰‰ 是一个完善的支持多用户、多任务、多进程、多 CPU 的系统。 ‰‰ 具有很高的系统稳定性与可靠性。 ‰‰ 具有很高的系统安全性。 ‰‰ 有完善的网络服务,支持 HTTP、FTP、SMTP、POP、SAMBA、SNMP、DNS、 DHCP、SSH、TELNET 等。 ‰‰ 是基于 GNU 许可,自由开放的系统。 ‰‰ 有大量第三方免费应用程序。 ‰‰ 得到了众多业界厂商支持,如 IBM、Oracle、Intel、HP、MOTO、Google 等。 ‰‰ 有完善的大型数据库平台,包括 Oracle、DB/2、Sybase、MySQL、PostgreSQL 等。 ‰‰ 有完善的图形用户界面,包括 GNOME、KDE 等。 ‰‰ 有完善的开发平台,包括 C/C++、Java、Perl 等,支持各类图形界面 API,如 GTK+、QT 等。 1.5 Linux 的应用领域 1.5.1 IT 服务器 Linux 系统应用领域 如今的 IT 服务器领域是 Linux、UNIX、Windows 三分天下,Linux 系统可谓后起 跟老男孩学 Linux 运维:Web 集群实战10 之秀,特别是最近几年来,服务器端 Linux 操作系统不断地扩大市场份额,每年增长势 头迅猛,并且开始对 Windows 及 UNIX 服务器市场的地位构成严重威胁。图 1-7 是国内 服务器端各个系统使用百分比的一个参考饼图。 CentOS 5.8ὔ26.8% CentOS 6.4ὔ45%Windowsὔ12.8% Ubuntu 13.0ὔ8.5% Solarisὔ6.2% Ҙ΢ὔ0.7% 图 1-7 服务器端系统使用百分比图 从图 1-7 中可以看出,Linux 占 80% 左右(包括 CentOS、Ubuntu 等 ), Windows 占 12.8%,Solaris 占 6.2%。可见,在未来的服务器领域市场里 Linux 是大势所趋。 Linux 作为企业级服务器的应用十分广泛,利用 Linux 系统可以为企业构架 WWW 服务器、数据库服务器、负载均衡服务器、邮件服务器、DNS 服务器、代理服务器(透 明网关)、路由器等,不但使企业降低了运营成本,同时还获得了 Linux 系统带来的高稳 定性和高可靠性,且无须考虑商业软件的版权问题。 随着 Linux 在服务器领域的广泛应用,近几年来,该系统已经渗透到电信、金 融、政府、教育、银行、石油等各个行业,同时各大硬件厂商也相继支持 Linux 操作 系统。这一切表明,Linux 在服务器市场前景光明。同时,大型、超大型互联网企业 (百度、新浪、淘宝等)都在使用 Linux 系统作为其服务器端的程序运行平台,全球及 国内排名前十的网站使用的几乎都是 Linux 系统,Linux 已经逐步渗透到各个领域的企 业里。 1.5.2 嵌入式 Linux 系统应用领域 由于 Linux 系统开放源代码,功能强大、可靠、稳定性强、灵活,而且具有极大 的伸缩性,再加上它广泛支持大量的微处理器体系结构、硬件设备、图形支持和通信协 议,因此,在嵌入式应用的领域里,从因特网设备(路由器、交换机、防火墙、负载均 衡器等)到专用的控制系统(自动售货机、手机、PDA、各种家用电器等),Linux 操作 系统都有很广阔的应用市场。特别是经过这几年的发展,它已经成功地跻身于主流嵌入 式开发平台。例如,在智能手机领域,Android Linux 已经在智能手机开发平台牢牢地占 据了一席之地。嵌入式系统是另一个应用领域,不是本书讨论的主要话题,读者若对此 第 1 章 Linux 系统介绍与环境搭建准备 11 感兴趣,可参考相关文章和书籍。 1.5.3 个人桌面 Linux 应用领域 所谓个人桌面系统,其实就是我们在办公室使用的个人计算机系统,例如: Windows XP、Windows 7、MAC 等。Linux 系统在这方面的支持也已经非常好了,完全 可以满足日常的办公及家用需求,例如: ‰‰ 浏览器上网浏览(例如:Firefox 浏览器)。 ‰‰ 办公室软件(Open Off ice,兼容微软 Off ice 软件)处理数据。 ‰‰ 收发电子邮件(例如:ThunderBird 软 件 )。 ‰‰ 实时通信(例如:QQ 等 )。 ‰‰ 文字编辑(例如:vi、vim、emac)。 ‰‰ 多媒体应用。 虽然 Linux 个人桌面系统的支持已经很广泛了,但是在当前的桌面市场份额还远远 无法与 Windows 系统竞争,这其中的最大障碍可能不在于 Linux 桌面系统产品本身,而 在于用户的使用观念、操作习惯和应用技能,以及曾经在 Windows 上开发的软件的移植 问题。 1.5.4 本书讲解的 Linux 领域说明 本书主要讲解 Linux 系统服务器端的知识、技术,以及企业生产运维的实践经验。 下面为本书讨论的技术核心及什么企业单位会用到本书的技术知识: ‰‰ 服务器领域的 Linux 运维技术。 ‰‰ 基于 X86 CPU 架构的计算机硬件的 Linux 系统。 ‰‰ 面向互联网的企业,或者即将将业务转移到互联网的企业。 1.6 如何选择 Linux 的发行版 1.6.1 Linux 的发行版本介绍 Linux 内核(kernel)版本主要有 4 个系列,分别为 Linux kernel 2.2、Linux kernel 2.4、 Linux kernel 2.6、Linux kernel 3.x,更多更新的内核版本请浏览 https://www.kernel.org/。 Linux 的发行商包括 Slackware、Red Hat、Debian、Fedora、TurboLinux、Mandrake、 SUSE、CentOS、Ubuntu、红旗、麒麟…… 下面来看看其中几个重要的发行版本。 ‰‰ Red Hat :Red Hat Linux 9.0 的内核为 2.4.20。在版本 9.0 后,Red Hat 不再遵循 GPL 协议,成为收费产品(但仍开源),发展的新版本依次为 Red Hat 3.x、Red Hat 4.x、Red Hat 5.x、Red Hat 6.x、Red Hat 7.x。 跟老男孩学 Linux 运维:Web 集群实战12 ‰‰ Fedora:Red Hat 的一个分支,仍遵循 GPL 协议,可以认为是 Red Hat 预发布版。 ‰‰ CentOS(Community Enterprise Operating System): Red Hat 的另一个重要分支, 以 Red Hat 所发布的源代码重建符合 GPL 许可协议的 Linux 系统,即将 Red Hat Linux 源代码的商标(LOGO)及非自由软件部分去除后再编译而成的版本。目前 CentOS 已被 Red Hat 公司收购,但仍开源免费。CentOS Linux 是国内互联网公 司使用最多的 Linux 系统版本,也是本书的“主人公”,本书后面所有的内容讲 解都是基于 CentOS 这个操作系统的,绝大部分内容几乎无需任何修改即可适合 其他 Linux 操作系统版本。 提示: 有关 Linux 操作系统,记住 Red Hat、CentOS、Ubuntu、Fedora、SUSE、 Debian 等即可。对于 Red Hat 与 CentOS 的区别和联系,有时会被企业 面试官问到,需要重点了解。 1.6.2 选择适合的 Linux 系统学习 在了解了 Linux 版本及应用领域之后,接下来就要定位我们到底该往哪方向发展了。 如果你想做一个网站的后端运维工程师,那么就沿着服务器领域的路线;如果你想进入 嵌入式领域,那么就要学习嵌入式领域的技能;如果你对桌面 Linux 系统感兴趣,那么 可以深入桌面系统领域。选择的领域不同,学习和要掌握的技能自然就会有差别,因此, 这个选择就显得很重要了。当你阅读本书的时候,相信你已经选择了 IT 服务器 Linux 系 统应用领域。没错,我们整本书的主要内容就是基于 Linux 服务器应用领域而写的。 1. Linux 发行版本应用场景 在确定了自己的发展路线后,针对 Linux 系统选择一个合适的版本就显得尤为重要了。 事实上,这个问题也正是大多数初学者最为头疼的一个问题,对于此,笔者的建议如下: 如果你是一个 Linux 爱好者,想选择一个桌面系统,并且既不想用盗版,又不想 花太多钱购买商业系统软件,那么可以选择 Ubuntu 桌面系统。如果你需要服务器端 的 Linux 系统,想用一个比较稳定的服务器系统,或者说目标就是进入企业从事 Linux 运维工作,那么建议你选择 CentOS 或 Red Hat。在这两者当中又应首选 CentOS,因 为目前市场的趋势是这样的,CentOS 社区非常活跃。如果对系统稳定性、安全性有更 高的要求,或者是特殊使用偏好的用户,可以考虑 Debian 或 FreeBSD。如果特别痴 迷于新技术体验和追求最新的软件版本,可以选择 Fedora,但要容忍 Fedora 潜在的新 技术软件的 Bug 和系统稳定性的问题。如果喜欢更好的中文环境支持,可以选择麒麟 Linux……本书主要侧重服务器领域,并且根据国内互联网企业的市场需求,本书所选 择的 Linux 版本为 CentOS,当然所讲的技术也适合 Red Hat Linux 及其他大部分 Linux 系列,CentOS 是当前国内互联网企业服务器端实际应用最多的系统。 第 1 章 Linux 系统介绍与环境搭建准备 13 其实 Linux 虽然发行版本众多,但是系统的核心及大部分外围基础应用软件都是 相同的或仅仅是简单的变种,只要学会其中一种,即可触类旁通,因此不建议读者同时 学习多个系统,更不建议在工作中同时使用多个系统版本,这不但会浪费自己的学习时 间,也影响企业业务的稳定,增加无谓的维护成本。前面已说明,本书将以企业最常用 的 CentOS 系统为主进行讲解,但是想学习其他版本的 Linux 的读者,也同样适合阅读 本书,因为它们的使用方法绝大部分都是相同的。 提示: 当前,绝大多数互联网公司和企业的Linux操作系统平台为 CentOS和 Red Hat,通常情况下,只要能掌握这两个操作系统的应用就可以胜任绝大 多数公司的相关运维工作。对于其他版本的操作系统,包括 UNIX,想要再 学也会轻车熟路,因为它们之间的差异很小。 2. 选择 CentOS Linux 的版本 本书讲解的 Linux 运维技术主要是基于 CentOS x86_64 Linux 的,绝大部分知识几 乎无需任何修改同样也适用于 Red Hat Linux 等同源或类似 Linux 系统版本。 下面是 CentOS 的主流版本在国内互联网企业的使用现状说明。 ‰‰ CentOS 5 系 列 :占 25% 左右,主流版本有 CentOS 5.5、CentOS 5.8、CentOS 5.10、 CentOS 5.11,不推荐新手学习。 ‰‰ CentOS 6 系 列 :占 45% 左右,主流版本有 CentOS 6.2、CentOS 6.4、CentOS 6.6、 CentOS 6.7,推荐新手学习。 ‰‰ CentOS 7 系列:刚刚发布不久,目前极少企业正式使用。根据企业的主流应用 进行选择才是明智的,不要盲目选择最高的系统版本。 综上所述,老男孩推荐学习当下企业的主流应用,即 CentOS 6 系列,这其中又首 选 CentOS 6.6。因为只要大版本和企业相同即可,小版本的差别对学习来说几乎无影 响,故而可以选择该系列最新的小版本,即 CentOS 6.6 x86_64 来学习。其实,只要学 透一种版本,再学别的系统版本自然就会触类旁通了。 已参加工作的运维人员选择 CentOS 系统的版本建议: 如果你在企业有决定权,那么老男孩建议你选择 CentOS 6.4 或 CentOS 6.6 的 64 位 x86_64 系统,目前很多大中型公司使用 CentOS 5 或 CentOS 6 系列,或者将这两个系列 并行使用,并正在向 CentOS 6 系列过渡。选主流的版本软件本身会更稳定,经过企业 长时间生产考验,遇到问题网上解决方案资料也更多。 大公司的局部新业务可能慢慢会试着用 CentOS 6.6 或 CentOS 7,由于新业务相对 单一,重要性可能也没那么高,所以局部业务可以先用新系统测试,等测试一段时间后 稳定了,企业人员也熟悉了新系统较长时间后,就可以慢慢向 CentOS 6.6 甚至 CentOS 7 大量迁移了,这个试用的过程很重要,切勿跟风瞬间做大量的版本升级,企业里运维 跟老男孩学 Linux 运维:Web 集群实战14 工作还是以稳定优先,没有需求也可不升级。 中小型新公司或新业务可能会直接用最新版 CentOS 7 64 位,这样的公司里很多为 从业新手,可能没有 CentOS 5 或者 CentOS 6 系列的体验和应用经验,其实,直接选择 CentOS 7 是比较盲目的。最新版一般潜在的问题隐患会较多,且不可预知,多数企业未 使用,你选择使用后遇到问题不好解决,可能无人可问,也无处查资料。一些运维新人 经常这么做。看过本书的读者要注意,不要犯这样的错误。不过最新版的性能和功能等 往往还是不错的,对于真正的选择方法,还是看企业的实际需求,以及内部运维人员对 特定版本的熟练程度。先试水然后逐步过渡,是大公司的选择思路。 面试技巧: 大家被面试官问及使用的是什么操作系统时,一定要一次性说出来(系 统版本、内核版本、32位还是 64位),例如:我的工作中使用的是 CentOS 6.6 x86_64 位 Linux 系统,内核版本为 2.6.32-504,这才 是一个合格的 Linux 运维人员的表现。 1.7 搭建学习 Linux 的运维环境 1.7.1 虚拟机软件介绍 简单地说,虚拟机(Virtual Machine)软件就是一套特殊的软件,它可以作为操作 系统独立运行,也可以运行于操作系统之上。若是运行于系统之上的虚拟机软件,在一 台计算机(PC 或笔记本电脑等)上安装虚拟机软件后,就可以模拟若干台相对独立的虚 拟 PC 设备,并且可以在每台虚拟的 PC 设备上安装运行操作系统,运行网络服务,与 真实的计算机设备几乎无任何使用差别。 使用时,需要先在计算机上安装虚拟机软件(例如: VMware Workstation),然后 通过安装的虚拟机软件创建一个或多个虚拟机系统(即虚拟的计算机设备),最后在这些 虚拟的计算机设备上安装操作系统并进行启动配置,最终实现在一台计算机上“同时” 运行多个虚拟机设备系统。 另外,还可以将这些虚拟的系统连成局域网,用来部署网站集群架构等更深层次的 运维技术,这样的虚拟环境在后文会涉及。图 1-8 为安装 VMware Workstation 虚拟机软 件后打开的软件界面。 在图1-8 中,展示的是在Windows 2007 桌面操作系统上安装的虚拟机软件 VMware,这里通过配置VMware 虚拟了8 台 PC 设备,且分别在这8 台 PC 上安装 Linux 系统(实际学习中是先安装一台,其他的系统可以通过第一台进行克隆)。这 8 个 虚拟机同时在一台计算机上独立运行,几乎互不干扰,并且可同在一个局域网内,还可 以互相通信。 第 1 章 Linux 系统介绍与环境搭建准备 15 图 1-8 Windows 2007 系统安装 VMware Workstation8 虚拟软件窗口 经过前面对虚拟机软件的介绍,相信读者应该知道虚拟机软件到底是什么了吧。下 面,老男孩介绍一些网友常用的虚拟机软件,如表 1-2 所示。 表 1-2 常用的虚拟机软件及选择建议 虚拟机软件 特点及选择建议 VMware Workstation 工作站版虚拟化软件,简单、易用,适合搭建学习环境 KVM/Xen Linux 的虚拟化 服务器级虚拟化软件,适合企业虚拟化应用,复杂,不适合学习环境 Virtual PC MAC 平台可以用 VirtualBox 开源的虚拟机软件 1.7.2 通过虚拟机软件学习 Linux 运维 通过虚拟机软件是初学者学习 Linux 运维的最佳方式。 在与部分网友和学生的交流中,老男孩发现,很多初学者都认为,学习 Linux 就 必须把自己的计算机安装成 Linux 系统或必须有真正的服务器设备。这实际上是一些机 构、书籍或网络文章给人传导的错误思想和思维。其实,学习 Linux 最简单、最实用的 环境就是虚拟机环境(例如:通过 VMware Workstation 等软件学习)。老男孩这样说的 原因有如下几点: ‰‰ 利用虚拟机软件搭建 Linux 学习环境简单,容易上手,最重要的是利用虚拟机模 拟出来的 Linux 与真实的 Linux 几乎没有任何区别。如果购买服务器,动则一两 跟老男孩学 Linux 运维:Web 集群实战16 万元,不是一般的网友所能承受的,而且声音很大,很费电。如果用 PC 和笔记 本电脑搭建 Linux(包括双系统共存方式),那就完全是 Linux 环境了,不但加大你 的学习难度(例如:无法用 Word 记笔记和正常浏览网页),也与实际的工作环境 相差很远,即南辕北辙了,企业里运维人员的工作环境绝大多数都是在 Windows 桌面系统下通过 SSH 工具(SecureCRT/Xshell)远程连接千百里之外的 Linux 服务 器进行管理和维护的。因此,用虚拟机软件来搭建环境是最接近企业工作环境的。 ‰‰ 搭建 Linux 集群等大规模环境有时需要同时开启几台虚拟机(每台虚拟机仅需 256 ~ 512MB 内存、6 ~ 8GB 的硬盘空间即可),此时如果是用服务器或者自 己的计算机安装 Linux,则很难满足学习要求,购买多台服务器就更不现实了。 事实上,仅仅用价值四五千元的个人笔记本电脑就可以轻松满足搭建中小规模 Linux 集群架构的学习需求。 ‰‰ 如果用虚拟机学习,只要计算机配置高一点,就可以同时开启多个 Linux 虚拟 机,在上班、回家的路上,带着笔记本电脑即可随时学习。如果是多台真实计算 机和服务器设备,就无法移动了。当然有读者会说可以放机房里,但这个代价也 太大了。大多数学习者很难有这样的资源。 ‰‰ 使用虚拟机系统环境,我们可以随意对虚拟系统进行任何的设置和更改操作,甚 至可以格式化虚拟机系统硬盘,进行重新分区等操作,而且完全不用担心会丢掉 有用数据,因为虚拟机是系统上运行的一个虚拟软件,对虚拟机系统的任何操作 都相当于在操作虚拟机的虚拟机设备和系统,不会影响计算机上的真实数据。 综上所述,老男孩想给大家的建议就是,踏实地用虚拟机学习吧,学习 Linux 运 维,几乎 99.9% 的知识都与硬件设备无关,我们不要给自己设置太多的限制和门槛,那 样会影响学习 Linux 的进度,从而可能丧失学习 Linux 的兴趣。 当然了,如果在学习的过程中有条件可以摸一摸真正的服务器设备。在实际教学 中,我们会让学生摸到服务器,不仅可以进行 RAID 制作,还可以给真实的物理服务器 安装系统。总之一句话,如果没有设备,在计算机上安装虚拟机一样可以搭建逼近工作 环境的学习环境,当然如果有设备配合虚拟机学习,学习效果更佳。 企业真正服务器硬件手把手介绍请见 http://v.qq.com/page/g/x/y/g016789xvxy.html。 1.7.3 选择适合自己的虚拟机软件 1. 选择适合的虚拟机软件 如果你使用的是 Windows 系统,那么,老男孩推荐你使用 VMware Workstation ; 如果是Mac OS 平台,可以选择Virtual PC ;如果你用的是Ubuntu 系统,可以选择 Xen、KVM、VMware(Linux 版本)。本书将以在 Windows 2007 系统上安装 VMware Workstation 8.0 为例,为大家讲解 Linux 运维技术,同时会在 DELL R710 真实服务器环 境中进行测试,其他环境的搭建大同小异,进入 Linux 里面几乎无差别。 第 1 章 Linux 系统介绍与环境搭建准备 17 2. 虚拟机软件对硬件的要求 虚拟机软件的原理是利用宿主机物理硬件资源虚拟 PC 设备,因此对物理机硬件的 要求比较高,其中最主要的是内存、硬盘和 CPU 资源。首先,宿主机物理内存要足够 大,最低在 4GB 以上,因为在创建虚拟设备时,要为每个虚拟机分配一定的内存资源 (一般最小为 256MB,实际学习时可以设置在 256 ~ 1024MB 之间)和硬盘空间(默认 8GB 即 可 ), SSD 固态盘最好,同样也要分配 CPU 资源,CPU 最好是 I5 以上,例如: 每个虚拟机分配一核 CPU。当然了,多个虚拟机系统也可以同时占用一个核,在日常学 习 Linux 时,如果不进行大量并行安装软件等消耗 CPU 资源的操作,使用虚拟机环境 还是非常舒服的。 1.7.4 安装与使用 VMware 虚拟机软件 1. 对 VMware Workstation 版本的建议 表 1-3 中给出的是选择 VMware Workstation 版本的建议。仅为建议,非必须照做。 表 1-3 VMware Workstation 版本选择建议 物理机(宿主机)系统版本 VMware Workstation 版本 Windows XP(不 推 荐) VMware Workstation 5.5(不 推 荐) Windows 7(推 荐) VMware Workstation 8.0(推 荐) Windows 8(不 推 荐) VMware Workstation 9.0/10.0/11.0(不 推 荐) 提示: 本书写作时,Windows 10 发布了,不建议新手使用最新系统作为宿主机学 习 Linux,因为会遇到各种“坑”,走前人走过的路才是最佳的学习思路,学 会后再变通就会好多了,因此,推荐大家使用 Windows 7 系统和 VMware Workstation8.0 虚拟机软件,与老男孩使用的一致最佳。 2. 虚拟机软件的安装 在 Windows 系统下安装了适合 Windows 版本的VMware Workstation 后,就可以 在 VMware Workstation 上创建虚拟机了。之后运行创建的虚拟机,在虚拟机上安装 CentOS Linux 操作系统,这个安装过程与在实际生产环境下安装是一样的。 VMware Workstation 虚拟机软件的安装很简单,只需按照 Windows 常规方法,持 续按“下一步”即可完成,这里不再描述,如果你遇到了问题,可以在前言中寻找老男 孩为本书建立的问题反馈交流群。 1.7.5 创建一个虚拟机的实践 1)虚拟机软件安装完毕后,双击桌面上的 VMware Workstation 图标,或者在开始 程序菜单里找到 VMware Workstation 图标来启动 VM 应用程序,如图 1-9 所示。 跟老男孩学 Linux 运维:Web 集群实战18 图 1-9 VMware Workstation 虚拟机软件主界面 2)接下来按 Ctrl+N 快捷键(或者点选菜单栏 File → New virtual machine)创建一 个新虚拟机,此时,会出现新建虚拟机向导窗口,如图 1-10 所示。 3)在图 1-10 所示的虚拟机创建向导界面中,单选 Custom(advanced),即自定义 安装,然后单击 Next 按钮继续,弹出如图 1-11 所示的界面。 图 1-10 虚拟机创建向导界面 图 1-11 虚拟机硬件兼容和设备限制说明界面 4)图 1-11 描述了虚拟机硬件兼容和虚拟设备大小限制,在图右侧的 Limitations 下 面,可以发现软件对要创建的虚拟机的硬件大小会有限制,例如:内存最大为 64GB、 CPU 为 8 processor limit、磁盘为 2TB disk size limit 等,不过,这些并不会影响学习, 保留默认选择即可。然后单击 Next 按钮继续,此时会出现如图 1-12 所示的窗口。 5)在图 1-12 所示的界面中,“为虚拟机选择如何安装系统”这一步骤很关键。请 选择界面最下面标示的“ I will install the operating system later.”,表示创建虚拟机后不 再默认安装系统,即创建虚拟机后,我们可以手动选择镜像或将光盘放入虚拟光驱自行 安装。如果选择了“ Installer disc image f ile”,则在创建完虚拟机后就会自动安装系统。 第 1 章 Linux 系统介绍与环境搭建准备 19 这虽然很方便,但是会增加太多的安装包,并且会自动分区,这样就不是企业环境安装 的标准了。选择完毕,然后单击 Next 按钮继续,会出现如图 1-13 所示的界面。 图 1-12 为虚拟机选择如何安装系统 图 1-13 为虚拟机选择系统类型及内核版本 6)“为虚拟机选择系统类型及内核版本”也很关键,这一步是选择系统类型及内核 版本进行系统安装,如果选错了,可能无法正确安装系统。 这里选择 Linux 系统类型,内核为“ Other Linux 2.6.x kernel 64-bit”,也就是说, 要安装的系统为 CentOS 6.6 x86_64 系统。也可以在系统类型中直接选择 CentOS 64bit (但不推荐,因为笔者没有这样选过,运维思想:多走自己走过的正确的路)。选择完毕, 然后单击 Next 按钮继续,出现如图 1-14 所示的界面。 7)在图 1-14 所示的界面中,要为虚拟机起名并选择安装程序的路径,路径要选择 大一点的宿主机磁盘分区,剩余空间至少要大于 20GB,配置完毕后单击 Next 按钮继 续,出现的界面如图 1-15 所示。 为虚拟机起个名字 虚拟机程序所在的路径 图 1-14 为虚拟机起名及选择程序安装路径 图 1-15 为虚拟机选择 CPU 资源 跟老男孩学 Linux 运维:Web 集群实战20 8)在如图 1-15 所示的界面,要选择虚拟机对应 CPU 的颗数,以及每个 CPU 的核 数,默认都是 1,选此即可。我们仅仅是用虚拟机来进行学习、实验,不要求虚拟机设 备资源有多好。单击 Next 按钮继续,出现的界面如图 1-16 所示。 注意: CentOS 6 系列 x86_64 在虚拟机上设置 CPU 时可能会出现故障,这是因 为笔记本电脑或台式机硬件 CPU 需要支持虚拟化技术,但有些系统硬件默 认是不支持的,可以通过调整 BIOS 使其支持,不过,某些旧机器可能只能 安装 32 位的 Linux 系统。详见本节结尾处。 9)“为虚拟机选择内存资源大小”也很关键,默认选择的虚拟机内存大小为 384MB,建议调整为 1024MB。之后,单击 Next 按钮继续,出现的界面如图 1-17 所示。 内存大小设置分析: ‰ 创建虚拟机时内存至少大于 512MB,最好是 1GB 以上,否则安装系统可能报错,因 为从 CentOS 6 开始,多数都用图形界面安装系统了,因此,占用的内存会比较大。 ‰ 安装 Linux 之后,启动虚拟机时内存最好在 512MB 以上,最低是 256MB,否则 也可能报错。 ‰ 如果是 CentOS 5 系列,安装时内存为 256MB,启动时 100MB 左右即可。CentOS 6 系列安装和启动都会占用更多的内存。 图 1-16 为虚拟机选择内存资源大小 图 1-17 为虚拟机选择网络类型 10)“为虚拟机选择网络类型”极其关键。VMware 虚拟机常见的网络类型有 Bridged( 桥 接 )、 NAT、Host-only(仅主机)3 种,在分析如何选择之前,先要简单给大 家介绍一下这三种网络类型。 第 1 章 Linux 系统介绍与环境搭建准备 21 ‰ NAT NAT(Network Address Translation,网络地址转换),NAT 模式是比较简单的实现 虚拟机上网的方式。简单地理解,NAT 模式的虚拟机就是通过宿主机(物理计算机)上 网和交换数据的。 在 NAT 模式下,虚拟机的网卡连接到宿主机的 VMnet8 上。此时系统的 VMware NAT Service 服务就充当了路由器,负责将虚拟机发送到 VMnet8 的包进行地址转换之后 发送到实际的网络上,再将实际网络上返回的包进行地址转换后通过 VMnet8 发送给虚 拟机。VMware DHCP Service 负责为虚拟机分配 IP 地址。NAT 网络类型的原理逻辑图 如图 1-18 所示。 NAT 方式 宿主(物理网卡) 192.168.1.11 宿主(VMnet8) 192.168.78.1 路由器 192.168.1.1 虚拟机 192.168.78.100 图 1-18 VMware NAT 网络模式原理逻辑图 NAT 网络特别适合于家庭里计算机直接连接网线的情况,当然办公室的局域网环境 也是适合的,其优势是不会与其他物理主机 IP 冲突,且在没有路由器的环境下也可以 通过 SSH NAT 连接虚拟机学习,换了网络环境虚拟机 IP 等不受影响,这是老男孩推荐 的选择。 ‰ Bridged(桥接模式) 桥接模式可以简单理解为通过物理主机网卡架设一座桥,从而连入实际的网络 中。因此,虚拟机可以被分配与物理主机相同网段的独立 IP,所有网络功能和网络 中的真实机器几乎完全一样。桥接模式下的虚拟机和网内真实计算机所处的位置是一 样的。 在 Bridged 模式下,计算机设备创建的虚拟机就像一台真正的计算机一样,它会直 接连接到实际的网络上,逻辑上上网与宿主机(计算机设备)没有联系。Bridged 网络类 型的原理逻辑图如图 1-19 所示。 Bridged 网络类型特别适合于局域网环境,其优势是虚拟机像一台真正的主机一样, 跟老男孩学 Linux 运维:Web 集群实战22 缺点是可能会与其他物理主机 IP 冲突,并且在与宿主机交换数据时,都会经过实际的 路由器,当不考虑 NAT 模式的时候,就选择这个桥接模式,在桥接模式下换了网络环 境后所有虚拟机的 IP 都会受影响。 Bridged 方式 路由器 192.168.1.1 宿主(物理网卡) 192.168.1.11 虚拟机 192.168.1.100 图 1-19 VMware Bridged 网络模式原理逻辑图 ‰ Host-only(仅主机) 在 Host-only 模式下,虚拟机的网卡会连接到宿主的 VMnet1 上,但宿主系统并不 为虚拟机提供任何路由服务,因此虚拟机只能与宿主机进行通信,不能连接到实际网络 上,即无法上网。Host-only 网络类型的原理逻辑图如图 1-20 所示。 Host-only 方式 宿主(物理网卡) 192.168.1.11 宿主(VMnet1) 192.168.78.1 路由器 192.168.1.1 虚拟机 192.168.78.100 图 1-20 VMware Host-only 网络模式原理逻辑图 老男孩的写书环境是办公室环境,有物理路由器,不经常换网络环境,因此,这里 选择以桥接模式为例为大家讲解(如图 1-19 所示)。在选择了网络类型后,单击 Next 按 钮继续,出现的界面如图 1-21 所示。 第 1 章 Linux 系统介绍与环境搭建准备 23 11)在图 1-22 所示的界面选择虚拟机的 I/O 控制器类型,采用默认类型即可,选择 完毕,单击 Next 按钮继续,出现的界面如图 1-23 所示。  有路由器,局域网环境,作者 选择桥接模式,更接近真实环境。 图 1-21 为虚拟机选择桥接网络类型 图 1-22 为虚拟机选择 I/O 控制器类型 12)在选择虚拟机磁盘类型时,采用默认的 SCSI 即可(VM 高版本会有 SAS 选项, 不过建议不要选),选择完毕,单击 Next 按钮继续,会出现如图 1-24 所示界面。 图 1-23 为虚拟机选择虚拟机磁盘类型 图 1-24 为虚拟机选择使用的磁盘 13)在选择虚拟机使用的磁盘时,采用默认的“ Create a new virtual disk”,即创建 一个虚拟磁盘。选择完毕,单击 Next 按钮继续,会弹出如图 1-25 所示的界面。 14)在选择虚拟机使用的磁盘文件名时,仍然采用默认配置。选择完毕,单击 Next 按钮继续,出现的界面如图 1-26 所示。 跟老男孩学 Linux 运维:Web 集群实战24 图 1-25 为虚拟机选择磁盘文件 图 1-26 显示虚拟机所有配置选项信息 15)如图 1-26 所示界面用于显示配置的虚拟机的所有选项信息,可以通过滚动条 下拉查看,单击左下方的“ Customize Hardware”可以自定义添加其他硬件,如磁盘、 网卡等,这里保留默认。选择完毕,单击 Next 按钮继续,会出现如图 1-27 所示界面。 图 1-27 创建虚拟机后的主界面 16)图 1-27 所示的界面中展示的是创建虚拟机后的界面信息,左边是虚拟机的 名称,右边是虚拟机的实际配置。在这个窗口,可以为创建好的虚拟机配置光驱,把 CentOS 镜像文件(CentOS-6.6-x86_64-bin-DVD1.iso,需要单独下载,如果官方网站上 没有 CentOS 6.6,下载 CentOS 6.7 也可以,只要是 6 系列的都可以)放到光驱里就可以 启动虚拟机安装 Linux 系统了。点选窗口右边的光驱选项,出现的界面如图 1-28 所示。 第 1 章 Linux 系统介绍与环境搭建准备 25 图 1-28 配置 CentOS 6.6 ISO 镜像文件载入光驱 17)接下来就剩下启动虚拟机安装系统了。单击“ Power on this virtual machine” 即可,如图 1-29 所示。 图 1-29 准备启动虚拟机安装 CentOS 6.6 界面 启动虚拟机后可能遇到的问题及应对方法 在老男孩实际教学过程中,发现有些同学的笔记本电脑默认使用 VMware 软件创建 虚拟机后,在虚拟机中不支持 64 位 CentOS 系统的安装,如图 1-30 所示。 图 1-30 虚拟机开机提示不支持 CentOS 6.6 64 位系统 解决方法: 跟老男孩学 Linux 运维:Web 集群实战26 进入笔记本电脑或台式机的 BIOS,找到类似下面的选项进行调整,不同的计算机 会略有不同。这里以 Thinkpad 计算机为例说明,具体情况如图 1-31 和图 1-32 所示。 图 1-31 调整宿主机(计算机)BIOS,支持 64 位系统安装 图 1-32 调整宿主机(计算机)BIOS,支持 64 位系统安装 在图 1-32 中,两个选项都改成 Enabled,然后保存。如果没有意外,就可以安装 64 位操作系统了。如果重启计算机后依然不行,那就是计算机硬件有问题了,只能安装 32 位系统,或者更换为支持 64 位系统的硬件。 到此为止,VMware 虚拟机的准备工作就全部做完了,在下一章将为大家讲解安装 Linux 系统的相关知识。 1.8 本章重点回顾 1)了解什么是操作系统及操作系统简单原理图。 2)了解 UNIX 的发展历史。 3)了解市场上的常见 UNIX 系统版本。 4)了解 UNIX 及 Linux 诞生发展的几个关键人物。 5)重点了解 GNU、GPL 的知识。 6)了解 Linux 系统的特点。 7)了解 Linux 系统的常见发行版本,不同场景选择。 8)重点了解 CentOS 和 Red Hat 的区别和联系。 9)了解 CentOS 各个版本的应用场景及企业应用情况。 第 1 章 Linux 系统介绍与环境搭建准备 27 10)学会搭建学习 Linux 的环境。 注意:最好能口头表达出上述内容。 1.9 本章知识相关考试题 1)请详细描述 GNU 的相关知识和历史事件。 2)请描述什么是 GPL 及 GPL 的内容细节。 3)企业工作中如何选择各 Linux 发行版? 4)Red Hat Linux 和 CentOS Linux 有什么区别和联系? 5)请说出你认为 Linux 受欢迎的 3 个以上特点。 1.10 本章参考资料 ‰ 操作系统介绍资料 http://baike.baidu.com/view/880.htm ‰ 自由软件基金会 http://www.gnu.org/philosophy/free-sw.html ‰ GNU 与 GPL 知识 http://www.gnu.org/home.zh-cn.html ‰ GPL 协议英文版 http://www.gnu.org/licenses/gpl.html ‰ 虚拟机及虚拟机软件的知识 http://zh.wikipedia.org/wiki/%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%AF% 94%E8%BE%83#.E8.99.9B.E6.93.AC.E6.A9.9F.E5.99.A8.E6.AF.94.E8.BC.83 ‰ 老男孩针对本章内容给出的对应视频精品资料 http://edu.51cto.com/course/course_id-839.html 第2 章 企业级 CentOS 6.6 操作系统安装 2.1 下载 CentOS 系统 ISO 镜像 2.1.1 下载 CentOS 系统 ISO 镜像的说明 要安装 CentOS 系统,就必须有 CentOS 系统软件安装程序,可以通过浏览器访问 CentOS 的官方站点 http://www.centos.org,然后在导航栏找到“Downloads → Mirrors”链 接,单击进入后即可下载,或者打开如下的地址直接选择国内的高速镜像站点进行下载: ‰‰ 64 位:http://mirrors.aliyun.com/centos/6.6/isos/x86_64/ ‰‰ 32 位:http://mirrors.aliyun.com/centos/6.6/isos/i386/ 提示: 如果 CentOS 6.6 的下载地址过期无法下载,可以直接下载 CentOS 6.7 或更新的 6 系列其他版本,方法是输入 http://mirrors.aliyun.com/centos/ 进入地址后进行选择。 目前,国内比较稳定的开源镜像软件下载地址为 aliyun 镜像地址(http:// mirrors.aliyun.com/)和网易镜像地址(http://mirrors.163.com/),推荐 国内用户使用这两个站点提供的镜像,直接打开 CentOS 的官方站点会比 较慢,甚至会打不开。 下载完成后,得到的是 CentOS 操作系统的 ISO 系统软件安装程序,该程序分为 32 位和 64 位两种版本,文件主要为 DVD 格式(早期还有 CD 格式),扩展名为 .iso,软件 第 2 章 企业级 CentOS 6.6 操作系统安装 29 程序文件名见表 2-1。 表 2-1 软件程序文件格式 文件格式 i386(32 位系统) x86_64(64 位系统) DVD 格式 CentOS-6.6-i386-bin-DVD1.iso CentOS-6.6-i386-bin-DVD2.iso CentOS-6.6-x86_64-bin-DVD1.iso CentOS-6.6-x86_64-bin-DVD2.iso 提示: 目前绝大多数企业生产环境,用的都是 64 位 DVD 格式的系统镜像。 2.1.2 下载后有关 ISO 镜像的使用说明 正如前面提到的,扩展名为“ .iso”格式的操作系统文件就是所谓的镜像文件。这 种镜像文件一般是用来刻录光盘的,文件个头比较大,单个 CD 文件可能就有 700MB 之多,而单个 DVD 文件可能会高达 4GB 大小,因此建议不要使用浏览器(例如 IE/ Firefox)下载,因为中途一旦断网就会前功尽弃。推荐使用类 FTP 客户端程序或迅雷等 下载工具来下载,例如 Filezilla,这样就不需要担心因断网而前功尽弃的问题了。曾经 老男孩就因为心存侥幸而吃了大亏,白白浪费了许多时间。 需要说明的是,这种 ISO 镜像文件不能直接以数据格式刻录成为 CD/DVD,这样是 无法实现引导安装系统的!必须要用刻录程序的镜像刻录功能,将 ISO 文件以“镜像文 件格式”刻录成 CD/DVD 盘才行。 那么,在不同的场景,该如何使用 ISO 镜像呢?这里给大家几个不同场景下的使用 建议: ‰‰ 如果是在单机物理服务器上安装系统,可能需要购买空白 DVD 光盘刻录成 DVD。当然,制作 U 盘镜像引导安装也是可以的。 ‰‰ 如果是在 VMware/virtualbox 等虚拟软件环境下学习,则不需要刻录成 DVD 光 盘或制作成 U 盘。在创建完虚拟机后,直接指定 ISO 镜像文件路径到虚拟机的 光驱,即可实现引导安装系统。 ‰‰ 如果是服务器数量比较多的工作环境,一般也不需要刻录成 DVD 光盘或制作 U 盘,大多数都会通过 ISO 镜像部署无人值守网络批量安装系统服务。 若是确定要刻录光盘,老男孩也有两个建议: ‰‰ 推荐使用 DVD 格式的 ISO 文件来进行刻录,这样只需一两张 DVD 就够了,多数 情况下刻录第一个镜像文件即可,第二个镜像文件很少用到,因为我们在安装系 统时都采用最小安装原则,第一个镜像文件的软件包就足够了;如果是 U 盘引导, 配置也不难,这里就不多介绍了,请读者参阅相关资料或老男孩的博文。 ‰‰ 不建议使用 CD 格式的 ISO 文件来刻录,因为那样需要七八张 CD 盘,很费劲。 截止到本书写作时,aliyun 中也已看不到 CD 格式的镜像文件了。 跟老男孩学 Linux 运维:Web 集群实战30 安装 Linux 系统的常见引导方式有如下几种: ‰ 光盘引导安装。 ‰ U 盘引导安装。 ‰ 网络安装(需要网卡支持,现在主流网卡都支持)。 虚拟机环境可以直接使用 ISO 镜像,安装方式可以是上面三种方式中的任何一种。 2.1.3 为什么企业环境要选择 64 位操作系统 目前绝大多数企业生产环境中,使用的都是 64 位 CentOS 系统,那么 32 位与 64 位 系统到底有什么不同?为什么要选择 64 位系统呢?这就要从 32 位与 64 位系统的定位 和区别讲起。 区别之一:当初设计时的定位不同 。64 位操作系统的设计定位是满足机械设计和分 析、三维动画、视频编辑和创作,以及科学计算和高性能计算应用程序等领域,这些应 用领域的共同特点就是需要有大量的系统内存和浮点性能。简单地说,64 位操作系统是 为高科技人员使用本行业特殊软件的运行平台而设计的,而 32 位操作系统是为普通用 户设计的。 区别之二:安装要求配置不同 。64 位操作系统只能安装在 64 位计算机上(CPU 必 须是 64 位的),并且只在针对 64 位的软件时才能发挥其最佳性能。32 位操作系统既可 以安装在 32 位(32 位 CPU)计算机上,也可以安装在 64 位(64 位 CPU)计算机上。 当然,此时 32 位的操作系统是无法发挥 64 位硬件性能的。 区别之三:运算速度不同 。64 位 CPU GPRs(General-Purpose Registers,通用寄存器) 的数据宽度为 64 位,64 位指令集可以运行 64 位数据指令,也就是说处理器一次可提取 64 位数据(只要两个指令,一次提取 8 字节的数据),比 32 位提高了一倍(32 位需要 4 个指令,一次只能提取 4 字节的数据),性能会相应提升。 区别之四:寻址能力不同 。64 位处理器的优势还体现在操作系统对内存的控制上。 由于地址使用的是特殊整数,因此一个 ALU(算术逻辑运算器)和寄存器可以处理更大 的整数,也就是更大的地址。比如,Windows 7 x64 Edition 支持高达 128 GB 的物理内 存和 16TB 的虚拟内存,而 32 位的 CPU 和操作系统理论上最大只可支持 4GB 的内存, 实际上也就是 3.2GB 左右的内存,当然 32 位操作系统是可以通过扩展来支持大内存的, 扩展所采用的是 PAE 技术。 提示: 若要用一句话概括 32 位与 64 位操作系统的区别,那就是 64 位操作系统的 CPU 运算速度更快,支持更大的内存使用,可以发挥更大更好的硬件性能, 提升业务工作效率。 第 2 章 企业级 CentOS 6.6 操作系统安装 31 2.1.4 如何区分已安装的系统是 32 位还是 64 位 在 Linux 系统中查看系统版本为 32 位还是 64 位的方法如下。 方法 1 为标准的查看方法。命令及输出如下: [root@www ~]# uname -m x86_64 上述输出结果中带有 x86_64 字样,说明该系统为 64 位。再来看下面的命令及输出: [oldboy@web ~]$ uname -a Linux web 2.6.18-164.el5 #1 SMP Thu Sep 3 03:33:56 EDT 2009 i686 i686 i386 GNU/Linux 上述输出结果中带有 i386/i686 字样,说明该系统为 32 位。 还可以通过命令 uname -a 查看更多的信息。 方法 2 为网友寻思出的方法。命令及输出如下: [root@www ~]# ls -d /lib64 /lib64 输出结果中存在 lib64 目录,则表示为 64 位的系统。 2.1.5 在学习与工作中如何选择操作系统 1. 工作场景 当前,绝大多数服务器厂商如 Dell、HP、IBM 的服务器既支持 32 位又支持 64 位 系统。在老男孩的生产场景中,为了发挥硬件的最佳性能,尤其是对大内存的利用率, 6 年前就已经是 100% 使用 64 位操作系统了。目前,在正式的生产环境使用 32 位系统 的企业已寥寥无几了,甚至绝大多数 IT 人员的笔记本电脑安装的 Windows 系统都是 64 位系统了。 2. 学习场景 对于初学 Linux 的读者来说,使用 32 位或 64 位的系统都是可以的(两者会略有区 别,但不是很大),但还是建议大家尽可能地用 64 位的系统,与企业应用环境保持一致, 这样才能提升学习效率与学习效果。老男孩在工作及教学中发现,有部分硬件(相对较 老)默认无法支持 VMware 等 64 位的虚拟化软件,个别初学者甚至在尽可能地调整计 算机的 BIOS 设置及 CPU 虚拟化支持选项后,仍无法支持 VMware 的 64 位虚拟能力, 对于这样的硬件,就只能使用 32 位的系统了。虽然这对配置个别网络服务有一点点影 响,但其实对于学习来说,问题不太大,可以忽略不计。当然,如果手头宽裕,还是建 议购买支持 64 位 CPU 虚拟化能力的计算机为好,新的主流计算机都是支持 64 位 CPU 虚拟化能力的。 有关调整计算机 BIOS 及 CPU 虚拟化支持选项的步骤,在第 1 章安装虚拟化软件 跟老男孩学 Linux 运维:Web 集群实战32 VMware 时已经讲解过,这里不再重复。 2.2 CentOS 6.6 操作系统安装准备 2.2.1 单台物理服务器安装系统准备 对于单台物理服务器,在正式安装操作系统之前,需要先确认以下两个问题,以便 能够顺利安装系统。 ‰‰ 服务器光驱和系统安装光盘(需要把 ISO 文件刻成 DVD 光盘)都可用。 ‰‰ 服务器的各个硬件都能被 CentOS 6 系统支持(当前市场上大多数品牌的服务器 都已支持 CentOS 6)。 确认完毕,就可以使用 DVD 光盘安装系统了,若考虑采用 U 盘安装的方式,请读 者自行学习。 2.2.2 虚拟机学习安装系统准备 作为初学者,在安装 CentOS 6 系统之前,通常会在 Windows 系统上事先安装好虚 拟机软件,例如 VMware,然后打开运行安装的虚拟机软件,选择创建一个虚拟机,并 配置好硬件,最后找到与创建的这个虚拟机对应的虚拟光盘驱动器。准备就绪,就可以 将 CentOS 系统的 ISO 镜像文件加载进来了。图 2-1 即为 VMware 虚拟机加载 CentOS 6.6 ISO 镜像文件的界面。在该界面右侧,将默认的物理光驱“ Use physical drive”, 改 为使用 ISO 镜像文件“Use ISO image f ile”,然后单击右边的“Browse...”,找到事先下 载好的 CentOS 6.6 的第一个镜像文件并加载进来即可。 提示: 安装系统时,绝大多数情况下只需要使用第一个 ISO 镜像文件,因为在企业 实际环境中,安装系统时绝大多数都采用最小化安装原则,第二个镜像文件 很少用到。 图 2-1 VMware 虚拟机加载 ISO 镜像图 第 2 章 企业级 CentOS 6.6 操作系统安装 33 2.3 开始安装 CentOS 6.6 操作系统 2.3.1 安装 CentOS 6.6 操作系统的过程 加载完 CentOS 6.6 的第一个 ISO 镜像文件后,开启 / 重启计算机或虚拟机,此时, 系统会进行自检,自检完毕就会出现安装系统时的引导界面,如图 2-2 所示。 图 2-2 CentOS 6.6 开机安装系统引导界面 提示: 如果是在虚拟机上安装 CentOS 系统,需要进入虚拟机界面操作,如果需 要退出虚拟机界面,可以按快捷键 Ctrl+Alt。 1. 选择系统引导方式 在图 2-2 所示的引导界面中,可以看到共有 5 种引导方式,这 5 种方式对应的中英 文含义见表 2-2。 表 2-2 CentOS 6.6 的 5 种引导方式 序号 CentOS 6.6 的引导方式 解释说明 1 Install or upgrade an existing system 安装新系统或升级已经存在的系统 2 Install system with basic video driver 安装带有基本视频驱动程序的系统 3 Rescue installed system 修复已经安装的系统(故障修复) 4 Boot from local drive 从本地驱动器引导系统 5 Memory test 内存测试 其中,第一种(新服务器安装或已有服务器升级)和第三种(系统故障恢复)引导 方式比较有用,其他几个选项用途不是很大,可以忽略。 此处选择第一项“Install or upgrade an existing system”,即默认选项,然后按 Enter (回车)键进入图形安装界面。咦,为什么不是文本方式呢?这是因为 CentOS 6 无法用 文本模式完全定制化安装,即在文本模式下无法定制磁盘分区,这是 CentOS 6 与之前 跟老男孩学 Linux 运维:Web 集群实战34 各版本的不同之处。因此,在安装 CentOS 6 的系统时,通常都选择图形安装。 2. 检查安装光盘介质 确定引导方式后,进入如图 2-3 所示的界面,如果需要检查光盘介质,选择“OK”, 否则按 Tab 键选择“Skip”,这里直接按 Tab 键选择“Skip”,然后按 Enter 键继续。 图 2-3 检查安装光盘介质图 提示: 检查光盘介质所用的时间一般都比较长,而且必要性不大。因此,若能保证 光盘是正常的,建议略过检查。 去机房之前可准备多套系统光盘,防止因光盘介质有问题,影响系统安装。 当然,还可以通过 U 盘或网络方式安装系统,这样就不需要光盘了。如果是 虚拟机安装系统就更不需要检测介质了,如果介质有问题,那就是 ISO 文件 的问题,重新下载就好了。 3. 进入安装下一步界面 忽略光盘介质检查后,进入如图 2-4 所示的界面。要特别注意,如果采用的是 VMware Workstation 创建的虚拟机,其安装界面有可能会显示不完整,例如:可能看 不见界面里的“ Next”按键。此时,可通过按 VMware 窗口的最大化按钮(如图 2-5 所 示),使界面最大化来解决。然后单击“Next”继续。 图 2-4 调整 VMware 显示最大化后的安装界面图 如果不调整 VMware 最大化显示,则可能看不到这个 Next 键 第 2 章 企业级 CentOS 6.6 操作系统安装 35 图 2-5 调整 VMware 最大化显示安装界面 提示: Ctrl+Alt 快捷键用于从虚拟机内向虚拟机外切换,系统也会提示这个快捷 键的,如果已经进入窗口,需要按 VMware 窗口的最大化按钮就要使用 Ctrl+Alt 快捷键退出来再单击。 4. 安装过程语言选择 进入图 2-6 所示的语言选择界面后,可对安装过程语言进行选择,这里保留默认选 项“English”,单击“Next”继续。 图 2-6 安装过程语言选择界面图 提示: 此处仅仅是安装过程中的语言显示,不建议选中文,要学会多亲近英文,至 少不要逃避,只有这样才能学好 Linux 运维。 5. 选择键盘布局 进入如图 2-7 所示的选择键盘布局界面后,选择保留默认选项“ U.S.English”, 单 击“Next”继续。 6. 选择合适的物理设备 进入如图 2-8 所示的选择合适的物理设备界面后,会看到两个选项。如果是普通的 服务器,默认选择第一个“ Basic Storage Devices”即可,第二个是用于特殊存储设备 的,例如 SANs(ISCSI)等。选项的含义,英文已经解释得非常详细了,不再赘述。这 里保留默认选项“Basic Storage Devices”,单击“Next”继续。 跟老男孩学 Linux 运维:Web 集群实战36 图 2-7 选择键盘布局图 图 2-8 选择合适的物理设备 7. 初始化硬盘提示 进入如图 2-9 所示的初始化硬盘警告界面后,会看到相应的警告信息,单击“ Yes, discard any data”继续。 提示: 这一步会格式化服务器的硬盘,即删除硬盘内的所有数据,要确认物理硬盘 内的数据是否有用。如果是虚拟机就是格式化虚拟磁盘(不会丢失虚拟机所 在的宿主机的数据)。 8. 初始化主机名及配置网络 现在,进入如图 2-10 所示的“初始化主机名及配置网络”界面。 图 2-9 初始化硬盘警告 图 2-10 初始化主机名及配置网络 第 2 章 企业级 CentOS 6.6 操作系统安装 37 (1)为系统设置主机名 在图 2-10 中,左上角的“ Hostname”表示配置主机名。在右边对应的选框里,会 有默认的 localhost.localdomain 主机名,删除之,设置自己的主机名,这里用 www 作为 主机名。 提示: 不建议保留默认 Hostname 主机名,设置一个规范的主机名,会显得更专 业,这是运维的原则,而且也可避免对后面业务服务的安装配置产生影响。 自定义主机名时可以使用普通的字符串(例如 www),或者完整的FQDN 名 (例如www.etiantian.org)。最好由简单字母或字母带数字字符(以字母开 头,不要只用数字,可带下划线等)组成,不建议用特殊字符。 (2)配置网卡及连接网络(可选) 单击图 2-10 左下角的“ Conf igure Network”按钮,会弹出一个网络连接(Network connections)的窗口,在弹出的窗口中选择“ System eth0”,然后单击右边的“ Edit” 按钮,此时会弹出一个“Editing System eth0”的窗口,在该窗口勾选“Connect automatically”复选框,设置 eth0 网卡自动连接,并选择“ IPv4 Settings”,然后根据自 己的网络情况配置对应的 IP 地址、子网掩码、网关和 DNS。配置好后,如果希望保存, 可以单击“Apply”使配置生效,完整的配置过程如图 2-11 所示。 提示: 介绍这一步骤只是为了让读者先对网卡及网络配置方法有一个大概了解,这 里先忽略,保留到系统安装后再来配置。 图 2-11 配置网卡及连接网络(可选) 跟老男孩学 Linux 运维:Web 集群实战38 9. 系统时钟及时区设置 在如图 2-12 所示的“系统时钟及时区设置”界面中,选择“ Asia/Shanghai”,然后 取消“System clock uses UTC”前的对勾,最后选择“Next”继续。 图 2-12 系统时钟及时区设置 提示: 这里的时区要注意一下。不同的时区会有不一样的日期 / 时间显示。这可能会 造成业务数据的时间不一致,所以,要为系统选择正确的时区才行,建议选择 “亚洲 / 上海”。要特别注意的是,复选框“System clock uses UTC”与所 谓的夏令时有关,不必选择,不然可能会对时区造成影响,导致系统显示时间 与本地时间不同,当然这些都是可以在安装完成以后再根据需要修改的。 10. 设置超级用户 root 口令 在如图 2-13 所示的界面中,输入两次 root 用户的口令,然后单击右下角“Next”继续。 提示: 如果是生产环境,root 口令要尽量复杂。比如,设置 8 位以上包含数字、字 母大小写,甚至是特殊字符的口令。在企业运维工作中,安全是至关重要的 一环,要从每一件小事做起。 如果密码过于简单会出现如图 2-14 所示的提示。可以用“ Use Anyway”强行设置 简单的密码,但不推荐,如果是学习环境,还是建议使用简单密码,否则经常忘记密码 也是一件不舒服的事情,很多新手都会遇到这个问题。 图 2-13 root 用户口令设置 图 2-14 密码过于简单的提示 第 2 章 企业级 CentOS 6.6 操作系统安装 39 2.3.2 磁盘分区类型选择与磁盘分区配置过程 1. 选择系统安装磁盘空间类型 经过上一节的步骤后,会进入如图 2-15 所示的磁盘分区方式选择界面。 图 2-15 系统磁盘空间选择 CentOS 6.6 磁盘有如下五种分区方式。 ‰‰ Use All Space:删除当前磁盘内的所有分区,包括其他系统创建的分区。 ‰‰ Replace Existing Linux System(s):删除当前磁盘内的所有 Linux 分区,而不删 除其他系统创建的分区,这是默认的选项。 ‰‰ Shrink Current System:利用(挤压)分区上存在的所有空闲空间,创建系统默认 的分区布局。 ‰‰ Use Free Space:使用未使用的分区空间。 ‰‰ Create Custom Layout:自定义分区方式。 这里选择最后一种分区分式“ Create Custom Layout”,即由管理员自行定制分区, 因为它更灵活。然后单击界面右下角的“Next”继续。 2. 选择“Create Custom Layout”自定义磁盘分区 选择“ Create Custom Layout”后进入的界面如图 2-16 所示,可以看到磁盘总空间 为 8189MB,磁盘设备名为 sda,剩余空间 8189MB,说明还没有进行分区,磁盘的模式 为 VMware,表示是使用 VMware 虚拟机进行安装的。 提示: 图 2-16 所示的界面(自定义的分区布局界面)下面有一排按钮,我们可以 利用这些按钮来执行添加或删除分区等操作。其中 Create 表示新建分区, Edit 表示编辑修改分区,Delete 表示删除分区。具体作用读者可自行尝试。 跟老男孩学 Linux 运维:Web 集群实战40 图 2-16 自定义的分区图 3. 按企业生产标准定制磁盘分区 根据图 2-16 可知,当前的计算机只有一块磁盘,设备名为 sda(如果有多块盘,会显 示 sda、sdb、sdc 等)。选中磁盘 sda 下的“ free 8189”这一行,如图 2-16 所示,然后单 击界面右下角的第一个按钮“Create”,开始创建磁盘分区,进入如图 2-17 所示的界面。 在图 2-17 中,默认的选项为“Standard Partition”,意思是创建标准分区,也是我们 要选择的项。其他的例如“ RAID Partition”的意思是 RAID(磁盘冗余阵列)分区。在 企业中 RAID 功能一般是通过物理硬件来完成的,硬件 RAID 卡的效率更高,操作系统 的 RAID 功能性能差,冗余也受限于操作系统,因此企业很少用。而 LVM 的意思是逻 辑卷管理,它可以对设置好的分区大小进行动态调整,其前提是所有的分区格式都需要 事先做成 LVM 格式,即分区标号为 8e。企业环境的分区一般都是按需求事先规划好的, 极少有后续调整的需求,且 LVM 的性能与标准分区及硬件 RAID 卡相比还是有一定的 差距的,因此,如果没有特殊需求,不建议选择 LVM 和操作系统软 RAID 功能分区。 选择创建标准分区(Standard Partition)后,单击界面右下角的“ Create”按钮,得 到如图 2-18 所示的界面。 图 2-17 创建分区界面 图 2-18 添加分区界面图 第 2 章 企业级 CentOS 6.6 操作系统安装 41 Linux 系统磁盘分区知识简介 在分区之前,需要先简单介绍一下磁盘分区相关知识,便于大家更好地理解学习。 1)磁盘在使用前一般要先分区。 2)磁盘分区有主分区、扩展分区和逻辑分区之分。一块磁盘最多可以有 4 个主分 区,其中一个主分区的位置可以用一个扩展分区替换,在这个扩展分区内可以划分多个 逻辑分区。 3)如果规划的分区数量超过 4 个,则分区组合为 3primary+1extend 或 2p+1e 或 1p+1e。 4)一块磁盘最多只能有一个扩展分区,扩展分区不能直接使用,必须在扩展分区 上划分逻辑分区,然后格式化(创建文件系统),之后才能存取数据或安装系统。 磁盘分区命名及编号方式 (1)以设备名命名 在 Linux 系统中,磁盘设备对应于系统中的特殊文件,这些特殊文件放在“ /dev” 目录中,不同的设备对应的设备名称如下: ‰ 系统的第一块 IDE 接口的硬盘称为 /dev/hda。 ‰ 系统的第二块 IDE 接口的硬盘称为 /dev/hdb。 ‰ 系统的第一块 SCSI 接口的硬盘称为 /dev/sda。 ‰ 系统的第二块 SCSI 接口的硬盘称为 /dev/sdb。 (2)使用数字编号 为了表示不同的分区,通常会用数字进行编号,比如: ‰ 系统的第一块 IDE 接口硬盘的第 1 个分区称为 /dev/hda1。 ‰ 系统的第一块 IDE 接口硬盘的第 5 个分区称为 /dev/hda5。 ‰ 系统的第二块 SCSI 接口硬盘的第 1 个分区称为 /dev/sdb1。 ‰ 系统的第二块 SCSI 接口硬盘的第 5 个分区称为 /dev/sdb5。 需要注意的是,在对分区编号时,数字 1 ~ 4 只能留给主分区或扩展分区使用,逻 辑分区(在扩展分区基础上建立)编号只能从 5 开始。 在对 Linux 系统设置了分区之后,还要在分区上创建文件系统才能安装系统,这个 在安装时由系统自行完成创建。 Linux 系统对分区的基本要求 1)最少要有一个根(/)分区,用来存放系统文件及程序。其大小至少在 5GB 以上。 2)要有一个 swap(交换)分区,它的作用相当于 Windows 里的虚拟内存,swap 分 区的大小一般为物理内存容量的 1.5 倍 (内存 <8GB)。但当系统物理内存大于 8GB 时, 则 swap 分区配置 8 ~ 16GB 即可,太大无用,浪费磁盘空间。 swap 分区不是必需的, 但是大多数情况应该设置,个别企业的数据库应用场景不分 swap。 跟老男孩学 Linux 运维:Web 集群实战42 3)/boot 分区,这是 Linux 系统的引导分区,用于存放系统引导文件,如 Linux 内 核等。所有文件的总大小一般只有几十 MB,并且以后也不会增大太多。因此,该分区 可以设置为 100 ~ 200MB,这个分区也不是必需的。 企业生产场景中 Linux 系统的分区方案 常规的分区方案如下。 方案 1:针对网站集群架构中的某个节点服务器分区,该服务器上的数据有多份(其 他节点也有)且数据不太重要,建议的分区方案如下。 /boot:设置为 100 ~ 200MB。 swap:物理内存的 1.5 倍,当内存大于或等于 8GB 时,配置为 8 ~ 16GB 即可。 / :剩余硬盘空间大小( /usr、/home、/var 等分区和“ /”共用一个分区,这相当于 在 Windows 系统中只有一个 C 盘,所有数据和系统文件都放在一起)。 方案 2:针对数据库及存储角色的服务器分区,该服务器的业务有大量重要的数据, 建议分区方案如下。 /boot:设置为 100 ~ 200MB。 /:大小设置为 50 ~ 200GB,只存放系统相关文件,网站等的业务数据不放在这里。 swap:物理内存的 1.5 倍,当内存大于或等于 8GB 时,配置为 8 ~ 16GB 即可。 /data :剩余硬盘空间大小,放数据库及存储服务等重要数据。当然, data 的名称也 可以换成别的名字。 本方案其实就是把重要数据单独分区,便于备份和管理。 方案 3:针对大网站或门户级别企业的服务器进行分区。 /boot:大小设置为 100MB。 swap:物理内存的 1.5 倍,当内存大于或等于 8GB 时,配置为 8 ~ 16GB 即可。 /:大小设置为 50 ~ 200GB,只存放系统相关文件,网站等的业务数据不存放在这里。 剩余的磁盘空间保留,不再进行分区,将来分配给不同的使用部门,由他们自己根 据需求再分! 此种分区方案更灵活,比较适合业务线比较多、需求不确定的大企业使用。 对于分区,有网友还给出了如下方案: /boot、swap、/、/usr、/home、/var 这种分区方案是典型的没有主见的分区方式,有太多的额外分区( /usr、/home、/ var),有没有必要且不说,管理起来也很麻烦,这与一个家庭就 2 ~ 3 口人,买了 100 平方的房子,非要隔成几个房间同一道理,老男孩极不推荐这样的分区方案。 如果说怕某个分区满了会影响系统运行,这样的分区想法是错的。第一,硬盘空间 是固定的,分区多了,比只分一个区肯定更容易满;第二,在企业应用里,业务不可用 和服务器宕机的危害几乎差不多,因此,分区少一些,然后对所有分区进行监控报警是 目前多数规范企业的选择。 第 2 章 企业级 CentOS 6.6 操作系统安装 43 本文采用常规的服务器分区方案,即分为 /boot、swap、/ 三个分区,注意分区的先 后顺序。 关于磁盘分区就介绍这么多。下面继续介绍安 装系统的操作。 1)创建第一个分区,/boot 分区 在“ Add Partition”(添加分区)的界面中(如 图 2-18 所示),需要分别手工输入分区挂载点目录、 选定文件系统类型、对哪个磁盘操作(如果服务器 有多个磁盘则要特别注意),以及指定创建的分区 大小。操作完成后的界面如图 2-19 所示。之后单 击“OK”继续。 界面选项说明如下。 1)Mount Point 的意思是挂载点,这是 Linux 下访问磁盘分区的入口,即如果要往 /boot 分区(/dev/sda1)写入数据,就必须通过 /boot 入口来写入,这一点与 Windows 是 不同的。 2)File System Type 的意思是文件系统类型,就像 Windows 的 fat32/ntfs 一样,磁 盘分区只有在设置了文件系统类型格式化并挂载上挂载点后,分区才能存放数据。目前 有如下一些文件系统类型。 ‰ ext2/ext3/ext4:适合 Linux 的文件系统类型。由于 ext3 文件系统多了日志记录功 能,因此系统恢复起来会更快速,ext4 是 ext3 的升级,效率更加高,因此建议 使用默认的 ext4 类型,而不要使用 ext2/ext3。 ‰ physical volume(LVM):一种弹性调整文件系统大小的机制,可以让文件系统变 大或变小,而不改变原有文件数据的内容,功能不错,但性能会下降。 ‰ software RAID:利用 Linux 系统的特性,用软件仿真出磁盘阵列的功能。 ‰ swap :内存交换空间。由于 swap 并不会使用到目录树的挂载,因此用 swap 就 不需要指定挂载点。 ‰ vfat :同时被 Linux 与 Windows 所支持的文件系统类型。如果主机硬盘上同时存 在 Windows 与 Linux 两种操作系统,有数据交换需求,可以使用该文件系统。 ‰ xfs :一个文件系统类型,在 CentOS 7 中将被作为默认的文件系统类型而替换 ext4。 3)Force to be a primary partition 的意思是强制主分区,是可选项。由于所有的分 区未过 4 个,因此可勾选该项。 图 2-19 /boot 分区配置过程图 跟老男孩学 Linux 运维:Web 集群实战44 创建 /boot 分区后的结果如图 2-20 所示。 图 2-20 创建 /boot 分区后的结果图 2)创建 swap 交换分区 在图 2-20 中,选中磁盘 sda 下面的“ free 7991”这一行,然后单击右下角第一个按 钮“ Create”,再次进入“ Add Partition”操作界面,创建 swap 交换分区,同创建 /boot 分区一样,swap 分区的设置也比较简单,整个配置内容和过程如图 2-21 和图 2-22 所示。 图 2-21 添加分区界面 图 2-22 swap 分区配置过程图 swap 分区配置说明: 1)swap 分区不配置 Mount Point 挂载点,swap 不需要人为访问,交给系统自动处理。 2)swap 分区的大小一般为物理内存容量的 1.5 倍 (内 存 <8GB)。但当系统物理内 存大于 8GB 时,swap 分区配置 8 ~ 16GB 即可,太大无用,还浪费磁盘空间。 3)如果是学习环境,为了节省空间,swap 设置得小一点也没有问题。 创建 swap 分区后的结果如图 2-23 所示。 有关交换分区 swap 的说明: Linux 系统分区时,常规的分区方案为 /、/boot、swap,其中 swap 不是挂载点(/、 /boot 都是挂载点),而是分区类型,类似 ext4 的一个文件系统,如果在挂载点输入框处 输入“/swap”创建 swap 分区就错了。 第 2 章 企业级 CentOS 6.6 操作系统安装 45 图 2-23 创建 /boot 和 swap 分区后的结果图 3)创建 /(根) 分 区 在图 2-23 中,选中磁盘 sda 下面的“ free 6967”这一行,然后单击右下角第一个按 钮“ Create”,再次进入“ Add Partition”操作界面,创建 /(根) 分区,同创建 /boot 分 区一样,可轻松完成 /(根)分区的设置,整个操作过程如图 2-24 和图 2-25 所示。 图 2-24 添加分区图 图 2-25 /(根)分区配置图 根(/)分区配置 由于根分区是最后一个分区,因此把剩余空间都给了它,对应的选项为“ Fill to maximum allowable size”。这时,原来的“ Size(MB)”右边的数字框内设置的数字就不 起作用了。 创建 /(根)分区后的结果如图 2-26 所示。 创建完所有的分区后,单击界面右下角的“ Next”继续。此时系统需要对配置的分 区格式化,而且会出现格式化警告窗口,单击“ Format”(格式化)继续,这个过程中还 可能提示写入分区表,在写入配置到磁盘的窗口,单击“ write changes to disk”继续。 整个过程如图 2-27 所示。 跟老男孩学 Linux 运维:Web 集群实战46 图 2-26 创建 /boot、swap 和 /(根)分区后的总图 图 2-27 格式化警告和写入磁盘的图 提示: 这里采用的是生产环境中集群节点下的节点服务器的分区方式,即系统坏掉 后硬盘数据不需要保留。此分区方式也适合大多数生产环境的服务器,如果 是数据库及存储等有重要数据的特殊业务服务,一般会单独划分存放数据的 分区,如 /data。 除了 /boot、swap 和 / 三个分区外,还可以加 /usr、/home、/var 等分区, 具体要根据服务器的需求来决定,一般情况下,只配置这三个分区就足够了。 这种分区方案最大优点就是简单,使用方便,可批量安装部署,而且不会存 在有的分区满了,有的分区还剩余很多空间又不能被利用的情况(LVM 的情 况在这里先不阐述)。 该分区方案的缺点是如果系统坏了,重新安装系统时,数据都在 /(根)分区, 导致数据备份很麻烦,如果设置了 /usr、/home、/var 等分区,即使系统出 了故障,也可以直接在 /(根)分区安装系统,这样并不会破坏其他分区的数 据。当然,刚才也说了,如果是不存在备份数据的集群的节点,那采用这种 分区方案是很明智的,不需要特别担心某个分区暴满的问题。 第 2 章 企业级 CentOS 6.6 操作系统安装 47 2.3.3 CentOS 6.6 系统安装包组的选择与配置过程 1. 启动引导设备的配置 分区格式化后,会进入如图 2-28 所示的界面,系统默认使用 GRUB 作为启动加载 器,引导程序默认在 MBR 下,然后按“Next”键继续。 图 2-28 Boot Loader 配置 提示: 如果想防止别人接触到计算机破解 root 密码,以及执行一些特殊操作,可 以勾选图中“ Use a boot loader password”,为GRUB 引导菜单设置密 码,此功能在安装系统后也可以设置,后文有讲解。 2. 系统安装类型选择及自定义额外包组 现在进入如图 2-29 所示的界面。在该图中,上半部分是系统定制的各种安装类型 选项,默认是“Desktop”,这里选择“Minimal”,即最小化安装,下半部分是在确定系 统安装类型后,想额外添加的软件包组选择项,这里选择“ Customize now”,即立即自 定义。 图 2-29 系统安装包类型选择及自定义额外包组 选择自定义额外的包组界面后,首先需要选择左边大的分类,然后再勾选右边对应 跟老男孩学 Linux 运维:Web 集群实战48 的包组(注意,使用默认的包组内容即可)。选择结果如图 2-30 和图 2-31 所示。 图 2-30 自定义安装包组选择界面 1 图 2-31 自定义安装包组选择界面 2 提示: 根据经验,选择安装包时应该采用最小化原则,即不需要的或不确定是否需 要的就不安装,这样可以最大程度上确保系统安全。 如果安装过程中落下了部分包组,或者是其他伙伴安装时没选,在安装完系 统后可以以如下方式补上未安装的包组: 例如:补充安装 "Compatibility libraries"、"Base"、"Development tools"3 个包组的命令为: yum groupinstall "Compatibility libraries" "Base" "Development tools" 补充安装 "debugging Tools"、"Dial-up Networking Support"2 个包组 的命令为: yum groupinstall "debugging Tools" "Dial-up Networking Support" 可以通过“yum groupinfo 包组名”查看具体安装的包组组件。 下面是安装了 CentOS 6.6 后,登录系统时查看到的选包的情况: yum grouplist: Installed Groups: Base Compatibility libraries Debugging Tools 第 2 章 企业级 CentOS 6.6 操作系统安装 49 Development tools E-mail server Graphical Administration Tools Hardware monitoring utilities Legacy UNIX compatibility Networking Tools Performance Tools Perl Support Scientific support Security Tools 可以看到,除了我们选择的以外,系统还默认安装了一些软件包组。 3. 万事俱备,开始安装系统 安装系统的界面如图 2-32 和图 2-33 所示。 图 2-32 安装一开始过程图 图 2-33 安装一半以后的过程图 提示: 在安装过程中,会显示总共需要安装包的数量及当前已安装完的包的数量, 还会显示当前安装包的包名和大小,以及总的安装进度等信息。 4. 安装结束 系统安装结束后,出现的界面如图 2-34 所示。此时单击“ Reboot”键即可重启 系统。 跟老男孩学 Linux 运维:Web 集群实战50 图 2-34 安装过程结束 2.4 系统安装后的基本配置 2.4.1 重启系统过程中的引导过程介绍 系统安装结束后,取出安装时使用的 DVD 系统盘(如果是虚拟机镜像文件,此时 无法取出),按“ Reboot”键重新启动系统。首先进入如图 2-35 所示的 CentOS 开机引 导界面。 图 2-35 CentOS 开机引导界面 此时如果按下键盘的 Esc 键,可以像 CentOS 5 一样查看系统引导过程的细节,如 图 2-36 所示。 图 2-36 系统引导过程细节界面 第 2 章 企业级 CentOS 6.6 操作系统安装 51 系统引导及程序服务加载完毕后,会出现登录界面,如图 2-37 所示。 图 2-37 系统登录界面 提示: 登录界面中的英文内容为 CentOS 的版本及内核的当前版本。 Linux 内核版本号为: [root@www ~ ]# uname -r 2.6.32-504.el6.x86_64 这里补充介绍一下各数字和字母代表的含义:第一个数字 2 表示主版本号, 有结构性变化才更改;接下来的数字 6 表示次版本号,新增功能时才变化, 一般奇数表示测试版,偶数表示开发版;接下来的 32 表示对次版本的修订 次数或补丁包数;504 代表编译的次数,每次编译可对少数程序优化或修改; e16 用来表示版本的特殊信息,有较大的随意性;el 代表企业版 Linux;pp 代表测试版;fc 代表 fedora core;rc 代表候选版本;x86_64 表示 64 位。 在图 2-37 中显示的 www 为主机名,login 为登录提示。 2.4.2 登录系统 现在,把光标定位到“ login:”提示后面,然后输入 root 超级用户名,按 Enter 键, 并按提示输入密码(注意密码是不显示的),过程如图 2-38 所示。 登录到系统后的界面如图 2-39 所示。 图 2-38 登录过程图 图 2-39 登录系统后的界面图 提示: “ [root@www ~ ]#”里的 # 号为超级管理员 root 输入命令的提示符,在 # 号后面可以输入命令进行系统管理。 在企业的工作环境中,都是在这种提示符下输入命令进行管理的,而不是像 Windows 系统那样采用图形界面进行管理,这一点对于从 Windows 转过来 的读者尤为重要。命令管理的初期会有些麻烦,让人不适应,等熟练以后就 会发现命令管理更直观、更简洁,效率也更高,这也是 Linux 的强大之处。 跟老男孩学 Linux 运维:Web 集群实战52 2.4.3 配置网卡和设置网络联网 在 2.3.1 节的第 8 步“初始化主机名及配置网络”中,已经讲解过如何配置网卡了,只 不过当时没有具体选择,现在可以配置了,如果读者已经在前面配置过了,这里可以忽略。 1. 通过 setup 命令设置网卡 1)在系统命令行下输入 setup 命令,然后按回车键,如图 2-40 所示。 2)通过按 tab 键及对应的键依次选择进入如下几个窗口,为了节省篇幅,老男孩把 几个操作进行了合并,并进行了排序,如图 2-41 所示。 图 2-40 配置网卡图 图 2-41 配置网卡过程图 提示: 整个配置过程依次为:执行 setup 命令→ Network configuration → Device configuration → eth0, 配 置 完 依 次 单 击 OK → Save → Save&Quit → Quit,这样就退出到命令行界面了。 该配置实质上就是修改网卡的配置文件 /etc/sysconfig/network-scripts/ ifcfg-eth0 内容。 2. VMware 虚拟机系统下的设置方法 1)虚拟机 NAT 模式下的网卡设置 如果虚拟机的宿主机是拨号上网的,则虚拟机的网卡最好使用 NAT 模式,VMware 软件设置虚拟网卡为 NAT 模式的配置如图 2-42 所示。 对应的网卡配置如图 2-43 所示。 提示:  ‰‰ NAT 模式下要对 Use DHCP 的位置进行设置。 ‰‰ 无需配置 IP、子网掩码和网关,因为 DHCP 会自动分配。 ‰‰ 需要配置本地主 DNS 和辅 DNS 解析地址。 第 2 章 企业级 CentOS 6.6 操作系统安装 53 图 2-42 VMware 软件设置虚拟网卡为 NAT 模式 图 2-43 图形网卡配置说明 配置完成后,依次单击 OK → Save → Save&Quit → Quit,即可退出到命令行界面。 然后依次执行如下命令: (1)执行命令 ifup eth0,启动网卡。 (2)执行命令 ifconf ig eth0,查看获取的 IP。 (3)执行命令 ping baidu.com,检测网络是否通畅。 详细的操作过程如图 2-44 所示。 图 2-44 启动网卡联网测试过程图 跟老男孩学 Linux 运维:Web 集群实战54 此时就可以用 SSH 工具(例如 SecureCRT、xshell 等 SSH 工具)连接系统了。 2)虚拟机桥接(bridged)模式下的网卡设置 如果虚拟机的宿主机在局域网内,是通过路由器上网的,则虚拟机的网卡除了可以 使用 NAT 模式外,还可以使用桥接模式。VMware 软件设置虚拟网卡为桥接模式的配置 如图 2-45 所示。 图 2-45 VMware 软件设置虚拟网卡为桥接模式 对应的网卡配置如图 2-46 所示。 图 2-46 网络配置图 提示:  ‰‰ 在桥接模式下 Use DHCP 的位置可以取消,当然也可以利用 DHCP 自动分配, 这样更简单。 ‰‰ 如果考虑自己设置固定 IP,则需配置 IP、子网掩码、网关,此时禁止 DHCP 分配。 ‰‰ 需要配置本地主 DNS 和辅 DNS 解析地址。 第 2 章 企业级 CentOS 6.6 操作系统安装 55 配置完成后,与 NAT 配置一样,依次单击 OK → Save → Save&Quit → Quit,这样 就退出到命令行界面了。 然后依次执行如下命令: (1)执行命令 ifup eth0,启动网卡。 (2)执行命令 ifconf ig eth0,查看设置或获取的 IP。 (3)执行命令 ping baidu.com,检测网络是否通畅。 详细操作过程如图 2-47 所示。 图 2-47 启动网卡联网测试过程图 3. 物理服务器系统的网络设置方法 物理服务器系统的网络设置同虚拟机桥接网卡模式完全一样,因此,这里就不赘述 了,读者可以参考虚拟机桥接网卡模式的配置过程。 4. 系统无法联网的故障排除方法 1)首先要确认系统的安装方式是虚拟机还是物理服务器。 如果是虚拟机,同时还要考虑虚拟机所在的宿主机联网方式,如果宿主机是采用 直接拨号方式上网,虚拟网卡的模式就选 NAT 模式,如果宿主机采用路由器局域网方 式上网,那么虚拟机的网卡选择 bridged 和 NAT 两种模式都可以。如果是物理服务器的 话,直接配置就可以了。参考虚拟机桥接的配置。 2)如果系统安装方式检查无误,仍然不能上网,继续确认网卡实际配置是否正确。 如果虚拟机是 NAT 模式,需要使用 DHCP 自动获取 IP ;如果是虚拟机 bridged 桥 接模式,则需要根据虚拟机所在的宿主机联网方式(可以查看对比)设定 IP、子网掩码 及网关,更方便的方法还是使用 DHCP 获取 IP。不管是采用 bridged 模式还是采用 NAT 模式,最好都手工指定 DNS。 跟老男孩学 Linux 运维:Web 集群实战56 提示: 采用 NAT 模式上网时,要注意宿主机 Windows 的计算机管理、服务和应 用程序对应的 VMware 的 DHCP 和 NAT 服务是否开启(如图2-48 所示)。 图 2-48 宿主机 Windows 的 VMware DHCP 和 NAT 服务 如果是物理服务器,检查 IP、子网掩码、网关和 DNS 等设置是否正确,可与局域 网内其他可上网的机器进行一一对比,或者找网管询问。 3)上面两类问题都排除后,就需要确认网卡的配置文件了。 使用 setup 命令配置网卡的过程实际上就是修改了如下的网卡配置文件,因此,可 以通过查看网卡的配置文件,确认其与想要配置的是否一致。 下面展示了如何查看网卡配置文件,以及网卡配置项的含义。 [root@www ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ç 第一块网卡逻辑设备名,第二块为 eth1,有些系统也会以 em 等   字符标识。 HWADDR=00:0c:29:a5:3f:39 ç 以太网硬件地址,即 MAC 地址,如果是 VMware 克隆的虚拟机   无法启动网卡,可以毫不犹豫地删除此项。 TYPE=Ethernet ç 上网类型,目前基本都是以太网。 UUID=176582f7-d198-4e4f-aab0-34ab10d17247 ç 通用唯一识别码 (Universally Unique Identifier),   如果是 VMware 克隆的虚拟机无法启动网卡,可以去除此项。 ONBOOT=no ç 这个地方要设置为 yes,才能保证下次开机启动时激活网卡设备。 NM_CONTROLLED=yes ç 是否通过 NetworkManager 管理网卡设备。 BOOTPROTO=none ç 启动协议,获取配置方式,有 none|bootp|dhcp 三个选项。 IPADDR=10.0.0.8 ç 这是虚拟机桥接模式,局域网 Linux 服务器的固定 IP。 NETMASK=255.255.255.0 ç 子网掩码,用来规划网络位和主机位,一般为 255.255.255.0。 DNS2=8.8.8.8 ç 第二个 DNS,这里默认会覆盖,以及优先于 /etc/resolv.conf   的配置生效。 GATEWAY=10.0.0.254 ç 局域网上网网关地址。 DNS1=202.106.0.20 ç 主 DNS,这里默认会覆盖,以及优先于 /etc/resolv.conf 的   配置生效 IPV6INIT=no ç 是否支持 IPV6 USERCTL=no 第 2 章 企业级 CentOS 6.6 操作系统安装 57 提示: 更多网卡配置相关知识请执行 less /usr/share/doc/initscripts-*/sysconfig. txt 查看。 无论虚拟机采用的是 NAT 模式还是桥接模式,或者是物理服务器,都要修改网卡 启动项配置,把“ ONBOOT=no”修改为“ ONBOOT=yes”,使得下一次开机时网卡可 以自启动。命令如下: [root@www ~]# sed -i 's#ONBOOT=no#ONBOOT=yes#g' /etc/sysconfig/network- scripts/ifcfg-eth0 [root@www ~]# grep ONBOOT /etc/sysconfig/network-scripts/ifcfg-eth0 ONBOOT=yes 重启网卡的命令如下: [root@www ~]# ifdown eth0 && ifup eth0 Determining if ip address 10.0.0.7 is already in use for device eth0... 提示: 尽量不要使用 /etc/init.d/network restart 重启网卡,因为这条命令会影响 所有的网卡。 查看 IP 设置的命令如下: [root@www ~]# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:0C:29:CC:60:B2 inet addr:10.0.0.7 Bcast:10.0.0.255 Mask:255.255.255.0 ... 省略若干 查看默认网关设置的命令如下: [root@www ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 0.0.0.0 10.0.0.254 0.0.0.0 UG 0 0 0 eth0 查看 DNS 设置的命令如下: [root@www ~]# cat /etc/resolv.conf ; generated by /sbin/dhclient-script search localdomain nameserver 8.8.8.8 nameserver 202.106.0.20 如果以上配置都正确,一般来说上网就没有问题了。 跟老男孩学 Linux 运维:Web 集群实战58 提示: 老男孩在使用 CentOS 6.6 时,发现在 /etc/sysconfig/network-scripts/ ifcfg-eth0 网卡文件配置的 DNS 设置会覆盖 /etc/resolv.conf 中的设置, 即使 /etc/sysconfig/network-scripts/ifcfg-eth0 网卡文件不设置 DNS, 只在 /etc/resolv.conf 中配置 DNS 设置,执行 /etc/init.d/network restart 重 启 网 卡 命 令 仍 会 清 除 /etc/resolv.conf 的 DNS 设 置。 这 点 请 读 者 注 意,建议在 /etc/sysconfig/network-scripts/ifcfg-eth0 网卡文件中配置 DNS,而不是在 /etc/resolv.conf 中设置,以免遇到上网无法解析的问题。 2.4.4 更新系统,打补丁到最新 与 Windows 打补丁类似,Linux 也可以定期更新系统软件。 Linux 下安装软件的优秀工具叫做yum,它是CentOS Linux 下最好用的包管理 器和安装软件包的工具,用起来很方便。Linux 的二进制软件包一般是 rpm 包,类似 Windows 下的 exe 程序。 通过 yum 工具可以很方便地安装 rpm 软件包,默认获取 rpm 包的软件配置是从国 外 CentOS 官方源及其镜像地址下载的。因此,通过 yum 工具安装软件,速度会比较 慢,因此需要把默认获取 rpm 包的地址改成国内的 yum 源地址。 CentOS 安装完毕后,首先应该修改更新源,并升级到最新的系统。修改更新 yum 源的命令如下: CentOS 6 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.ori wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/ CentOS 6-Base-163.repo 提示: 老男孩在写书过程中,刚开始选择了 aliyun 上的 yum 源,但遇到了更新错 误,后来改成网易的就好了。大家遇到问题时,不妨更换 yum 源。下面为 阿里云的 yum 源配置参考:http://mirrors.aliyun.com/help/centos。 然后,使用如下命令将系统更新到最新状态: [root@www ~]# ll /etc/pki/rpm-gpg/ 总用量 16 -rw-r--r--. 1 root root 1706 10 月 23 2014 RPM-GPG-KEY-CentOS-6 -rw-r--r--. 1 root root 1730 10 月 23 2014 RPM-GPG-KEY-CentOS-Debug-6 -rw-r--r--. 1 root root 1730 10 月 23 2014 RPM-GPG-KEY-CentOS-Security-6 -rw-r--r--. 1 root root 1734 10 月 23 2014 RPM-GPG-KEY-CentOS-Testing-6 [root@www ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY* [root@www ~]# yum update -y 第 2 章 企业级 CentOS 6.6 操作系统安装 59 提示: 也可以使用 yum upgrade -y,此时大约会有 127MB 大小的更新包,这个 更新是可选操作。 一般在首次安装系统时可以执行 yum update -y,如果是在生产线已经应 用的业务服务器系统中就不要轻易更新了,以免导致业务服务异常。若遇 到了特殊的漏洞(例如2014 年 4 月发生的 openssl 心脏出血及 2014 年 10 月发生的 bash 漏洞,可以单独对指定的问题软件进行升级处理。yum upgrade 与 yum update 的作用和区别很小,想了解的读者可执行 man yum 进行查看。 2.4.5 额外安装一些有用的软件包 按照上文选择最小化安装时,会有一些有用的工具包没有安装进去,此时就可以安 装这些软件工具了,命令如下: [root@www ~]#yum install tree telnet dos2unix sysstat lrzsz nc nmap -y 另外,如果在安装时落下了某些需要的软件包组,可以执行如下命令来安装。 [root@www ~]#yum grouplist <== 查看所有包组名称,包括已安装的和未安装的。 [root@www ~]#yum groupinstall "Development Tools" <== 指定包组名安装,注意要带双引号。 提示: yum grouplist 用于查看包组列表。 到此为止,整个 CentOS 6.6 的安装就告一段落了,大家在用虚拟机学习时可以保留 这个模板机的配置,然后每次克隆新的虚拟机(推荐使用链接克隆节省空间)用来学习, 当然,也可以用快照的方式来设定及回滚操作过的设置。 2.5 本章重点回顾 1)安装 Linux 系统前,要事先规划好如何分区,做好安装包选择。 2)Linux 系统的分区知识及企业环境不同业务场景及服务器角色对应的分区方案。 3)用练习机安装时可设置 /、/boot、swap 三个分区,这也是工作中常用的分区方法。 如果是在工作环境中,对于数据库及存储的服务器还可以再分出一个 /data 分区。 门户网站一般的分区方案:假设服务器内存为 16GB,硬盘为 1TB。 /boot 分区:100 ~ 200MB swap 分区:物理内存的 1.5 ~ 2 倍,如果内存大于 16GB,可以配置为 8 ~ 16GB。 / 分区:80 ~ 200GB 跟老男孩学 Linux 运维:Web 集群实战60 剩余空间不分,保留给使用的人根据业务中的具体问题进行划分。 4)若要调整开机启动设备的顺序,必须要重新启动并进入 BIOS 进行调整。 5)安装 CentOS 6.6 时使用的是图形界面,而不是文本界面。 6)安装过程中进入分区后,请以“自定义的分区结构”来处理自己规划的分区方式。 7)一般要求 swap 应该是 1.5 ~ 2 倍的物理内存大小。即使没有 swap,依旧能够安 装和运行 Linux 操作系统。 8)CentOS 5.x-6.x 的引导程序为 grub,最好选择安装在 MBR 中。 9)安装软件包组的选择是关键,不能太多也不能太少。 10)若连不上 Internet,可以尝试查看网卡是否启动,上网模式是否正确,以及 IP、 网关、DNS 等的设置是否正确。 2.6 本章知识相关考试题 1)32 位和 64 位系统的区别是什么? 2)请描述 Linux 分区的知识(包括设备名、主分区、扩展分区、文件系统类型等)。 3)什么是挂载点,挂载点的作用是什么? 4)企业场景下如何针对不同的业务服务器规划分区方案? 5)企业场景下 Linux 系统安装如何尽可能地最小化选包? 6)企业场景下若线上运行的系统缺少部分包组,如何补救? 第3 章 CentOS 6.6 连接管理及优化 3.1 远程连接 Linux 系统管理 3.1.1 为什么要远程连接 Linux 系统 很多机构的培训教学,都是直接在虚拟机界面上讲解知识,这就导致非常多的学 生只熟悉如何在虚拟机界面上操作,对实际的工作场景并不熟悉。事实上,在实际的工 作场景中,虚拟机界面或物理服务器本地的窗口都是很少能够接触到的,因为服务器装 完系统后,都要拉到 IDC 机房托管,如果购买了云主机,更碰不到服务器本地显示器 了,此时只能通过远程连接的方式管理 Linux 系统。因此,在装好 Linux 系统后,学习 Linux 运维的第一步应该是配置好客户端软件远程连接 Linux 系统进行管理。 另外,需要指出的是,学习 Linux 的最佳方式就是利用虚拟机来学习,而不是安装 双系统或直接抛弃 Windows 系统改装 Linux 系统。通过模拟生产环境来学习是非常必要 的,而虚拟机环境正是上面几种方式中最接近企业真实运维工作环境的,当然,如果能 有一个真实的物理机放在局域网或机房里就更好了。 3.1.2 远程连接 Linux 的原理 1. SSH 远程连接介绍 当前,在几乎所有的互联网企业环境中,最常用的提供 Linux 远程连接服务的工具 就是 SSH 软件了,SSH 分为 SSH 客户端和 SSH 服务器端两部分。其中,SSH 服务器 端包含的软件程序主要有 openssh 和 openssl,在 Linux 系统中可以用如下方法查询 SSH 跟老男孩学 Linux 运维:Web 集群实战62 服务器端工具的安装情况。 [root@www ~]# rpm -qa openssh openssl openssl-1.0.1e-30.el6.x86_64 openssh-5.3p1-104.el6.x86_64 提示: openssh 是提供 SSH 服务的程序,openssl 是为 SSH 提供连接加密的 程序。 2. SSH 服务器端介绍 启动 Linux 系统时,默认情况下,SSH 服务器端程序就会随系统一起启动,SSH 服 务是一个守护进程(daemon),它在系统后台永久运行并时刻响应所有来自 SSH 客户端 的连接请求。SSH 服务器端的进程名为 sshd,负责实时监听远程 SSH 客户端的连接请 求并进行处理,这些请求一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连 接等。SSH 服务是 Linux 系统优化时需要保留开机自启动的服务之一。 3. SSH 客户端介绍 SSH 客户端最常用的工具就是 Windows 平台上运行的 SecureCRT 了,该工具安装 很简单,按提示一步步操作即可安装完毕,然后打开并注册软件,运行就可以使用了。 除 SecureCRT 客户端软件之外,还有 xshell、putty 及 Linux 下的 SSH 客户端软件。 4. SSH 协议介绍 SSH 服务器端和 SSH 客户端之间的交流都是通过 SSH 协议来实现的。SSH 协议是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group)制定。 在进行数据传输之前,SSH 先通过加密技术对联机数据包进行加密处理,然后再进行数 据传输,这样就可确保传递的数据安全。 SSH 是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以 有效地防止远程管理过程中的信息泄露,在当前的生产环境中,绝大多数企业普遍采 用 SSH 协议服务来代替传统的不安全的远程联机服务软件,如 telnet(23 端口,非加密 的)等。 SSH 协议有两个不兼容的版本,分别是 SSH 1.x 和 SSH 2.x。 OpenSSH 同时支持 SSH 1.x 和 SSH 2.x。用 SSH 2.x 的客户端程序不能连接到 SSH 1.x 的服务程序上,SSH 2.x 比 SSH 1.x 更安全,默认情况下服务器端通过 SSH 2.x 协议 提供服务。 5. SSH 客户端和 SSH 服务器端远程连接原理示意图 图 3-1 为 SSH 客户端和 SSH 服务器端远程连接的形象示意图,表 3-1 为 SSH 服务 远程连接需要设定的五个要素。 第 3 章 CentOS 6.6 连接管理及优化 63 客户 SSH 客户端 (SecureCRT/XShell/Putty) SSH 服务 监听本机 22 端口 Linux 服务器 SSH 服务器端 telnet SSH2 data: hi! what are you doing? data: 198158f4f60fb82a2fa0c8ab68f9b039 - 图 3-1 SSH 通信示意图 表 3-1 SSH 服务远程连接需要设定的五个要素 协议 IP 端口 用户名 密码 SSH(加 密 的) 10.0.0.7 22 oldboy oldboy telnet(未 加 密) 10.0.0.7 23 oldboy oldboy 6. SSH 远程连接故障排查示例 假设远程 Linux 服务器的 IP 地址为 10.0.0.7,现在要进行连接故障排查。 首先,查看远端服务是否畅通,注意:操作命令的机器为客户端计算机命令行,基 本检查思路如下。 (1)利用 ping 命令检查(客户端执行) 具体命令为: ping 10.0.0.7 ç 此命令适合 Linux 和 Windows 这里通过 ping 命令从客户端发包到服务器,看看是否有数据包返回,从而确定 物理链路是不是通畅。打个比喻就是想开车去玩,先确认到目的地的高速路是否修 通了。 提示: 也 可 以 通 过 tracert -d 10.0.0.7(仅适 合 Windows)或 traceroute 10.0.0.7 -n(适合 Linux)命令跟踪路由情况,这两个跟踪路由的命令一般 用于广域网。 (2)利用 telnet 或 nmap 命令检查(客户端执行) 具体命令为: telnet 10.0.0.7 22 跟老男孩学 Linux 运维:Web 集群实战64 或 nmap 10.0.0.7 -p 22 ç 仅适合 Linux,需要安装该软件包后才能使用。 通过该命令可以查看连接服务器端 10.0.0.7 的 22 端口是不是处于开通状态,因为 SSH 服务默认开启的是 22 端口。同样可以比喻为想开车去玩,在高速路通了以后,要 确认旅游景点是否开放。 (3)检查 iptables 等防火墙策略是否阻挡了连接(服务器端执行) 具体命令为: /etc/init.d/iptables status 初学者在学习期间最好关掉 iptables,等日后学习了 iptables 后再开启。打个比喻即 确认是否因为天气原因例如大雾或下雪,高速路遇阻无法通行了。 7. SSH 远程连接故障排查思路逻辑图 为了让读者能更形象地了解 SSH 远程连接故障排查思路,特用图解说明,如图 3-2 所示。 SSH 客户端 开始 检查路通否 打劫呀 SSH服务问题 Linux 服务器 完成 图 3-2 SSH 远程连接故障排查逻辑图 表 3-2 为 SSH 故障排查思路小结。 第 3 章 CentOS 6.6 连接管理及优化 65 表 3-2 SSH 故障排查思路 第 1 步:物理链路是否有问题,比喻为“高速路是否修通?”(客户端执行) ping 10.0.0.7 排查客户端到服务器端线路问题,ping 是常用的网络连通性检查工具(路 通 否) tracert -d 10.0.0.7 路由跟踪命令,也可以检查路是否通畅,-d 是不进行反向解析 第 2 步:SSH 服务是否有问题,比喻为“旅游景点是否开放?”(客户端执行) telnet 10.0.0.7 22 判断 SSH 服务器默认的 22 端口是否打开(客户端执行)。一看端口是否打 开,二看端口是否改变了,三看防火墙等 nmap 10.0.0.7 -p 22 也能达到和 telnet 相同的效果,但 nmap 仅在 Linux 中使用。 第 3 步:是不是防火墙阻挡,即是不是下雪封路,高速路遇阻无法通行了(服务器端查看) /etc/init.d/iptables stop Linux 防火墙 iptables,可能好心办坏事,阻挡了远程连接,学习环境建议 关掉防火墙,生产中按需开启 3.1.3 远程连接 Linux 的客户端工具介绍 在介绍远程连接 Linux 的工具之前,先回忆一下 Windows 下曾经用过的远程连接服 务器的工具,其中包括远程桌面 mstsc、vnc、pcanywhere 等,在 Windows 服务器端这 些工具分别对应不同的服务进程来响应客户端的连接请求。如果读者熟悉这些工具,就 可以发现,这些工具远程连接后都是图形管理的,而 Linux 系统的远程连接工具多数是 用命令行管理的,例如 SecureCRT。 远程连接 Linux 服务器的常见工具有 SecureCRT、Xshell、Putty 等,其中最常用的 是 SecureCRT 和 Xshell。这些客户端工具在 Linux 服务器端对应着相同的 SSH 服务进 程 sshd,即远程连接都使用 SSH 协议,当然它们也支持其他协议,如 telnet。 事实上,远程连接 Linux 服务器也有图形显示工具,例如 vnc 工具。不过,通常只 在特殊的工作场景才会临时用到图形远程管理,例如安装 Oracle 的场景,绝大多数企业 场景都无须桌面管理,而且安装 Oracle 也不是必须要用图形管理,只要能把图形导出来 显示就行了,实现工具有 xmanger、x-win32 等。 3.1.4 如何选择远程连接 Linux 的工具 在互联网企业里,通常都习惯使用命令行管理 Linux,所以选择命令行管理工具是 第一位的。 若 Linux 服务器端守护程序选择了 SSH 服务,则整个连接过程都会加密,因此比 较安全。连接Linux 服务器的客户端如果是Windows 系统,可以选择SecureCRT 或 Xshell 工具,推荐使用 SecureCRT,理由是其历史悠久、简单、用的人多。至于 Linux, 就用 openssh 自带的 SSH 客户端工具即可。如果需要用图形远程管理,建议选择 vnc。 相关工具列表见表 3-3。 跟老男孩学 Linux 运维:Web 集群实战66 表 3-3 SSH 服务器端及客户端工具列表 服务角色 文本命令行管理工具 图形管理工具 Linux 服务器端 sshd(openssh openssl) vnc server 客户端 SecureCRT 或 Xshell、Putty、SSH vnc client、xmanger、x-win32 3.2 SSH 客户端常用工具 SecureCRT 3.2.1 SecureCRT 工具介绍 SecureCRT 是一款支持 SSH(SSH1 和 SSH2)协议的终端仿真软件,常被用来运行 于 Windows 下远程登录 UNIX 或 Linux 服务器主机。 SecureCRT 软件功能强大,不仅仅支持 SSH 协议,同时还支持 Telnet、RLogin、Serial 和 TAPI 等协议,它有非常多的功能,这里就不一一介绍了,常用功能可看下文实践。 与 SecureCRT 类似功能的SSH 软件还有Xshell、Putty 等。SecureCRT、Xshell、 Putty 等都仅仅是客户端软件,一般被用于 Windows 客户端的计算机,因此,无论选择 哪款客户端 SSH 工具,对于学习来说都是可以的,读者可以根据自身习惯进行选择,这 里老男孩以比较大众化的 SecureCRT 为例为读者阐述 SecureCRT 的常用优秀功能。 3.2.2 SecureCRT 工具安装说明 由于是在 Windows 下进行安装,因此操作步骤很简单,按提示一路单击“下一步” 即可完成,这里就不一一叙述了,不过要提醒的是,请注意看 SecureCRT 软件目录下的 帮助,要注册 SecureCRT 后才可以运行使用。 3.2.3 配置 SecureCRT 连接 Linux 主机 在笔记本或客户端计算机上正确安装 SecureCRT SSH 连接工具后,通过开始程序或 快捷菜单找到 SecureCRT 并打开,则会看到如图 3-3 所示的界面。 在图 3-3 所示的界面,单击工具栏中的第二个快捷按钮(即“快速连接”按钮),则 会进入如图 3-4 所示的窗口。 图 3-3 SecureCRT 界面 图 3-4 快速连接服务器配置端口 单击快速连接按钮 第 3 章 CentOS 6.6 连接管理及优化 67 在该窗口中,首先选择连接的协议为 SSH2(也可以选择其他协议),然后在下面的 选框中,配置 Linux 系统的 IP 地址及默认的端口号 22,接下来配置连接的用户名,默 认是 Linux 超级管理员 root,最后在右下角勾选“保存会话”和“在一个标签中打开”, 并单击“连接”,此时会进入如图 3-5 所示的提示框。 这里是主机密钥验证,只有在第一次连接时才会出现这个提示框,单击“接受并保 存”按钮,然后进入如图 3-6 所示的提示窗口。 图 3-5 新建主机密钥提示 图 3-6 提示输入口令框 在“口令”栏旁边的选框敲入安装 Linux 系统时设置的 root 密码,然后勾选左下 角的“保存口令”,最后单击“确定”按钮。如果顺利的话,应该会出现登录成功后的 Linux Shell 命令行提示窗口,如图 3-7 所示。 此时就可以像在 VMware 虚拟机里或物理机连接显示器那样管理 Linux 系统了,你甚 至感受不到是远程管理,因为都是文本操作,操作非常流畅,哪怕是距离服务器几千公里。 3.2.4 通过 SSH 工具连接 Linux 主机的常见问题 如果你的操作比较规范,且是在局域网内,那么一般情况下不会有连接问题;如果 你的操作有疏漏之处,而且是广域网或拨号上网,那么就有可能存在一些问题。下面就 与大家分享一下部分常见问题的产生原因及解决办法。 1. 连接超时问题 如果完成上一节介绍的设置步骤后依然连接不上 Linux 主机,可能会出现连接超时 的提示,如图 3-8 所示。      图 3-7 正确登录系统后的窗口及命令行       图 3-8 连接服务器超时提示 如果遇到这个问题,请检查 Linux 系统和客户端计算机端的网络连接是不是通畅 的,最简单的方法就是在客户端计算机上 ping 一下 Linux 主机的 IP。 登录后的命令行提示符 跟老男孩学 Linux 运维:Web 集群实战68 ping 的实际命令如下: C:\Users\oldboy>ping 10.0.0.7 正在 Ping 10.0.0.7 具有 32 字节的数据 : 来自 10.0.0.100 的回复 : 无法访问目标主机。 来自 10.0.0.100 的回复 : 无法访问目标主机。 提示:这是不通的状态 C:\Users\oldboy>ping 10.0.0.7 正在 Ping 10.0.0.7 具有 32 字节的数据 : 来自 10.0.0.7 的回复 : 字节 =32 时间 <1ms TTL=64 来自 10.0.0.7 的回复 : 字节 =32 时间 <1ms TTL=64 提示:这是通的状态 如果未能连通 Linux 主机的 IP,则可通过如下方法进行检查: 1)Linux 主机本身是不是正确设置或获取到了 IP,并且这个 IP 与客户端计算机的 IP 是不是在同一个网络里。 2)客户端计算机和 Linux 主机之间的 22 端口是不是被 Linux 系统的防火墙给阻挡 了。关闭 Linux 防火墙的方法为: [root@www ~]# /etc/init.d/iptables stop <== 最好连续执行两遍 2. SSH 端口问题 如果出现的是远程系统拒绝连接的提示(如图 3-9 所示),则要从 SSH 端口查找原因。 图 3-9 由于端口问题导致的连接失败图 可从如下几个方面来查找原因。 1)sshd 服务程序是否正确开启,确认的示例命令如下: [root@www ~]# ps -ef|grep sshd|grep -v grep root 364 1 0 Oct06 ? 00:00:00 /usr/sbin/sshd <== 有这一行表示服务正常 2)sshd 服务的默认端口 22 是不是被更改了,确认的示例命令如下: [root@www ~]# netstat -lntup|grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 364/sshd tcp 0 0 :::22 :::* LISTEN 364/sshd 提示:22 为端口,如果被改就是其他数字了。 第 3 章 CentOS 6.6 连接管理及优化 69 3)是否因开启了 iptables 防火墙而导致禁止连接,确认的示例代码如下: [root@www ~]# /etc/init.d/iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@www ~]# /etc/init.d/iptables stop 4)客户端 SecureCRT 是不是配错了连接的端口或 IP。 如果你熟悉 telnet 命令,也可以在客户端计算机上执行 telnet 10.0.0.7 22 来检查连 通性。SSH 端口问题大体上都是由上述 4 类情况引起的,更多原因可以到网上搜索,或 者加入本书前言提供的官方 QQ 群进行交流。 3.2.5 调整 SecureCRT 终端显示和回滚缓冲区大小 磨刀不误砍柴工,为了更方便地学习 Linux,首先得对终端进行一些调整,步骤如下: 通过 SecureCRT 顶部菜单中的“选项”→“会话选项”,打开会话选项窗口,然后单击左 边菜单“终端”→“仿真”,并勾选窗口右边的“ ANSI 颜色”项,再到“终端”右边的选 框里选择“Linux”,最后设置回滚缓冲区为 32000,并单击“确定”即可(如图 3-10 所 示 )。 图 3-10 会话选项图 调整终端显示和回滚缓冲区的说明如下: ‰‰ 调整“终端”→“仿真”的 ANSI 颜色,并且将终端选择为 Linux(有网友选择 Xterm,也是可以的),目的是让 Linux 命令行看起来更舒服,如果开发 Shell/ Python 程序,更利于代码展示,比如会高亮显示代码等。 ‰‰ 调整回滚缓冲区的目的是当操作内容过多时,想回看操作过的记录,可以向上翻 得更远一些。 跟老男孩学 Linux 运维:Web 集群实战70 3.2.6 调整字体及光标颜色 单击用户管理界面左边菜单中的“外观”,在右侧内容区会显示与“窗口和文本外观” 相关的选项,如图 3-11 所示。 图 3-11 调整字体光标等 在图 3-11 所示的界面中单击“颜色”,在基本颜色处选择“绿色”,然后单击“确定” 按钮,如图 3-12 所示。 图 3-12 光标颜色调整 提示: 如果觉得字体够大,可以不调整,不过,给光标换个颜色还是不错的,定位 光标时会比较清晰快速。 3.2.7 配置记录 SSH 操作的日志及输出 设置在 SecureCRT 中记录执行命令及屏幕输出的日志文件,可以更方便地查询曾经 第 3 章 CentOS 6.6 连接管理及优化 71 操作过的配置、命令及结果输出等(对于大家的学习和工作都有用处)。 日志文件的格式为:%H_%Y%M%D.log(日志文件名以主机 IP、年、月、日的形 式记录)。 单击用户管理界面左边菜单的“日志文件”,在右侧内容区会显示与“日志文件” 相关的选项,配置内容如图 3-13 所示。 图 3-13 配置 SSH 日志图 配置说明如下: ‰‰ 在图 3-13 中,一定要勾选“在连接上启动记录”,如果不勾选则不会记录。 ‰‰ 要勾选“追加到文件”。 ‰‰ 如果单独配置这部分内容,需要退出连接重新登录,上述配置才能生效。 提示: 还可以将记录文件名配置为更为详细的格式。如,%H_%S_%Y%M%D%h%m. log,在图 3-13 所示的日志文件中配置即可。 3.2.8 配置本地机器上传和下载的目录 在用户管理界面,单击左边菜单的“ Xmodem/Zmodem”,然后就可在右侧的目录 区中设置文件的上传和下载目录了,如图 3-14 所示。 上传和下载的路径可以设置为同一个,但所选择的路径必须在系统中存在才行。 设置完毕后,就可以通过 SecureCRT 连接的 Linux 命令行经由 rz 上传文件到 Linux 系统了,通过“ sz 文件名”则可以下载文件到上述配置的路径里,从而实现客户端计算 机和 Linux 主机的文件传输。 跟老男孩学 Linux 运维:Web 集群实战72 图 3-14 rz、sz 上传和下载 Windows 默认路径 下面来看一下有关上传和下载命令的说明。 1. rz、sz 命令的安装方法 第一种方法:安装系统时选包含 rz、sz 命令的包组,即 。 第二种方法:安装系统后通过执行 yum install lrzsz -y 或 yum groupinstall"Dial-up Networking Support"-y 命令来安装。 2. 上传命令 rz 上传内容时,执行 rz 命令,如果希望覆盖服务器上的同名内容上传,可加 -y 参数, 输入“ rz -y”命令后直接按回车键,会打开一个上传文件的窗口,然后从这个窗口浏览 找到需要传输的文件进行上传,在这个上传的窗口内选择的文件是客户端计算机本地要 上传到 Linux 的文件。 3. 下载命令 sz 下载内容时,执行命令“ sz f ilename”,如果希望覆盖本地的同名内容下载,则可 输入“ sz -y f ilename”命 令 ,“ sz -y”命令后面的“ f ilename”为命令行 Linux 主机当 前目录下的文件,例如:sz oldboy.log。使用 sz 或“ sz -y 文件名”命令从服务器上下载 文件时,默认的客户端下载路径就是图 3-14 所设置的下载路径地址。 4. 使用 rz、sz 命令的注意事项 ‰‰ 只能上传和下载文件,不能上传和下载 目录,如果是目录需要打包成文件再传。 ‰‰ 上传的文件可以是计算机里的任意文 件,下载的文件会下载到 SecureCRT 配置的对应下载路径目录中。 ‰‰ 执行 rz 命令按回车键后出现的窗口中,一 定不要勾选最下方的“以 ASCII 方式上传 文件”,否则会遇到问题,如图 3-15 所示。 图 3-15 上传文件注意事项图 第 3 章 CentOS 6.6 连接管理及优化 73 5. 其他工具 除了 rz、sz 等传输文件命令外,还可以用 ftp、sftp(SSH 服务)等工具来传输文件。 3.2.9 实现批量部署和管理功能 要实现这个功能有一个前提,就是前面介绍连接时所讲的要确保所有的标签在同一 个 SecureCRT 窗口打开(如图 3-16 所 示 )。 图 3-16 多标签批量管理登录窗口 如果不是在同一个标签中打开的,请按图 3-16 和图 3-17 所示的进行调整:打开 SecureCRT 连接窗口,选中一个连接标签,然后勾选右下角的“在一个标签中打开”按 钮,这样以后这个连接就会在一个窗口中打开了。 图 3-17 在一个标签中打开设置图 之后,把如图 3-18 所示的窗口缩小(不要最大化,否则交谈窗口按钮是灰色的), 并单击菜单中的“查看”→“交谈窗口”,就会出现如图 3-19 所示的底部空白窗口。 跟老男孩学 Linux 运维:Web 集群实战74 图 3-18 设置批量管理输入框 图 3-19 批量执行命令设置窗口 在空白窗口处单击鼠标右键,然后选择“将交谈发送到所有标签”,如图 3-20 所示。 图 3-20 快捷菜单 最后批量部署执行命令的结果如图 3-21 所示。 提示: 如果要批量部署或执行任务的服务器为数十台,就可以利用 SecureCRT 的 这个小功能,非常不错,简单易用,可以替代一些大型的批量部署软件。如 果是大规模服务器数量,则可以用 saltstack 等批量管理工具。 第 3 章 CentOS 6.6 连接管理及优化 75 特别需要注意的是,上述批量管理的操作,不能使用交互的命令,例如 vi/ vim、rz等。但可以变通使用,例如 vi/vim 命令可以用 echo、cat、sed 替代。 图 3-21 批量执行命令演示图 3.2.10 配置 SecureCRT 标签路径 工作久了,SecureCRT 的标签就会有很多,当重装系统或换客户端计算机时,这些 标签就会丢失,因此需要对标签进行拷贝以实现备份,可找到全局选项对配置文件夹的 目录进行配置,如图 3-22 所示。 图 3-22 SecureCRT 标签信息存放路径 3.2.11 配置标签模板 前面做了非常多的配置,若是再新建标签连接服务器,如何继承这些配置呢? 跟老男孩学 Linux 运维:Web 集群实战76 方法 1 :通过对一个已经配置好的标签实施复制、粘贴操作来新建标签(如图 3-23 所示),这样它就继承老标签的配置,只需要再修改相应的特殊配置即可,如 IP、会话 名字等。 方法 2 :在全局选项里配置上述的各种功能设置(如图 3-24 所示),这样,每次新 添加标签时都会使用全局的默认设置。       图 3-23 复制配置好的标签        图 3-24 全局调整标签配置永久生效 3.2.12 调整命令行颜色方案(目录和注释) 默认情况下命令行界面的目录和文件内容注释都是深蓝色的,看不清楚,因 此,这个功能的调节就显得很有必要了。方法是依次选择“ SecureCRT 菜单”→“选 项”→“全局选项”,然后在“全局选项”左侧单击“ ANSI 颜色”,右侧就出现相应的 选项(如图 3-25 所示),现在将右侧深蓝的颜色调整为浅蓝。 图 3-25 调整目录等的元素颜色显示 第 3 章 CentOS 6.6 连接管理及优化 77 调整后可以发现 CRT 窗口目录的颜色变了,如图 3-26 所示。 图 3-26 颜色清晰效果 Shell 脚本内中注释部分的颜色也有了相应的变化,如图 3-27 所示。 图 3-27 编写脚本清晰效果 3.3 Linux 系统应用管理 管理 Linux 系统之前,先来查看一下当前 Linux 系统的版本、内核等信息。命令如下: [root@www ~]# cat /etc/redhat-release CentOS release 6.6 (Final) ç 这是系统版本信息 [root@www ~]# uname -r 2.6.32-504.el6.x86_64 ç 这是内核 kernel 的版本号 [root@www ~]# uname -m x86_64 ç 这表示为 64 位系统 3.3.1 添加普通用户账号 可使用如下命令添加一个普通用户账号,并为其设置口令: 跟老男孩学 Linux 运维:Web 集群实战78 [root@www ~]# useradd oldboy [root@www ~]# passwd oldboy Changing password for user oldboy. New password: BAD PASSWORD: it is too simplistic/systematic ç 提示密码太简单了,但可以不理会 BAD PASSWORD: is too simple Retype new password: passwd: all authentication tokens updated successfully. 提示: 一般情况下,在企业生产环境中应尽量避免直接到 root 用户下操作,除非 有超越普通用户权限的系统维护需求。 还可通过下面的命令一步到位地设置密码(其中,oldboy 为用户名,密码为 qq:31333741)。 echo "qq:31333741"|passwd --stdin oldboy && history -c 尝试切换用户角色,命令如下: [root@www ~]# su - oldboy <== 由 root 管理员,切换到普通用户 oldboy [oldboy@www ~]$ whoami <== 查看当前用户是什么 oldboy [oldboy@www ~]$ su - root <== 切回到 root 用户 Password: 说明: 1) 超级用户 root 切换到普通用户下面,无需输入对应用户密码,这相当于“皇帝” 去“大臣”家里。 2) 普通用户切换到 root 或其他普通用户下,需要输入切换的对应用户密码。 3) 普通用户的权限比较小,只能进行基本的系统信息查看等操作,无法更改系统 配置和管理服务。 4) $ 符号是普通用户的命令行提示符,# 符号是超级管理员的提示符。示例如下: [oldboy@www ~]$ ç 普通用户 oldboy 对应的提示符 [root@www ~]# ç 超级管理员 root 对应的提示符 5) 提示符 @ 前面的字符代表当前用户(可用whoami 查询),后面的为主机 名(可用 hostname 查询),~ 所在的位置是窗口当前用户所在的路径。示例 如下: [oldboy@www ~]$ ç oldboy 为当前用户 ,www 为主机名,~ 表示当前目录,即家目录。 6) Linux 命令提示符由 PS1 环境变量控制。示例如下: 图 3-28 Linux 命令操作语法格式图 rm -f /etc/hosts ؏Ϋ@<ౕ֙᪜ᴟ>@@<ౙεૼ᧨ਈ> ᗴ࣏̣̀፫൭ ࢐౗᧨ਈ̬ॾ፫൭   因为已经进入了 "/"。 [root@www /]# mkdir data ç 创建 data 目录,注意不是 date,也不带斜线 "/" 了,   即所有目录的顶点。 [root@www ~]# cd / ç 进入到根目录 / 下,强调下 "/" 在 linux 里是根的意思, rm:是否删除目录 "/data" ? y ç 输入 y 表示确认删除,y 是 yes 的缩写。 [root@www ~]# rm -r /data ç 删除前面建立的 /data 目录。 除了上面的方法外,还可以用下面的方法: 格式查看目录的属性 ç 此命令是查看 data 目录是否创建成功,ls 是 list 列表的意思。-ld 是 ls 的常用参数,是以长 drwxr-xr-x 2 root root 4096 8 月 3 14:33 /data [root@www ~]# ls -ld /data [root@www ~]# mkdir /data ç 此命令就是答案了。 可采用如下方法: 例 1:在根“/”下创建一个目录 data。 ‰‰ 参数选项表示使用一个命令的不同功能。 ‰‰ 中括号([ ])表示可选,即命令的参数及路径文件是可选的。 说明: rm -f /etc/hosts 命令 [ 参数选项 ] [ 文件或路径 ] Linux 系统命令操作语法的格式: [root@oldboy ~]# ç 就是在这样的提示符下敲命令。 在命令行下实现的。 在 Linux 系统运维工作中,常用操作大多都是 格式图,如图 3-28 所示。 在了解 Linux 命令之前,先看看命令操作语法 3.3.2 基本的 Linux 命令操作示例 Linux 运维方法”,网址为:http://oldboy.blog.51cto.com/2561410/1053606。 想进一步了解切换用户的命令 su,可以参看老男孩的博客“由 su 和 su- 的区别谈学习 PS1='[\u@\h \W\t]\$'。 这 里 的 PS1='[\u@\h \W]\$', 可 以 通 过 全 局 变 量 配 置 /etc/profile 文 件 调 整 [root@www ~]# set|grep PS1 ç 注意 PS1 是大写的 第 3 章 CentOS 6.6 连接管理及优化 79 跟老男孩学 Linux 运维:Web 集群实战80 [root@www /]# ls -ld data ç 查看创建 data 目录本身 drwxr-xr-x 2 root root 4096 8 月 3 14:37 data 提示: Windows 下的目录路径样式为 d:\data\,而 Linux 下的路径就是 /data/。 记忆方法:创建目录的命令可以理解为英文全称 make directory,缩写后 就是 mkdir。 例 1 用到的 Linux 命令知识点如下。 ‰‰ cd 后跟相对路径或绝对路径,表示进入对应目录,cd / 表示进入根目录下。记忆 方法 ===>change directory,中文意思是变换目录。 ‰‰ 相对路径概念:不从“ /”开始,而是从当前目录开始的路径。如 data/test、mnt/ oldboy。 ‰‰ 绝对路径概念:从“/”开始的路径,就叫绝对路径。如 /data/test、/mnt/oldboy。 ‰‰ mkdir [-mp] [ 目录名称 ] :表示建立目录,默认可以不加参数,如果实现特殊功 能可加如下参数。 ● -m :这个参数用来指定要创建目录的权限,但很少用,一般是创建目录后用 chmod 来处理。如 mkdir -m 777 /tmp/test。即建立一个权限为 777 的目录。 ● -p:这个参数用来递归创建目录,如 mkdir -p /data/test/,这是 mkdir 的常用参数。 例 2:在 /data 目录下面建立一个文件,名字为 oldboy.txt。 方法 1: [root@www /]# touch /data/oldboy.txt ç 在 /data 目下创建 oldboy.txt。 [root@www /]# ls -l /data/oldboy.txt ç 查看创建的 oldboy.txt,注意,没有用到   上文提到的 -d 参数了,这是为什么呢?因为要   查看的目标文件不是目录,所以不用 -d 参数了 -rw-r--r-- 1 root root 0 8 月 3 14:46 /data/oldboy.txt 方法 2: [root@www /]# cd /data [root@www data]# touch oldboy.txt ç 如果同名文件存在,不会提示也不会覆盖,   会更新 oldboy.txt 文件的时间戳。 [root@www data]# ls -l oldboy.txt -rw-r--r-- 1 root root 0 8 月 3 14:47 oldboy.txt ç 比前文的 oldboy.txt 时间新 例 2 用到的 Linux 命令知识点如下: ‰‰ touch [ 文件名 ]:因为 touch 是“摸”的意思,所以该命令表示“摸”一下文件,其 作用是如果文件不存在,就建立新文件,如果存在,就改变文件的访问时间信息。 例 3:为 oldboy.txt 增加内容“I am studying linux.”。 图 3-29 vi/vim 编辑器工作模式简图 ಻ᪧค৖ ᑻഌ᩹ᡁEscᰅ ᨳ܈ᩜҍiao ؏Ϋά vi filename ᩜҍὔwq WJNWJज़ϩค৖ ᪀ҍ ᪕Ӗ ᒺᩛค৖ ؏Ϋค৖ 在 cp [-a i f p r u] [ 源文件 ] [ 目标文件 ] 的第一个中括号中可加入如下参数。 例 4 用到的 Linux 命令知识点如下。 提示:有的读者加参数 -a ,-p 等也可以。拷贝目录并保持属性。更多信息可以执行 man cp 进行查看 I am studying linux. [root@www data]# cat /tmp/oldboy.txt -rw-r--r-- 1 root root 21 8 月 3 15:07 /tmp/oldboy.txt [root@www data]# ls -l /tmp/oldboy.txt [root@www data]# cp /data/oldboy.txt /tmp/ ç 这个就是拷贝的命令了 方法如下: 例 4:把 oldboy.txt 文件拷贝到 /tmp 下。 追加需要的内容。 有旧的数据,然后增加 echo 命令后的内容,“ >>”为内容追加,只在文件尾部 追加内容到文件尾部,这个命令须掌握。“ >”意思为重定向,会清除文件里所 ‰‰ echo:一个打印输出内容的常用命令,配合“>”或“>>”可以清除文件内容及 可以接命令参数。 后退出编辑器的意思(w 是 write,q 为 quit)。命令模式下敲冒号“ :”,后面才 insert,进入插入编辑模式状态的意思,Esc 键是切换到命令模式,wq 就是写入 vim 替代 vi,vi/vim 的内部有很多命令技术点要掌握,例如方法 1 提到的 i 就是 ‰‰ vi :类似 Windows 记事本的 Linux 下的常用编辑器,如果想功能更丰富可以用 例 3 用到的 Linux 命令知识点如下。 I am studying linux. [root@oldboy ~]# cat /data/oldboy.txt ç 检查追加的结果 号内的内容通过 ">>" 输出重定向符号追加到 /data/oldboy.txt,注意:追加就是增加,不是覆盖。 ç 这个在企业里很常用:内容追加到文件结尾。特殊编辑文件的方法,通过 echo 命令使用单引号把引 [root@oldboy ~]# echo 'I am studying linux.'>>/data/oldboy.txt 部的。 命令是 echo,注意,内容都是放到文件尾 方法 2 :往文件尾部插入内容的常用 简图。 图 3-29 为 vi/vim 编辑器的工作模式 “:wq 命令”保存并退出。 退出编辑模式(进入命令模式),最后敲 studying linux.”,然后按键盘上的Esc 键 或 i 进入编辑模式后敲入内容“I am 在 data 目录下执行“ vi oldboy.txt”命令进入 vi 编辑器(默认为命令模式),单击 a 方法 1:常规编辑方法。 第 3 章 CentOS 6.6 连接管理及优化 81 跟老男孩学 Linux 运维:Web 集群实战82 ‰‰ -a:相当于 -dpr。 ‰‰ -d:若源文件为链接文件(link f ile),则复制链接文件属性而非档案本身。 ‰‰ -p:连同档案的属性一起复制过去,而非使用默认属性。 ‰‰ -r:递归,用于复制目录。 ‰‰ -f:强制,若目标档案已经存在且无法开启,则移除后再尝试。 ‰‰ -i:若目标文件已经存在,在覆盖时会先询问。 ‰‰ -u:若目标文件存在,则目标文件比源文件旧时才复制。 提示: 如果要复制的源文件有多个,那么目的文件在最后,且必须是目录。cp 的重 要参数是 -a、-p、-r。 例 5:把 /data 目录移动到 /root 下。 方法如下: [root@www data]# pwd ç 打印当前路径 /data [root@www data]# cd / ç 切换到根目录下 [root@www /]# mv data /root/ ç 移动 data 目录到 /root 下,移动就是剪切的意思 [root@www /]# ls -ld /root/data/ drwxr-xr-x 2 root root 4096 8 月 3 14:46 /root/data/ 例 5 用到的 Linux 命令知识点如下。 在 mv [-i f u] [ 源目录 / 源文件 ] [ 目的目录 / 目的文件 ] 的第一个中括号中可加入如 下参数。 ‰‰ -i:如果目的文件已存在,询问是否覆盖。 ‰‰ -f:强制执行,不会询问。 ‰‰ -u:若目的文件存在,则比源文件新时才会移动。 提示: 如果要移动的源文件有多个,那么目的文件放在最后,且必须是目录。 例 6:进入 root 目录下的 data 目录,删除 oldboy.txt。 方法如下: [root@www /]# cd /root/data/ [root@www data]# rm -f oldboy.txt ç 删除文件,使用 -f 参数,快速删除,不提示是否删除 [root@www data]# ls 删除命令 rm 相当于 remove(移除)的缩写,删除文件一般用“ rm oldboy.txt”, 此 法会提示你是否确定删除,推荐初学者使用。用“ rm -f oldboy.txt”删除很快,但是不 提示用户进行确认,直接删除,比较危险,容易出错,不推荐初学者使用。 第 3 章 CentOS 6.6 连接管理及优化 83 另外,对于文件的删除禁止使用“rm -fr 文件名”,这种是杀鸡用牛刀的做法,必须 禁止,最多用“ rm -f 文 件 ”。 rm -fr 一般用来强制删除目录,非常危险,太多高手发生 过严重的错误。 提示: 初学者尽量不要用 rm 命令,如果必须要删除,可以用 mv 命令替代 rm,也 就是把文件移动到 /tmp 下,然后等 /tmp 分区将要满时一次性删除,使用 mv 移动文件到 /tmp 的方法是学习 Windows 下回收站的功能,减少犯错的 机率。这种把 /tmp 目录当作回收站使用的做法,对初学者来说是一个不错 的选择。 前面以问答的形式带大家学习了 mkdir、cd、touch、cp、mv、rm 等 Linux 基本命令, 捎带学习了 pwd、cat、ls、echo 等基础命令,怎么样? Linux 的命令是不是很简单!更 多命令的应用请读者参考其他书籍,或者老男孩即将出版的命令基础书籍或运维班课程。 3.4 安装 Linux 系统后调优及安全设置 3.4.1 关闭 SELinux 功能 SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)对于强制访问控制 的实现,这个功能让系统管理员又爱又恨,这里我们还是把它给关闭了吧,至于安全问 题,后面通过其他手段来解决,这也是大多数生产环境的做法,如果非要开启也是可以 的。关闭方式如下。 1)修改配置文件,使关闭 SELinux 永久生效: [root@@www ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/ config <== 修改配置文件可使配置永久生效,但必须要重启系统,此步是 sed 快速修改方法,也可以通过 vi 编辑修改此文件。 [root@@www ~]# grep SELINUX=disabled /etc/selinux/config SELINUX=disabled <== 检查替换结果为 disabled 就表示编辑成功了 2)临时关闭 SELinux,可在命令行执行如下命令: [root@www ~]# setenforce usage: setenforce [ Enforcing | Permissive | 1 | 0 ] ç 数字 0 表示 Permissive,即给出警告提示,但不会阻止操作,相当于 disabled。   数字 1 表示 Enforcing,即表示 SELinux 为开启状态。 [root@@www ~]# setenforce 0 <== 临时将 SELinux 调成 Permissive 状态。 [root@@www ~]# getenforce <== 查看 SELinux 当前状态 Permissive 命令说明如下。 跟老男孩学 Linux 运维:Web 集群实战84 ‰‰ setenforce:用于命令行管理 SELinux 的级别,后面的数字表示设置对应的级别。 ‰‰ getenforce:查看 SELinux 当前的级别状态。 提示: 修改配置 SELinux 后,要想使其生效,必须要重启系统。因此,可配合 使用 setenforce 0 这个临时使其关闭的命令,这样在重启前后都可以使 SELinux 关闭生效,也就是说无须立刻重启服务器了,在生产场景下 Linux 机器是不能随意重启的。 3.4.2 设定运行级别为 3(文本模式) 设定运行级别(runlevel)为 3,即表示使用文本命令行模式管理 Linux,如果你是 按照本书前面章节所述的那样完成的系统安装,则无需设置,检查一下即可。检查命令 如下: [root@www ~]# grep 3:initdefault /etc/inittab id:3:initdefault: <== 这里的 3 就是 Linux 默认的运行级别,如果有需求可以将其   修改为其他级别。工作中常用 3 级别,即文本模式。 [root@www ~]# runlevel <== 查看当前系统运行级别 N 3 [root@www ~]# init 5 <== 切换运行级别为 5,只有在安装了桌面程序时才可以执行   startx 命令切换 命令说明如下。 ‰‰ runlevel:查看当前系统运行级别。 ‰‰ init:切换运行级别,后面接对应级别的数字,例如 :init 6 就是重启 Linux 服务器。 课外作业: ‰‰ 掌握 Linux 系统的 7 种运行级别。 ‰‰ 掌握 Linux 系统从开机到登录之前的启动流程。 3.4.3 精简开机系统自启动 与 Windows 系统一样,在 Linux 服务器运行的过程中,也会有很多无用的软件服 务默认运行,这些服务占用了很多系统资源,而且也带来了安全隐患,因此要关闭。那 么,企业生产场景的 Linux 主机到底需要保留哪些开机自启动的服务呢? 1. 重要的开机自启动服务 根据老男孩多年的经验,企业环境新装 Linux 系统之后有必要保留的开机自启动服 务有 5 个,具体如下。 ‰‰ sshd :远程连接 Linux 服务器时需要用到这个服务程序,所以必须要开启,否则 Linux 服务器就无法提供远程连接服务了。 第 3 章 CentOS 6.6 连接管理及优化 85 ‰‰ rsyslog :日志相关软件,这是操作系统提供的一种机制,系统的守护程序通常会 使用 rsyslog 程序将各种信息写到各个系统日志文件中,在 CentOS 6 以前此服务 的名字为 syslog。 ‰‰ network:系统启动时,若想激活 / 关闭各个网络接口,则应(必须)考虑开启此 服务。 ‰‰ crond :该服务用于周期性地执行系统及用户配置的任务计划。有要周期性执行 的任务时,就要开启,此服务几乎是生产场景必须要用的一个软件。 ‰‰ sysstat :sysstat 是一个软件包,包含监测系统性能及效率的一组工具,这些工具 对于我们收集系统性能数据很有帮助,比如 CPU 使用率、硬盘和网络吞吐数据 等,对这些数据的收集和分析,有利于判断系统运行是否正常,所以它是提高系 统运行效率、安全运行服务器的得力助手。 sysstat 软件包集成的主要工具为: ‰‰ iostat 工具提供 CPU 使用率及硬盘吞吐效率的数据。 ‰‰ mpstat 工具提供与单个或多个处理器相关的数据。 ‰‰ sar 工具负责收集、报告并存储系统活跃的信息。 提示: 上述 5 个服务是安装完系统后建议保留的开机自启动服务,也几乎是一切生 产服务器必须保留的开机自启动服务。将来还可以根据服务器的业务使用场 景调整相应的自启动服务。 2. 设置开机自启动服务的常见方法 1)执行命令,然后手动选择处理的方法 方法 1:执行 ntsysv 命令,然后在弹出的窗口中进行设置。 方法 2:执行 setup 命令→ system service,然后在弹出的窗口中进行设置。 提示: 初学者可以选择上述两种方法中的一种来完成设置。 2)通过一行命令或 Shell 脚本进行设置 若你是有一定 Linux 经验的读者,可以进一步了解通过命令或脚本来一键完成设置 的思路。 在快速设置前,先来查看默认情况下 Linux 系统开启的服务有哪些,由于我们工作 在文本模式 3 级别,因此只需要查找 3 级别上开启的服务即可。查看命令如下: [root@www ~]# LANG=en # ç 先调整成英文字符集,以方便下面命令过滤中文字符串 [root@www ~]# chkconfig --list|grep 3:on abrt-ccpp 0:off 1:off 2:off 3:on 4:off 5:on 6:off 跟老男孩学 Linux 运维:Web 集群实战86 abrtd 0:off 1:off 2:off 3:on 4:off 5:on 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off <== 这是要保留的 haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off kdump 0:off 1:off 2:off 3:on 4:on 5:on 6:off lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off messagebus 0:off 1:off 2:on 3:on 4:on 5:on 6:off netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off <== 这是要保留的 postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off <== 这是要保留的 sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off <== 这是要保留的 sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off <== 这是要保留的 udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off 提示: 可以看到,默认情况下开启了很多服务,我们需要保留开启的所有服务也包 含在其中。这里只需要关注 3 级别上的设置是否为 on 即可(on 为开启状 态),有关运行级别的知识,请同学们查阅相关资料或参考老男孩的其他文章。 了解了系统在 3 级别上开启的服务后,就可以通过命令快速实现配置了,下面就正 式介绍几种通过命令或脚本设置开机自启动的方法。 第一种快速处理方法:先全关闭,再开启需要保留的。 操作思路:先将 3 级别文本模式下默认开启的服务都关闭,然后开启需要开启的服务。 操作命令如下: LANG=en for oldboy in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $oldboy off;done for oldboy in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $oldboy on;done chkconfig --list|grep 3:on 操作过程如下: [root@www ~]# LANG=en # <== 临时调整字符集为英文 [root@www ~]# for oldboy in `chkconfig --list|grep 3:on|awk '{print $1}'`;do chkconfig --level 3 $oldboy off;done # <== 关掉所有开启的服务 第 3 章 CentOS 6.6 连接管理及优化 87 [root@www ~]# for oldboy in crond network rsyslog sshd sysstat ;do chkconfig --level 3 $oldboy on;done <== 开启需要开启的服务 [root@www ~]# chkconfig --list|grep 3:on <== 查看设置结果 crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:off 2:off 3:on 4:off 5:off 6:off 第二种快速处理方法:一条命令搞定,Shell 循环实现。 操作思路:默认情况下开机需要保留的服务都已经是开启状态了,因此,只需把 3 级别文本模式下已开启但又不需要的服务都关掉就好了。 操作过程如下: [root@www ~]# for oldboy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog|sysstat"`;do chkconfig $oldboy off;done [root@www ~]# chkconfig --list|grep 3:on crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sysstat 0:off 1:off 2:off 3:on 4:off 5:off 6:off 第三种快速处理方法:不要 Shell 循环语句也一条命令搞定。 操作思路:默认情况下开机需要保留的服务都已经是开启状态了,因此,只需把 3 级别文本模式下已开启但又不需要开启的服务都关掉就好了,这里将不用循环结构而是 利用命令拼出所有要处理的命令字符串,然后通过 bash 将其当作命令执行。 操作命令如下: chkconfig --list|grep 3:on|grep -vE "crond|sshd|network|rsyslog|sysstat" |awk '{print "chkconfig " $1 " off"}'|bash 操作过程为先拼接所有要操作的命令字符串,命令如下: [root@www ~]# chkconfig --list|grep 3:on|grep -vE "crond|sshd|network| rsyslog|sysstat" |awk '{print "chkconfig " $1 " off"}' chkconfig abrt-ccpp off chkconfig abrtd off chkconfig acpid off chkconfig atd off chkconfig auditd off chkconfig blk-availability off chkconfig cpuspeed off chkconfig haldaemon off chkconfig htcacheclean off chkconfig sysstat off 跟老男孩学 Linux 运维:Web 集群实战88 然后将拼接的所有要操作的命令字符串通过 bash 运行,如下: [root@www ~]#chkconfig --list|grep 3:on|grep -vE "crond|sshd|network| rsyslog|sysstat" |awk '{print "chkconfig " $1 " off"}'|bash 用下面的命令也可: [root@www ~]# chkconfig --list|grep 3:on|grep -vE "crond|sshd|network| rsyslog|sysstat" |awk '{print $1}'|sed -r 's#(.*)#chkconfig \1 off#g'|bash 提示: 有很多朋友经常问老男孩,到底将哪些服务作为开机自启动服务合适?其实 这个问题没有唯一的正确答案,只要不影响系统及服务的运行,多开点少开 点都是可以的。但作为一名优秀的 Linux 系统管理员,我们应该遵守这样一 个原则——最小化原则。就是尽量不安装不使用的软件,尽量不开启不需要 开启的服务。即只要不用就不开启,这样系统的性能和安全性才是最好的。 若随着业务的运行,因安装了软件而需要开机自启动就设置为开机启动即 可。一句话,要清楚每个服务的角色,不用的绝对不安装,默认安装了的绝 不开机自启动。 3.4.4 关闭 iptables 防火墙 关闭防火墙的目的是让初学者学习更方便,将来学了 iptables 技术后可再统一开启。 在企业环境中,一般只有配置外网 IP 的 Linux 服务器才需要开启防火墙,但即使有外 网 IP,高并发、高流量的业务服务器仍然不能开启防火墙,因为开启后会有较大性能损 失,导致网站访问速度很慢,这种情况下只能在前端加更好的硬件防火墙了。 关闭防火墙的具体操作过程如下: [root@www ~]# /etc/init.d/iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@www ~]# /etc/init.d/iptables stop # ç 重复执行确认已关闭 [root@www ~]# chkconfig iptables off # ç 关闭开机自启动命令,前面已经关闭这里就无需执行 [root@www ~]# chkconfig --list|grep ipt iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off 3.4.5 Linux 系统安全最小原则说明 最小化原则 对 Linux 系统安全来说极其重要,即多一事不如少一事。 具体包括如下 几个方面: ‰‰ 安装 Linux 系统最小化,即选包最小化,yum 安装软件包也要最小化,无用的包不装。 第 3 章 CentOS 6.6 连接管理及优化 89 ‰‰ 开机自启动服务最小化,即无用的服务不开启。 ‰‰ 操作命令最小化。例如:能用“rm -f test.txt”就不用“rm -fr test.txt”。 ‰‰ 登录 Linux 用户最小化。平时没有特殊需求不登录 root,用普通用户登录即可。 ‰‰ 普通用户授权权限最小化,即只给用户必需的管理系统的命令。 ‰‰ Linux 系统文件及目录的权限设置最小化,禁止随意创建、更改、删除文件。 3.4.6 更改 SSH 服务器端远程登录的配置 Windows 服务器的默认远程管理端口是 3389,管理员用户是 administrator,普通用 户是 guest。Linux 的管理用户是 root,普通用户默认有很多个,远程连接默认端口 22。 这些通常有 IT 经验的人都知道。那么黑客是否也知道呢?他们当然知道,甚至比我们 更清楚,所以,为了系统安全,必须隐藏或更改上述默认配置。更改配置的命令如下: [root@www ~]#cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori # →更改配置前进行备份,是系统管理员的一个良好的习惯。 [root@www ~]#vi /etc/ssh/sshd_config # →编辑 sshd_config #### by oldboy#2011-11-24## Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no ####by oldboy#2011-11-24## 其中,sshd_conf ig 修改的相关参数说明见表 3-4。 表 3-4 修改的参数说明 3 参  数 说  明 Port 指定 sshd 守护进程监听的端口号,默认为 22。默认在本机的所有网络接口 上监听,也可以通过 ListenAddress 指定只在某个特定的接口上监听。 端口范围:0 ~ 65535,不能与已有的服务器端口冲突。 一般建议改为比 1024 大的端口 PermitEmptyPasswords 是否允许密码为空的用户远程登录。默认为“no” PermitRootLogin 是否允许 root 登录。可用值如下:“yes”(默认)表示允许;“no”表示禁止; “ without-password”表示禁止使用密码认证登录;“ forced-commands-only” 表示只有在指定了 command 选项的情况下才允许使用公钥认证登录,同时其 他认证方法全部被禁止,这个值常用于做远程备份之类的事情 UseDNS 指定 sshd 是否应该对远程主机名进行反向解析,以检查此主机名是否与其 IP 地址真实对应。默认值为“yes”。 建议改成“no”,否则可能会导致 SSH 连接很慢 GSSAPIAuthentication no 解决 Linux 之间使用 SSH 远程连接慢的问题  Linux 下 SSH 远程连接服务慢的解决方案请见老男孩的博客:http://oldboy.blog.51cto.com/2561410/1300964。 跟老男孩学 Linux 运维:Web 集群实战90 将以上信息更改后,保存退出。 执行如下命令重启 sshd,使修改的配置生效: [root@www ~]# /etc/init.d/sshd reload 重新载入 sshd: [ 确定 ] 或者 [root@www ~]# /etc/init.d/sshd restart Stopping sshd: [ OK ] Starting sshd: [ OK ] 提示: reload为平滑重启,不影响正在SSH连接的其他用户,因此要好于 restart。 此时远程连接 Linux,就仅有 oldboy 用户可通过 52113 端口远程连接到系统中了 (本地登录的用户不受影响)。 除了手工操作之外,也可以通过命令行批量修改对应的参数,命令集如下: echo "#--------sshConfig 修改 ssh 默认登录端口 , 禁止 root 登录 ----------#" \cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%F%H%M%S"` sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config egrep "UseDNS|52113|RootLogin|EmptyPass|GSSAPIAuthentication" /etc/ssh/sshd_config /etc/init.d/sshd reload 还可以通过 sed 命令快速增加参数内容,如下: [root@www ssh]# sed -ir '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no' sshd_config [root@www ssh]# sed -n '13,17p' sshd_config Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no 注意,在重启 sshd 后,当前的 CRT 仍然可以连接服务器,直到退出重新登录为止。 如下: [root@www ~]# netstat -an|grep 10.0.0.100 <==ip 是客户机的 IP。 tcp 0 52 10.0.0.7:22 10.0.0.100:52255 ESTABLISHED tcp 0 0 10.0.0.7:22 10.0.0.100:53242 ESTABLISHED 退出 CRT 之后,登录会显示无法连接(如图 3-30 所 示 )。 第 3 章 CentOS 6.6 连接管理及优化 91 此时要修改登录用户和登录端口才行,如图 3-31 所示。 图 3-30 新窗口无法远程连接 SSH 图 3-31 修改登录端口和用户 配置完毕,重新连接后的结果如下: [oldboy@www ~]$ whoami oldboy 如果需要系统管理可以切换到 root 用户,切换命令如下: [oldboy@www ~]$ su - root # ç 注意,此处需要的是 root 用户的密码 Password: [root@www ~]# whoami root 除了前面介绍的安全知识以外,还有更高级的 SSH 安全策略,具体如下。 1)更改 SSH 监听的 IP,使其仅监听内网 IP。命令如下: [root@web01 ~]# sed -n '13,20p' /etc/ssh/sshd_config ####by oldboy#2011-11-24## Port 52113 PermitRootLogin no PermitEmptyPasswords no UseDNS no GSSAPIAuthentication no ListenAddress 10.0.0.7:52113 # ç 企业仅指定监听本机内网 IP 地址 ####by oldboy#2011-11-24## 2)通过防火墙限制仅能使用内网 IP 连接此服务器。限制命令如下: iptables -I INPUT -p tcp --dport 52113 -s 10.0.0.0/24 -j ACCEPT # ç 默认规则为 DROP 时的限制 SSH 命令 3)通过拨号到 VPN 服务器,然后从局域网访问这些服务器,提升安全性。其实 Linux 主机安全就像我们居住的房子安全一样,其原理示意图如图 3-32 所示。 4)工作中的系统安全重点就是互联网 TCP/IP 连接、对外的 Web 服务器端口 http 80 和 https 443 的安全控制。 3.4.7 利用 sudo 控制用户对系统命令的使用权限 为了安全及管理的方便,可将需要 root 权限的普通用户加入 sudo 管理,这样用户 跟老男孩学 Linux 运维:Web 集群实战92 就可以通过自己的普通账户登录,利用 root 的权限来管理系统了,当然也就不需要有 root 账号及密码了。 内部通道SSH 隐蔽起来, 必须拨号 VPN 后才能 SSH 连接,并且配置都是改过的: ip 10.0.0.7, port: 52113 username, passwd 前门对外只开放 80 及 443 端口 图 3-32 Linux 服务器安全形象示意图 执行如下 visudo 命令,即可打开 sudo 的配置文件进行编辑。 [root@wwwentos ~]#visudo # →相当于直接编辑 /etc/sudoers,但用命令方式更安全,推荐 在 /etc/sudoers 文件的大约第 98 行下面,添加需要提升为 root 权限的普通用户名及 对应权限,格式如下: visudo 或者 vi /etc/sudoers,在 98 行下面加入,也可以在其他位置加入。 root ALL=(ALL) ALL <== 此行是 98 行 oldboy ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel 上述内容不同列对应的说明见表 3-5。 表 3-5 sudo 提权配置说明 用户或组 机器 =(授权角色) 可以执行的命令 user MACHINE= COMMANDS oldboy ALL=(ALL) /usr/sbin/useradd,/usr/sbin/userdel 提示: 如果 oldboy 用户被授予上述权限,那么它可在所有的机器上以所有的角色 运行 useradd、userdel 命令。 如果是针对用户组,则对应的授权命令如下: % 用户组 机器 =(授权使用哪个角色的权限) /usr/sbin/useradd 通过 sudo 进行授权管理系统的目的:既能让运维人员干活,又不能让其威胁系统 第 3 章 CentOS 6.6 连接管理及优化 93 安全,其实就是前面讲的用户权限最小化原则,还可以审计用户使用 sudo 的提权操作 命令。 为了管理方便,这里暂时给 oldboy 授权 all 权限,即可以管理整个系统。 详细操作过程为:输入 visudo 找到第 98 行,并在该行下面放入如下内容。 oldboy ALL=(ALL) NOPASSWD: ALL # →这个配置结尾的 ALL 表示 oldboy 可拥有完全的系统管理权限,NOPASSWD 表示提权执行命令时 不提示密码 配置完成后要进行检查,命令如下: [root@www ~]# grep oldboy /etc/sudoers oldboy ALL=(ALL) NOPASSWD: ALL 也可以使用如下快速操作命令增加 sudo 授权,仅限于批量管理的情况: \cp /etc/sudoers /etc/sudoers.ori echo "oldboy ALL=(ALL) NOPASSWD: ALL " >>/etc/sudoers tail -1 /etc/sudoers visudo -c # →直接追加内容没有语法检查,因此要单独执行语法检查命令 将以上信息更改后,保存退出。 此时再以 oldboy 用户登录系统时,就可以通过执行类似 sudo ls -l /root(sudo 后面 加正常命令)的命令以 root 用户的权限管理系统了,如下: [oldboy@www ~]$ ls /root ls: cannot open directory /root: Permission denied # →可以看到,oldboy 用户是无法直接访问访问 /root 家目录的 [oldboy@www ~]$ sudo ls /root anaconda-ks.cfg install.log install.log.syslog # →通过 sudo 命令,使得 oldboy 用户具备了访问 /root 目录的权限 说明: ‰‰ 通过 sudo 授权管理后,所有用户执行授权的特殊权限格式为“sudo 命令”。 ‰‰ 如果需要切换到 root 执行相关操作,可以通过“ sudo su -”命令,注意,此命令 提示的密码为当前用户的密码,而不是 root 的密码。 ‰‰ 执行“sudo -l”命令可以查看当前用户被授予的 sudo 权限集合。如下: [oldboy@oldboy ~]$ sudo -l [sudo] password for oldboy: Matching Defaults entries for oldboy on this host: User oldboy may run the following commands on this host: (ALL) /usr/sbin/useradd, (ALL) /usr/sbin/userdel ‰‰ 对于 Linux 系统 bash 的内置命令,一般无法进行 sudo 授权,例如 cd 命令。 sudo 授权与 su 切换的原理示意图如图 3-33 所示。 跟老男孩学 Linux 运维:Web 集群实战94 皇帝 root 可以让你当宰相 但是不能让你当 皇帝 执行 su - 或 su - root 相当于农 民起义,推翻皇帝,改朝换 代了。需要输入 root 密码才 能登录 普通用户 sudo su - root sudo su - root sudo su - root 功高盖主了,也可以改朝 换代了,最大化授权 sudo sudo touch /etc/test.txt,让 普通人做只有皇帝能做的 事情,需要皇帝事先授权 (sudoers 文 件) 图 3-33 su 与 sudo 用户角色切换原理图 在生产环境中,通常会禁止 root 远程登录,不过,会为每个运维人员建立一个普通 账号,然后根据运维人员的需求,通过 sudo 控制登录系统的权限,事实证明这是一个 不错的权限管理方式。当然,在笔者的生产环境中还使用了 ldap 统一认证登录及授权 管理的方式。即只要有一个账号和密码,全公司多个机房系统内通行无阻(系统登录、 SVN、VPN 等),有关这部分内容的讲解,在老男孩教学的高级课程中会有涉及。在此, 大家了解一下即可。 普通用户的环境变量问题:在早期的 Centos 5 系统中,普通用户执行系统管理相关 命令会遭遇到环境变量问题,导致找不到执行的命令(CentOS 6 以后的系统已经不存在 这个问题了)。 解决办法:先对比 root 和 oldboy 用户下默认的 PATH 环境变量,命令如下。 root@wwwentos ~# echo $PATH /application/jdk/bin:/application/jdk/jre/bin:/usr/kerberos/sbin:/usr/ kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/ bin:/root/bin [oldboy@centos oldboy]$ echo $PATH /application/jdk/bin:/application/jdk/jre/bin:/usr/kerberos/bin:/usr/ local/bin:/bin:/usr/bin:/bin:/home/oldboy/bin:/home/oldboy/bin 经过对比可发现普通用户上几个关键的环境变量(/usr/local/sbin:/sbin:/usr/sbin:)是 第 3 章 CentOS 6.6 连接管理及优化 95 导致找不到执行命令的原因(除非带全路径执行)。可通过如下命令来解决此问题: [oldboy@centos ~]$ vi ~/.bash_profile # →编辑 ~/.bash_profile 环境变量文件, 把 :/usr/local/sbin:/sbin:/usr/sbin 添加到 PATH 环境变量里 , 注意,每个路径之间用冒号分隔。 PATH=$PATH:$HOME/bin:/home/oldboy/scripts:/usr/local/sbin:/sbin:/usr/sbin # →加粗部分 :/usr/local/sbin:/sbin:/usr/sbin 即为添加的内容 export PATH [oldboy@centos ~]$ source ~/.bash_profile # →使添加的内容生效 [oldboy@@centos ~ $ echo $PATH /application/jdk/bin:/application/jdk/jre/bin:/usr/kerberos/bin:/usr/ local/bin:/bin:/usr/bin:/bin:/home/oldboy/bin:/home/oldboy/bin:/home/oldboy/ scripts:/home/oldboy/bin:/home/oldboy/scripts:/home/oldboy/bin:/home/oldboy/ scripts:/usr/local/sbin:/sbin:/usr/sbin sudo 授权对于 bash 的内置命令处理,是一个难题,因为内置命令没有实体文件和 路径,不过一般都有解决方法,例如可以使用 sudo ls 替代 sudo cd,有的网友使用 sudo bash 后再使用内置命令,这是很危险的,不推荐。 3.4.8 Linux 中文显示设置 此项优化为可选项,即调整 Linux 系统的字符集设置,那么,什么是字符集呢? 简单地说,字符集就是一套文字符号及其编码。目前 Linux 下常用的字符集有如下 几种。 ‰‰ GBK:定长,双字节,不是国际标准,支持的系统不少,实际企业用的不多。 ‰‰ UTF-8:非定长,1 ~ 4 字节,广泛支持,MySQL 也使用 UTF-8,企业广泛使用。 可通过快捷的命令方式在 /etc/sysconf ig/i18n 中添加如下内容,使其支持中文显示: [root@www ~]# cat /etc/sysconfig/i18n LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" [root@www ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori [root@www ~]# echo ' LANG="zh_CN.UTF-8"' >/etc/sysconfig/i18n # →相当于用 vi /etc/sysconfig/i18n 添加 LANG="zh_CN.UTF-8" 内容 [root@www ~]# source /etc/sysconfig/i18n # →使上文修改生效 [root@www ~]# echo $LANG zh_CN.UTF-8 提示:  ‰‰ 注意“zh_CN.UTF-8”的大小写字母。 ‰‰ 这个中文显示配置要与你自己的 SSH 客户端的配置一致。默认情况下就是老男 孩演示的配置。 ‰‰ 调整 SSH 客户端 CRT 的字符集,使其与 Linux 服务器端一致(UTF-8),如 图 3-34 所示。 跟老男孩学 Linux 运维:Web 集群实战96 图 3-34 客户端 CRT 字符集设置 查看字符集设置的结果,如下: [root@www ~]# cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8" 登录 Linux 系统查看中文字符是否正常显示的步 骤如下: 1)将服务器端字符集(/etc/sysconf ig/i18n)改为 LANG="zh_CN.UTF-8"。 2)将客户端字符集(CRT)调整为 UTF-8。 3)命令行执行 setup 命令,看到原来中文乱码的 窗口不乱了,正确显示中文字符了(如图 3-35 所 示 )。 3.4.9 设置 Linux 服务器时间同步 先看一下 Windows 系统的时间同步设置,如图 3-36 所示。由于计算机有了该设置, 所以,你会发现计算机时间比手表的时间更准确。 Linux 系统的时间同步服务为 ntp 服务。 我们可以手动同步互联网时间到本地 Linux 主机,命令如下: [root@www ~]# /usr/sbin/ntpdate time.nist.gov 4 Feb 14:21:30 ntpdate[19433]: adjust time server 24.56.178.140 offset -0.114353 sec ç 如果时间服务器连不上,可以去网上搜索合适的时间服务器,例如:/usr/sbin/ntpdate ntp. sjtu.edu.cn [root@www ~]# which ntpdate /usr/sbin/ntpdate <== 注意这个路径,Centos5 为 /sbin 图 3-35 客户端 setup 命令的窗口 图 3-37 小规模集群时间同步架构 D C B A ۯ͵ᕌᓢಊ᱘೧Ԡ 和 ntpserver2 进行时间同步。 时间同步,然后内部的所有服务器都与 ntpserver1 的时间服务器,由这两台服务器与外部时间服务器 所示,其中 ntpserver1 和 ntpserver2 互备,为内部 大规模集群时间同步架构的示意图如图 3-38 部服务器都同步外部互联网已有的时间服务器。 所示,即网络内部不搭建时间服务器了,所有内 当前,小规模时间同步架构的示意图如图 3-37 网内服务器的时间都与 ntp server 同步就可以了。 大,那么最好是在网内部署一个时间同步服务器 ntp server,然后让自己的 在机器数量少时,可利用以上定时任务进行互联网时间同步,如果机器数量 提示: usr/sbin/ntpdate time.windows.com >/dev/null 2>&1 保存退出 # →这个命令其实就是写一个定时任务,相当于执行 crontab -e 然后加入内容:*/5 * * * * / */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 #time sync by oldboy at 2010-2-1 [root@www ~]# crontab -l 2>&1' >>/var/spool/cron/root [root@www ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null [root@www ~]# echo '#time sync by oldboy at 2010-2-1' >>/var/spool/cron/root 利用定时任务 crond 把上述的命令每 5 分钟自动执行一次,命令如下: 图 3-36 Windows 时间同步设置 第 3 章 CentOS 6.6 连接管理及优化 97 [root@www ~]# echo 'export TMOUT=300' >>/etc/profile 把上述命令放入配置文件,使其可以永久生效,命令如下。 ls # ç 可以看到文件里记录命令的数量也变少了 rz ls ls ifdown eth0 [root@www ~]# cat ~/.bash_history [root@www ~]# export HISTFILESIZE=5 下,注意此处的配置仅临时生效。 设定用户的命令行历史记录文件(~/.bash_history)记录指定命令数量的示例命令如 46 history 45 HISTSIZE=5 44 TMOUT=10 43 TMOUNT=10 # 连接的超时时间 42 whoami [root@www ~]# history [root@www ~]# export HISTSIZE=5 设置 Linux 命令行的历史记录数示例命令如下,注意此处的配置仅临时生效。 2. 设置 Linux 的命令行历史记录数 timed out waiting for input: auto-logout # ç 10 秒提示超时 [root@www ~]# [root@www ~]# export TMOUT=10 设置闲置账号超时时间的示例命令如下,注意此处的配置仅临时生效。 1. 设置闲置账号超时时间 3.4.10 历史记录数及登录超时环境变量设置 有关 ntp 服务,此处不再深入讲解了。大家可以自行查阅相关文章。 图 3-38 大规模时间同步架构 ntpserver2 D C B A ntpserver1 ۯ͵ᕌᓢಊ᱘೧Ԡ 跟老男孩学 Linux 运维:Web 集群实战98 第 3 章 CentOS 6.6 连接管理及优化 99 [root@www ~]# echo 'export HISTSIZE=5' >>/etc/profile [root@www ~]# echo 'export HISTFILESIZE=5' >>/etc/profile [root@www ~]# tail -3 /etc/profile export TMOUT=300 export HISTSIZE=5 export HISTFILESIZE=5 [root@www ~]# source /etc/profile # ç 使得配置文件生效 在上述命令中,涉及的系统控制变量说明如下。 ‰‰ TMOUNT=10:连接的超时时间控制变量。 ‰‰ HISTSIZE=5:命令行的历史记录数量变量。 ‰‰ HISTFILESIZE=10:历史记录文件的命令数量变量(~/.bash_history)。 提示: 实际工作中类似的变量还有不少,大家可以根据企业工作需求选择使用,最 好执行前加上 export 命令。更多 Linux 系统的环境变量,大家可以执行 man bash 查询。 3.4.11 调整 Linux 系统文件描述符数量 文件描述符是由无符号整数表示的句柄,进程使用它来标识打开的文件。文件描 述符与包括相关信息(如文件的打开模式、文件的位置类型、文件的初始类型等)的文 件对象相关联,这些信息被称作文件的上下文。文件描述符的有效范围是 0 到 OPEN_ MAX。 对于内核而言,所有打开的文件都是通过文件描述符引用的。当打开一个现有文 件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用 open 或 creat 返回的文件描述符标识该文件,并将其作为参数传递给 read 或 write,文件 描述符定义的内容如下。 /* Standard file descriptors. */ #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */ 查看 Linux 服务器文件描述符设置的情况可以使用 ulimit -n 命令,文件描述符大小 默认是 1024。 [root@www ~]# ulimit -n 1024 对于高并发的业务 Linux 服务器来说,这个默认的设置值是不够的,需要调整。 调整方法 1: 跟老男孩学 Linux 运维:Web 集群实战100 执行 vim /etc/security/limits.conf 命令,在文件结尾加上如下一行。 * - nofile 65535 或者直接执行如下一行命令追加上述内容到文件尾部: [root@www ~]# echo '* - nofile 65535 ' >>/etc/security/limits.conf [root@www ~]# tail -1 /etc/security/limits.conf * - nofile 65535 配置完成后,需重新登录才可以生效,查看如下: [root@www ~]# ulimit -n 65535 调整方法 2: 直接把 ulimit -SHn 65535 命令加入 /etc/rc.local,用以设置每次开机启动时配置生 效,命令如下。 cat >>/etc/rc.local</server/scripts/del_file.sh (续) 跟老男孩学 Linux 运维:Web 集群实战104 [root@oldboy ~]# cat /server/scripts/del_file.sh find /var/spool/postfix/maildrop/ -type f |xargs rm -f [root@oldboy ~]# echo "00 00 * * * /bin/sh /server/scripts/del_file.sh >/ dev/null 2>&1" >>/var/spool/cron/root [root@oldboy ~]# crontab -l #del clientmqueue files by oldboy at 2010-09-26 00 00 * * 0 /bin/sh /server/scripts/del_file.sh >/dev/null 2>&1 [root@web01 ~]# df -i ç 查看磁盘 inode 总量、剩余量、使用量 Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 479552 55781 423771 12% / tmpfs 127032 1 127031 1% /dev/shm /dev/sda1 51200 38 51162 1% /boot 3.4.14 隐藏 Linux 版本信息显示 在登录到 Linux 主机本地(非 CRT 连接)前,会 显示系统的版本和内核,如图 3-39 所示。 登录后执行如下命令,将产生登录前终端显示 内容的实际存放文件。 [root@www ~]# cat /etc/issue CentOS release 6.6 (Final) Kernel \r on an \m [root@www ~]# cat /etc/issue.net CentOS release 6.6 (Final) Kernel \r on an \m 执行如下命令清除 Linux 系统版本及内核信息: [root@www ~]# > /etc/issue [root@www ~]# cat /etc/issue [root@www ~]# > /etc/issue.net [root@www ~]# cat /etc/issue.net 3.4.15 锁定关键系统文件,防止被提权篡改 要锁定关键系统文件,必须对账号密码文件及启动文件加锁,防止被篡改。上锁命 令如下: chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 提示: 上锁后,所有用户都不能对文件修改删除。 解锁的命令如下: 图 3-39 登录 Linux 前的终端显示图 第 3 章 CentOS 6.6 连接管理及优化 105 chattr -i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab 提示: 上锁后,如需临时操作,可以解锁后对文件进行修改,之后再上锁。 如果想更加安全,可以把 chattr 改名转移,防止被黑客利用。命令如下: [root@oldboylinux ~]# mv /usr/bin/chattr /usr/bin/oldboy1 [root@oldboylinux ~]# chattr -i /etc/passwd /etc/shadow /etc/group /etc/ gshadow /etc/inittab -bash: /usr/bin/chattr: 没有那个文件或目录 [root@oldboylinux ~]# oldboy1 -i /etc/passwd /etc/shadow /etc/group /etc/ gshadow /etc/inittab [root@oldboylinux ~]# lsattr /etc/passwd ç 查看被上锁后的文件属性 ----i--------e- /etc/passwd 提示:chattr 有很多参数,例如 -a 等,如果读者要了解更多,请执行 man chattr 查看 3.4.16 清除多余的系统虚拟账号 操作前要先根据公司系统提供的服务确定哪些账号不需要使用,如果不确定就不要 操作了,一般情况下,一个规范的系统提供的服务都比较少,因此,系统中默认的绝大 多数虚拟用户都可以删掉,例如:bin、adm、lp、halt、mail、uucp、operator、games、 gopher、ftp、dbus、vcsa、abrt、ntp、saslauth、postf ix、tcpdump 等。这些用户本身也 是无法登录的,因此,此项优化不是必须的。 3.4.17 为 grub 菜单加密码 为 grub 菜单加密码的目的是防止他人修改 grub 进行内核等启动设置,以及用单用 户模式启动进行破解 root 密码等操作。实际上此步可以在安装系统的过程中设定,安装 系统后的具体设定步骤如下。 (1)先利用 /sbin/grub-md5-crypt 产生一个 MD5 密码串,命令如下: [root@www ~]# /sbin/grub-md5-crypt Password: Retype password: $1$hoY96$dM9GlbjKLbi/GV8J9neOm1 (2)修改 grub.conf 文件,命令如下: [root@www ~]# vi /etc/grub.conf 1 # grub.conf generated by anaconda 2 # 3 # Note that you do not have to rerun grub after making changes to this file 4 # NOTICE: You have a /boot partition. This means that 跟老男孩学 Linux 运维:Web 集群实战106 5 # all kernel and initrd paths are relative to /boot/, eg. 6 # root (hd0,0) 7 # kernel /vmlinuz-version ro root=/dev/sda3 8 # initrd /initrd-[generic-]version.img 9 #boot=/dev/sda 10 default=0 11 timeout=5 12 splashimage=(hd0,0)/grub/splash.xpm.gz 13 hiddenmenu 14 password --md5 $1$hoY96$dM9GlbjKLbi/GV8J9neOm1 # 注意:password 要加在 splashimage 和 title 之间,否则可能无法生效 15 title oldboy's CentOS 6 (2.6.32-504.el6.x86_64) 16 root (hd0,0) 17 kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=2e902291-a225-42 73-8bd9-c9da961c65e9 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT =latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM r hgb quiet 18 initrd /initramfs-2.6.32-504.el6.x86_64.img 设置完成后,下次开机需要管理 grub 时就会提示输入密码,如图 3-40 所示。 图 3-40 开机后的 grub 菜单 3.4.18 禁止 Linux 系统被 ping 此项优化不是必须的,而且有时我们自己也会通过 ping 来检查服务器是否异常, 对于要求很高的中小企业服务器,设置禁止 ping 也是可以的。从安全角度来说,禁止 ping 还是会增加系统安全的。禁止 ping 的命令如下: [root@www ~]# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf [root@www ~]# tail -1 /etc/sysctl.conf net.ipv4.icmp_echo_ignore_all=1 [root@www ~]# sysctl -p 其实这个禁止 ping 的方法不是最佳策略,因为禁止 ping 后,我们自己也无法通过 第 3 章 CentOS 6.6 连接管理及优化 107 ping 检查了。还原上述禁止 ping 的操作,因为工作中用得较少,命令如下: 删除 /etc/sysctl.conf 中的 net.ipv4.icmp_echo_ignore_all=1,保存后, 并执行如下命令 echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all 比较好的策略是通过 iptables 设置让特定的 IP 可以 ping,如让内网用户 ping,其 他外部用户不能 ping。例如:在默认策略为 drop 的情况下,可以执行如下命令,使 10.0.0.0/24 网段允许 ping。 iptables -t filter -I INPUT -p icmp --icmp-type 8 -i eth0 -s 10.0.0.0/24 -j ACCEPT 3.4.19 升级具有典型漏洞的软件版本 截止到作者写书时,openssl、openssh、bash 存在很多软件漏洞,在企业场景需要 对其进行修复,操作步骤如下。 1)首先查看相关软件的版本号,命令如下: [root@www ~]# rpm -qa openssl openssh bash openssl-1.0.1e-30.el6.x86_64 bash-4.1.2-29.el6.x86_64 openssh-5.3p1-104.el6.x86_64 2)升级已知漏洞的软件版本到最新,命令如下: [root@www ~]# yum install openssl openssh bash -y [root@www ~]# rpm -qa openssl openssh bash openssh-5.3p1-104.el6_6.1.x86_64 bash-4.1.2-29.el6.x86_64 openssl-1.0.1e-30.el6_6.5.x86_64 3.5 Linux 基础优化与安全重点小结 1)不用 root 登录管理系统,而以普通用户身份登录,通过 sudo 授权管理。 2)更改默认的远程连接 SSH 服务器端口,禁止 root 用户远程连接,甚至更改 SSH 服务只监听内网 IP。 3)定时自动更新服务器的时间,使其与互联网时间同步。 4)配置 yum 更新源,从国内更新源下载安装软件包。 5)关闭 SELinux 及 iptables(在工作场景中,如果有外部 IP 一般要打开 iptables, 高并发、高流量的服务器可能无法开启)。 6)调整文件描述符的数量,进程及文件的打开都会消耗文件描述符数量。 7)定时自动清理邮件临时目录垃圾文件,防止磁盘的 inodes 数被小文件占满(注 跟老男孩学 Linux 运维:Web 集群实战108 意 CentOS 6 和 CentOS 5 要清除的目录不同)。 8)精简并保留必要的开机自启动服务(如 crond、sshd、network、rsyslog、sysstat)。 9)Linux 内核参数优化 /etc/sysctl.conf,执行 sysctl -p 生效。 10)更改系统字符集为“zh_CN.UTF-8”,使其支持中文,防止出现乱码问题。 11)锁定关键系统文件,如 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、 /etc/inittab,处理以上内容后把 chattr、lsattr 改名为 oldboy 并转移,这样就安全多了。 12)清空 /etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。 13)清除多余的系统虚拟用户账号。 14)为 grub 引导菜单加密码。 提示: 上述仅为安装 Linux 后的一些基础优化,更多针对不同业务服务器的优化思路 见 http://oldboy.blog.51cto.com/2561410/988726。“Linux 基础优化(老男 孩学生活学活用)”见http://lspgyy.blog.51cto.com/5264172/1308977。 3.6 有关 VMware 虚拟机的使用问题 在 VMware 虚拟环境,做完上述操作后的 Linux 主机可以做一个快照,然后当作 模板机永久保留,以后再需要学习时,可以克隆一个新的机器使用,系统安装和优化 是较为简单的操作,没必要多次重复操作。不过,在克隆虚拟机及使用的过程中也会 遇到一些问题。比如,在老男孩的教学过程中,发现有学生通过 VMware 8 的完全克 隆功能快速创建了一台版本为 CentOS 6.6 的 Linux 虚拟机,但遇到了如下问题无法 解决。 创建后的症状:启动之后使用ifconf ig,发现无IP 地址,只有回环地址为 127.0.0.1。因此考虑是否因为 MAC/IP 地址及主机名都与克隆前的源主机相同(源主机 采用手动方式配置的 IP)而产生此问题。 修改 IP 地址和 MAC 地址后,执行下面的重启等命令后依然无济于事: /etc/init.d/network restart ifup eth0 最终的解决办法如下。 1)编辑网卡对应的 eth0 的配置文件:vi /etc/sysconf ig/network-scripts/ifcfg-eth0, 删除配置文件中 HWADDR 地址及 UUID 所在的行,如下: HWADDR=00:0c:29:08:28:9f UUID=cee39dbb-6a10-4425-9daf-768b6e79a9c9 第 3 章 CentOS 6.6 连接管理及优化 109 提示: 当 然 也 可 以 根 据 实 际 的 HWADDR 和 UUID 修 改, 而 不 删 除。 见 /etc/ udev/rules.d/70-persistent-net.rules 文件内容帮助。 eth0 网卡文件修改后,代码如下: [root@oldboy ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPADDR=10.0.0.7 NETMASK=255.255.255.0 DNS2=8.8.8.8 GATEWAY=10.0.0.254 DNS1=10.0.0.254 IPV6INIT=no USERCTL=no 2)清空如下文件: > /etc/udev/rules.d/70-persistent-net.rules。 提示:机器名可以不改 3)重启系统,执行 reboot 或在 VM 外重启 Linux。 原因猜测:这是 VM 克隆为了防止源机器和克隆机器启动网络配置地址冲突而做的 保护策略,或者开发者自己也没有考虑到这个问题。 3.7 本章重点回顾 1)远程连接 Linux 的原理及相关软件介绍,重点掌握 SecureCRT 或 Xshell。 2)SecureCRT 的高效操作配置。 3)Linux 系统的大量基本优化技巧。 4)VMware 克隆虚拟机无法联网的故障排查解决。 3.8 本章知识相关考试题 1)企业场景面试题:Linux 系统如何优化? 2)企业场景面试题:SSH 服务连不上,如何排查?
还剩135页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

mols

贡献于2017-05-23

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf