面试题目整理一

本次整理只整理简答题目,关于选择和填空题目暂时不做整理。
1.如何插看http的并发请求数与其TCP连接状态

 ps -ef |grep  httpd  |wc -l  linux查看httpd的进程数
netstat  -n |awk '/^tcp/{++S[$NF]}END{for(a in S)print a,S[a]}'     查看Apache的并发请求数以及TCP连接状态

其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

netstat -n|grep ^tcp|awk '{print $NF}'|sort -nr|uniq -c

或者:

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}'

LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)

CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

ps -ef |grep  nginx |wc -l  --查看Nginx运行进程数

查看Apache运行进程数

 ps -ef |grep  httpd |wc -l

查看web服务器进程连接数

netstat  -antp|grep 80|grep  ESTABLISHED -c

查看mysql进程连接数

 ps -axef |grep mysqld -c

统计服务连接数量

netstat -an|grep -w "^tcp"|awk -F "[: ]+" '$5~/22/&&$NF~/ESTABLISHED/{i++}END{print i}'

2.统计出Nginx的access.log中每个接口的响应码情况,URL为第五列,响应码为第六列,分隔符是"|".

3.简述DNS进行域名解析的过程
DNS域名解析分为三个过程:
1.本地解析
查看DNS缓存
查看本地/etc/hosts文件
2.递归解析
查看LDNS服务器中是否有解析记录
3.迭代解析
1.向根域名服务器进行询问
2.向顶级域名服务器进行询问
3.向二级域名服务器进行询问
4.LDNS服务器获取二级域名响应A记录信息,进行缓存记录,将结果发送给主机

4.讲述一下LVS三种模式的工作过程
LVS-NAT:
修改请求报文的目标ip,多目标ip的DNAT
原理:客户端向VIP发起请求连接,Director在经过调度之后选取RS,将于本地端口与RS的端口做映射,然后RS返回数据director将数据返还客户端
LVS-TUN:
在原请求ip报文只为新加一个ip首部
客户端向VIP发送请求时,[源CIP;目的VIP],Director经过调度轮询后选择一个RS后使用隧道技术再次封装后向RS发送【源DIP;目的RIP [源CIP;目的VIP]】,RS通过隧道收到请求后拆开数据后得到[源CIP;目的VIP],发现目的IP为自己L0接口的IP得,后就把数据收下,找到数据后将数据直接通过公网返还给客户端[源VIP;目的CIP]
LVS-DR:
修改请求报文的源和目标ip
当客户端向VIP发起请求,[源ip;目标vip]的数据包通过路由器发送到director,然后director不修改其源ip目的的ip。经过调度后将目的Mac改为RS的Mac,RS收到数据后发现目标ip为本机的L0接口就将其收下,然后找到数据再将源ip改为L0目的ip为CIP直接通过公网返回客户端。
LVS-FULLNAT:
修改请求报文的源和目标ip

5.LVS/NGINX/HAPROXY优缺点
Nginx的优点是:

1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构

它的正则规则比HAProxy更为强大和灵活,这也是它目前广泛流行的主要原因之一

Nginx单凭这点可利用的场合就远多于LVS了。

2、Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势之一

相反LVS对网络稳定性依赖比较大,这点本人深有体会;

3、Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来

LVS的配置、测试就要花比较长的时间了,LVS对网络依赖比较大。

4、可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量,负载度比LVS相对小些。

5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点,不过其中缺点就是不支持url来检测。比如用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故障,Nginx会把上传切到另一台服务器重新处理,而LVS就直接断掉了

如果是上传一个很大的文件或者很重要的文件的话,用户可能会因此而不满。

6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器

LNMP也是近几年非常流行的web架构,在高流量的环境中稳定性也很好。

7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器

8、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx的就只有lighttpd了

不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃

9、Nginx也可作为静态网页和图片服务器,这方面的性能也无对手。还有Nginx社区非常活跃,第三方模块也很多

Nginx的缺点是:

1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点

2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测

  不支持Session的直接保持,但能通过ip_hash来解决

LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器

       它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)

LVS的优点是:

1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生

  这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低

2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西

  所以并不需要太多接触,大大减少了人为出错的几率

3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案

  如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived

4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。

5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等

LVS的缺点是:

1、软件本身不支持正则表达式处理,不能做动静分离

  而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在

2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了

  特别后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了

  相对而言,Nginx/HAProxy+Keepalived就简单多了。

HAProxy的特点是:

1、HAProxy也是支持虚拟主机的。

2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导

  同时支持通过获取指定的url来检测后端服务器的状态

3、HAProxy跟LVS类似,本身就只是一款负载均衡软件

  单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的

4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡

  对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡

5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

② static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似

 我们用其作为解决session问题的一种方法,建议关注;

⑤ri,表示根据请求的URI;

⑥rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;

⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

6.请画出数据包通过防火墙(iptables)的流程图
在这里插入图片描述

7.说说TCP/IP的七层模型
从低向高:
物理层 利用物理介质控制数据传输
数据链路层 控制一个网络内部数据传输 二层设备具有交换功能设备
网络层 控制数据信息从一个网络到达其他不同网络中 三层设备
具有路由功能设备
传输层 控制会话通信的可靠性(TCP协议)、高效性(UDP协议)
会话层 控制会话是否建立或者终止
表示层 产生的数据进行分段处理/组合过程 编码过程 解码过程 简单的加密功能 解密功能 HTTPS实现
应用层 产生传输发送的数据信息(服务协议 ssh http ftp)

8.写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP地址有哪些,能ping通则认为在线。

[root@localhost ~]# vim ping.sh 
for IP  in  {1..253}
do 
    ping -c 3 -f -q   192.168.1.$IP >>ping.log
if  [ $? -eq 0 ]
then
    echo -e  "\e[32;1m提示信息:10.0.0.$IP 正在使用\e[0m"
else
    echo -e  "\e[31;1m提示信息:10.0.0.$IP 未被使用\e[0m"
fi
done
[root@localhost ~]# 

9.由于磁盘空间紧张现在要求只能保留近7天的访问日志,请问如何解决?请给出解决办法或配置命令

find  /var/log  -type -f -name "*.log" -time +7 |xargs rm -f
rm -rf $(find  /var/log  -type f -name "*.log"  -time +7)
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;

10.每天晚上12点,打包站点目录/var/www/html 备份到/date目录下

[root@localhost date]# crontab -l
00  00 * * *  /usr/bin/sh  /date/back_www.log.sh
[root@localhost date]# cat back_www.log.sh 
#!/bin/bash
tar  zcvf  /date/html_$(date +%F_%T).tar.gz  /var/www/html/

注意:tar命令 打包到指定目录是直接在名字前面写着绝对路径,-C是指定解压的目录。

发布了154 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42506599/article/details/103880559