前
工欲善其事,必先利其器
发现有时候看看书很是很专注的。多读读书,不知不觉学到的还是挺多的。这里偶软遇到一句话,记下来:
我觉得,他的人生非常令人羡慕。不是因为取得的成就,而是因为每个人生阶段,他都在干不一样的事情:年轻时是程序员,中年时是科学家,老年时是新能源企业家。美国总统特朗普也是这种情况:年轻时是房地产商,中年时变成电视明星(《学徒》一口气拍了十季),老年时变成了总统。人生就好像一次旅行,不同时期能够从事不同的领域,就好像看到了不同的风景,体验了不一样的人生。
简介
- 书名:Linux运维最佳实践
- 作者:胥峰 杨俊俊
- ISBN:9787111545682
这本书里的内容,可以说是干货满满了,涉及到了平时业务里面可能会遇到的方方面面的东西,从服务优化,到高可用内容。
DNS
- 禁用域名的递归查询。
- 使用域名解析缓存 BIND
CDN
CDN 需要的两个关键技术,DNS视图技术 和 缓存和代理技术。CDN的经典的架构,由 Squid实现内容缓存,使用 Nginx 进行代理,最后使用 LVS 来对不同主机进行负载均衡。
CDN 的响应头里面包含了CDN的部分的信息,字段为 Last-Modified
,ETag
,Expires
,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-NAT
,LD-DR
,LD-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;
}
常见问题
- 400
如果正常请求出现 400,一般是请求header过大
client_header_buffer_size 16k;
- 413
文件上传过大,这个遇到过
client_max_body_size 10m;
- 499
客户端主动关闭连接 - 502,503
一般是 upstream 出问题了,无法连接 - 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 的专题脱了好久了。