DevOps FT

 

 

SLB四层代理和七层代理的区别:
"四层负载均衡( L4 load balancing ):
主要工作于传输层( transport layer ),它主要处理消息的传递,而不管消息的内容。在互联网上,TCP就是HTTP传输方式的四层协议( Layer 4 Protocol )。四层负载均衡只针对由上游服务发送和接收的网络包,而并不检查包内的具体内容是什么。四层负载均衡可以通过检查TCP流中的前几个包,从而决定是否限制路由。

七层负载均衡( L7 load balancing ):
主要工作于处于OSI模型顶层位置的应用层( application layer ),它主要处理每条消息中的真正内容。在互联网上,HTTP是网络通讯中占据主导地位的七层协议( Layer 7 Protocol )。七层负载均衡在路由网络传输时比四层负载均衡更加复杂和巧妙,特别适合像HTTP这种基于TCP传输的方式。 一个七层负载均衡器终止网络传输并读取消息中的内容。它可以基于消息中内容( 比如URL或者cookie中的信息 )来做出负载均衡的决定。之后,七层负载均衡器建立一个新的TCP连接来选择上游服务( 或者再利用一个已经存在的TCP连接,通过 HTTP keepalives 的方式,见:https://www.nginx.com/blog/http-keepalives-and-web-performance/ )并向这个服务发出请求。七层负载均衡能够让均衡器做更小的负载均衡决定,并且会根据消息的内容( 比如压缩和加密 )利用最优化方式做出改变。它运用缓存的方式来卸载上游服务较慢的连接,并显著地提高了性能。

差别:7层的SLB直接把客户端对HTTPS的请求进行解密,虽然缓解后端服务器的运算压力,但是遇到有要求每一步都解密的,就会影响访问速度,就要用4层(IP+端口)的。"

 

Linux怎么查看磁盘已经成功挂载
df -h和fdisk -l;eg:使用命令mount挂载sda1:mount /dev/sda1 /boot,再执行df -h,查看,磁盘sda1已经成功挂载在了 /boot上。

 

Linux怎么清理inode文件:
df -h 看磁盘空间,df -i查看inode占用量,Iuse%会显示100%
du -hi先找到满的目录,然后查找目录下小文件最多的目录
案例:
服务器的Block虽然还有剩余,但inode已经用满,因此在创建新目录或文件时,系统提示磁盘空间不足,
/var/spool/clientmqueue/ 的时候 9个G的文件
原来是系统中开启了cron,而cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了这些文件;
所以crontab里面的命令后面加上 > /dev/null 2>&1 或者crontab里面的命令后面加上 > /dev/nu

 

2>&1 代表什么意思:
2>&1 : 将标准错误输出重定向到标准输出
2>/dev/null:把错误输出到“黑洞”
>/dev/null 2>&1 :标准输出和错误输出都进了“黑洞”
2>&1 >/dev/null :标准输出进了黑洞,错误输出打印到屏幕

 

Docker常用命令:
"镜像管理
docker images:列出本地所有镜像
docker search <IMAGE_ID/NAME>:查找image
docker pull <IMAGE_ID> : 下载image
docker push <IMAGE_ID>:上传image
docker rmi <IMAGE_ID>:删除image

docker version 查看docker容器版本
docker info 查看docker容器信息
docker images 列出本地images
docker ps 查看正在运行的容器, -q 查看正在运行的容器的ID, -a查看正在运行+历史运行过的容器, -s显示运行容器总文件大小
docker run
docker logs -f <容器名orID> 查看容器日志
docker stop redis 停止一个运行中的容器
docker kill redis 杀掉一个运行中的容器
docker rm redis 删除一个已停止的容器
docker rm -f redis 删除一个运行中的容器
docker rm -f $(docker ps -a -q) 删除多个容器
docker ps -a -q | xargs docker rm
docker rm -l db -l 移除容器间的网络连接,连接名为 db
docker rm -v redis -v 删除容器,并删除容器挂载的数据卷
网络管理
docker run -P:随机分配端口号
docker run -p 5000:5000:绑定特定端口号(主机的所有网络接口的5000端口均绑定容器的5000端口)
docker run -p 127.0.0.1:5000:5000:绑定主机的特定接口的端口号
docker run - d - p 127.0 . 0.1 : 5000 : 5000 / udp training / webapp python app . py:绑定udp端口号
docker port <CONTAINER_ID> 5000:查看容器的5000端口对应本地机器的IP和端口号

Raid:
"Raid 0:至少需要两块硬盘,磁盘越多,读写速度越快,没有冗余。
Raid 1:只能用两块硬盘,两块硬盘的数据互为镜像(写慢,读快),一块磁盘冗余。
Raid 5:至少需要3块硬盘,一块磁盘冗余。它是最通行的配置方式。具有奇偶校验的数据恢复功能的数据存贮方式。奇偶校验数据块分布于阵列里的各个硬盘中。
Raid 6:至少需要4块硬盘,2块磁盘冗余,硬盘的总数大于等于4即可。
Raid 10:至少需要4块硬盘,冗余一半的硬盘数量,但是硬盘的总数必须是大于或等于4的偶数(相当于每两块硬盘做一个Raid0,然后把各个Raid0做成一个Raid1)。

Raid 50:至少需要6块硬盘,磁盘的冗余相当于每三个硬盘做了一个Raid5,然后,每个Raid5又组合成了Raid0(Raid5中有一个硬盘冗余,即使坏了也不会破坏Raid0),所以,Raid50的磁盘的 冗余硬盘数量=磁盘总数÷3 。
Raid 60:至少需要8块硬盘

介绍七层网络模型,icmp是哪一层,有什么用?
"应用层:访问网络服务的接口//Telnet,FTP,HTTP,SNMP.DNS等。
表示层:提供数据格式转换服务//URL加密,口令加密,图片编解码。
会话层:建立端连接并提供访问验证和会话管理(SESSION)//服务器验证用户登入,断电续传。
传输层:提供应用进程之间的逻辑通信//TCP,UDP,SPX,进程,端口(socket)--数据段(Segment)
网络层:为数据在结点之间传输创建逻辑链路,并分组转发数据//路由器,错层交换机,防火墙,IP,IPX.RIP.OSPF--分组数据包(Packet)
链路层:在通信的实体间建立数据链路连接//网卡,网桥,二层交换机等--帧(Frame)
物理层:为数据端设备提供原始比特流的传输的通路//中继器,集线器,网线,HUB,等--比特(Bit)

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。属于网络层协议"

 

介绍tcp三次握手四次挥手,establish和time-wait状态是什么意思?

DevOps FT

 

 ----------------------------------------------------------------------------------------------------------

DevOps FT

握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段:
1 首先客户端向服务器端发送一段TCP报文:SYN=1,Seq=X(X一般为1,这里以1为例)
随后客户端进入SYN-SENT阶段
2 服务器端接收到来自客户端的TCP报文之后,结束LISTEN阶段,并返回一段TCP报文:SYN=1,ACK=1,seq=y,ack=x+1,
随后服务器端进入SYN-RCVD阶段。
3 客户端接收到来自服务器端的确认收到数据的TCP报文之后,明确了从客户端到服务器的数据传输是正常的,结束SYN-SENT阶段。
并返回最后一段TCP报文:ACK=1,seq=x+1,ack=y+1
随后客户端进入ESTABLISHED阶段。
服务器收到来自客户端的“确认收到服务器数据”的TCP报文之后,明确了从服务器到客户端的数据传输是正常的。结束SYN-SENT阶段,进入ESTABLISHED阶段。

挥手之前主动释放连接的客户端结束ESTABLISHED阶段。随后开始“四次挥手:
1 客户端想要释放连接,向服务器端发送一段TCP报文:FIN=1,seq=u
随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据,注意:这里不发送的是正常连接时传输的数据(非确认报文),而不是一切数据,所以客户端仍然能发送ACK确认报文。

2 服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文:ACK=1,seq=v,ack=u+1;随后服务器端开始准备释放服务器端到客户端方向上的连接。
客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段.
3 服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文:FIN=1,ACK=1,seq=w,ack=u+1;随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据。
4 户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文: ACK=1,seq=u+1,ack=w+1;随后客户端开始在TIME-WAIT阶段等待2MSL;服务器端收到从客户端发出的TCP报文之后结束LAST-ACK阶段,进入CLOSED阶段。由此正式确认关闭服务器端到客户端方向上的连接。
客户端等待完2MSL之后,结束TIME-WAIT阶段,进入CLOSED阶段,由此完成“四次挥手”。

1、CLOSED:这个状态不是一个真正的状态,是图中假想的一个起点或者是终点
2、LISTEN: 服务器等待连接过来的状态
3、SYN_SENT: 客户端发起连接(主动打开),变成此状态,如果SYN超时,或者服务器不存在直接CLOSED
4、SYN_RCVD:服务器收到SYN包的时候,就变成此状态,
5、ESTABLISHED:完成三次握手,进入连接建立状态,说明此时可以进行数据传输了
6、FIN_WAIT_1:客户端执行主动关闭,发送完FIN包之后便进入FIN_WAIT_1状态
7、FIN_WAIT_2:客户端发送FIN包之后,收到ACK,即进入此状态,其实就是半关闭的状态
8、TIME_WAIT:这个状态从图上看,有3中情况,从FIN_WAIT_2进入,客户端收到服务器发送过来的FIN包之后进入TIME_WAIT状态,有CLOSING状态进入,这是同时关闭的状态,同时发起FIN请求,同时接收并做了ACK的回复,从FIN_WAIT_1进入,收到对端的FIN,ACK,并回复ACK,这个地方感觉是,FIN和ACK是一块来的.
9、CLOSE_WAIT:接收到FIN之后,被动的一方进入此状态,并回复ACK
10、LAST_ACK:被动的一端发送FIN包之后 处于LAST_ACK状态
11、CLOSING:两边同时发出FIN请求

 

怎么计算当前处于establish状态的tcp连接数
netstat -an |grep ESTABLISHED |wc -l

 

top命令中的load average什么意思?

通常来说三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越大,这也可能是服务器出现某种问题的信号。

Load Average的值应该小于CPU个数X核数X0.7。

1 对于单核机器来说,理想状态下,Load Average要小于1。
load=0.5表示CPU还有一半的资源可以处理其他的线程请求
load=1表示CPU所有的资源都在处理请求,没有剩余的资源可以利用了,
load=2则表示CPU已经超负荷运作,另外还有一倍的线程正在等待处理。
2 对于双核处理器来说,Load Average要小于2。
结论是:多核处理器中,你的Load Average不应该高于处理器核心的总数量。

 

top命令中cpu总量 有哪几种状态,什么含义?
10.6% us 用户空间占用CPU的百分比。
2.2% sy 内核空间占用CPU的百分比。
0.0% ni 改变过优先级的进程占用CPU的百分比
84.5% id 空闲CPU百分比
2.5% wa IO等待占用CPU的百分比
0.1% hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0% si 软中断(Software Interrupts)占用CPU的百分比

 

怎么看一个进程的cpu占用和内存占用?
ps -ef | grep java #先查找到进程
ps -aux|grep 进程号 #查看某个进程的CPU占用百分比和内存占用百分比
df -h #查看平常的CPU占用率

 

怎么看一个端口是哪个进程在监听?
lsof -i:端口号
netstat -tunlp|grep 端口号

 

一个服务器报警磁盘占用过高你怎么处理,如何给磁盘扩容?
用du -sh 来查找一下根下边每个目录的占用情况
清理大文件,如日志,最好备份而不是直接删除。
用df命令在查看空间是否被释放。
有时候我我们在删除大文件后发现空间还是没有被释放,这种情况往往是因为被删除的大文件正在某个进程所占用,这时候我们可以通过lsof |grep "deleted"来查看是哪个进程占用了这个文件,然后把相应的服务重启一下就可了。

清理inode文件:
修改inode的大小(默认建立GPFS时为10M)
mmchfs lv_edoc --inode-limit 20M

 

怎么使一个命令在后台运行?
1 在你的命令后添加一个 & gedit &
2 使用bg向后台发送运行命令 #按Ctrl + Z键,可以将一个正在前台执行的命令放到后台,并且暂停。您可以通过 在终端中输入jobs来查看所有后台任务的列表,然后使用fg命令将后台中的命令调至前台继续运行。然后使用bg命令,将一个在后台暂停的命令,变成继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)。
3 使用 nohup 向后台发送命令 nohup sudo nmap -sS --top-ports=15 192.168.150.1/24
4 使用系统重定向运行后台命令 ping -c5 8.8.8.8 >itpro.net.cn.log 2>&1 &
5 使用 disown 将 Linux 命令设置为后台运行 #先用& 运算符在后台发送任务,然后,键入disown以将其与shell分离。
6 使用 Tmux 在后台运行 Linux 命令 tmux new -d 'ping -c 10 8.8.8.8 > www.itpro.net.cn.log'

 

一个服务器报警磁盘占用过高你怎么处理?
用du -sh 来查找一下根下边每个目录的占用情况
1 清理大文件,如日志,最好备份而不是直接删除。
用df命令在查看空间是否被释放。
有时候我我们在删除大文件后发现空间还是没有被释放,这种情况往往是因为被删除的大文件正在某个进程所占用,这时候我们可以通过lsof |grep "deleted"来查看是哪个进程占用了这个文件,然后把相应的服务重启一下就可了。
2 查找空文件,通过命令能够定位是什么小文件导致的。
find / -type f -size 0
进入小文件目录,查找文件并批量删除
find ./ -type f -size 0 -exec rm {} \;
3 清理inode文件:
一般inode爆满情况就较为严重了,会报磁盘无空间 No space left on device
·如果iNODE满了,可以使用下述命令快速定位文件夹内文件数量
for i in /*; do echo $i; find $i | wc -l; done
或者查看inode使用情况:df -i 或者ls -li
如果删除 直接用 rm -rf xxx 基本是行不通的 会报 Argument list too long 问题,就是要删除的文件太多了,
find . -ctime +7 -name "*" | xargs -i rm -rf {}
删除当前目录下 7天前所有数据,如果还有 Argument list too long问题,就把时间适当调前一些,比如30天前 -ctime +30。
find /目录 -type f -exec rm {} \; #删除临时文件
find /home -type f -size 0 -exec rm {} \; #删除0字节的文件
·删除零碎文件有风险就 修改inode的大小(默认建立GPFS时为10M)
mmchfs lv_edoc --inode-limit 20M
在监控系统内加上指标,使用现成的脚本,指定要监控的路径:
./check_disk_inodes -p / -w 50 -c 70

 

如何给磁盘扩容?
1 用“fdisk -l”命令查看数据盘的已分区和未分区的信息。(使用“df –h”命令,无法看到未分区和格式化的数据盘)
2 执行以下命令,新建一个分区 fdisk /dev/xvdc
3 按照界面的提示,依次输入”p”(查看现有分区信息)、“n”(新建分区)、“p”(新建主分区)、“2”(使用第2个主分区),两次回车(使用默认配置),输入“w”(保存分区表),开始分区。
4 使用“fdisk -l”命令,即可查看到,新的分区xvdc2已经创建完成.

 

终止进程用什么命令? 带什么参数?
kill -15 pid。 #执行kill(默认kill -15)命令,系统会发送一个SIGTERM信号给对应的程序,大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。
kill -9 pid。 #系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。

 

怎么查看本机到192.168.10.10:8080是否可以连通?
1 ssh -v -p 端口号 用户名 @ip地址
2 curl ip地址:端口号


测试端口号命令:
telnet IP port #测试远程主机端口是否打开
nmap ip -p port #根据显示close/open确定端口是否打开
nc -v host port #端口未打开返回状态为非0
lsof -i:端口号 #如果没有任何输出则说明没有开启该端口号
netstat -lntp|grep 端口

 

netstat 命令:
一.查看哪些IP连接本机 netstat -an
二.查看TCP连接数
1)统计80端口连接数 netstat -nat | grep -i "80" | wc -l
2)统计httpd协议连接数 ps -ef | grep httpd | wc -l
3)统计已连接上的,状态为"established netstat -anp | grep ESTABLISHED | wc -l
4).查出哪个IP地址连接最多,将其封了 netstat -anp | grep ESTABL

 

Linux看域名服务端口号
grep domain /etc/services


怎么对一个服务器限制端口访问?
查看已经开放的端口号:
firewall-cmd --list-ports
关闭端口:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
重启防火墙:
firewall-cmd --reload


linux禁止特定ip访问某个端口
解决方法:
禁止特定ip访问8501端口的命令0:iptables -I INPUT -s 192.168.0.232 -ptcp --dport 8501 -j DROP
允许特定ip访问8501端口的命令1:iptables -D INPUT -s 192.168.0.232 -ptcp --dport 8501 -j DROP
允许特定ip访问8501端口的命令2:iptables -I INPUT -s 192.168.0.232 -ptcp --dport 8501 -j ACCEPT
其中命令1执行的次数要和命令0相等才能访问,比如命令0执行了2次,那么命令1也得执行2次才有效,但命令2执行一次即可.

 

Linux怎么将java命令加入系统PATH?
在Linux环境下,我们只需要在/etc/profile文件末尾添加如下配置:
export JAVA_HOME=/usr/local/java/jdk1.8.0_201
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
然后执行# source profile命令或重启ssh客户

Linux下修改PATH:
1、直接在命令行中设置PATH
PATH=$PATH:/Users/tonglei/.composer/vendor/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH设置就会失效。
2、在profile中设置PATH
vi /etc/profile
添加export PATH=$PATH:/Users/tonglei/.composer/vendor/bin
注:= 等号两边不能有任何空格。这种方法最好,除非手动强制修改PATH的值,否则将不会被改变。
编辑/etc/profile后PATH的修改不会立马生效,如果需要立即生效的话,可以执行# source profile命令或重启ssh客户端
3、在当前用户的profile中设置PATH
vi ~/.bash_profile
添加 PATH=$PATH:$HOME/bin:/Users/tonglei/.composer/vendor/bin
source ~/.bash_profile
让这次的修改生效。
注:这种方法只对当前用户起作用的,其他用户该修改无效。

上一篇:TCP的三次握手和四次挥手


下一篇:数字系统实验:编码电压转换