读书笔记《Linux运维最佳实践》

工欲善其事,必先利其器

发现有时候看看书很是很专注的。多读读书,不知不觉学到的还是挺多的。这里偶软遇到一句话,记下来:

我觉得,他的人生非常令人羡慕。不是因为取得的成就,而是因为每个人生阶段,他都在干不一样的事情:年轻时是程序员,中年时是科学家,老年时是新能源企业家。美国总统特朗普也是这种情况:年轻时是房地产商,中年时变成电视明星(《学徒》一口气拍了十季),老年时变成了总统。人生就好像一次旅行,不同时期能够从事不同的领域,就好像看到了不同的风景,体验了不一样的人生。

简介

  • 书名:Linux运维最佳实践
  • 作者:胥峰 杨俊俊
  • ISBN:9787111545682

这本书里的内容,可以说是干货满满了,涉及到了平时业务里面可能会遇到的方方面面的东西,从服务优化,到高可用内容。

DNS

  • 禁用域名的递归查询。
  • 使用域名解析缓存 BIND

CDN

CDN 需要的两个关键技术,DNS视图技术缓存和代理技术。CDN的经典的架构,由 Squid实现内容缓存,使用 Nginx 进行代理,最后使用 LVS 来对不同主机进行负载均衡。


CDN 的响应头里面包含了CDN的部分的信息,字段为 Last-ModifiedETagExpires,Cache-Control。ETag作为资源的ID,不同的缓存副本的不同。Cache-Control可以理解为缓存的有效时间。

防盗链的配置

一般的防盗链有两种办法,

  • 使用 Http Referer,判断是否referer为本站
  • 使用动态链接,在静态资源的后面加上key动态字段。
location ~ .*\.flv {
    vaild_referers none blocked *.woyo.com;
    if ($invaild_referer) {
        rewrite ^/(.*) https://err.i124u.cf/$1;
    }
}

书中直接使用 squid 实现防盗链,使用 perl

视频点播CDN的实践

这里是点播,区别于直播,点播文件是开始便存在的。系统一共有四大模块:

  • 同步源站服务器 所有的视频文件都在,实现给缓存服务器提供同步
  • 视频源站服务器 当缓存服务器没有 HIT 的时候,提供源站的视频访问。
  • 视频转发服务器 对URL进行多个节点之间的分发。
  • 缓存服务器 提供视频内容的缓存

大规模下载调度系统

比如游戏客户端下载这个场景下的问题。特别是在游戏的新版本的当天,整个的出流量是很大的。

处理的关键就在于使用CDN,对静态内容分发到不同的节点之上。

负载均衡以及高可用

LB 和 HA,也是重要的技术。

数据链路层负载均衡

数据链路层位于OSI的第二层,所以可以理解为物理硬件上的均衡,也就是网卡上的负载均衡。使用多块网卡,对流量进行分流,实现更高的单机的吞吐量。

4层LB

传输层位于 OSI 的第四层,所以也是四层的 负载均衡,包含了TCP和UDP协议,那么本质上,是对这些 TCP 连接或者UDP 的包,在不同IP的均衡主机之间进行分发。

特点:

  • 模型简单,和业务逻辑无关
  • 协议简单,吞吐量大
  • 应用广泛,所有的互联网应用都可

七层LB

第七次又是应用层,又可被称为内容交换。最常见的就是 Nginx 的实现的 七层的负载均衡,也就是我们的 proxy_pass, upstream

特点:

  • 模型复杂度高 需要对协议内容进行分析,比如提取 Host
  • 吞吐量小
  • 对后台可以进行精细化控制

基于 DNS 的负载均衡

配置简单,直接对同一个 二级域名配置多个 A记录 即可。问题是,DNS缓存问题,导致了服务器切换时间变长。

基于重定向的负载均衡

根据服务状况,直接在前端内容对请求站点进行重定向。

客户端特性的负载均衡

  • Nginx 的hash分流
  • Mysql 的读写分离

高可用

实际上负载均衡里面已经包含了部分的高可用的思想,down掉的负载主机实际是不再进入轮询的。
书中推荐基于VRRP的 keepAlived,前面自己已经有了篇文章讲这个的。

LVS

LVS(Linux Virtual Server),这个是个狠东西,是一个 四层负载均衡的方案。完整的负载均衡器和后端服务器一起组成了这个虚拟服务器,用户是不可感知的。

LVS 的三种模式

这个感觉已经是老问题了;LD-NATLD-DRLD-TUN 。但是总是感觉自己理解的有点隐隐约约,所以这里就好好的复习一下。

NAT 就可以理解我我们平时使用的NAT模式,有一个主机来提供了一个子网,后端服务器都在子网当中,负载均衡器负载收到请求,分发请求,接收后端回复,返回客户端,所以负载均衡器这里的单点的压力可能会代理瓶颈,架构理解为 叉子一样。

DR(Direct Routing)直接路由,这个模式,解决了上面的单点的问题,多个负载均衡器使用 一个 VIP,客户端请求VIP,均衡器收到了请求数据之后,修改MAC地址,为接收数据的后端主机,(转发给了后端主机),后端主机处理完成之后,直接回复给 Client ,这样的话数据就不需要回源到均衡器。降低了节点的负担。

TUN,是LVS的一种原创的转发方式,负载均衡器不是直接进行转发,而是封装成了 IPIP数据包,之后再发给后端服务器。(IPIP可以理解为VPN一样的一个隧道协议),这样的话使得后端主机不需要和均衡器(关键是客户端)在一个子网,大大提高了安全性


LVS是一个非常重要的技能,后面自己再深入学习!

HAProxy

可以四层也可以七层负载均衡的老牌软件,比LVS的特性是更加的优良,一般结合KA,实现高可用的负载均衡。

Nginx 的反代和LB

用的有点多了,一些内容直接跳掉吧。

监控采集可以直接使用内部功能:

location /ngx_status {
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
}

常见问题

  1. 400
    如果正常请求出现 400,一般是请求header过大
    client_header_buffer_size 16k;
  2. 413
    文件上传过大,这个遇到过
    client_max_body_size 10m;
  3. 499
    客户端主动关闭连接
  4. 502,503
    一般是 upstream 出问题了,无法连接
  5. 504
    一般是 upstream 超时了,连接成功,没有回应

高性能web站点

缓存,前面已经加了好多次了,通过nginx的cache 功能,本站已经如此实现。
压缩,使用 Gzip,一样一件实现。用来降低流量,减少传输时间。

减少Cookie携带

如果对于内容请求每次都从主站拉取,这样每次请求就携带大量的cookie内容,导致了无用的带宽浪费,可以把静态资源定向到旁站。

监控

  • 日志监控
  • 可用性监控
  • 性能监控

安全

  • WAF
  • OSSEC

硬件

RAID

  • RAID10 性能最好容错最好,问题是容量损失 2/3
  • RAID6 最多坏两块盘
  • RAID5 容量损失最小,最多允许怀一颗盘

网络分析技术

Tcpdump

tcpdump,不需要使用协议栈,直接在内核的层面对报文进行抓取,所以可以抓取到被iptable在INPUT链上被Drop的包


常用的五个参数

  • i 指定网卡
  • nnn 禁用已知转换
  • s 指定抓取的包大小 -s 0 大小为 262144 保证包内容不被截断
  • c 抓取包的数量
  • w 指定保存的文件

常用过滤器

  • host x 指定通信主机
  • tcp port x 指定TCP目的端口或源端口
  • icmp 仅抓取ICPM
  • ! 反向匹配,不抓取 port ! 22
  • and or 规则组合

后面结合 wireshark 来个网络专题

运营商劫持

这个问题,之前纳闷。书中看了才明白,营运商本身为了减少自己的流量开支(骗客户的钱),把用户的流量导流到旁路设备之上,来节约自己流量。

iframe的广告插入,因为http为明文,所以很容易的进行内容的注入。

重点重复学习法,看书越看越舒服。

重温了很多东西, 看得出自己的一些进步,也发现自己的很多不足。后面要针对 网络(tcpdump,wireshark,iptable)进行专题加强,还有 shell 的专题脱了好久了。

留下点什么吧