首页 > 其他分享 >面试题整理

面试题整理

时间:2024-07-09 11:57:42浏览次数:19  
标签:负载 面试题 log 00 Nginx 整理 服务器 root

现在给你三百台服务器,你怎么对他们进行管理?

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

简述 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 从库 RAID5\RAID0(为了维护成本,RAID10)

WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)有多台,监控、应用服务器,RAID0 RAID5

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

3、LVS、Nginx、HAproxy 有什么区别?工作中你怎么选择?

  • LVS:是基于四层的转发

  • HAproxy:是基于四层和七层的转发,是专业的代理服务器

  • Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

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

工作选择:

  • HAproxy 和 Nginx 由于可以做七层的转发,所以 URL 和目录的转发都可以做

  • 在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大

  • 选择 HAproxy 或者 Nginx 足已,由于 HAproxy 由是专业的代理服务器

  • 配置简单,所以中小型企业推荐使用 HAproxy

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。

Tomcat和Resin有什么区别,工作中你怎么选择?

  • 区别:Tomcat 用户数多,可参考文档多,Resin用户数少,可考虑文档少

最主要区别则是 Tomcat 是标准的 java 容器,不过性能方面比 resin 的要差一些。但稳定性和 java 程序的兼容性,应该是比 resin 的要好

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

什么是中间件?什么是jdk?

中间件介绍:

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/服务器的操作系统之上,管理计算机资源和网络通讯,是连接两个独立应用程序或独立系统的软件。 相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递,通过中间件,应用程序可以工作于多平台或OS环境。

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

讲述一下Tomcat8005、8009、8080三个端口的含义?

8005 - 关闭时使用

8009 - 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口8080 - 一般应用使用

什么叫CDN?

  • 即内容分发网络

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

什么叫网站灰度发布?

灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。

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

简述 DNS 进行域名解析的过程?

用户要访问 http://www.baidu.com,会先找本机的 host 文件,再找本地设置的 DNS 服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.http://com.cn,就去找二级域名服务器。

二级域服务器只能提供三级域名服务器.http://baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站http://www.baidu.com,然后发给请求的服务器,保存一份之后,再发给客户端。

RabbitMQ 是什么东西

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

讲述一下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这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

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

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

如何重置 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;

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

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功能,启用之后可以支持单独的表备份

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 #连接间隔时间
}

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

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

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

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

如何将本地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

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

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

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

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

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

tcpdump -nn tcp port 80

Linux 系统中病毒怎么解决

1)最简单有效的方法就是重装系统2)要查的话就是找到病毒文件然后删除

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

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

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

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

rm -f 命令删除病毒文件

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

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

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

公司的内网某台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,个人觉得就要重装系统了

说说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的第一层,它虽然处于最底层,却是整个开放系统的基础

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

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

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

rewrite模块,实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能

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

Nginx Haproxy KeepalivedLVS

查看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

重启后生效

用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

写一个脚本,实现判断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

已知 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

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

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

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

定时自动更新服务器时间

配置国内yum源

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

调整文件描述符的数量

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

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

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

锁定关键系统文件清空/etc/issue,去除系统及内核版本登录前的屏幕显示

请执行命令取出 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.*$#\1#g'
192.168.20.130

每天晚上 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

为什么需要 LVM ?

LVM(Logical volume management)推荐使用 LVM 管理 linux 服务器上的磁盘或存储,可以在线调整 LVM 分区的大小,而不用停止服务器。

如何检查内存和 CPU 统计信息 ?

使用 free 和 vmstat 命令,可以分别显示物理和虚拟内存统计信息。在 sar 命令的帮助下,我们可以查看 CPU 利用率和其他统计数据。

sar 提供什么功能,sar 日志存储在哪个位置 ?

sar 收集、报告或保存系统活动信息。默认版本的 sar 命令 (CPU 利用率报告) 可能是用户开始系统活动调查时首先运行的工具之一,因为它监视主要的系统资源。如果 CPU 利用率接近 100% (user + nice + system),则采样的工作负载是 CPU 限制的。

sar 命令的默认日志位置为:/var/log/sa/sa{{dd}} dd 参数代表当前日期

如何增加 LVM 分区 ?

  • 使用 lvextend 命令,例如: lvextend -L +100M /dev/mapper/my-lvm

  • 使用 resize2fs 命令,例如:resize2fs /dev/mapper/my-lvm

  • 使用 df 命令检查分区大小

如何缩小 LVM 分区 ?

  • 使用 umount 命令卸载文件系统

  • 使用 resize2fs 命令, 例如:resiz2fs /dev/mapper/my-lvm 10G

  • 使用 lvreduce 命令, 例如: lvreduce -L 10G /dev/mapper/my-lvm

注意: 在生产环境中,不建议减少 lvm 分区,因为它可能导致数据损坏。

如何在原始磁盘上创建分区 ?

使用 fdisk 实用程序,我们可以在原始磁盘上创建分区。

  • 运行 fdisk /dev/hd (IDE) or /dev/sd (SCSI)

  • 输入 n 创建新分区

  • 创建分区后,输入 w 将更改写入分区表

  • 输入 partprobe 内核重新读取分区表

  • 运行 mkfs 命令格式化分区

内核模块 (kernel modules) 所在的位置在那里 ?

/lib/modules/kernel-version 目录存储所有内核模块或编译的驱动程序,使用 lsmod 命令可以查看所有已安装的内核模块。

什么是 umask ?

umask (User file creation mask),该掩码控制在创建文件和目录时设置哪些文件权限。

如何给用户设置永久 umask ?

要为用户永久设置此值,必须将其放入适当的profile文件中,该文件取决于用户的默认 shell。

如何在单用户模式下引导 RHEL / Rocky Linux / CentOS ?

  • 重新启动并进入 grub 提示符

  • 转到以 linux 开头的行尾,输入 rd.break 并回车

  • 用rw模式挂载root文件系统,然后执行 chroot /sysroot

  • 处理故障

如何使用 nfs 协议共享目录 ?

首先编辑 /etc/exportfs 配置文件,增加一行

/<directory-name>  <ip or Network>(Options)

然后重启nfs服务,或者执行 exportfs -arv

如何检查和挂载 nfs 共享 ?

使用 showmount 命令可以查看使用 nfs 共享的目录,例如:showmount -e 192.168.1.110 使用 mount 命令可以在 linux 机器上挂载 nfs 共享。

SMTP,DNS,FTP,DHCP,SSH,squid默认端口是什么 ?

  • Service Port

  • SMTP 25

  • DNS 53

  • FTP 20 (data transfer) , 21 ( Connection established)

  • DHCP 67/UDP(dhcp server) , 68/UDP(dhcp client)

  • SSH 22

  • Squid 3128

什么是 Network Bonding ?

Network bonding 是将多个网卡聚合到一个绑定接口中,以提供容错和高性能。Network bonding 也称为 NIC Teaming。

Linux 中有哪些不同的 Network bonding 模式 ?

  • balance-rr or 0 – 轮循模式,容错和负载均衡

  • active-backup or 1 – active-backup 容错模式

  • balance-xor or 2 – balance-xor 容错和负载平衡

  • broadcast or 3 – 容错广播模式,所有传输都在从接口上发送

  • 802.3ad or 4 – IEEE 802.3ad 动态链路聚合模式。

  • balance-tlb or 5 – TLB (Transmit Load Balancing) 模式,实现容错和负载均衡。

  • balance-alb or 6 – ALB (Active Load Balancing) 模式,实现容错和负载均衡。

如何查看和验证绑定接口的状态 ?

/proc/net/bonding/bond0 文件包含绑定接口的所有细节,绑定接口名称可能因设置而异。

如何查看缺省路由和路由表 ?

netstat -nrip route show 命令可以查看缺省路由, route -n 命令可以查看路由表。

如何检查linux 服务器中哪些端口正在监听 ?

可以使用 ss 命令, netstat - listen 命令,lsof -i 命令查看监听端口。

docker 容器的默认数据目录是什么 ?

docker 容器的默认数据目录为 /var/lib/docker

docker 和 podman 的主要区别是什么 ?

docker 是基于守护进程的,这意味着容器只有在 docker 守护进程运行时才能工作,而 podman 是无守护进程的,这意味着容器不需要任何守护进程也能运行。

Linux 如何升级内核 ?

我们必须永远不要升级 Linux 内核,总是使用 dnf,yum,rpm 命令安装新内核,因为升级内核会使 Linux 系统处于不可启动状态。

何在 linux 操作系统上扫描新分配的 luns 而不需要重启 ?

扫描新分配的 luns (Logical Unit Number) 有两种方式 :

Method:1 如果安装了 sg3 rpm,则运行该命令‘rescan-scsi-bus.sh’ Method:2 运行命令 echo "– – –" > /sys/class/scsi_host/hostX/scan

如何查看 Linux 服务器上 HBA 卡的 WWN 号 ?

使用 “systool -c fc_host -v | grep port_name”命令可以查询 HBA 卡的 WWN 号

如何添加和更改内核参数 ?

要在 Linux 中设置内核参数,编辑文件“ /etc/sysctl.conf”保存文件,并运行“ sysctl -p”命令,此命令将永久进行更改不重启机器。

如何逐行调试 shell 脚本 ?

要调试 shell 脚本,请在 bash 命令中使用 -x 选项,后跟脚本名称。

$ bash -x script-name.sh

如何查找 /var 目录下大小超过 200MB 的文件 ?

$ sudo find /var -type f -size +100M -exec ls -lah {} \;

如何查看 /var 中创建超过30天的文件并将其重定向到文件中 ?

$ find /var  -type f -mtime +30 -exec ls -lah {} \; > /tmp/a.tmp

标签:负载,面试题,log,00,Nginx,整理,服务器,root
From: https://blog.csdn.net/2301_80129986/article/details/140278039

相关文章

  • 经典C语言笔试面试题目
    01.请填写bool,float,指针变量与“零值”比较的if语句。提示:这里“零值”可以是0,0.0,FALSE或者“空指针”。例如intn与“零值”比较的if语句为:if(n==0)if(n!=0)以此类推。请写出boolflag与“零值”比较的if语句:if(flag){}if(!fl......
  • SVN 80道面试题及参考答案(2万字长文)
    目录解释SVN的全称和主要功能。SVN与CVS相比,有哪些主要改进?描述SVN的工作流程。什么是版本库(repository)?它存储了什么?解释工作副本(workingcopy)的概念。SVN如何处理文件的版本控制?SVN中的“commit”是什么意思?解释“update”操作的作用。如何查看一个文件的历史版......
  • 那些年背过的面试题——JVM篇
    本文是技术人面试系列JVM篇,面试中关于JVM都需要了解哪些基础?一文带你详细了解,欢迎收藏!JVM内存划分1、JVM运行时数据区域堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器。Heap(堆):对象的实例以及数组的内存都是要在堆上进行分配的,堆是线程共享的一块区域,用......
  • Python面试题-8
    41.请解释Python中的切片操作。在Python中,切片(Slicing)是一种获取序列(如字符串、列表、元组等)的子集或部分的操作。切片操作使用方括号[],并且可以在方括号中指定开始索引、结束索引和步长。其基本语法如下:sequence[start:end:step]start是切片开始的索引,默认为0(序列的......
  • 【js面试题】深入理解尾递归及其在JavaScript中的应用
    面试题:举例说明尾递归的理解,以及应用场景引言:在编程中,递归是一种常见的解决问题的方法,它允许函数调用自身来解决问题。然而,递归如果不当使用,可能会导致栈溢出错误,特别是在处理大量数据时。尾递归是一种特殊的递归形式,它能够优化递归调用,避免栈溢出的问题。本文将深入探......
  • .NetCore中EFCore for MySql整理MySql.EntityFrameworkCore
    一、MySql.EntityFrameworkCore 这个是官方给的一个EF操作MySql数据库的框架。使用方法跟EFforSqlServer一样。 二、安装命令NuGet\Install-PackageMySql.EntityFrameworkCore-Version8.0.5  项目依赖 安装后的结果:   三、EFCodeFirst模式连......
  • 前端面试题30(闭包和作用域链的关系)
    闭包和作用域链在JavaScript中是紧密相关的两个概念,理解它们之间的关系对于深入掌握JavaScript的执行机制至关重要。作用域链作用域链是一个链接列表,它包含了当前执行上下文的所有父级执行上下文的变量对象。每当函数被调用时,JavaScript引擎会创建一个新的执行上下文,其中......
  • 前端面试题29(js闭包和主要用途)
    JavaScript中的闭包是一个非常强大的特性,它允许一个函数访问并操作其词法作用域之外的变量。闭包的形成主要依赖于函数的作用域链,即函数可以访问在其外部定义的变量,即使外部函数已经执行完毕。下面我会通过几个方面来帮助你理解闭包的概念:闭包的定义闭包是一个函数及其......
  • 前端面试题28(Vue3的Teleport功能在什么场景下特别有用?能给个例子吗?)
    Vue3的Teleport功能在需要将组件的渲染结果放置在DOM树中与当前组件位置无关的任意位置时特别有用。这通常涉及到需要将某些UI元素(如模态框、弹出菜单、通知、工具提示等)从其逻辑上的父级组件中“提取”出来,放置到页面的更高层级或完全不同的位置,以避免样式冲突或层......
  • 前端面试题27(在实际项目中,如何有效地利用Vue3的响应式系统提高性能?)
    在实际项目中,有效利用Vue3的响应式系统提高性能主要涉及以下几个关键点:1.合理使用reactive和refreactive:用于将复杂的数据结构(如对象或数组)转换成响应式版本。确保只将需要实时更新的数据结构声明为响应式,避免不必要的全局响应化,以减少性能开销。ref:用于创建基本类型......