运维面试积累

时间:2022-02-08 21:50:57

1.dns工作原理是什么:

1.假如客户机访问www.qq.com,操作系统会先检查自己本地的HOSTS文件是否有这个网站的映射关系,如果有直接调用,完成域名解析

2.如果HOSTS没有,则查找本地的DNS解析缓存,如果有该记录,则直接返回,完成域名解析。

3.如果本地缓存中没有,首先会找TCP/IP参数中设置的首选DNS服务器,在此叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区的资源中,则返回解析结果给客户机,完成域名解析。

4.如果都查询失败了,本地DNS会把请求发至13台跟DNS,根DNS判断这个域名是谁来授权管理,并会返还一个负责该*域名服务器的IP(比如。com)。本地DNS收到IP后,将会联系负责.com域的这台服务器,如果自己无法解析,会推送到二级域进行查询,直到找到主机。

5.本地域名服务器把返回的结果缓存,备下一次使用,同事将结果返回给客户机

 

2.DNS递归查询和迭代查询的区别是什么:

递归查询: 一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。

迭代查询(反复查询): 一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求。

 

3.半虚拟与全虚拟的区别:

半虚拟:半虚拟化是通过事先经过修改的客户机操作系统内核共享宿主底层硬件来实现的,优点是半虚拟化的虚拟机操作系统内核能够直接管理底层硬件,性能比全虚拟化技术更强,缺点是客户机操作系统内核需要事先进行修改,部署的便利性和灵活性都不够运维面试积累,兼容性不够好。

全虚拟:全虚拟化是通过客户机和宿主机直接的一个虚拟化逻辑层hypervisor来完全模拟底层硬件细节,优点是客户机的操作系统内核不需要做特殊配置,部署便利,灵活,兼容性好,缺点是客户机操作系统的内核不能够直接管理底层硬件,内核通过hypervisor管理底层硬件需要有转换开销,性能比半虚拟化略弱。

Kvm是 半虚拟。 Xen和vmware是全虚拟。


4.OSI七层参考模型

应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

每层含义访问:http://blog.csdn.net/youmu2010/article/details/6434867


5.nginx为什么可以处理高并发

Nginx 不同于 Apache2 的一点就是,Nginx 采用单线程,非阻塞,异步 IO 的工作模型。

Apache2 对于每一个请求,都会创建一个新进程或线程,会浪费很多内存和 CPU 时间,而 Nginx 使用操作系统提供的IO多路复用技术(epoll), 在一个线程中处理所有的请求。当一个 IO 操作开始的时候,Nginx 不会等待操作完成就会去处理下一个请求,等到某个 IO 操作完成后,Nginx 再回过头去处理这次 IO 的后续工作。


6.nginx和apache谁处理静态块:

nginx处理静态快,apache处理动态快。


7.http协议

http是应用层的面相对象的协议,全称是超文本传输协议,是客户端与服务器通信的协议,采用请求/响应的模式,最常用的有GET和POST请求


8.软连接与硬链接的区别:

若一个 inode 号对应多个文件名,则称这些文件为硬链接。因此,删除一个硬链接文件并不影响其他有相同 inode 号的文件。硬链接不能对目录进行创建,只可对文件创建。

软连接可以理解为windows下的快捷方式


9.请求一个网站的过程

域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户


10.linux中文件权限t和s分别是什么意思

suid的设置出现在文件拥有者的x位置上,如果之前用户有x权限,设置suid后,x就会成为s(小写的s);如果之前没有x权限,即-,设置之后就会成为S(大写S)。

这个脚本的所属主和所属组为root。我们当然可以以root的用户的身份执行它,但是如果在某种场合,普通用户也需要执行这个脚本来修改自己的密码的时候,也需要调用这个脚本,于是,我们设置了suid位,也就是我们看到的那样,在所属主的标志位上有个s。这样一来,其他人有读取和执行的权限,而且可以假如我们现在有个普通用户名为sunny,现在切换到sunny,执行此脚本,表面上我们看是执行成功了,其实我们是借助root用户的身份来执行它的,而不是sunny,这就是suid的作用。

T或T(Sticky):/tmp和 /var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件。


11.top命令第三行都是什么含义

6.7% us ― 用户空间占用CPU的百分比。

0.4% sy ― 内核空间占用CPU的百分比。

0.0% ni ― 改变过优先级的进程占用CPU的百分比

92.9% id ― 空闲CPU百分比

0.0% wa ― IO等待占用CPU的百分比

0.0% hi ― 硬中断(Hardware IRQ)占用CPU的百分比

0.0% si ― 软中断(Software Interrupts)占用CPU的百分比

静态查看的话可查看/proc/stat和/proc/loadavg显示处理器使用率和平均CPU使用率


12.netstat和ps的区别

netstat查看端口相关信息

ps查看当前正在运行的进程信息


13.写一条iptables允许192.168.0.3这个IP访问22端口

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT


14.SNAT和DNAT的区别:

SNAT:开放内网机器外网权限

DNAT:发布内部服务器,让外面的用户能访问到服务器。

资料参考:http://blog.chinaunix.net/uid-7411781-id-3442250.html


15.iptables设置做nat转发的步骤

首先开启内核转发的模块。
echo 1 > /porc/sys/net/ipv4/ip_forward  #这是个暂时的做法,重启后就会失效,好的做法是:
vi /etc/sysctl.conf
修改其中的net.ipv4.ip_forward = 1
DNS的配置在/etc/resolv.conf中添加DNS的IP即可
然后要让它立即生效,需要执行命令:
sysctl -p 

第二步添加NAT:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
#这条命令里的 eth0代表外网接口,-s 192.168.10.0/24代表内网段


16.网页返回常见状态码

200表示服务器成功处理请求。

201请求成功并且服务器创建了新的资源。

202服务器已经接受请求,但尚未处理。

400服务器不理解请求的语言,请求错误。

401身份验证错误

403服务器拒绝请求

404找不到网页

500服务器内部错误

502错误网关

503服务器不可用。

504网关超时

505服务器不支持请求中所用的http协议版本

参考网页:http://www.cnblogs.com/captain_jack/archive/2010/09/20/1831792.html


17.lvs、nginx、haproxy的区别

lvs优势:

1.抗负载能力强,工作在4层

2.工作稳定

3.无流量。lvs仅仅分发请求,而流量并不从它本身出去(dr)

4.基本支持所有应用。因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡

nginx:

1.nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等。

2.nginx也同样能承受很高负载且稳定,但负载度和稳定度差lvs还有几个等级:nginx处理所有流量所以受限于机器IO和配置

3.nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。

在使用上,一般最前端所采取的策略应是lvs,也就是DNS的指向应为lvs均衡器,lvs的优点令它非常适合做这个任务。

重要的ip地址,最好交由lvs托管,比如数据库的ip、webservice服务器的ip等等,这些ip地址随着时间推移,使用面会越来越大,如果更换ip则故障会接踵而至。所以将这些重要ip交给lvs托管是最为稳妥的,这样做的唯一缺点是需要的VIP数量会比较多。

nginx可作为lvs节点机器使用,一是可以利用nginx的功能,二是可以利用nginx的性能。当然这一层面也可以直接使用squid,squid的功能方面就比nginx弱不少了,性能上也有所逊色于nginx。

nginx也可作为中层代理使用,这一层面nginx基本上无对手,唯一可以撼动nginx的就只有lighttpd了,不过lighttpd目前还没有 能做到nginx完全的功能,配置也不那么清晰易读。另外,中层代理的IP也是重要的,所以中层代理也拥有一个VIP和lvs是最完美的方案了。

haproxy:

1、HAProxy是工作在网络7层之上。

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

3、支持url检测后端的服务器出问题的检测会有很好的帮助。

4.单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。

5、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:

第一阶段:利用Nginx或者HAProxy进行单点的负载均衡,这一阶段服务器规模刚脱离开单服务器、单数据库的模式,需要一定的负载均衡,但是 仍然规模较小没有专业的维护团队来进行维护,也没有需要进行大规模的网站部署。这样利用Nginx或者HAproxy就是第一选择,此时这些东西上手快, 配置容易,在七层之上利用HTTP协议就可以。这时是第一选择

第二阶段:随着网络服务进一步扩大,这时单点的Nginx已经不能满足,这时使用LVS或者商用F5就是首要选择,Nginx此时就作为LVS或者 F5的节点来使用,具体LVS或者F5的是选择是根据公司规模,人才以及资金能力来选择的,这里也不做详谈,但是一般来说这阶段相关人才跟不上业务的提 升,所以购买商业负载均衡已经成为了必经之路。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。

最终形成比较理想的状态为:F5/LVS<―>Haproxy<―>Squid/Varnish<―>AppServer。

 

18.常用的调度算法有什么:

1.轮叫调度

2.加权轮叫调度

3.最小连接调度

4.加权最小连接调度

 

19.lvs的三种路由方式

LVS-NAT:地址转换

LVS-DR:直接路由

LVS-TUN:隧道

详情参考:http://www.cnblogs.com/lixigang/p/5371815.html


20.redis两种持久化的区别

优点:

1.只有一个文件dump.rdb,方便持久化。

2.容灾性好,一个文件可以保存到安全的磁盘。

3.性能最大化,fork子进程来完成写操作,让主进程继续处理命令,所以是IO最大化。

4.相对于数据集大时,比AOF的启动效率更高。

缺点:

1.数据安全性低,当服务器还在等待写快照时出现了宕机,那么将会丢失数据。 

AOF持久化是指所有的命令行记录以redis命令请求协议的格式保存为aof文件。

优点:

1.数据安全,每进行一次命令操作就记录到aof文件中一次;

2.通过append模式写文件,即使中途服务器宕机,可以通过redis-check-aof工具解决数据一致性问题。

3.AOF机制的rewrite模式,用来将过大的aof文件缩小,

缺点:

1.文件会比RDB形式的文件大。

2.数据集大的时候,比rdb启动效率低。

 

21.linux文件删除原理

linux是通过link数量控制文件删除,一般来说,每个文件都有两个计数器:i_link和i_count

i_link是文件的硬链接数。 i_count是文件被进程调用数

只要i_link和i_count同时为0时,文件才回被删除。

rm删除的是文件的i_link数


22.linux系统的启动过程

1.加载BIOS

2.读取MBR

3.Boot Loader

4.加载内核

5.用户层init根据inittab文件来设定运行级别

6.init进程执行rc.sysinit

7.启动内核模块

8.执行不同运行级别的脚本程序 

9.执行/etc/rc.d/rc.local

10.执行/bi/login程序,进入登陆状态 

详细参考:http://blog.chinaunix.net/uid-26495963-id-3066282.html

 

23.top命令右上角的load average的值是什么意思,高于多少代表负载有问题

拆分出四个内容 :
1. load average(系统平均负载)是什么?
系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数.

2. load average的三个数值代表什么?
通过top\uptime\w可以获取到load average的值,它的三个数字值分别记录了一分钟\五分钟\十五分钟的系统平均负载.

3. 高于多少负载有问题? 
高于多少代表负载有问题呢,这里有两个法则:

“有多少核心即为有多少负荷”法则: 在多核处理中,你的系统均值不应该高于处理器核心的总数量。

“核心的核心”法则: 核心分布在分别几个单个物理处理中并不重要,其实两颗四核的处理器 等于 四个双核处理器 等于 八个单处理器。所以,它应该有八个处理器内核。


4. 我们以哪个数字为准?一分钟?五分钟?还是十五分钟?
我认为你应该着眼于五分钟或者十五分钟的平均数值。坦白讲,如果前一分钟的负载情况是 1.00,那么仍可以说明认定服务器情况还是正常的。 但是如果十五分钟的数值仍然保持在 1.00,那么就值得注意了(根据我的经验,这时候你应 该增加的处理器数量了).


24.当一个网站访问慢时,你怎么去优化 

翻译为: 当一个网站访问慢时, 你都是怎么去查找问题,和解决问题以达到优化效果的

第一,用5分钟排除网络因素,借助工具(如pagespeed)分析页面加载过程
1. 某个元素或者图片加载过慢: 具体原因具体分析
2. DNS解析时长问题: 可以通过购买解析服务, 来让自己的域名在各地DNS更多缓存
3. 网络带宽瓶颈: 考虑增加带宽
4. 网络线路波动: 考虑CDN,或者镜像站
第二,要考虑到服务器问题
1. 是否有服务器过载: 考虑增加硬件
2. I/O操作:数据库的频繁读写,服务器的频繁请求(包括静态文件的读取,图片的读取)等都属于I/O问题。对于数据库的问题,首先要优化SQL,存储过程等。如果单表数据量过大要考虑做分割或者运用程序来控制分表。如果请求量过大,要考虑做集群。对于服务器(静态)文件的I/O问题,则可以考虑做CDN,这样也可以解决地域性问题。对于动态文件的访问,则涉及到代码优化及负载均衡两项。
3. 具体应用优化: nginx针对访问量修改配置文件,调高Buffers 调低keep alive空连接时间等
第三,安全方面
1. 查看web\mail等其它服务日志,是否存在被攻击现象: 针对安全方面加固
2. 是否有其它攻击存在DDOS,WEB CC等


25.进程和线程的区别

翻译: 进程和线程的概念

进程(英语:process),是计算机中已运行程序的实体。进程是程序的基本执行实体,进程本身不是基本运行单位,而是线程的容器

线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

① 进程是系统进行资源分配的基本单位,有独立的内存地址空间; 线程是CPU调度的基本单位,没有单独地址空间,有独立的栈,局部变量,寄存器, 程序计数器等。
② 创建进程的开销大,包括创建虚拟地址空间等需要大量系统资源; 创建线程开销小,基本上只有一个内核对象和一个堆栈。
③ 一个进程无法直接访问另一个进程的资源;同一进程内的多个线程共享进程的资源。
④ 进程切换开销大,线程切换开销小;进程间通信开销大,线程间通信开销小。
⑤ 线程属于进程,不能独立执行。每个进程至少要有一个线程,成为主线程


26.常用的RAID原理

RAID 0连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率,但它没有数据冗余,因此并不能算是真正的RAID 结构。RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证,而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合。

RAID 1它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1 可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。简单来说就是:镜象结构,类似于备份模式,一个数据被复制到两块硬盘上。

RAID 10高可靠性与高效磁盘结构一个带区结构加一个镜象结构,因为两种结构各有优缺点,因此可以相互补充。主要用于容量不大,但要求速度和差错控制的数据库中。

RAID 5分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上,任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据。支持一块盘掉线后仍然正常运行。


27.有没有做过性能调优

这个是个大的话题,要反问是应用调优还是系统调优 没有进行过调优,基本调优步骤:
1. 找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈);
2. 性能优化的方案(升级硬件?改进系统系统结构?);
3. 达到合理的硬件和软件配置;
4. 使系统资源使用达到最大的平衡。


28.我想查看WEB日志中访问TOP 10的IP有哪些怎么查看

当时是面试官让我把具体命令说出来, 也就是看看知道一些处理文本的命令嘛.其实不难:

1

cat logfile |cut -d ' ' -f 5 |sort |uniq -c | sort -nr | head -n 10 |less

cut命令负责将文本以空格分开,取第五列数据==>
排序==> 去重并统计次数(-c参数就是统计参数)==> 再次排序(统计次数会被写在IP之前, 所以这里是按统计次数排序 sort的-r是逆序就是从大到小,-n为按数字排序主要是sort默认排序很可能会把10判断为比2还小,通过-n就不会出现这个情况)==> 取次数最多的10条


29.CDN的主要原理

① 源站
源站指发布内容的原始站点。添加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全部来自于源站。
② 缓存服务器
缓存服务器是直接提供给用户访问的站点资源,有一台或数台服务器组成;当用户发起访问时,他的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在缓存里面,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户。
③ 智能DNS
智能DNS是整个CDN技术的核心,它主要根据用户的来源,将其访问请求指向离用户比较近的缓存服务器,如把广州电信的用户请求指向到广州电信IDC机房中的缓存服务器。通过智能DNS解析,让用户访问同服务商下的服务器,消除国内南北网络互相访问慢的问题,达到加速作用。智能DNS的出现,颠复了传统的一个域名对应一个镜像的做法,让用户更加便捷的去访问网站。

缓存服务器中有访问内容:
客户端请求 ==> 智能DNS解析到最近的缓存服务器 ==> 缓存服务器返回请求资源
缓存服务器中无访问内容:
客户端请求 ==> 智能DNS解析到最近的缓存服务器 ==> 缓存服务器发现没有客户端请求资源,向源站请求 ==> 源站返回资源到缓存服务器 ==> 缓存服务器返回客户端请求资源


30.跨服务器同步文件

查看:http://coolk.blog.51cto.com/1752609/1707382


31.服务器更换主板后linux无法识别网卡

系统加载网卡驱动后会去读一个文件,这个文件是一个缓存文件,包含了网卡的mac地址,因为更换了主板,网卡的mac也变动了,但是这个文件的mac还是没有变,所以现有的网卡mac地址和文件里的不同,所以系统就拒绝启动,把这个文件删除后重启系统就可以了 操作为下:

>#mv /etc/udev/rules.d/70-persistent-net.rules  /etc/udev/rules.d/70-persistent-net.rules.bak

>#reboot  #重启后会生成新的缓存文件

 

32.将/opt目录中创建时间超过7天的文件压缩成tar.ge格式

find /opt -type f -mtime +7 -name ‘*’ -exec tar -zxvf {}.tar.gz {}\;

-amin n

查找系统中最后N分钟访问的文件

-atime n

查找系统中最后n*24小时访问的文件

-cmin n

查找系统中最后N分钟被改变文件状态的文件

-ctime n

查找系统中最后n*24小时被改变文件状态的文件

-mmin n

查找系统中最后N分钟被改变文件数据的文件

-mtime n

查找系统中最后n*24小时被改变文件数据的文件

 

33.2016-09-09 13:30:28这个日期用命令怎么表示

data +“%Y-%m-%d %H:%M:%S”

详细参考data命令地址:http://blog.csdn.net/runming918/article/details/7223520


34.每天中午12点使用tcpdump命令抓取目的端口为TCP 80的1000个包输出到当前目录并以当前时间命名.请写出定时任务及脚本内容.

待补全

 

35.简述非对称加密算法工作过程。

非对称密钥加密*,又称为公钥密码*、双密钥密码*。它是指对信息加密和解密时所使用的密钥是不同的,即有两个密钥,一个是可以公开的,另一个是私有的,这两个密钥组成一对密钥对,分别为公开密钥和私有密钥。如果使用其中一个密钥对数据进行加密,则只有用另外一个密钥才能解密。由于加密和解密时所使用的密钥不同,这种加密*称为非对称密钥加密*。 在公开密钥算法中,用公开的密钥进行加密,用私有密钥进行解密的过程,称为加密。而用私有密钥进行加密,用公开密钥进行解密的过程称为认证。

参考网页:http://www.wm23.com/wiki/933.htm

 

36.把A B(目录中可能还有目录)两个目录中不同的文件拷贝到C目录中.

待补全

 

___________________________________________________________________________________________


                如有问题,欢迎指正

本文出自 “Eric” 博客,请务必保留此出处http://eric1.blog.51cto.com/9478375/1851198