Last active
December 22, 2021 10:34
-
-
Save chenzx/29fc5a06dcbbd1660406 to your computer and use it in GitHub Desktop.
网站运维技术与实践
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
网站运维技术与实践 | |
跳转至: 导航、 搜索 | |
目录 | |
1 服务器监测 | |
2 产品访问监测 | |
3 数据采集、传输与过滤 | |
4 数据分析与报警 | |
5 测试评估 | |
6 集群架构规划 | |
7 弹性控制和部署 | |
8 分布式文件系统 | |
9 数据库 | |
10 备份与同步技术 | |
11 运维制度化与自管理 | |
服务器监测 | |
ps auxfww # COMMAND列显示进程的父子关系 | |
ps awxo pid,rss,vsz,etime,args --sort=rss | grep apache | tail | |
netstat -st | grep conn | |
iostat -x | |
IOPS %r %w | |
dstat 更偏重实时采集 | |
针对Intel多队列网卡,可通过绑定队列到CPU中断的方式让中断分布平均化 | |
lspci -vvv | grep MSI | |
更好的做法是,手工绑定每个队列的rx/tx到同一个CPU上: | |
从/proc/interrupts取出中断的MASK,写到对应的/proc/irq/$IRQ/smp_affinity | |
mtr(My traceroute):集成ping和traceroute | |
iptraf -z eth0 | |
tcpdump -nnvXSs 0 -c2 icmp | |
或可tcpdump -s0 -w保存好全部数据包,交给WireShark | |
SystemTap .stap/.stp(待监控的模块可以不必是debug版吗?)(相当于运行时的动态trace输出) | |
stap -ve 'probe begin { log("hello"); exit(); }' 动态编译内核模块??? | |
stap -e 'probe kernel.function("vfs_read") { printf("%s\n", $$parms$$); exit(); }' | |
探针 | |
同步事件 | |
kernel.function("vfs_read").call/return | |
syscall.read | |
process("/lib/libc.so.6").function("*malloc") | |
kernel.statement("*@kernel/sched.c:2917") | |
异步事件 | |
begin, end, timer.jiffies(1000), timer.ms(200).randomize(50) | |
额外的函数:pid() uid() execname() tid() gettimeofday_s() print_stacktrace() | |
目标变量 | |
$$vars probe点的每个变量 | |
$$locals, $$parms 输出的值是内存地址,要看内容需要在后面再加一个$ | |
$$return | |
运用示例 | |
设置tcp_init_cwnd | |
stap文件:probe kernel.function("tcp_init_cwnd").return { $return = $1 } | |
stap -p4 -g -m initcwnd tcp_init_cwnd.stap 10 && staprun -o initcwnd.out -D initcwnd.ko && insmod initcwnd.ko | |
SmokeKing网络质量监测 | |
Nagios分布式监测 | |
Shinken项目:完全用Python重新实现了Nagios Core??? | |
SNMP网络监控:MIB/OID | |
OMD项目 | |
产品访问监测 | |
HAR:实际上就是将HTTP请求响应整理为JSON保存 | |
p89 QQ.com是国内前端优化最好的门户网站(1秒钟以内??) | |
基调网络:Lastmile/IDC | |
p96 YAHOO! Boomerang | |
数据采集、传输与过滤 | |
RSyslog? | |
RainerScript | |
消息队列:JBoss Messaging、ActiveMQ、Qpid、RabbitMQ、Beanstalkd、HTTPSQS、Q4M | |
主流的消息中间件标准:AMQP(8字节为单位的数据流)、MQTT(小带宽)、STOMP(基于文本的)(JMS基于API的不推荐?) | |
ZeroMQ/redis | |
RPC | |
Thrift | |
Gearman:更偏向于任务分发 | |
p122 数据收集传输框架 | |
Twitter的Storm | |
Linkedin的kafka | |
Facebook的Scribe | |
Cloudera的Flume | |
Hadoop的Chukwa | |
日志收集系统框架 | |
Flume-ng 去除了原先架构中的ZooKeeper高可用等组件 | |
source, sink, channel | |
logstash | |
JRuby编写,除一小部分Joda和RPC连接ElasticSearch的插件,其余都可以在MRI上运行 | |
input, filter, output(插件) | |
Grok filter:将文本转换为JSON? | |
修改NginX默认日志格式为json,就可以免去不必要的额外处理 | |
WebUI:Kibana | |
数据分析与报警 | |
RRDtool | |
Holt-Winters预测算法? | |
Graphite | |
OpenTSDB | |
Splunk的开源替代:ES | |
可视化:AmCharts | |
信息推送:略 | |
测试评估 | |
IOzone | |
Netperf | |
sysbench | |
http_load | |
weighttp(配合lighttpd) | |
AutoBench | |
TCPcopy | |
集群架构规划 | |
IDC | |
CDN | |
DNS:Google “edns-client-subnet” | |
BGP和anycast(网络负责尽力将数据报投递到至少一个...有点像LVS) | |
anycast只能作为目的地址,不能作为源地址(所以只能用于UDP?如果能用于TCP呢?) | |
缓存设计 | |
Squid的LM-factor算法 / ACL控制 / aufs/coss缓存引擎 | |
使用SSD | |
FB的flashcache内核模块(把ssd作为缓存) ==> Squid-SSD / TrafficSerer-SSD | |
写入放大问题 | |
本地负载均衡 | |
LVS | |
注意,核心概念:集群对外显示一个公网IP,而网内各个主机分配一个VIP | |
转换机制:nat/fullnat/synproxy(TUN) -- 所有的L3数据包来回都要经过调度器,会不会有单点故障? | |
IP隧道 可以适应将请求数据包发送到全球WAN任一主机(全球转发?但是延时呢?) | |
直接路由(DR) | |
将数据包的目标MAC地址修改为后端选中服务器的,真实服务器收到数据包处理后,将响应直接发回给客户端源主机,无需经过调度器(关键是修改数据链路层)——嗯,这里对Linux Kernel的路由需要做怎么样的修改? | |
效率最高,但要求集群所有服务器都处于同一个网络(其实这没什么问题吧) | |
vs Yahoo! L3DSR(Direct Server Return) | |
改用DSCP(Differentiated Services Code Point)作为关系映射VIP(这意味着网内不能再用DSCP做QoS) | |
keepalived与VRRP高可用原理 | |
NginX的upstream(vs HAProxy) | |
consistent_hash | |
p271 和ngx_lua的配合 | |
squid的cache_peer | |
ICP/HTCP | |
弹性控制和部署 | |
SSH::Batch | |
Puppet | |
CFengine的描述语言接近于C语言,生成的则是XML,不适合运维人员? | |
ENC?实现“特定服务器具体加载哪种配置” | |
*命令行打包FPM | |
随时控制成本 | |
CGroup | |
cpuset | |
blkio | |
tc限速 | |
iptables标记和SMP不能共存,Linux内核在自动支持SMP后,已经去除了iptables owner模块关于pid/cmd的match支持 | |
p338 CloudFoundry仅能运行在Ubuntu 12.04上,而Ubuntu Server的市场占有率远远不如RHEL | |
分布式文件系统 | |
NFS | |
FUSE | |
MogileFS | |
数据库 | |
慢查询分析mysqlsla | |
Persona工具集 | |
监控:mytop、innotop | |
MySQL集群 | |
MHA:多Master方案,基本原理仍然是binlog传输和replaylog重放,最好开启5.5+半同步复制 | |
备份与同步技术 | |
rsync | |
inotify和sersync | |
netcat | |
murder:Twitter开源的P2P文件分发项目 | |
运维制度化与自管理 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment