Linux集群和自动化维导读

Preface  前言

为什么要写这本书

笔者从事系统运维和网站架构设计的工作已有10多年,现在在一家外企担任云平台架构师。云计算是现在的主流技术,未来也有很好的发展趋势,云计算的流行对于传统的运维知识体系来说,其实也造成了冲击,有很多读者经常向笔者咨询工作中的困惑,比如从事系统运维工作3~5年后就不知道该如何继续学习和规划自己的职业生涯了。因此笔者想通过此书,跟大家分享一下自己的工作经验和心得(包括传统运维和云平台运维工作的区别与对比),以期解决大家在工作中的困惑。本书提供了大量项目实践和线上案例,希望能让大家迅速了解Linux运维人员的工作职责,快速进入工作状态并找到成长方向。希望大家通过阅读此书,能够掌握Linux系统集群和自动化运维及网站架构设计的精髓,从而能够轻松愉快地工作,并提升自己的职业技能,这就是笔者写作此书的初衷。

运维架构师之路

在成为运维架构师之前,笔者从事过很长一段时间的系统集成、运维和管理工作,在CDN门户网站、电子广告、电子商务领域也有不少的沉淀和积累,在之前的《构建高可用Linux服务器》一书中已经跟大家分享了很多跟Linux集群有关的知识。笔者目前的主要工作职责是维护和优化公司的DSP电子广告业务平台,主要方向是云计算和大数据方面。需要维护的数据中心和机器数量非常之多,所以自动化运维和DevOps是目前的主要工作方向,此外,也会涉及网站架构设计及调优工作,因此在此书中特意将这部分工作经验分享出来,希望大家能从中学到新的知识体系,借以提升自己的职业技能。

读者对象

本书适合以下读者阅读。

中高级系统管理员

系统架构设计师

高级程序开发人员

运维开发工程师

如何阅读本书

本书是笔者对实际工作中积累的技术和经验所做的总结,涉及大量的知识点和专业术语。全书总共分为三大部分,第一部分包含第1章和第2章,主要讲解进行系统架构设计的软硬件环境,以及生产环境下的Shell脚本和Python脚本。其中,第2章的内容是以Shell为主,Python为辅,Shell部分讲得比较详细,Python部分需要重点关注的地方也有所提及。之所以这样安排,主要是考虑到大多数搞开发的读者或DevOps工程师都是Java程序员出身,对Shell脚本语言不是很熟悉。第二部分包含第3章、第4章和第5章,主要讲自动化运维,包括Fabric、Ansibel和Puppet三大工具,大家可以结合自己的实际环境来选择对应的工具。第三部分包含第6章、第7章和第8章,主要讲的是Linux集群和网站架构设计,特别是第8章,分别以百万PV、千万PV及亿级PV的网站为例来详细说明网站系统架构设计的相关技术,然后细分五层来解说网站的架构,并指出了设计网站的压力及关注点所在。

大家可以根据自己的职业发展和工作需求来选择不同的章节进行阅读或学习。

关于本书中的配置文件、Shell脚本和Python脚本的编号,这里也略作说明,比如1.5.3节中有1.sh,表示这是1.5.3节的第一个Shell脚本;如果是2.py,则表示是1.5.3节的第二个Python脚本;其他依此类推,在哪个章节中出现的配置文件或脚本就在哪个章节中寻找,这样对照起来阅读理解会比较方便。此外,书中多次出现的Nginx配置文件nginx.conf也在对应的章节里。本书相关的GitHub地址为http://github.com/yuhongchun/automation。

勘误

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

致谢

感谢爱女媛媛的出生,你的降临是上天赐给我的最好礼物,是我进行写作的源泉和动力。

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

感谢好友三宝这么多年来对我的信任和支持,从始至终一直都在支持和信任我。

感谢机械工业出版社华章公司的编辑杨福川和杨绣国,在你们的信任、支持和帮助下,我才能如此顺利地完成全部书稿。

感谢好友老男孩和刘天斯,闲暇之余和你们一起交流开源技术和发展趋势,也是一种享受。

感谢Linux之父—Linus Torvalds,他不仅创造了Linux系统,而且还创造了Git这么神奇的版本管理软件。

余洪春(抚琴煮酒)

中国,武汉

目     录

第1章 系统架构设计的构建基础

1.1 网站架构设计相关术语

1.1.1 什么是HTTP 1.1

1.1.2 什么是Web 2.0

1.1.3 软件开发C/S结构与B/S结构的区别

1.1.4 评估网站性能的专业术语

1.2 IDC机房的选择及CDN的选型

1.3 如何根据服务器应用选购服务器

1.4 CentOS 6.4 x86_64最小化安装后的优化

1.4.1 系统的基础优化                      

1.4.2 优化Linux下的内核TCP参数以提高系统性能

1.4.3 CentOS 6.4 x86_64系统最小化优化脚本

1.4.4 Linux下CPU使用率与机器负载的关系与区别

1.5 MySQL数据库的优化

1.5.1 服务器物理硬件的优化

1.5.2 利用tuning-primer脚本来调优MySQL数据库

1.6 小结

第2章 生产环境下的Shell和Python脚本

2.1 Shell和Python语言的简单介绍

2.2 Shell编程基础

2.2.1 Shell脚本的基本元素

2.2.2 Shell特殊字符

2.2.3 变量和运算符

2.3 Shell中的控制流结构

2.4 sed的基础用法及实用示例

2.4.1 sed的基础语法格式

2.4.2 sed的用法示例

2.5 awk的基础用法及实用示例

2.6 生产环境下的Shell和Python脚本分类

2.6.1 备份类脚本

2.6.2 统计类脚本

2.6.3 监控类脚本

2.6.4 开发类脚本

2.6.5 自动化类脚本

2.7 小结

第3章 轻量级自动化运维工具Fabric详解

3.1 Python语言的应用领域

3.2 选择Python的原因

3.3 Python的版本说明

3.4 增强的交互式环境IPython

3.5 Python(x,y)介绍

3.6 轻量级自动化运维工具Fabric介绍

3.6.1 Fabric的安装

3.6.2 命令行入口fab命令详解

3.6.3 Fabric的核心API

3.7 Fabric应用实例

3.7.1 开发环境中的Fabric应用实例

3.7.2 线上环境中的Fabric应用实例

3.8 小结

第4章 自动化部署管理工具Ansible简介

4.1 YAML语言介绍

4.2 Ansible的安装步骤 

4.3 利用ssh-keygen设置SSH无密码登录

4.4 Ansible常用模块介绍

4.5 playbook介绍

4.6 角色

4.7 Jinja2过滤器

4.8 小结

第5章 自动化配置管理工具Puppet

5.1 Puppet的基本概念及介绍

5.1.1 Puppet简介

5.1.2 学习Puppet应该掌握Ruby基础

5.1.3 Puppet的基本概念及工作流程介绍

5.2 安装Puppet前的准备工作

5.3 Puppet的详细安装步骤

5.4 Puppet的简单文件应用 

5.5 Puppet的进阶操作

5.5.1 如何同步Puppet-Client端上的常用服务

5.5.2 如何在Puppet-Client端自动安装常用的软件包

5.5.3 如何自动同步Puppet-Client端的yum源

5.5.4 如何根据不同名字的节点机器推送不同的文件

5.5.5 如何根据节点机器名选择性地执行Shell程序

5.5.6 如何快速同步Puppet-Server端的www目录文件

5.5.7 如何利用ERB模板来自动配置Apache虚拟主机

5.5.8 如何利用ERB模板来自动配置Nginx虚拟主机

5.6 Puppet的负载均衡方式

5.7 用GitHub来管理Puppet配置文件

5.8 小结

第6章 Linux防火墙及系统安全篇

6.1基础网络知识

6.1.1OSI网络参考模型

6.1.2TCP/IP三次握手的过程详解

6.1.3Socket应用及其他基础网络知识

6.2Linux防火墙的概念

6.3Linux防火墙在企业中的应用

6.4Linux防火墙的语法1

6.5iptables的基础知识

6.5.1iptables的状态state

6.5.2iptables的conntrack记录

6.5.3关于iptables模块的说明

6.5.4iptables防火墙初始化的注意事项

6.5.5如何保存运行中的iptables规则

6.6如何流程化编写iptables脚本

6.7学习iptables应该掌握的工具 

6.7.1 命令行的抓包工具TCPDump

6.7.2图形化抓包工具Wireshark

6.7.3强大的命令行扫描工具Nmap

6.8iptables简单脚本:Web主机防护脚本

6.9线上生产服务器的iptables脚本

6.9.1安全的主机iptables防火墙脚本

6.9.2自动分析黑名单及白名单的iptables脚本

6.9.3利用recent模块限制同一IP的连接数

6.9.4利用DenyHosts工具和脚本来防止SSH暴力破解

6.10TCP_Wrappers应用级防火墙的介绍和应用

6.11工作中的Linux防火墙总结

6.12Linux服务器基础防护知识

6.13Linux服务器高级防护知识

6.14如何防止入侵

6.15小结2

第7章 Linux集群及项目案例分享

7.1负载均衡高可用核心概念及常用软件

7.1.1什么是负载均衡高可用

7.1.2以F5 BIG-IP作为负载均衡器

7.1.3以LVS作为负载均衡器

7.1.4以Nginx作为负载均衡器

7.1.5以HAProxy作为负载均衡器

7.1.6高可用软件Keepalived

7.1.7高可用软件Heartbeat

7.1.8高可用块设备DRBD

7.1.9四、七层负载均衡工作流程对比

7.2负载均衡关键技术

7.2.1什么是Session

7.2.2什么是Session共享

7.2.3什么是会话保持

7.3负载均衡器的会话保持机制

7.3.1LVS的会话保持机制

7.3.2Nginx负载均衡器中的ip_hash算法

7.3.3HAProxy负载均衡器的source算法

7.3.4服务器健康检测技术

7.4Linux集群的项目案例分享

7.4.1案例分享一:用Nginx+Keepalived实现在线票务系统

7.4.2案例分享二:企业级Web负载均衡高可用之Nginx+Keepalived

7.4.3案例分享三:Nginx主主负载均衡架构

7.4.4案例分享四:生产环境下的高可用NFS文件服务器

7.4.5案例分享五:生产环境下的MySQL DRBD双机高可用

7.4.6案例分享六:生产环境下的MySQL数据库主从同步

7.4.7案例分享七:HAProxy双机高可用方案之HAProxy+Keepalived

7.4.8案例分享八:巧用DNS轮询做负载均衡

7.5软件级负载均衡器的特点介绍与对比3

7.6网站系统架构设计图

7.7小结

第8章 浅谈网站系统架构设计

8.1网站架构设计规划预案

8.1.1利用经验,合理设计

8.1.2规划好网站未来的发展

8.1.3合理选用开源软件方案

8.1.4机房及CDN选型

8.1.5节约成本

8.1.6安全备份

8.2百万级PV高可用网站架构设计

8.3千万级PV高性能高并发网站架构设计

8.4亿级PV高性能高并发网站架构设计

8.5细分五层解说网站架构

8.6小结

附录A HAProxy 1.4的配置文档

附录B rsync及inotify在工作中的应用

附录C 用Supervisor批量管理进程

时间: 2024-11-03 22:46:09

Linux集群和自动化维导读的相关文章

Linux集群和自动化维1.3 如何根据服务器应用选购服务器

1.3 如何根据服务器应用选购服务器   无论物理服务器是选用IDC托管还是AWS EC2云主机(以下为了简略说明,将它们统称为服务器),我们都要面临一个问题,那就是选择服务器的硬件配置,选购硬件配置时要根据服务器的应用需求而定.因为只通过一台服务器是无法满足所有的需求,并解决所有的问题的.在设计网站的系统架构之前,应该从以下方面考虑如何选购服务器: 服务器要运行什么应用. 需要支持多少用户访问. 需要多大空间来存储数据. 业务有多重要. 服务器网卡方面的考虑. 安全方面的考虑. 机架安排是否合

Linux集群和自动化维3.7.2 线上环境中的Fabric应用实例

3.7.2 线上环境中的Fabric应用实例 笔者线上的核心业务机器统一都是AWS EC2主机,机器数量较多,每个数据中心都部署了Fabric跳板机(物理拓扑图可参考图3-3),系统为Amazon Linux,内核版本为3.14.34-27.48.amzn1.x86_64,Python版本为Python 2.6.9. 如果公司项目组核心开发人员离职,线上机器就都要更改密钥,由于密钥一般是以组的形式存在的,再加上机器数量繁多,因此单纯通过技术人员手工操作,基本上是一项不可能完成的任务,但若是通过F

Linux集群和自动化维1.4.4 Linux下CPU使用率与机器负载的关系与区别

1.4.4 Linux下CPU使用率与机器负载的关系与区别  笔者的线上竞标业务机器,在业务最繁忙的一段周期内,发现Nginx单机并发活动的连接数超过了2.6万,机器负载(基本上不到4,Nagios监控系统并没有发送报警邮件和短信)和Nginx+Lua服务都是正常的,网卡流量并没有打满,但流量就是怎么也打不进去.经过深入观察,发现这段时期内每台机器的CPU利用率都已经很高了,基本都维持在99%-100%左右,这种情况应该是CPU资源耗尽了,导致不能再继续提供服务,所以这里有必要研究下CPU负载和

Linux集群和自动化维3.6 轻量级自动化运维工具Fabric介绍

3.6 轻量级自动化运维工具Fabric介绍 笔者公司目前的数据中心采用的是分布式部署方案,在全球多地都有数据中心.数据中心采用的是AWS EC2机器,在核心的数据中心里,EC2机器的数量比较多,基本上每个数据中心都在运行着几百台AWS EC2机器,而且业务繁忙的时候,会通过AWS AMI(Amazon系统映像)直接上线几十台相同业务的EC2机器,它们的机器类型.系统应用和配置文件基本上都是一模一样的,很多时候需要修改相同的配置文件和执行相同的操作,这个时候为了避免重复性的劳动就需要用到自动化运

Linux集群和自动化维2.6 生产环境下的Shell和Python脚本分类

2.6 生产环境下的Shell和Python脚本分类 生产环境下的Shell和Python脚本的作用还是挺多的,这里根据2.1节所介绍的日常工作中Shell脚本的作用,将生产环境下的Shell脚本分为备份类.监控类.统计类.运维开发类和自动化运维类.前面3类从字面意义上看比较容易理解,后面的两类需要稍微解释一下,运维开发类脚本是利用Shell或Python实现一些非系统类的管理工作,比如SVN的发布程序等:而自动化运维类脚本则是利用Shell或Python来自动替我们做一些烦琐的工作,比如自动生

Linux集群和自动化维2.1 Shell和Python语言的简单介绍

第2章 生产环境下的Shell和Python脚本 接触Linux系统十多年了,Shell和Python脚本都已经完全融入笔者的生活中了.虽然Shell脚本只是一个简单的解释型语言,不受开发人员的重视,但对于系统运维工程师来说,它的作用举足轻重,它就像我们的瑞士军刀一样,可以帮助我们简化日常的工作并减少工作量.在系统维护工作中,Shell脚本常常能比用C或C++语言编写的程序更快地解决相同的问题,此外,Shell脚本具有很好的可移植性,有时跨越Unix与POSIX兼容的系统,只须略作修改即可,甚至

Linux集群和自动化维3.1 Python语言的应用领域

第3章 轻量级自动化运维工具Fabric详解 近期公司的业务系统代码发布频繁,笔者同时在几个项目组里面穿插工作,发现发布和运维的工作都相当机械,加上频率比较高,导致时间的浪费也比较多.很多测试工作,例如通过SSH登录到测试环境,推送代码,然后修改Bug进行测试,这些操作都是非常机械并且具有重复性的.更让人郁闷的是,每次的操作都是相同的,命令基本上都是一样的,并且是在多台机器上执行,很难在本机上以一个脚本来搞定,主要时间都浪费在使用SSH登录和输入命令上了.这个时候需要一个轻量级的自动化运维工具,

Linux集群和自动化维2.2.3 变量和运算

2.2.3 变量和运算 变量是放置在内存中的某个存储单元,这个存储单元里存放的是这个单元的值,这个值是可以改变的,我们称之为变量. 其中,本地变量是在用户现有的Shell生命周期的脚本中使用的,用户退出后变量就不存在了,该变量只用于该用户. 下面都是跟变量相关的命令,这里只是大致地说明下,后面的内容里会有详细的说明,如下所示: 变量名="变量" readonly 变量名="变量"表示设置该变量为只读变量,这个变量不能被改变. echo $变量名 set  显示本地所

Linux集群和自动化维2.6.2 统计类脚本

2.6.2 统计类脚本 统计工作一直是Shell和Python脚本的强项,我们完全可以利用sed.awk再加上正则表达式,写出强大的统计脚本来分析我们的系统日志.安全日志及服务器应用日志等. 1. Nginx负载均衡器日志汇总脚本 以下脚本是用来分析Nginx负载均衡器的日志的,作为Awstats的补充,它可以快速得出排名最前的网站和IP等,脚本内容如下(此脚本在CentOS 5.8/6.4 x86_64下均已测试通过): #!/bin/bash   if [ $# -eq 0 ]; then