精华内容
下载资源
问答
  • 运维面试题

    万次阅读 多人点赞 2019-10-09 17:00:22
    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。 1、什么是运维?什么是游戏运维? 1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线...

    下面是一名资深Linux运维求职数十家公司总结的Linux运维面试精华,助力大家年后跳槽找个高薪好工作。

     

    1、什么是运维?什么是游戏运维?

    1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,
    在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术
    运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等

    2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
    开发运维:是给应用运维开发运维工具和运维平台的
    应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、维护、做故障排查
    系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等

    总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
    开发运维、应用运维和系统运维他们的工作是环环相扣的

    2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
    游戏运营要做的一个事情除了协调工作以外
    还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划

    3、现在给你三百台服务器,你怎么对他们进行管理?
    管理3百台服务器的方式:
    1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
    2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。
    3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 

    4、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

    RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
    还有一个大功能,多块盘放在一起可以有冗余(备份)
    RAID整合方式有很多,常用的:0 1 5 10

    RAID 0,可以是一块盘和N个盘组合 

    其优点读写快,是RAID中最好的

    缺点:没有冗余,一块坏了数据就全没有了

    RAID 1,只能2块盘,盘的大小可以不一样,以小的为准

    10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高

    RAID 5 ,3块盘,容量计算10*(n-1),损失一块盘

    特点,读写性能一般,读还好一点,写不好

    冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
    性能从好到坏:RAID0 RAID10 RAID5 RAID1
    成本从低到高:RAID0 RAID5 RAID1 RAID10

    单台服务器:很重要盘不多,系统盘,RAID1
    数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
    WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
    有多台,监控、应用服务器,RAID0 RAID5

    我们会根据数据的存储和访问的需求,去匹配对应的RAID级别

     

    5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
    LVS: 是基于四层的转发
    HAproxy: 是基于四层和七层的转发,是专业的代理服务器
    Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

    区别: LVS由于是基于四层的转发所以只能做端口的转发
    而基于URL的、基于目录的这种转发LVS就做不了

    工作选择:

    HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
    在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大
    选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器
    配置简单,所以中小型企业推荐使用HAproxy

    6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
    Squid、Varinsh和Nginx都是代理服务器

    什么是代理服务器:
    能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
    源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
    收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你
    如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网 

    区别:
    1)Nginx本来是反向代理/web服务器,用了插件可以做做这个副业

          但是本身不支持特性挺多,只能缓存静态文件
    2)从这些功能上。varnish和squid是专业的cache服务,而nginx这些是第三方模块完成
    3)varnish本身的技术上优势要高于squid,它采用了可视化页面缓存技术

    在内存的利用上,Varnish比Squid具有优势,性能要比Squid高。
    还有强大的通过Varnish管理端口,可以使用正则表达式快速、批量地清除部分缓存
    它是内存缓存,速度一流,但是内存缓存也限制了其容量,缓存页面和图片一般是挺好的
    4)squid的优势在于完整的庞大的cache技术资料,和很多的应用生产环境

    工作中选择:
    要做cache服务的话,我们肯定是要选择专业的cache服务,优先选择squid或者varnish。

    7、Tomcat和Resin有什么区别,工作中你怎么选择?
    区别:Tomcat用户数多,可参考文档多,Resin用户数少,可考虑文档少
    最主要区别则是Tomcat是标准的java容器,不过性能方面比resin的要差一些
    但稳定性和java程序的兼容性,应该是比resin的要好

    工作中选择:现在大公司都是用resin,追求性能;而中小型公司都是用Tomcat,追求稳定和程序的兼容

    8、什么是中间件?什么是jdk? 
    中间件介绍:
    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源
    中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯
    是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口

    但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递
    通过中间件,应用程序可以工作于多平台或OS环境。

    jdk:jdk是Java的开发工具包
    它是一种用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境

    9、讲述一下Tomcat8005、8009、8080三个端口的含义?
    8005==》 关闭时使用
    8009==》 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
    8080==》 一般应用使用

    10、什么叫CDN?
    - 即内容分发网络
    - 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到
    最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

    11、什么叫网站灰度发布?
    灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式
    AB test就是一种灰度发布方式,让一部用户继续用A,一部分用户开始用B
    如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面 来
    灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度

    12、简述DNS进行域名解析的过程?
    用 户要访问www.baidu.com,会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结 果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务 器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com,然后发给请求的 服务器,保存一份之后,再发给客户端

    13、RabbitMQ是什么东西?
    RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器
    消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用
    队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用
    消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地

    14、讲一下Keepalived的工作原理?
    在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,
    BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息)
    多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性
    由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息

    15、讲述一下LVS三种模式的工作过程?
    LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)

     

    一、NAT模式(VS-NAT)

    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址

    并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP

    将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈

    因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时

    大量的数据包都交汇在负载均衡器那,速度就会变慢!

     

    二、IP隧道模式(VS-TUN)

    原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大

    那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS

    RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过

    负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持

    IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

    优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户

    所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量

    这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

    缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”

    (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上

     

    三、直接路由模式(VS-DR)

    原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应

    所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR

    而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)

    并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户

    则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端

    由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域

    也可以简单的理解为在同一台交换机上

    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端

    与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

    缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

     

    16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

    mysql的innodb如何定位锁问题:
    在使用 show engine innodb status检查引擎状态时,发现了死锁问题
    在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎)

    innodb_trx         ## 当前运行的所有事务

    innodb_locks     ## 当前出现的锁

    innodb_lock_waits  ## 锁等待的对应关系

     

    mysql如何减少主从复制延迟:
    如果延迟比较大,就先确认以下几个因素:
    1. 从库硬件比主库差,导致复制延迟
    2. 主从复制单线程,如果主库写并发太大,来不及传送到从库

        就会导致延迟。更高版本的mysql可以支持多线程复制
    3. 慢SQL语句过多
    4. 网络延迟

    5. master负载
    主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层

    6. slave负载
    一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器

     

    只作为备份用,不进行其他任何操作.另外, 2个可以减少延迟的参数:
    –slave-net-timeout=seconds 单位为秒 默认设置为 3600秒

    #参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据
    –master-connect-retry=seconds 单位为秒 默认设置为 60秒

    #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试
    通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟

     

    MySQL数据库主从同步延迟解决方案
    最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行

    还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit
    = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog

    innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave

     

    17、如何重置mysql root密码?

     

    一、 在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法:

    1、 在SHELL环境下,使用mysqladmin命令设置:

           mysqladmin –u root –p password “新密码”   回车后要求输入旧密码

     

    2、 在mysql>环境中,使用update命令,直接更新mysql库user表的数据:

           Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;

           flush   privileges;

           注意:mysql语句要以分号”;”结束

     

    3、 在mysql>环境中,使用grant命令,修改root用户的授权权限。

           grant  all  on  *.*  to   root@’localhost’  identified  by  ‘新密码’;

     

    二、 如查忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下:

    1、 关闭当前运行的mysqld服务程序:service  mysqld  stop(要先将mysqld添加为系统服务)

    2、 使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务

           /usr/local/mysql/bin/mysqld_safe  --skip-grant-table  &

    3、 使用空密码的root用户登录数据库,重新设置ROOT用户的密码

          #mysql  -u   root

           Mysql> Update  mysql.user  set  password=password(‘新密码’)  where  user=’root’;

           Mysql> flush   privileges;

     

    18、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请求。

     

    19、mysql数据备份工具

    mysqldump工具

    mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump

    支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景

    Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。

     

    基于LVM快照备份

    在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录

    进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别

    而innodb不开启独立表空间的话只能备份整个数据库。

     

    tar包备份

     

    percona提供的xtrabackup工具

    支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同

    数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展

    可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份

     

    20、keepalive的工作原理和如何做到健康检查

    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组

    这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内

    其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了

    这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了

     

    keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护

    及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的

     

    Keepalived健康检查方式配置

    HTTP_GET|SSL_GET

    HTTP_GET | SSL_GET

    {

    url {

    path /# HTTP/SSL 检查的url可以是多个

    digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成

    status_code 200# HTTP/SSL 检查返回的状态码

    }

    connect_port 80 # 连接端口

    bindto<IPADD>

    connect_timeout 3 # 连接超时时间

    nb_get_retry 3 # 重连次数

    delay_before_retry 2 #连接间隔时间

    }

     

    21、统计ip访问情况,要求分析nginx访问日志,找出访问页面数量在前十位的ip

    cat access.log | awk '{print $1}' uniq -c | sort -rn | head -10

     

    22、使用tcpdump监听主机为192.168.1.1,tcp端口为80的数据,同时将输出结果保存输出到tcpdump.log

    tcpdump 'host 192.168.1.1 and port 80' > tcpdump.log

     

    23、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1

    iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp -dport 80 -j DNAT-to-destination 192.168.2.1:8080

     

    24、简述raid0 raid1 raid5 三种工作模式的工作原理及特点

    RAID 0:带区卷,连续以位或字节为单位分割数据,并行读/写于多个磁盘上,因此具有很高的数据传输率

    但它没有数据冗余,RAID 0 只是单纯地提高性能,并没有为数据的可靠性提供保证

    而且其中的一个磁盘失效将影响到所有数据。因此,RAID 0 不能应用于数据安全性要求高的场合

     

    RAID 1:镜像卷,它是通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据

    不能提升写数据效率。当原始数据繁忙时,可直接从镜像拷贝中读取数据,因此RAID1 可以提高读取性能

    RAID 1 是磁盘阵列中单位成本最高的,镜像卷可用容量为总容量的1/2,但提供了很高的数据安全性和可用性

    当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据

     

    RAID5:至少由3块硬盘组成,分布式奇偶校验的独立磁盘结构,它的奇偶校验码存在于所有磁盘上

    任何一个硬盘损坏,都可以根据其它硬盘上的校验位来重建损坏的数据(最多允许1块硬盘损坏)

    所以raid5可以实现数据冗余,确保数据的安全性,同时raid5也可以提升数据的读写性能

     

    25、你对现在运维工程师的理解和以及对其工作的认识

    运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供最高、最快、最稳定、最安全的服务

    运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失

    因此运维工程师的工作需要严谨及富有创新精神

     

    26、实时抓取并显示当前系统中tcp 80端口的网络数据信息,请写出完整操作命令

    tcpdump -nn tcp port 80

     

    27、服务器开不了机怎么解决一步步的排查

    A、造成服务器故障的原因可能有以下几点:

    B、如何排查服务器故障的处理步骤如下:

     

    28、Linux系统中病毒怎么解决

    1)最简单有效的方法就是重装系统

    2)要查的话就是找到病毒文件然后删除

          中毒之后一般机器cpu、内存使用率会比较高

          机器向外发包等异常情况,排查方法简单介绍下

     

    top 命令找到cpu使用率最高的进程

    一般病毒文件命名都比较乱,可以用 ps aux 找到病毒文件位置 

    rm -f  命令删除病毒文件

    检查计划任务、开机启动项和病毒文件目录有无其他可以文件等

     

    3)由于即使删除病毒文件不排除有潜伏病毒,所以最好是把机器备份数据之后重装一下

     

    29、发现一个病毒文件你删了他又自动创建怎么解决

    公司的内网某台linux服务器流量莫名其妙的剧增,用iftop查看有连接外网的情况

    针对这种情况一般重点查看netstat连接的外网ip和端口。

     

    用lsof -p pid可以查看到具体是那些进程,哪些文件

    经查勘发现/root下有相关的配置conf.n hhe两个可疑文件,rm -rf后不到一分钟就自动生成了

    由此推断是某个母进程产生的这些文件。所以找到母进程就是找到罪魁祸首

     

    查杀病毒最好断掉外网访问,还好是内网服务器,可以通过内网访问

    断了内网,病毒就失去外联的能力,杀掉它就容易的多

    怎么找到呢,找了半天也没有看到蛛丝马迹,没办法只有ps axu一个个排查

    方法是查看可以的用户和和系统相似而又不是的冒牌货,果然,看到了如下进程可疑

     

    看不到图片就是/usr/bin/.sshd

    于是我杀掉所有.sshd相关的进程,然后直接删掉.sshd这个可执行文件

    然后才删掉了文章开头提到的自动复活的文件

     

    总结一下,遇到这种问题,如果不是太严重,尽量不要重装系统

    一般就是先断外网,然后利用iftop,ps,netstat,chattr,lsof,pstree这些工具顺藤摸瓜

    一般都能找到元凶。但是如果遇到诸如此类的问题

    /boot/efi/EFI/redhat/grub.efi: Heuristics.Broken.Executable FOUND,个人觉得就要重装系统了

     

    30、说说TCP/IP的七层模型

    应用层 (Application):

    网络服务与最终用户的一个接口。

    协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

     

    表示层(Presentation Layer):

    数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)

    格式有,JPEG、ASCll、DECOIC、加密格式等

     

    会话层(Session Layer):

    建立、管理、终止会话。(在五层模型里面已经合并到了应用层)

    对应主机进程,指本地主机与远程主机正在进行的会话

     

    传输层 (Transport):

    定义传输数据的协议端口号,以及流控和差错校验。

    协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

     

    网络层 (Network):

    进行逻辑地址寻址,实现不同网络之间的路径选择。

    协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP

     

    数据链路层 (Link):

    建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议)

    将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正

     

    物理层(Physical Layer):

     

    计算机网络OSI模型中最低的一层

    物理层规定:为传输数据所需要的物理链路创建、维持、拆除

    而提供具有机械的,电子的,功能的和规范的特性

     

    简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网广域网皆属第1、2层

    物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础

    物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境

    如果您想要用尽量少的词来记住这个第一层,那就是“信号介质

     

    31、你常用的Nginx模块,用来做什么

    rewrite模块,实现重写功能

    access模块:来源控制

    ssl模块:安全加密

    ngx_http_gzip_module:网络传输压缩模块

    ngx_http_proxy_module 模块实现代理

    ngx_http_upstream_module模块实现定义后端服务器列表

    ngx_cache_purge实现缓存清除功能

     

    32、请列出你了解的web服务器负载架构

    Nginx

    Haproxy

    Keepalived

    LVS

     

    33、查看http的并发请求数与其TCP连接状态

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

     

    还有ulimit -n 查看linux系统打开最大的文件描述符,这里默认1024

    不修改这里web服务器修改再大也没用,若要用就修改很几个办法,这里说其中一个:

    修改/etc/security/limits.conf

    * soft nofile 10240

    * hard nofile 10240

    重启后生效

     

    34、用tcpdump嗅探80端口的访问看看谁最高

    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}'| sort | uniq -c | sort -nr |head -20

     

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

    #!/bin/bash

    for ip in `seq 1 255`

    do

    {

    ping -c 1 192.168.1.$ip > /dev/null 2>&1

    if [ $? -eq 0 ]; then

    echo 192.168.1.$ip UP

    else

    echo 192.168.1.$ip DOWN

    fi

    }&

    done

    wait

     

    36、已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近 7 天的访问日志!请问如何解决? 请给出解决办法或配置或处理命令

     

    创建文件脚本:

    #!/bin/bash

    for n in `seq 14`

    do        

    date -s "11/0$n/14"

    touch access_www_`(date +%F)`.log

    done

     

    解决方法:

    # pwd/application/logs

    # ll

    -rw-r--r--. 1 root root 0 Jan  1 00:00 access_www_2015-01-01.log
    -rw-r--r--. 1 root root 0 Jan  2 00:00 access_www_2015-01-02.log
    -rw-r--r--. 1 root root 0 Jan  3 00:00 access_www_2015-01-03.log
    -rw-r--r--. 1 root root 0 Jan  4 00:00 access_www_2015-01-04.log
    -rw-r--r--. 1 root root 0 Jan  5 00:00 access_www_2015-01-05.log
    -rw-r--r--. 1 root root 0 Jan  6 00:00 access_www_2015-01-06.log
    -rw-r--r--. 1 root root 0 Jan  7 00:00 access_www_2015-01-07.log
    -rw-r--r--. 1 root root 0 Jan  8 00:00 access_www_2015-01-08.log
    -rw-r--r--. 1 root root 0 Jan  9 00:00 access_www_2015-01-09.log
    -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
    -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
    -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
    -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

    -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

    # find /application/logs/ -type f -mtime +7 -name "*.log"|xargs rm –f  

    ##也可以使用-exec rm -f {} ;进行删除

    # ll

    -rw-r--r--. 1 root root 0 Jan  7 00:00 access_www_2015-01-07.log
    -rw-r--r--. 1 root root 0 Jan  8 00:00 access_www_2015-01-08.log
    -rw-r--r--. 1 root root 0 Jan  9 00:00 access_www_2015-01-09.log
    -rw-r--r--. 1 root root 0 Jan 10 00:00 access_www_2015-01-10.log
    -rw-r--r--. 1 root root 0 Jan 11 00:00 access_www_2015-01-11.log
    -rw-r--r--. 1 root root 0 Jan 12 00:00 access_www_2015-01-12.log
    -rw-r--r--. 1 root root 0 Jan 13 00:00 access_www_2015-01-13.log

    -rw-r--r--. 1 root root 0 Jan 14 00:00 access_www_2015-01-14.log

     

    37、如何优化 Linux系统(可以不说太具体)?

    1. 不用root,添加普通用户,通过sudo授权管理

    2. 更改默认的远程连接SSH服务端口及禁止root用户远程连接

    3. 定时自动更新服务器时间

    4. 配置国内yum源

    5. 关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外)

    6. 调整文件描述符的数量

    7. 精简开机启动服务(crond rsyslog network sshd)

    8. 内核参数优化(/etc/sysctl.conf)

    9. 更改字符集,支持中文,但建议还是用英文字符集,防止乱码

    10. 锁定关键系统文件

    11. 清空/etc/issue,去除系统及内核版本登录前的屏幕显示

       

       

     

    38、请执行命令取出 linux 中 eth0 的 IP 地址(请用 cut,有能力者也可分别用 awk,sed 命令答)

    cut方法1:

    # ifconfig eth0|sed -n '2p'|cut -d ":" -f2|cut -d " " -f1
    192.168.20.130

    awk方法2:

    # ifconfig eth0|awk 'NR==2'|awk -F ":" '{print $2}'|awk '{print $1}'

    192.168.20.130

    awk多分隔符方法3:

    # ifconfig eth0|awk 'NR==2'|awk -F "[: ]+" '{print $4}'

    192.168.20.130

    sed方法4:

    # ifconfig eth0|sed -n '/inet addr/p'|sed -r 's#^.*ddr:(.*)Bc.*$##g'

    192.168.20.130

     

    39、请写出下面 linux SecureCRT 命令行快捷键命令的功能?

    Ctrl + a

    Ctrl + c

    Ctrl + d

    Ctrl + e

    Ctrl + l

    Ctrl + u

    Ctrl + k

    tab

    Ctrl+shift+c

    Ctrl+shift+v

     

    解答:

    Ctrl + a —->光标移动到行首

    Ctrl + e —->光标移动到行尾

    Ctrl + c —->终止当前程序

    Ctrl + d —->如果光标前有字符则删除,没有则退出当前中断

    Ctrl + l —->清屏

    Ctrl + u —->剪切光标以前的字符

    Ctrl + k —->剪切光标以后的字符

    Ctrl + y —->复制u/k的内容

    Ctrl + r —->查找最近用过的命令

    tab —->命令或路径补全

    Ctrl+shift+c —->复制

    Ctrl+shift+v —->粘贴

     

    40、每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包)

    # cat a.sh 

    #/bin/bash

    cd /var/www/ && /bin/tar zcf /data/html-`date +%m-%d%H`.tar.gz html/

    # crontab –e

    00 00 * * * /bin/sh /root/a.sh

    展开全文
  • 企业Linux运维面试题问答 企业Linux运维面试题问答
  • linux运维面试题

    2017-08-17 15:52:15
    linux运维面试题
  • 1 服务器的linux系统是什么版2 linux你做过那些优化 3 在linux上部署过那些服务4 你怎样用nagios做的监控,监控什么? 5 用cacti怎样对网络进行监控?以前公司的情况(问具体的数字? 6 你怎样查看日志?...
  • linux运维面试题汇总

    2018-07-11 19:47:47
    linux运维面试题汇总,包括计算机网络,linux系统常见命令,常用系统服务,集群搭建等当面
  • 2013最新linux运维面试题 一有文件file1 1查询file1 里面空行的所在行号 awk ?{if$0~/$/)print NR} file or grep -n $ file |awk ?BEGIN{FS=:}{print $1} 2查询file1 以abc 结尾的行 grep abc$ file1 3打印出file1 ...
  • 运维面试题 连载

    2021-03-23 21:26:44
    运维面试题 连载Nginx相关 Nginx相关 Nginx服务器上的Master和Worker进程是什么? Master进程:主进程,该进程会创建Manager进程和Reactor线程; Reactor线程:用于接受客户端的连接和发送的请求 Manager进程:...

    Master和Worker进程是什么

    Nginx服务器上的Master和Worker进程是什么?

    • Master进程:主进程,该进程会创建Manager进程和Reactor线程;
      • Reactor线程:用于接受客户端的连接和发送的请求
      • Manager进程:管理进程,用于创建Worker进程和TaskWorker进程,TaskWorker是Manager进程创建的子进程
    • Worker进程:工作进程,用于处理业务逻辑,当Reactor线程接受到客户端发来的请求时,会将数据包打包通过管道打包发送给某个Worker进程
    展开全文
  • 本课程主要讲运维高频面试题及面试技巧,面试题均出自学员的面试亲身经历及合作工作的企业内训。 适合人群:所有想要面试系统运维及自动运维的求职者,转岗运维人员以及devops运维从业者
  • 一、有文件file11、请用shell查询file1 里面空行的所在行号awk …{if($0~/^$/)print NR}? file1orgrep -n ^$ file1|awk -F : '{print $1}'2、编写ShellScript查询file1 以abc 结尾的行grep abc$ file13、打印出file1...

    82cbb43fcee365024c11283fde12fe77.png

    一、有文件file1

    1、请用shell查询file1 里面空行的所在行号

    awk …{if($0~/^$/)print NR}? file1

    or

    grep -n ^$ file1|awk -F : '{print $1}'

    2、编写ShellScript查询file1 以abc 结尾的行

    grep abc$ file1

    3、打印出file1 文件第1 到第3 行

    sed -n ?1,3p? file1

    head -3 file1

    4、分析apache日志,给出当日访问ip的降序列表。

    一句话思路:分析ip就要提取ip,提取的办法除了awk,还有个东西叫cut。

    cut -d " " -f1 /etc/httpd/log/access_log | sort | uniq -c | sort -nr

    知识点:cut命令,sort将汇总相同内容,uniq -c合并重复内容,并给出重复次数。sort -nr 使用数字排序,默认是ascii,并且是降序,默认是升序。

    awk '{sum[ip]++}END{for(var in sum)print ip sum[var]}'

    /etc/httpd/log/access_log | sort -k2 -nr

    知识点:awk数据,sort -k2 -nr 降序数字排序就不说了,-k参数指定使用哪个列进行排序。默认是自然是第一列。

    5 如何批量把若干文件从一个扩展名改为另一个扩展名?比如把后缀gz,改为

    答:

    1.for file in *.gz; do mv $file `basename $file .gz`.zip; done

    或(也适合ksh)

    for file in *.gz; do mv $file $.zip; done

    rename gz zip *.gz

    2.ls | grep gz | awk -F'.' '{print }'|xargs -i mv {}.gz {}.zip

    二、如何将本地80 端口的请求转发到8080 端口,当前主机IP 为192.168.2.1 Iptables -A PREROUTING -d 192.168.2.1 -p tcp -m tcp –dport 80 -j DNAT -to-destination 192.168.2.1:8080

    三、crontab

    在11 月份内,每天的早上6 点到12 点中,每隔2 小时执行一次/usr/bin/httpd.sh 怎么实现

    展开全文
  • it 运维面试题及答案 篇一运维中心笔试题答案 xt> 一单项选择 1 t-sql 语句是由哪一家公司设计出的 a a microsoftb ibmc sun 2 sql-server 的数据库类型属于哪一类型 a a 关系型数据库 b 网络型数据库 c 层次型...
  • 运维面试题(面前准备)

    万次阅读 多人点赞 2019-07-21 23:13:13
    前段时间一直在面试,也没怎么写博客,现在找到实习工作了,也有时间去写了。在这里分享一下我面试之前做的一些准备。 (以下内容是我从网上查找整理得到的...红色标注为面试提及的,但不一定是我整理的内容) ...

    前段时间一直在面试,也没怎么写博客,现在找到实习工作了,也有时间去写了。在这里分享一下我面试之前做的一些准备。

    (以下内容是我从网上查找整理得到的...红色标注为面试提及的,但不一定是我整理的内容)

    TCP/IP

    简述TCP三次握手的过程?

    答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据简版:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了。

     为什么连接的时候是三次握手,关闭的时候却是四次握手?

    这是因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

    但是关闭连接时,当Client端发送FIN报文仅仅表示它不再发送数据了但是还能接收数据,Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

    HTTP

    https://blog.51cto.com/13570193/2108347

    SHELL

    https://www.cnblogs.com/gala1021/p/8519456.html

    https://www.jb51.net/article/135168.htm

    常用命令

    top(能了解top后的每一个字段意思)

    grep,sed,awk

    Apache

    https://blog.csdn.net/keda8997110/article/details/19696337

    Tomcat

    https://blog.csdn.net/xlgen157387/article/details/79006434

    Tomcat工作模式?

    Tomcat是一个JSP/Servlet容器。其作为Servlet容器,有三种工作模式:独立的Servlet容器、进程内的Servlet容器和进程外的Servlet容器。

    进入Tomcat的请求可以根据Tomcat的工作模式分为如下两类:

    Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是Apache, IIS, Nginx等;

    Tomcat作为独立服务器:请求来自于web浏览器;

    Haproxy

    简介

    HAproxy:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

    特点

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

    2)HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。

    3)HAProxy 跟 LVS 类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy 会比 Nginx 有更出色的负载均衡速度,在并发处理上也是优于 Nginx 的。

    4)HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL 节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL主从做负载均衡。

    负载均衡算法

    Haproxy有8种负载均衡算法(balance),分别如下:

    1.balance roundrobin # 轮询,软负载均衡基本都具备这种算法

    2.balance static-rr # 根据权重,建议使用

    3.balance leastconn # 最少连接者先处理,建议使用

    4.balance source # 根据请求源IP,建议使用

    5.balance uri # 根据请求的URI

    6.balance url_param,# 根据请求的URl参数'balance url_param' requires an URL parameter name

    7.balance hdr(name) # 根据HTTP请求头来锁定每一次HTTP请求

    8.balance rdp-cookie(name) # 根据据cookie(name)来锁定并哈希每一次TCP请求

    会话保持

    由于负载请求分发到不同服务器,可能导致Session会话不同步的问题,若想实现会话共享或保持,可采用如下3种方式:

    1.用户IP 识别

    haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令)

    配置指令:balance source

    2.Cookie 识别

    haproxy 将WEB服务端发送给客户端的cookie中插入(或添加加前缀)haproxy定义的后端的服务器COOKIE ID。

    配置指令例举:cookie SESSION_COOKIE insert indirect nocache

    用firebug可以观察到用户的请求头的cookie里 有类似” Cookie jsessionid=0bc588656ca05ecf7588c65f9be214f5; SESSION_COOKIE=app1” SESSION_COOKIE=app1就是haproxy添加的内容

    3.Session 识别

    haproxy 将后端服务器产生的session和后端服务器标识存在haproxy中的一张表里。客户端请求时先查询这张表。

    配置指令例举:appsession JSESSIONID len 64 timeout 5h request-learn

    Keepalived

    Keepalived:Keepalived是一个保证集群高可用的服务软件,用来防止单点故障,使用VRRP协议实现。在master和backup之间通过master主动降低自己的权值或者backup检测到master出现故障时,backup将会接管master的工作,继续服务。

    Mysql

    http://www.imooc.com/article/280936

    主从、主主、性能调优、数据备份恢复

    详述MySQL主从复制原理及配置主从的完整步骤

    主从复制的原理如下:

    主库开启binlog功能并授权从库连接主库,从库通过change master得到主库的相关同步信息,然后连接主库进行验证,主库IO线程根据从库slave线程的请求,从master.info开始记录的位置点向下开始取信息,同时把取到的位置点和最新的位置与binlog信息一同发给从库IO线程,从库将相关的sql语句存放在relay-log里面,最终从库的sql线程将relay-log里的sql语句应用到从库上,至此整个同步过程完成,之后将是无限重复上述过程

    完整步骤如下:

       1、主库开启binlog功能,并进行全备,将全备文件推送到从库服务器上

       2、show master status\G 记录下当前的位置信息及二进制文件名

       3、登陆从库恢复全备文件

       4、执行change master to 语句

       5、执行start slave and show slave status\G

    Zabbix

    Ansible、Jenkins、Gitlab

    ansible

    https://www.jianshu.com/p/c82737b5485c

    Docker

    https://blog.csdn.net/zisefeizhu/article/details/83345398

    杂七杂八

    假如有人反应,调取后端接口时特别慢,你会如何排查?

    笔者回答:其实这种问题都没有具体答案,只是看你回答的内容与面试官契合度有多高,能不能说到他想要的点上,主要是看你排查问题的思路。我是这么说的:问清楚反应的人哪个服务应用或者页面调取哪个接口慢,叫他把页面或相关的URL发给你,首先,最直观的分析就是用浏览器按F12,看下是哪一块的内容过慢(DNS解析、网络加载、大图片、还是某个文件内容等),如果有,就对症下药去解决(图片慢就优化图片、网络慢就查看内网情况等)。其次,看后端服务的日志,其实大多数的问题看相关日志是最有效分析,最好用tail -f 跟踪一下日志,当然你也要点击测试来访问接口日志才会打出来。最后,排除sql,,找到sql去mysql执行一下,看看时间是否很久,如果很久,就要优化SQL问题了,expain一下SQL看看索引情况啥的,针对性优化。数据量太大的能分表就分表,能分库就分库。如果SQL没啥问题,那可能就是写的逻辑代码的问题了,一行行审代码,找到耗时的地方改造,优化逻辑。

     

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

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

    第一,用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等

     

    简述一下DNS的解析过程

    解答:

    1、在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

    2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

    3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

    4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

    5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。

    6、如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

    从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是的交互查询就是迭代查询。

    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程序,进入登陆状态 

     

     FTP的主动模式和被动模式

    FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

    PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT 命令告诉服务器:“我打开了XX端口,你过来连接我”。于是服务器从20端口向客户端的 XX端口发送连接请求,建立一条数据链路来传送数据。

    PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请 求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV 命令告诉客户端:“我打开了XX端口,你过来连接我”。于是客户端向服务器的XX端口 发送连接请求,建立一条数据链路来传送数据。

    从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。

    面试真题

    1.top命令中每行有哪些字段,都是什么意思?(load average,Tasks...)


    第一行:系统运行时间和平均负载
    当前时间  系统已运行的时间  当前登录用户的数量
    相应最近5、10和15分钟内的平均负载
    第二行:任务
    系统现在共有多少个进程,其中处于运行中的有多少个,多少个在休眠(sleep),停止状态的有几个,僵尸状态的有0个。
    第三行:CPU状态
    显示不同模式下所占cpu时间百分比
    第四、五行:内存使用
    第一行是物理内存使用,第二行是虚拟内存使用(交换空间)。
    第六行 :各个进程的状态监控

    当然ps,free等命令的字段意思最好也查一查,看一看

    2.ansible中的常用模块及作用

    ping # 主机连通性测试
    command # 在远程主机上执行命令,不支持管道
    shell # 在远程主机上调用shell解析器,支持管道命令个
    copy # 用于将文件复制到远程主机,支持设定内容和修改权限.
    file # 创建文件,创建连接文件,删除文件等
    fetch # 从远程复制文件到本地
    cron # 管理cron计划任务
    yum # 用于模块的安装
    service # 管理服务
    user # 管理用户账号
    group # 用户组管理
    script # 将本地的脚本在远端服务器运行
    setup # 该模块主要用于收集信息,是通过调用facts组件来实现的,以变量形式存储主机上的信息

    3.zabbix监控一个网站到触发报警流程

    4.mysql性能优化

    5.centos开机过程中,服务(/etc/init.d中的)因故障卡住,不能开机,怎么办?

    解决方法:
    卡住之后重启电脑(可按ctrl+alt+delete,如果这个被禁用了则想其他方法),然后进入开机启动画面按esc按键
    进入之后按a,然后输入1,单用户启动。(利用单用户启动基本上不会启动任何守护进程的特性来跳过卡住的服务的启动过程)
    利用chkconfig --list 服务名 命令来查看卡住的服务的错误原因并修复。如果短时间内无法修复,则先利用chkconfig 服务名 off 命令先关掉此服务开机启动,然后正常启动计算机
    正常启动后再慢慢寻找原因修复服务,先保证计算机能启动并且提供其他的正常业务进行。

    6.JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true "相关参数意义

    -vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
    -vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了
    -Xms128m JVM初始分配的堆内存
    -Xmx512m JVM最大允许分配的堆内存,按需分配
    -XX:PermSize=64M JVM初始分配的非堆内存
    -XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

    7.docker容器时间跟本地时间不一致怎样解决

    共享本地的/etc/localtime到容器

    8.nginx中location匹配顺序

    https://segmentfault.com/a/1190000013267839
    首先先检查使用前缀字符定义的location,选择最长匹配的项并记录下来。
    如果找到了精确匹配的location,也就是使用了=修饰符的location,结束查找,使用它的配置。
    然后按顺序查找使用正则定义的location,如果匹配则停止查找,使用它定义的配置。
    如果没有匹配的正则location,则使用前面记录的最长匹配前缀字符location。

    9.编写个shell 脚本将/boot/grub/目录下大于100K 的文件转移到/opt 目录下

    补充:find /boot/grub -size +100k -type f -exec mv {} /opt \;

    #/bin/bash
    cd /boot/grub
    for file in `ls /boot/grub`;do
    if [ -f $file ];then
     if [ `ls -l $file | awk '{print $5}'` -gt 102400 ];then
     mv $file /opt
     fi
    fi
    done

    10.

    1.查看某进程所打开的所有文件
    lsof -p pid
    2.写一条命令查找最后创建时间是3天前,后缀是*.log的文件并删除
    find / -mtime +3 -type f -name '*.log' |xargs rm -f
    3.当时用touch test时报错分区磁盘已满,但利用df -h查看后只是用了60的磁盘空间,请解释原因
    小文件过多,导致inode耗尽
    4.将本地80端口的请求转发到8080端口,当前主机IP为172.20.2.133,其中本地网卡为eth0
    iptables -t nat -A PREROUTING -i eth0 -d 172.20.2.133 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
    5.发现系统中存在大量的TIME_WAIT,请分析原因并提出三条以上的优化建议
    6.查看内存使用情况,如何定位使用内存高的进程
    7.列出当前目录及子目录下,占磁盘空间最大的10个文件
    8.请简述CDN工作原理,以及怎么实现动态加速的
    9.如何查看内核日志
    10.如何查看 iptables 的 nat 表
    11.请简述nginx处理一个请求的过程
    Nginx 使用一个多进程模型来对外提供服务,其中一个 master 进程,
    多个 worker 进程。master 进程负责管理 Nginx 本身和其他 worker 进程。
    worker 进程中有一个函数,执行无限循环,不断处理收到的来自客户端的请求,并进行处理,直到整个 Nginx 服务被停止。
    12.将test文本中的每三行合并成一行,实例及输出结果如下
    1
    2
    3
    4
    5
    6
    输出结果:
    1 2 3
    4 5 6
    7 8 9
    sed 'N;N;s/\n/ /g' 1.txt

    11

    1.运用 shell 命令输出文本文件 log 第三列的内容,并进行去重和排序, log 内容示例如下:
     1 20 apple
    2 25 banana
    3 14 apple
    4 33 pear
    … … …
    2.利用 shell 命令将文本 user.txt 中所有 apple 替换成 banana
    3.编写 crontab,每周六、日凌晨3点的0,15,30,45分各执行一次由shell编写的脚本 /var/crontab.sh
    4.如何查看CPU规格,内存大小,网卡规格,磁盘信息
    5.查看机器负载状况,如何定位高CPU占用的进程
    6.进程间通信主要哪几种方式
    https://www.jianshu.com/p/c1015f5ffa74
    7.请简述DNS工作原理及其解析过程
    8.磁盘 IO 请求高的情况下如何判断哪个进程占据了大量 IO 资源
    9.ngx rewrite规则中last、break、redirect、permanent的含义
    10.请解释ngx upstream是怎么实现负载均衡算法的
    轮询,weight,ip_hash
    11.如何提高系统的并发能力,你可能想到的所有方案有哪些?
    12.写一个脚本,实现判断192.168.16.0/22网络里,显示当前在线的IP有哪些,能ping通则认为在线。
    13.打印菲波那切数列
    1 1 2 3 5 8 13 21 34 55...

    上边都是面试的真题,有些我没有把答案写出来,最好自己查一查,看一看。从这些面试题中可以看出,这都很基础,所以,基础很重要啊!

    汇总

    https://www.linuxidc.com/Linux/2018-08/153699.htm

    https://www.cnblogs.com/sunyllove/p/9578620.html

    http://www.magedu.com/74545.html

    展开全文
  • 运维面试题(每日一题)

    万次阅读 多人点赞 2020-09-13 12:55:41
    这段时间在准备面试,顺便也总结一下。
  • 最新linux运维面试题 一有文件file1 1查询file1 里面空行所在行号 awk ?{if$0~/$/)print NR} file or grep -n $ file |awk ?BEGIN{FS=:}{print $1} 2查询file1 以abc 结尾行 grep abc$ file1 3打印出file1 文件第1 ...
  • 运维面试题整理

    2020-01-03 16:24:44
    运维面试题整理 Linux 基础 1、linux启动过程是怎么样的 首先是通电,接通电源时候加载服务器bios信息,读取磁盘的磁盘的MBR引导扇区,找到启动分区/boot之后,从grub2配置中加载kernel,选择默认的启动界别,...
  • 运维面试题(数据库)

    万次阅读 2019-06-13 12:25:01
    运维面试题(数据库) 数据库 (1)查询年龄在20-30之间的用户 A: select *from 表 where datediff(year,出生日期,getdate())<20 20岁以下的 select *from 表 where adtediff(year,出生日期,getdate()) between ...
  • 常见Linux运维面试题分享 1、如何添加一块新的50G硬盘到Linux服务器系统作为单独的分区,并正在使用?需要哪些操作步骤?  a、把硬盘放进服务器并连接 b、建立硬盘分区(fdisk命令) c、格式化分区 d、挂载分区(可写入...
  • 最新Linux系统运维面试题(共四十页附答案)
  • 最新Linux系统运维面试题(附答案),真的很好,测试下大家
  • 此文档是系统运维面试题总结1(过程、原理、作用等),涉及dns、dhcp、PXE、系统启动过程、ftp的工作模式等
  • 红色为自己写的答案,欢迎拍板一,常用命令考察1.输出文本偶数行#awk 'NR%2==0' FILENAME2.使用ps命令查看进程(pid=8000)的启动时间#ps aux|awk '$2==8000{print $9}'3.修改文件所属,权限的命令#chown USER:GROUP ...
  • 这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题。 1、Linux如何挂载windows下的共享目录? mount.cifs //IP地址/server /mnt/...
  • Linux运维面试题

    2017-11-09 20:35:00
    Linux运维面试题 1)Linux启动大致过程? *BIOS自检 *运行系统内核并检测硬件从硬盘启动并运行系统的第一个进程init(LILO和GRUB模式) *init读取系统引导配置文件/etc/inittab,并根据运行级别配置服务/etc/rc.d/rc....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,783
精华内容 8,313
关键字:

运维面试题