运维面试题

Linux 面试题

1、如何看当前Linux系统有几颗物理CPU和每颗CPU的核数?
答:在/proc(puoruake)/cpuinfo文件中查看

2、查看系统负载有哪些?后面的三个数值表示什么含义呢?
答:top、w、uptime; 其中load average即系统负载,三个数值分别表示一分钟、五分钟、十五分钟内系统的平均负载,即平均任务数。

3、如何以交互式的方法将其文件中的所有abc字符串更换为ABC?
答:tr 或 sed

4、简述下linux系统里的buffer和cache区别?
答:Buffer 是对磁盘(块)数据的缓存,而 Cache 是对文件(block)数据的缓存,他们既会用在读请求中,也会用的写请求中。

5、如何实时查看网卡流量为多少?如何查看历史网卡流量?
答:安装sysstat包,使用sar命令查看。(sar -n DEV 1 10 #一秒显示一次,一共显示10次;sar -n DEV -f /var/log/sa/sa22 #查看指定日期的流量日志)

6、如何查看当前系统都有哪些进程?
答:ps -aux 或者ps -ef

7、ps 查看系统进程时,有一列为STAT, 如果当前进程的stat为Ss 表示什么含义?如果为Z表示什么含义?
答:S表示正在休眠;s表示主进程;Z表示僵尸进程。

8、僵尸进程对系统有害吗?如何杀掉僵尸进程?
答:重启服务器电脑、找到该defunct僵尸进程的父进程,将该进程的父进程杀掉(ps -ef | grep defunct_process_pid)

9、如何查看某个网卡是否连接着交换机?
答:mii-tool eth0 或者 mii-tool eth1

10、linxu下设置DNS需要修改哪个配置文件?
答:(1)在文件 /etc/resolv.conf 中设置DNS;(2)在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中设置DNS

11、iptables四表五链都有哪些?简述下filter、nat表的作用。
答:四表=filter(fliute)【过滤数据包】、nat【网络地址转换】、managle(mannige)、raw(rou),默认是filter表;五链:PREROUTING(perrui) 、INPUT、FORWARD(fuo)、OUTPUT、POSTROUTING

12、把iptable的规则保存到一个文件中如何做?如何恢复?
答:使用iptables-save重定向到文件中;使用iptables-restore(weisituoer)反重定向回来

13、如何备份某个用户的任务计划?
答:将/var/spool/cron/目录下指定用户的任务计划拷贝到备份目录cron_bak/下即可

14、任务计划格式中,前面5个数字分表表示什么含义?
答:依次表示:分、时、日、月、周

15、某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
答:用户身份验证过程记录在/var/log/secure(sekuer)中,登录成功的信息记录在/var/log/wtmp。

16、网卡或者硬盘有问题时,可以通过使用哪个命令查看相关信息?
答:使用命令dmesg

17、shell中什么时候会用到break和continue命令?并且这两个命令的作用是什么?
答:在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用 break 和 continue 来跳出循环。break命令 允许跳出所有循环(终止执行后面的所有循环)。continue命令 不会跳出所有循环,仅仅跳出当前符合条件的循环。

18、如何查看当前系统有几块盘?磁盘的使用率和磁盘io的读写使用情况用什么工具可以查看?
答:lsblk 、df -Th 、iostat -xdm 1 # 一般会有个经验值,比如,ioutil要小于80%, svctm要小于2ms。

19、自定义解析域名的时候,我们可以编辑哪个文件?是否可以一个ip对应多个域名?是否可以一个域名对应多个ip?
答:编辑 /etc/hosts ,可以一个ip对应多个域名,不可以一个域名对多个ip

20、有一天你突然发现公司网站访问速度变的很慢很慢,你该怎么办呢?(服务器可以登陆,提示:你可以从系统负载和网卡流量入手)
答:可以从两个方面入手分析:分析系统负载,使用w命令或者uptime命令查看系统负载,如果负载很高,则使用top命令查看CPU,MEM等占用情况,要么是CPU繁忙,要么是内存不够,如果这二者都正常,再去使用sar命令分析网卡流量,分析是不是遭到了攻击。一旦分析出问题的原因,采取对应的措施解决,如决定要不要杀死一些进程,或者禁止一些访问等。

21、LVM新增磁盘扩容过程

答:

1、创建物理卷并添加卷组
2、添加到逻辑卷
3、现在,逻辑卷已经扩展,你需要调整文件系统的大小以扩展逻辑卷内的空间

文件句柄面试题

1. 什么是文件句柄?

  • 文件句柄是操作系统用来标识和管理打开文件的抽象概念。它是一个整数或指针,程序通过它来访问文件。
  • 在 Linux/Unix 系统中,文件句柄通常是一个非负整数(文件描述符,File Descriptor)。
  • 在 Windows 系统中,文件句柄是一个指针(HANDLE)。

2、文件描述符(File Descriptor)是什么?
文件描述符是 Linux/Unix 系统中用于标识打开文件的整数。
每个进程都有一个文件描述符表,用于记录打开的文件。
标准文件描述符:

  • 0:标准输入(stdin)
  • 1:标准输出(stdout)
  • 2:标准错误(stderr)

3、df -h 发现磁盘空间满了,但是任凭各个文件目录下  du -sh * 也找不到大文件,怎么解决
答:lsof -n | grep deleted  查看到占用的进程,通过kill -9 进程号或重启服务解决;当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间

Shell

1、如何检查文件或目录是否存在?
答:检查文件:-f;检查目录:-d;

2、如何在出现异常时退出shell脚本?
答:使用 $? ,进行判断

3、如何调试 Shell 脚本?
答:使用 -x 参数运行脚本,打印每条命令及其结果

4、如何定义和调用函数?

grep、awk、sed 三剑客

1、grep 的常用选项有哪些?

  • -i:忽略大小写。
  • -v:反向匹配,输出不匹配的行。
  • -r:递归搜索目录中的文件。
  • -n:显示匹配行的行号。
  • -c:统计匹配的行数。
  • -E:支持扩展正则表达式(等同于 egrep)。

2、如何使用 grep 递归搜索目录?
答:grep -r "pattern" /path/to/dir

3、如何使用 grep 统计匹配的行数?
答:grep -c "pattern" file.txt

4、如何使用 awk 打印文件的某一列?
答:awk '{ print $1 }' file.txt

5、如何使用 awk 计算某一列的总和?
答:awk '{ sum += $1 } END { print sum }' file.txt

6、如何使用 awk 设置字段分隔符?
答:awk -F':' '{ print $1 }' /etc/passwd

7、sed 的基本语法是什么?
答:sed 's/old/new/' file.txt

  • s:替换命令。
  • old:被替换的内容。
  • new:替换后的内容。

8、如何将文件中的 "foo" 替换为 "bar"。?
答案:sed 's/foo/bar/' file.txt

9、如何使用 sed 删除文件中的第 5 行内容?
答:sed '5d' file.txt

10、如何使用 sed 替换文件中的所有匹配内容?
答案:使用 g 标志 --- sed 's/foo/bar/g' file.txt

iptables

1、iptables 与 firewalld/nftables 有什么区别?

  • iptables:传统的 Linux 防火墙工具,直接操作内核 netfilter
  • firewalld:动态防火墙管理器,底层使用 iptables 或 nftables

2、iptables 有哪几个内置表?各自的作用是什么?

  • filter 表:默认表,用于数据包过滤(INPUT/OUTPUT/FORWARD)
  • nat 表:网络地址转换(PREROUTING/POSTROUTING/OUTPUT)
  • mangle 表:特殊数据包修改(所有链)
  • raw 表:连接跟踪豁免(PREROUTING/OUTPUT)
  • security 表:SELinux 相关标记(较少使用)

3、解释 iptables 的默认链及其数据流

  • PREROUTING:数据包进入路由决策前
  • INPUT:目标为本机的数据包
  • FORWARD:需要转发的数据包
  • OUTPUT:本机产生的数据包
  • POSTROUTING:数据包离开路由决策后

4、如何查看当前的 iptables 规则?

  • iptables -L -n -v # 查看 filter 表规则
  • iptables -t nat -L -n -v # 查看 nat 表规则

5、如何保存和恢复 iptables 规则?

  • 保存规则(取决于发行版):iptables-save > /etc/iptables.rules
  • 恢复规则:iptables-restore < /etc/iptables.rules 或 service iptables save # RHEL/CentOS

git

1、Git 的基本工作流程是怎样的?

  • 修改工作目录中的文件
  • 将更改暂存 (git add)
  • 提交更改到本地仓库 (git commit)
  • 推送到远程仓库 (git push)

2、如何创建一个新的 Git 仓库?

  • 初始化新仓库:git init
  • 克隆现有仓库:git clone

3、解释 .git 目录下的重要文件和目录

  • HEAD:当前所在分支或提交
  • config:仓库配置
  • objects/:Git 对象存储(提交、树、blob)
  • refs/:引用(分支和标签)
  • hooks/:客户端和服务端钩子脚本
  • index:暂存区信息

4、如何查看当前仓库的状态?
git status

5、如何撤销最后一次提交?

  • 保留更改在工作目录:git reset --soft HEAD~1
  • 完全删除提交(慎用):git reset --hard HEAD~1

6、如何创建和切换分支?

  • 创建分支:git branch
  • 切换分支:git checkout
  • 创建并切换分支(一步完成):git checkout -b

docker 容器

1、容器隔离及限制的底层技术是什么?
答:cgroup 和 namespace 是最重要的两种技术。cgroup 实现系统资源限额, namespace 实现资源隔离。

2、namespace 分别对应六种资源有什么?
答:Mount(文件系统)、UTS(主机名称)、IPC(内存)、PID(进程)、Network(网络) 和 User(用户)

3、Docker 安装时会自动在 host 上创建三个网桥模式,都叫什么?并简述下这几个不同的网络模式。
答:bridge、host、none

4、Docker架构简单描述下

答:docker采用的是c/s架构。客户端向服务端发送请求,服务端负责构建、运行和分发容器。并且客户端和服务端可以运行在同一个宿主机上,客户端也可以通过socket与远程的服务端通信。

5、Docker 的核心组件都有什么?
答:Docker 客户端 - Client 、Docker 服务器 - Docker daemon 、Docker 镜像 - Image、 Registry 仓库 – Registry、Docker 容器 - Container

6、创建容器的过程docker都做了哪些事情,简单描述下

答:

  1. Docker 客户端执行 docker run 命令。

  2. Docker daemon 发现本地没有 httpd 镜像。

  3. daemon 从 Docker Hub 下载镜像。

  4. 下载完成,镜像 httpd 被保存到本地。

  5. Docker daemon 启动容器。

7、为什么 base 镜像 都很小?就比如centos在docker这里就很小,200M左右。

答:Linux系统的组成,Linux 操作系统由Bootfs(内核空间)和 Rootfs(用户空间)组成,因为对于 base 镜像来说,底层直接用宿主机的 kernel,自己只需要提供 rootfs 。

8、简述容器中copy-on-Write的特性

答:当用某个镜像创建了一个容器,在容器中只有当需要修改时才复制一份数据在容器层,这种特性被称作 Copy-on-Write。

9、Dockerfile 的基本结构是什么?

10、RUN 和 CMD 的区别是什么?
答:

  • RUN:在构建镜像时执行命令,用于安装软件包或配置环境。
  • CMD:在容器启动时执行命令,用于定义默认的容器行为。

11、COPY 和 ADD 的区别是什么?
答:

  • COPY:仅支持复制本地文件或目录到镜像中。
  • ADD:除了复制功能外,还支持自动解压和从远程 URL 下载文件。

12、如何查看 Docker 镜像的构建历史?
答:使用 docker history 命令

13、如何清理未使用的 Docker 资源?
删除未使用的镜像:docker image prune -a
删除未使用的容器:docker container prune
删除未使用的卷:docker volume prune

14、如何启动 Docker Compose 应用
答案:docker-compose up -d。 -d:后台运行。

15、如何指定 Docker Compose 文件?
答:docker-compose -f custom-compose.yml up

16、如何查看 Docker Compose 应用的日志?
答:使用 docker-compose logs 命令

编排k8s

1.说下k8s的核心组件都有哪些,并简述下他们各自的作用

答:

  • API Server:提供 Kubernetes API。
  • Scheduler:负责调度 Pod 到合适的节点。
  • Controller Manager:运行控制器(如 Node Controller、Replication Controller)。
  • etcd:分布式键值存储,保存集群状态。
  • Kubelet:管理节点上的 Pod 和容器。
  • Kube Proxy:实现服务负载均衡和网络代理。
  • Container Runtime:运行容器的软件(如 Docker、containerd)。

2、k8s中都有哪些对象资源?

答:namespace、controller、pod、pv、pvc、configmap、secret、service、ingress

3、labels 的本质是什么?他的作用又是什么?

答:Label其实就一对 key/value ,被关联到对象上。他可以起到服务发现和集群调度的作用。

4、Service 在 K8s 中有哪几种类型?

答:ClusterIp、NodePort、LoadBalancer

5、Secret 在k8s中的作用?

答:Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。

PS : 只有与 apiserver 组件进行交互的 pod 才会有如下的 证书、命名空间、tekon密钥。

6、简述下PV 和 PVC是什么

答:PV 可以看作可用的存储资源,PVC则是对存储资源的申请需求

7、简述Kubernetes Replica Set 和 Replication Controller 之间有什么区别?

答:两者几乎一样,都是确保在任何给定时间运行指定数量的 Pod 副本。不同之处在于RS 使用基于集合的选择器,而 Replication Controller 使用基于权限的选择器。

8、一般Kubernetes是如何进行优雅的节点关机维护?

答:由于Kubernetes节点运行大量Pod,因此在进行关机维护之前,建议先使用kubectl drain将该节点的Pod进行驱逐,然后进行关机维护。

**9、什么是 ConfigMap 和 Secret?

  • ConfigMap:用于存储非敏感的配置数据。
  • Secret:用于存储敏感数据(如密码、密钥)。

10、什么是 StatefulSet?
答案:StatefulSet 用于管理有状态应用,确保 Pod 的唯一性和持久化存储。

11、什么是 Service?
答案:Service 用于定义一组 Pod 的访问策略,提供负载均衡和服务发现。

12、什么是 DaemonSet?
答案:DaemonSet 用于在每个节点上运行一个 Pod 副本,通常用于日志收集或网络代理。

13、什么是 Ingress?
答案:Ingress 用于管理外部访问集群服务的 HTTP/HTTPS 路由。

14、如何定义资源清单中的环境变量?

15、资源清单中的 apiVersion 字段有什么作用?
答案: apiVersion 指定了 Kubernetes API 的版本,不同资源可能属于不同的 API 组。例如:
核心 API 组:v1(如 Pod、Service)。
扩展 API 组:apps/v1(如 Deployment)、batch/v1(如 Job)。

16、如何定义资源清单中的资源限制(Resource Limits)?
答案:
requests: 容器启动时请求的资源。
limits: 容器资源使用的上限。

17、如何定义 Pod 的健康检查
答:
livenessProbe: 检查容器是否存活。
readinessProbe: 检查容器是否准备好接收流量。

18、pod的生命周期
pod对象自从创建开始至终止退出的时间范围称为生命周期,在这段时间中,pod会处于多种不同的状态,并执行一些操作;其中,创建主容器为必须的操作,其他可选的操作还包括运行初始化容器(init container)、容器启动后钩子(start hook)、容器的存活性探测(liveness probe)、就绪性探测(readiness probe)以及容器终止前狗子(pre stop hook)等,这些操作是否执行则取决于pod的定义。

19、描述 Pod 从创建到终止的完整生命周期过程
kubectl 调用 apiserver –> etcd –> kubelet –> CRI 进行容器初始化;
首先会先启动一个pause容器(任何pod启动时都会先pause容器);
init C 容器不会伴随整个pod的生命周期;如果是正常退出(0),进入main C,否则(非0),一直重启 失败;
进入main C后有两个参数,start:在刚启动时可以允许他执行一个命令,stop:退出时也可以允许他执行一个命令;
readiness模板:可以在main C运行的多少秒之后进行就绪检测;检测通过后,pod状态就为running,否则为failed;
liveness模板:伴随着整个main C的生命周期,当main C里面的进程 与 liveness检测结果不一致时,就可以执行对应的命令;

20、Pod 生命周期有哪些主要阶段?
Pending:Pod 已被系统接受,但容器尚未创建或运行;
Running:Pod 已绑定到节点,所有容器已创建且至少有一个在运行;
Succeeded:所有容器成功终止且不会重启;
Failed:所有容器终止,且至少有一个容器以失败状态退出;
Unknown:无法获取 Pod 状态(通常由于节点通信问题);

21、Service Account的作用
答:Service Account 用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod的/run/secrets/kubernetes.io/serviceaccount目录中。PS : 只有与 apiserver 组件进行交互的 pod 才会有如下的 证书、命名空间、tekon密钥。

22、PV和PVC的生命周期

23、PV卷都有哪些声明状态
Available(可用)——一块空闲资源还没有被任何声明绑定
Bound(已绑定)——卷已经被声明绑定
Released(已释放)——声明被删除,但是资源还未被集群重新声明
Failed(失败)——该卷的自动回收失败

ansible自动化

1、Ansible常用模块及左右

答:command ping yum copy service shell file replace user group

2、什么是Playbooks?简答讲下

答:Playbooks 可以理解为一个编排文件,基于YAML语言编写的。用于描述远程系统实施的过程,或者描述流程中的一系列步骤。

3、shell模块与command模块的区别?

答:command只能识别一些简单的linux命令,shell能识别一点复杂性命令。

4、要对1000台机器收集内核版本,如何让ansible以面向过程的方式执行收集这些信息?

答:将其配置文件中的 forks 参数改为1就好。

5、如何调试 Ansible Playbook
答:使用 --check 参数进行模拟运行

6、如何收集目标主机的 Facts系统信息?
答:使用 setup 模块收集 Facts;

web网站

1、一个网站的形成都有哪些东西?

答:域名、网页、主页;HTTP、URL、HTML、超链接

2、简述下静态页面与动态页面的差别

答:静态页面内容几乎是固定的, 而动态页面的内容会因用户、浏览器、时间等而发生变化。

3、URL的组成部分都有哪些?

答:协议、域名、端口、URL文件资源、参数(query)、片段(fragment)

4、简单介绍下HTTP协议

答:HTTP就是一个超文本传输协议,定义了客户端与服务器端之间文本传输的规范。

5、返回码 200、301、302、404 的含义是什么?

答:200 服务器成功返回内容,301/2 永久/临时重定向,404 请求的页面不存在

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

答:

  1. 浏览器缓存:浏览器会按照一定的频率缓存DNS记录。

  2. 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中找。

  3. 路由缓存:路由器也有DNS缓存。

  4. 缓存代理:国内代理的DNS服务器,有点类似于阿里云的CDN。

  5. dns根服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。

Nginx服务

1、什么是正向代理和反向代理?

答:正向代理就是一个人发送一个请求直接就到达了目标的服务器;反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给了后端的业务处理服务器进行处理了

2、nginx中的location主要作用是什么?

答:location就是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。

3、什么是动静分离?

答:将动态请求和静态请求区分访问,静态由Nginx处理, 动态由PHP处理或Tomcat处理。

4、Nginx负载均衡是基于那个模块来实现的?

答:upstream

5、Nginx中负载均衡算法策略里常用的都有哪些?

答:轮询、权重、ip_hash

6、Nginx 的日志在那个模块下配置?

答:在 http 或 server 块中配置日志

7、Nginx 的 location 块有哪些匹配规则?
答:

  • 精确匹配:location = /path。
  • 前缀匹配:location /path。
  • 正则匹配:location ~ .php$。
  • 优先顺序:精确匹配 > 前缀匹配(最长匹配) > 正则匹配。

8、优化 Nginx 的性能可以从哪里入手
答:调整工作进程数、使用高效的epoll事件模型、启用 Gzip 压缩等

9、什么是 Nginx 的 rewrite 规则?
使用 rewrite 指令实现 URL 重写;
标志位

  • break:停止处理当前 rewrite;
  • redirect:302 临时重定向;
  • permanent:301 永久重定向;

Mysql服务

1、查看当前库和表的命令

2、mysql的增删查改的命令

3、索引的作用是什么?

答:加快查询的速度。

4、简述下MysQL中的事物

答:事务就是由一组SQL语句组成的,保证一组SQL语句要么全部执行成功,要么全部执行失败,以此维护数据的完整性。

5、事务中的四个特性都是什么?

答: (Atomicity) 原子性、(Consistency) 一致性、 (Isolation) 隔离性、 (Durability) 持久性

  • 原子性(Atomicity):事务中的操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务执行前后,数据库的状态保持一致。
  • 隔离性(Isolation):多个事务并发执行时,彼此隔离。
  • 持久性(Durability):事务提交后,数据永久保存。

6、InnoDB和MyISAM存储引擎的区别

答:

  • InnoDB:支持事务、行级锁和外键,适用于大多数场景。
  • MyISAM:不支持事务和行级锁,但查询性能较高,适用于读密集型场景。

7、MySQL 的日志类型有哪些?
答:
错误日志(Error Log):记录 MySQL 运行时的错误信息。
查询日志(General Log):记录所有 SQL 查询。
慢查询日志(Slow Query Log):记录执行时间超过阈值的查询。
二进制日志(Binary Log):记录所有写操作,用于复制和恢复。
重做日志(Redo Log):InnoDB 用于崩溃恢复。

8、MySQL 的隔离级别有哪些?
答:MySQL 支持以下隔离级别:

  • 读未提交(Read Uncommitted):最低级别,可能读到未提交的数据。
  • 读已提交(Read Committed):只能读到已提交的数据。
  • 可重复读(Repeatable Read):默认级别,保证同一事务中多次读取结果一致。
  • 串行化(Serializable):最高级别,完全隔离事务。
  • 可以通过 SET TRANSACTION ISOLATION LEVEL 设置隔离级别。

9、如何解决著主从复制中断问题?
常见原因:

  • 主从数据不一致
  • 网络中断
  • 主库二进制日志被清理
    解决方法:
  • 跳过错误(谨慎使用):SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;
  • 重新配置复制:STOP SLAVE; CHANGE MASTER TO ...; START SLAVE;

10、主库宕机后如何提升从库为新主库?

  • 确认从库数据最新
  • 停止复制:STOP SLAVE;
  • 重置从库:RESET SLAVE ALL; (8.0+) 或 RESET MASTER;
  • 启用写入:SET GLOBAL read_only = OFF;
  • 重配其他从库指向新主库

Redis服务

1、简述下什么是redis?

答:Redis 是一个基于内存的高性能key-value数据库。

2、Redis五大数据类型是什么

答:String、list、set、zset、hash

3、Redis持久化有几种方式?他们的区别又是什么?

答:RDB持久化(类似于快照功能,定期将内存中的数据快照保存到磁盘)、AOF持久化(近似实时性,记录所有写操作命令)

  • RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
  • AOF持久化是以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。

4、Redis 为什么单线程还这么快?

答:redis 是将所有的数据全部放在内存中的,所以说使用单线程去操作效率就是最高的,多线程(CPU上下文会切换:耗时的操作),对于内存系统来说,如果没有上下文切换效率就是最高的!多次读写都是在一个CPU上的,在内存情况下,这个就是最佳的方案!

5、Redis 的事务机制是什么?

答:Redis 通过 MULTI、EXEC、DISCARD 和 WATCH 命令实现事务:

  • MULTI:开启事务。
  • EXEC:执行事务中的所有命令。
  • DISCARD:取消事务。
  • WATCH:监视一个或多个键,如果在事务执行期间这些键被修改,则事务不会执行。
  • 注意:Redis 的事务不支持回滚(Rollback)。

6、Redis 的缓存穿透、缓存击穿和缓存雪崩是什么?
答:
缓存穿透:大量请求查询不存在的数据,导致请求直接落到数据库。
解决方案:使用布隆过滤器(Bloom Filter)过滤无效请求。

缓存击穿:热点数据过期后,大量请求同时落到数据库。
解决方案:设置永不过期或使用互斥锁。

缓存雪崩:大量缓存同时过期,导致请求集中落到数据库。
解决方案:设置随机的过期时间。

7、Redis 的持久化文件如何备份?

答:

  • 直接备份 RDB 文件(dump.rdb)或 AOF 文件(appendonly.aof)
  • 使用 BGSAVE 命令创建 RDB 快照。
  • 使用工具如 redis-cli --rdb 导出数据。

网络

1、tcp与udp的区别?

答:他俩都是传输协议,基于连接与无连接;对系统资源的要求(TCP较多,UDP少);TCP保证数据完整性,UDP可能丢包;

2、讲下网络7层模型OSI都有哪些?

答:OSI 七层模型架构图

3、简述下路由的过程

答:当路由器收到一个报文时,会找出目的IP地址,通过目的IP与自己的路由表进行匹配,根据路由条目的指示决定出接口及下一跳IP。

4、路由表的组成部分有哪些?

答:目的IP、掩码、路由协议、优先级、开销,下一跳IP及下一跳出接口。

5、怎么查看路由表?

答:dis ip routing

keeplived & LVS

1、keeplived 有哪些模块?并说下他们各自的作用

答:keepalived主要有三个模块,分别是core、check和vrrp

  1. core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。

  2. vrrp模块是来实现VRRP协议的。

  3. check负责健康检查,常见的方式有端口检查及URL检查。

2、解释一下vrrp 协议

答:虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

3、简述LVS的工作模式及其工作过程?

答:LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式)、VS/DR(路由模式)、VS/TUN(隧道模式)。

NAT模式(VS-NAT)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP)。真实服务器响应完请求后,查看默认路由,把响应后的数据包发送给负载均衡器,负载均衡器在接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。

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

缺点:扩展性有限,当服务器节点增长过多时,由于所有的请求和应答都需要经过负载均衡器,因此负载均衡器将成为整个系统的瓶颈。

IP隧道模式(VS-TUN)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求报文封装一层IP隧道(T-IP)转发到真实服务器(RS)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

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

直接路由模式(VS-DR)

原理:首先负载均衡器接收到客户的请求数据包时,根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后负载均衡器就把客户端发送的请求数据包的目标MAC地址改成后端真实服务器的MAC地址(R-MAC)。真实服务器响应完请求后,查看默认路由,把响应后的数据包直接发送给客户端,不需要经过负载均衡器。

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,也能处理很巨大的请求量。

缺点:需要负载均衡器与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。

KVM虚拟化

1、什么是虚拟化?

答:就是将一台物理机虚拟成多台虚拟机,虚拟机之间互不干扰。

2、常见的虚拟化软件都有哪些?

答:vmware、kvm

3、怎么查看当前系统是使用哪家的虚拟化?

答:lscpu

4、kvm的三个组件及作用

答:libvirt(用来管理虚拟机)、virt(安装和克隆虚拟机)、qemu(管理虚拟机磁盘的)

5、如何查看正在运行的虚拟机

答:virsh list

6、kvm如何进行子机的开机关机操作

virsh start centos7 开机 virsh shutdown centos7 关机

7、kvm的网络模式有哪几种

  • NAT模式:虚拟机通过主机的NAT网络访问外部网络。
  • 桥接模式:虚拟机直接连接到物理网络,与主机在同一网络中。
  • 用户模式:虚拟机通过主机的用户空间网络栈访问外部网络。
  • VLAN模式:虚拟机连接到特定的VLAN。

8、KVM支持哪些存储格式?

  • raw:原始格式,性能最好,但不支持快照。
  • qcow2:支持压缩、快照和动态分配空间。
  • vmdk:VMware兼容格式。
  • vdi:VirtualBox兼容格式。

Jenkins

1、Jenkins 支持哪些触发器?
答:

  • ​SCM 触发器:检测代码变更。
  • ​定时触发器:基于时间计划触发构建。
  • ​手动触发器:用户手动触发构建。
  • ​远程触发器:通过 API 或其他工具触发。

2、Jenkins 的工作流程是什么?

  • 开发者提交代码到版本控制系统(如 Git)。
  • Jenkins 检测代码变更,触发构建。
  • 执行构建任务(如编译、测试)。
  • 生成构建结果,反馈给开发者。
  • 如果构建成功,可自动部署到目标环境。

3、大致讲一下jenkins是如何将gitlab仓库上的代码拉取到的本地并将其带脉发布到后端rs服务器上的

1. 准备工作
​Jenkins 服务器:确保 Jenkins 已安装并正常运行。
​GitLab 仓库:准备好需要拉取的代码仓库,并确保 Jenkins 有访问权限。
​后端服务器:确保目标服务器(如 Tomcat、Nginx 等)已配置好,并支持部署。
​插件安装:在 Jenkins 中安装必要的插件,如 Git、SSH、Pipeline 等。
​2. 配置 Jenkins 任务
​创建任务:

在 Jenkins 中创建一个新的任务(如 Freestyle 或 Pipeline 项目)。
​配置 GitLab 仓库:

在任务配置中,选择源码管理为 Git。
填写 GitLab 仓库的 URL 和认证信息(如 SSH 密钥或用户名/密码)。
指定分支(如 main 或 master)。
​配置构建触发器:

设置触发器为 GitLab Webhook,当代码推送到 GitLab 时自动触发构建。
或者使用轮询 SCM,定期检查代码变更。
​配置构建步骤:

如果是 Freestyle 项目,添加构建步骤(如执行 Shell 脚本)。
如果是 Pipeline 项目,编写 Jenkinsfile 定义构建流程。
​3. 编写构建和部署脚本
在构建步骤中,编写脚本完成以下操作:

​拉取代码:

Jenkins 会自动从 GitLab 拉取代码到工作目录(WORKSPACE)。
​构建代码:

根据项目类型,执行构建命令(如 mvn clean package 或 npm build)。
​打包构建产物:

将构建生成的产物(如 WAR、JAR 或静态文件)打包。
​部署到后端服务器:

使用 SCP 或 SSH 将构建产物上传到目标服务器。
在目标服务器上执行部署命令(如重启服务或解压文件)。
示例 Shell 脚本:

bash
# 构建代码
mvn clean package

# 将构建产物上传到服务器
scp target/myapp.war user@backend-server:/opt/tomcat/webapps/

# 在服务器上重启服务
ssh user@backend-server "systemctl restart tomcat"
​4. 配置 GitLab Webhook
在 GitLab 仓库中,进入 ​Settings > Webhooks。
添加 Webhook URL,格式为:http://<jenkins-server>/gitlab/build_now。
选择触发事件(如 Push 事件)。
保存并测试 Webhook,确保 Jenkins 能正确接收通知。
​5. 触发构建和部署
​手动触发:在 Jenkins 界面手动点击“立即构建”。
​自动触发:当代码推送到 GitLab 时,Webhook 会通知 Jenkins 自动触发构建和部署。
​6. 查看构建结果
在 Jenkins 中查看构建日志,确认构建和部署是否成功。
如果失败,根据日志排查问题并修复。

​总结
Jenkins 通过以下步骤实现从 GitLab 拉取代码并部署到后端服务器:

配置 GitLab 仓库和构建触发器。
编写构建和部署脚本。
使用 GitLab Webhook 实现自动触发。
执行构建和部署流程。
这种方式可以高效地实现持续集成和持续部署(CI/CD)。

4、jenkins都有哪些比较常用的自带变量
答:
与构建相关的变量
BUILD_NUMBER:当前构建的编号。
BUILD_ID:当前构建的唯一 ID。
BUILD_TAG:构建的标签,格式为 jenkins--
JOB_NAME:当前任务的名称。
JOB_BASE_NAME:当前任务的名称(不包含文件夹路径)。
EXECUTOR_NUMBER:执行构建的执行器编号。
与工作空间相关的变量
WORKSPACE:当前构建的工作目录路径。
WORKSPACE_TMP:临时工作目录路径。
与节点相关的变量
NODE_NAME:执行构建的节点名称(Master 或 Agent)。
NODE_LABELS:执行构建的节点的标签。
与源码管理相关的变量
GIT_COMMIT:Git 提交的哈希值。
GIT_BRANCH:Git 分支名称。
GIT_URL:Git 仓库的 URL。
SVN_REVISION:SVN 的版本号。
与时间相关的变量
BUILD_TIMESTAMP:构建的时间戳。
BUILD_DATE:构建的日期。
BUILD_TIME:构建的时间。

ELK

1、什么是 ELK Stack
Elasticsearch:分布式搜索和分析引擎,用于存储和检索数据。
Logstash:数据收集和处理管道,用于解析、转换和传输数据。
Kibana:数据可视化工具,用于展示和分析 Elasticsearch 中的数据。

2、如何优化 Elasticsearch 的性能?
分片和副本:合理设置分片和副本数量。
硬件配置:使用 SSD、增加内存和 CPU。
索引优化:定期删除旧索引,使用索引生命周期管理(ILM)。
查询优化:避免复杂的查询,使用缓存。

3、什么是 Elasticsearch 的倒排索引?
答:倒排索引是 Elasticsearch 的核心数据结构,用于快速查找包含特定词项的文档。它由词项到文档的映射组成,支持高效的全文搜索。

4、Kibana 如何与 Elasticsearch 集成?
答:Kibana 通过 RESTful API 与 Elasticsearch 通信。在 Kibana 配置文件中指定 Elasticsearch 的地址

5、如何实现es索引日志的归档和清理?
答:使用索引生命周期管理(ILM)自动归档和删除旧索引。或者手动删除旧索引:

6、什么是 Beats?
答:Beats 是轻量级的数据收集器,用于将数据发送到 Elasticsearch 或 Logstash。常见的 Beats 包括:

  • Filebeat:收集日志文件。
  • Metricbeat:收集系统和服务指标。
  • Packetbeat:收集网络流量数据。

RabbitMQ

1、RabbitMQ 有哪些安全机制?

  • 认证:内置数据库/LDAP/HTTP
  • 授权:Vhost级别权限控制
  • SSL/TLS:加密通信
  • 防火墙:限制端口访问(5672/15672等)

2、什么是 RabbitMQ?它的核心组件是什么?

  • 生产者(Producer):发送消息的应用
  • 消费者(Consumer):接收消息的应用
  • 队列(Queue):存储消息的缓冲区
  • 交换机(Exchange):接收生产者消息并路由到队
  • 绑定(Binding):交换机和队列之间的规则连接
  • 虚拟主机(Vhost):隔离的环境单元

3、如何确保消息不丢失?
生产者确认机制、消息持久化、消费者手动ACK

4、RabbitMQ 有哪些常见的性能瓶颈?如何解决?

  • 磁盘 I/O:使用SSD,分离数据和日志磁盘
  • 内存:增加内存,监控内存使用(rabbitmqctl status)
  • CPU:优化交换机类型(避免复杂路由)
  • 网络:减少小消息,启用消息压缩

5、如何创建和管理用户权限?

  • 创建用户:rabbitmqctl add_user myuser mypassword
  • 设置权限:rabbitmqctl set_permissions -p /myvhost myuser "." "." ".*"
  • 设置标签(角色):rabbitmqctl set_user_tags myuser administrator

Prometheus

1、Prometheus 的核心组件有哪些?
答:

  • Prometheus Server:负责数据收集、存储和查询。
  • Client Libraries:用于在应用程序中埋点,暴露指标数据。
  • Pushgateway:用于支持短生命周期任务的指标推送。
  • Exporters:将第三方系统的指标暴露给 Prometheus。
  • Alertmanager:处理警报通知和去重。

2、Alertmanager 的主要功能是什么?
答;Alertmanager 负责处理 Prometheus 发送的警报,支持以下功能:

  • 去重:合并相同或相似的警报。
  • 分组:将相关警报合并为一个通知。
  • 路由:根据规则将警报发送到不同的接收者(如邮件、Slack)。
  • 静默:临时屏蔽特定警报。

3、Prometheus 的数据模型是什么?
答:Prometheus 使用时间序列数据模型,每个时间序列由以下部分组成:

  • 指标名称(Metric Name):描述指标的类别(如 http_requests_total)。
  • 标签(Labels):键值对,用于标识时间序列的维度(如 method="GET")。
  • 时间戳(Timestamp):数据点的时间。
  • 样本值(Sample Value):数据点的值。

4、Prometheus 的查询语言是什么?
答:PromQL,用于查询和分析时间序列数据

5、什么是 Pushgateway?
答:Pushgateway 用于支持短生命周期任务的指标推送。任务将指标推送到 Pushgateway,Prometheus 再从 Pushgateway 拉取数据。

NFS

1、如何解决 NFS 挂载失败的问题
答:

  • 检查网络连接和防火墙设置。
  • 确保 NFS 服务正在运行。
  • 检查 /etc/exports 文件配置是否正确。
  • 查看日志文件(如 /var/log/messages 或 /var/log/syslog)。

2、NFS 的默认端口是什么?
答案:

  • ​portmapper:111(TCP/UDP)。
  • ​NFS:2049(TCP/UDP)。
  • ​mountd:动态分配(可通过 rpcinfo -p 查看)。

3、NFS 与 SMB/CIFS 的区别是什么?
答案:​

  • NFS:主要用于 Unix/Linux 系统,性能较高。
  • ​SMB/CIFS:主要用于 Windows 系统,支持更多功能(如文件锁定、打印服务)。

4、如何限制 NFS 客户端的访问?
答案:在 /etc/exports 文件中指定允许访问的 IP 或网段。例如 /shared_dir 192.168.1.10(rw)

zabbix

1、zabbix分了三种架构?
答案:
server-client架构:也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
master-node-client架构:该架构是zabbix最复杂的监控架构,适用于跨网络、跨机房、设备较多的大型环境 。每个node同时也是一个server端,node下面可以接proxy,也可以直接接client 。node有自已的配置文件和数据库,其要做的是将配置信息和监控数据向master同步,master的故障或损坏对node其下架构的完整性。
server-proxy-client架构:其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端,本身也并不存放数据,只是将agentd发来的数据暂时存放,然后再提交给server ;该架构经常是和master-node-client架构做比较的架构 ,一般适用跨机房、跨网络的中型网络架构的监控。

2、是Zabbix模板?它有什么作用?
模板是预定义的监控项、触发器、图形等的集合;
可以批量应用到多个主机,实现标准化监控配置;
便于管理和维护;

3、如何添加一个新的主机到Zabbix监控系统中?
通过Web界面导航到"配置"→"主机"→"创建主机";
填写主机名称、可见名称、所属组;
添加接口(Agent, SNMP等);
关联模板;

4、如何优化Zabbix的性能?
数据库优化(分区表、索引优化);
调整Housekeeper设置;
使用Proxy分担负载;
调整监控项更新间隔;
使用主动式Agent检查;

5、Zabbix Agent无法连接,如何排查?
检查Agent服务是否运行;
检查网络连通性;
检查防火墙设置;
检查Zabbix Server和Agent配置文件中的Server/ServerActive参数;
查看Agent日志;

6、Zabbix由哪些主要组件组成?
Zabbix Server:Zabbix系统的中央处理单元
Zabbix Agent:安装在监控目标上的数据采集代理
Zabbix Proxy:分布式监控的中介节点
Zabbix Web界面:系统管理配置和可视化的前端
数据库(MySQL, PostgreSQL等):存储所有监控配置和历史数据

posted @ 2025-02-05 10:07  ArMinLi  阅读(831)  评论(0)    收藏  举报