目录
一、网络IO模型
参考下述两个链接:
- https://www.cnblogs.com/wlwl/p/10291397.html
- https://www.cnblogs.com/findumars/p/6361627.html
二、磁盘集群(DRBD)
参考下述两个链接:
- https://blog.csdn.net/weixin_30763455/article/details/101116807
- https://blog.51cto.com/sofar/1429162 【高可用分布式存储】
三、数据通过磁盘集群进行回写
如上图,网络传输协议栈(通过网卡) --> 网络是否有问题,导致B是否收到 --> 有无发消息回A,通过磁盘集群,网络同步传输的过程,将数据A回写到B,这么一个过程。
四、普通文件的IO调度
与磁盘集群回写,两者之间的差异是,除去集群B,单个通讯流程是一致的。
IO分析的三种情况:
- 网络IO
- DRBD
- mount nfs
- 本地磁盘IO
如果程序A,10M/s 进行IO请求,首先通过网络层传输
- 本地磁盘IO --> 没问题,直接写过去
- DRBD或网盘挂载 --> 需要保证传了这么多数据,还要保证收到这么多数据,那么就要确保足够的网络带宽支持 【需要考虑带宽问题,是否满足了10M/s的写】
异常情况:在网络层进队列,等待,丢包等情况【在分析的时候,需要考虑网络层是否限流】
五、网络知识
5.1 路由表
实现PC1与PC2之间的通讯。
5.2 网络分类
5.3 地址段
如上图,192.168.31.101/24 24 代表掩码 子网掩码:255.255.255.0
主机地址: 192.168.122.0 可以分多少个IP地址? 2**8 - 2 (0,255保留,可分配254个IP地址)
- 32 -24 =8 2**8-2 =254个地址
192.168.122.4/27、192.168.122.39/27 不配路由的情况下,这两个地址不可达
- 192.168.122.4/27 =192.168.122.0 有32个地址,分别是0-32 可用地址 1-31(0,32保留地址)
- 192.168.122.39/27 =192.168.122.33 有32个地址,分别33-64 可用地址 34-63(33,64保留地址)
- 32个地址的推算: 32-27 =5 2**5 =32 【可用的IP地址数 = 2**(32-掩码)-2】
- 主机数,可用通过掩码进行反推
子网掩码的作用:当IP地址不够用的情况下,可以通过掩码的形式将网络进行分离
同一个IP段,通过掩码将网络隔离开来。一根网线,通过组网的形式,将各个办公室网络进行隔离,互不干扰。提供掩码隔离,提高网络利用率。
5.4 VLAN网络传输
LAG链路聚合(类似于将2块网卡合并成一块新的网卡),链路聚合是在两个设备间使用多个物理链路创建一个逻辑链路的功能,这种方式允许物理链路间共享负载。网卡1G,通过LAG可以处理2G甚至更大的网络传输
5.5 路由
静态路由(点对点的网络传输) 【命令:ip r s】
是指用户或网络管理员手工配置的路由信息当网络拓扑结构或链路状态发生改变时,需要网络管理员手工配置静态路由信息
- 默认路由
是一种特殊的静态路由,当路由表中与数据包目的地址没有匹配的表项时,数据包将根据默认路由条目进行转发,默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以大大简化路由器的配置,减轻网络管理员的工作负担
- 动态路由
路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳的可用路由并继续转发报文
5.6 网络传输
网络请求(收包、发包、转发等),网络传输,重点需要排查网络问题(防火墙)
5.6.1 OSI 七层网络协议
![](https://i-blog.csdnimg.cn/blog_migrate/7a664ae6704a616c6e31725ba5d4e5a0.png)
数据链路调用情况:
系统过来一个数据包(请求),系统调用之前,不管是发包还是收包,都会产生si ---> 内核接口 --->网络协议栈(TCP、UDP协议) 以及 ip_tables 内核模块 ---> 网络层(IP) ---> 网络接口层 --->设备驱动。
用户层除了包括系统发出的请求(数据包),还存在很重要的iptables 命令,如果请求在防火墙已经被拦截,就不会去调用内核接口。
六、网络分析诊断
网络传输慢,需要去分析哪里慢?
了解网络传输的过程:A 通过网络传输发送网络请求,B收到网络请求,B处理请求,B通过网络传输回应请求,A收到B处理结束的请求。那么是A发送慢了? 还是B接收慢了? 还是网络传输慢了? 从这方面去展开分析......
6.1 网络诊断的初步排查 -- ping命令
- 关注连接的时间是否过长
- 关注是否存在丢包的情况
一次ping的过程中,会有哪些操作,通过tcpdump命令进行分析:
tcpdump -nn -i eth0 icmp
通过请求与回应的时间段,分析是否存在网络上的延迟。
6.2 ifconfig -- 认识Linux本身的网卡
- 可以通过mac地址,达到限制的目的
- 单个网卡默认最大能承受的数据报文(MTU)
- mtu 处理网络传输包,当包太大时,可能会存在分片的情况(MTU网卡最大的传输单元)
- MTU最大的传输 = 1500 -28(加报文头)
- 路由器最大的设置: 0 -9000
- >1500数据包请求 = 分片(把请求包按约定能处理的情况进行分片) --> 组包 ---> 处理 ---> 发送 -->完成这一次网络请求
- 分析的时候需要留意单位
- 1KB =1000byte 1KIB = 1024byte 1byte =8bit
- MB、Mb等区别,不同单元的换算等
除了通过ifconfig来分析网卡,也可以通过 sar 查看实时的网络情况:
- sar -n EDEV 1
- sar -n ICMP 1 ip协议,查看接发报的情况
6.3 netstat -- 网络分析
netstat -anp | grep http,该命令反应以下信息点:
- 进程是否正常启动
- 端口是否被占用
- 网络的连接状态
netstat -i # 查看每块网卡的信息
- 每块网络包发了多少包,收了多少包,是否存在丢包
- 网卡的信息概览
netstat -nat | awk '{print $6}' | sort | uniq -c | sort -rn # 分析网络连接状态
6.4 tcpdump命令 -- Linux抓取网络数据包
- tcpdump -nn -i eth0 icmp #监控某一款网卡,抓eth0的icmp协议报文
- tcpdump host 10.10.10.1 # 抓某个主机过来的包
- tcpdump -i ech2 -w 1.cap # 抓取eth2的包保存到1.cap中
- tcpdump ip host 10.10.10.1 and !10.10.10.2 # 获取主机10.1 除了和10.2之外所有主机通信的IP包
- tcpdump -i eth0 src host hostname # 截取主机hostname发送过来的所有包
- tcpdump -i eth0 dst host hostname # 监视所有送到主机hostname的数据包
抓到的包,可以用wireshark工具来进行查看和分析。
6.5 wireshark
wireshark,网络里面有一位(flags)标签表示可以分片
6.6 route -- 查看路由表信息
ethtool eth0 # 查看网卡
1000Mb的网卡,10Mb的带宽,最多能处理的网络传输是多少?
理论上能处理最大的上下行为: 10Mb/8 = 1.25MB byte(还需要 进行bit 换算成 byte)。在这种情况下,1000Mb的网卡,只能达到1.25MB的带宽利用
- 衡量利用率,可以使用:nicstat 1
- 查看收发包情况%util 【达到5,7,80%的利用率就应该开始分析】
6.7 网络问题定位
- 定位客户端,还是服务端问题 --- tcpdump
- 路由寻址 --- route,traceroute
- 查看哪段的错误计数 - ifconfig,netstat,sar
- 网络利用率情况 - nicstat
- 找出对应的端口,进程,ip等信息 - tcpdump
- 网络找si,通过si 找 softirqd
特例:对外是否有禁止的端口,ip,服务(系统设置,防火墙设置),及网络流量的波动性,tsar 回溯。
网络连接问题(a 请求并链接 b):
- 检查 web 容器的日志,访问Google 或 baidu确定是否是网络问题
- netstat进行分析
- time-wait 高代表着,等待足够的时间以确保远程tcp接收到连接中断请求的确认
平均响应时间大,TPS很低(网络方面的分析):
- 网络传输入手,看是否存在时间延迟,如50ms 【ping + tcpdump】
- 尽量减少网络原因(同一网段,内网压测最佳选择),使用ping 命令,结合tcpdump 截取报文,判断收发耗时
机器a 和机器b 发送消息都很快,在网络传输上花了很多的时间(接收时间比较长):
机器a: 发送请求 机器b: 接收请求并回复
通过节点传输上、网络进行优化。比如从路由的转发和CDN加速的技巧,traceroute。
机器a 和 机器b 发送消息的时候就已经很慢,什么原因:
可能是系统问题 & 程序问题 & 资源问题,也可能是cpu满了,queue 满了,网卡限速等问题
网络资源占用率高,怎么排查问题:
- nicstat 做统计
- tcpdump 找进程,找端口
- ps 找pid,找服务
网络长连接与短连接的区别:
看是否会断开,如银行业务。从安全系数来理解,长连接更差。区别如下:
短连接:连接 ---》传输 ---》断开 【如网站请求】
长连接:连接 ---》传输 ---》保持 ..... ---》传输... ---》直到主动断开关闭 【DB】
监控集群:可以通过普罗米修斯进行集群监控。