最近参加了多个面试,感觉现在找工作的确很别扭,无论招聘的、面试的、求职的全都处于一种躁动的焦虑之中。招聘方越来越多要求全日制统招本科为必须项外,有要求必须会华为私有云 FusionCompute 8.0版本的、有要求必须精通国产麒麟系统配置管理的、有要求必须有三个一千万以上标的的项目的、有要求系统/数据库/中间件/网络/安全/项目管理几个大项全能的、有要求必须要有两张不同厂商服务器管理认证的、有必须有华为数通IE证书的、有要求必须实现过全套Azure/AWS/GCP云上DevOPS流程的(绝不认可阿里云、华为云)、有要求必须有宁畅、SUMA这种新厂商服务器维护经验的。给人的观感就是项目急需某个螺丝钉,老板让HR赶紧找个人顶上去,至于培训上手就别想了,都是有今天没明天的节奏。

2023.05 摄于河北邯郸临漳


以下是我参加某个公司金融机构驻场运维的面试题目。我在这里把题目存一下,以作纪录吧。当然答案并不是标准答案,更多是个人的理解和阐述。

Linux主机

  1. 是否做过Linux的升级补丁?如何搭建本地的Linux Repo源,然后通过Http来进行发布?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 离线软件源搭建
    1. 安装createrepo、httpd、rsync、rpm-build等工具包
    2. 建立文件目录,并配置httpd服务,将访问域名指向待部署文件目录
    2. 将ISO文件上传到站点的目录下
    3. 生成repodata的信息,使用createrepo命令
    4. 开启防火墙的主机http端口
    # 在线同步官方源
    1. 建立同步脚本,使用rsync同步官方源;
    2. 建立定时任务
    # 收尾
    在主机可访问位置,配置客户端使用repo文件,并下发到待更新主机
  2. Linux主机的repo文件里面有那些参数?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cat /etc/yum.repos.d/rocky.repo
    [baseos] # 类目
    name=Rocky Linux $releasever - BaseOS # 名称
    mirrorlist=https://mirrors.rockylinux.org/mirrorlist? arch=$basearch&repo=BaseOS-$releasever$rltype # 镜像地址
    #baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
    gpgcheck=1 # 是否进行签名校验
    enabled=1 # 是否可用
    countme=1
    metadata_expire=6h # 元数据过期时间
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 # 签名文件
  3. 重启SSHD服务,SSH连接会中断么?如何实现重启SSHD服务的时候,所有的连接都要中断?

    1
    2
    3
    4
    5
    6
    1. 重启SSHD服务,SSH连接不会中断
    2. 中断连接的方法有:
    1. 重启主机
    2. 重启网络
    3. 设定sshd的空闲超时值
    4. 通过pkill杀掉登录pts
  4. 你知道RedHat Linux升级的时候,有个政策叫做向后移植?

    1
    2
    3
    4
    5
    6
    7
    红帽使用一个术语“后向移植(backporting)”,它代表从最新版本的上游软件包中获取安全漏洞修复,并将其应用到由红帽提供的较旧的软件包版本中。
    1. 找出相关的修复,并将其与任何其他更改隔离开。
    2. 确保修复不会产生不必要的副作用。
    3. 将修复应用到之前发布的版本中。
    缺点在于:
    1. 当用户安装了一个厂商提供的更新软件包后,可能这个软件包并不是媒体提到的最新的上游版本,而是一个旧的上游版本,但已在其中应用了向后移植的补丁程序
    2. 一些安全扫描和审计工具只根据其发现的组件版本号决定是否存在漏
  5. Redhat Linux的CVE库用过么?它到底讲的是什么东西?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CVE(Common Vulnerabilities and Exposures)的全称是公共漏洞和暴露,是公开披露的网络安全漏洞列表。IT人员、安全研究人员查阅CVE获取漏洞的详细信息,进而根据漏洞评分确定漏洞解决的优先级。

    不是所有漏洞都能被录入CVE,CNA主要根据如下规则判定是否为漏洞分配CVE编号:
    1. 漏洞可独立修复,与其他漏洞没有耦合。
    2. 软件或硬件供应商承认此漏洞的存在或有书面公告。
    3. 漏洞只影响一个代码库,如果漏洞影响多个产品,则为每个产品独立分配CVE编号。
    经过上述判断,如果可以分配编号则编写描述信息并发布到CVE网站。每个CVE条目主要包含以下信息:
    1. 描述:漏洞的来源、攻击方式等简要描述。
    2. 参考:漏洞的相关参考信息链接汇总,例如供应商的漏洞公告、紧急响应建议等。
    3. 发布的CNA:发布此CVE的CNA(CVE编号机构)。
    4. 发布日期:此CVE的发布日期。

    红帽产品安全部在其安全数据页面提供对原始安全数据的访问权限,并以机器可读格式提供安全数据 API。
    安全数据 API 提供的数据包括 OVAL(开放漏洞和评估语言)定义、通用漏洞报告框架(CVRF)文件和 CVE 数据。数据通过 XML 或 JSON 格式提供。

    可以通过 https://www.redhat.com/security/data/oval/v2/ 来下载对应cve文件
  6. 如何对200台主机的SSHD服务进行升级?

    1
    2
    1. 使用官方渠道或者上游yum源进行升级
    2. 使用ansible批量下发源码包和编译指令进行升级
  7. 如何通过Redhat官方途径进行系统升级?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    订阅服务提供处理红帽软件库存的机制,并允许您使用 yum 软件包管理器安装其他软件或将已安装的程序更新为更新的版本。
    在拥有Redhat官方订阅ID的情况下,可以使用subscription-manager来进行管理和升级。
    # 对当前系统进行订阅
    subscription-manager register
    # 查看可订阅软件列表
    subscription-manager list --available
    # 附加相应订阅,会在yum.repo目录下添加对应repo站点
    subscription-manager attach --pool=pool_id
    # 查看可用订阅库
    subscription-manager repos --list
    # 启用订阅库
    subscription-manager repos --enable repository
    # 升级对应软件包
    yum update softwarepackage
  8. 做过系统内核的升级么?如何通过YUM安装包的进行安装和回退,讲一下技术细节?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    # 升级内核
    # 查看当前操作系统版本
    cat /etc/redhat-release
    CentOS Linux release 7.5.1804 (Core)

    # 查看当前内核
    uname -r
    3.10.0-862.el7.x86_64

    # 查看yum可升级的内核版本
    yum list kernel --showduplicates

    # 如果yum list中有需要的版本可以直接执行update升级,但现在的问题是没有
    yum update kernel-3.10.0-862.14.4.el7.x86_64

    # 降级内核
    # 查看当前操作系统版本
    cat /etc/redhat-release
    CentOS Linux release 7.6.1810 (Core)

    # 查看当前内核
    uname -r
    3.10.0-957.1.3.el7.x86_64

    # 查看升级历史
    yum history list kernel
    yum downgrade kernel-*

    # 锁定rpm包版本
    yum -y install yum-versionlock
    yum versionlock add kernel-*****
  9. 做过Linux的网卡绑定么?绑定的模式有哪几种?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。

    bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点.
    balance-rr (mode=0) 默认, 有高可用 (容错) 和负载均衡的功能, 需要交换机的配置,每块网卡轮询发包 (流量分发比较均衡).
    active-backup (mode=1) 只有高可用 (容错) 功能, 不需要交换机配置, 这种模式只有一块网卡工作, 对外只有一个mac地址。缺点是端口利用率比较低
    balance-xor (mode=2)不常用
    broadcast (mode=3) 不常用
    802.3ad (mode=4)IEEE 802.3ad 动态链路聚合,需要交换机配置,没用过
    balance-tlb (mode=5) 不常用
    balance-alb (mode=6)有高可用 ( 容错 )和负载均衡的功能,不需要交换机配置 (流量分发到每个接口不是特别均衡)
  10. 如果Linux启动非常缓慢,如何进行排错?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    1. 安全模式或救援模式启动
    单用户模式:如果系统能够启动到一定程度,尝试进入单用户模式(某些发行版中可能是救援模式)。这可以通过在GRUB引导加载器界面编辑启动项,添加single或1到内核命令行来实现。单用户模式下,系统将以根用户身份启动,且不启动网络服务,便于故障排查。
    救援模式:对于RHEL/CentOS等系统,可以选择从GRUB菜单启动进入救援模式。救援模式提供了有限的环境,用于修复系统。

    2. 检查日志文件
    系统启动过程中的错误通常会被记录在各种日志文件中,主要关注以下几个:
    /var/log/boot.log:许多系统会在这里记录启动时的信息。
    /var/log/messages 或 /var/log/syslog:这些日志文件记录了广泛的系统活动,包括启动时的错误信息。
    /var/log/dmesg 或 journalctl(对于使用systemd的系统):记录了内核启动时的信息和硬件检测结果。可以使用dmesg命令查看最近一次启动的日志,或者使用journalctl -b(查看当前启动日志)或journalctl -b -1(查看上一次启动日志)。

    3. 分析启动错误信息
    仔细阅读上述日志文件,寻找错误(通常以[ERROR]、[CRITICAL]或类似的标签标识)和警告信息。
    注意内核 panic 信息,它们通常指示了严重的系统崩溃问题。

    4. 硬件检查
    如果错误信息指向硬件问题(如磁盘错误、内存问题等),使用相应的工具进行检查。例如,使用smartctl检查硬盘健康状态,或使用memtest86+测试内存。

    5. 核心转储分析
    如果系统崩溃并生成了核心转储文件(通常位于/var/crash),可以使用crash工具结合内核映像和核心转储文件来分析崩溃原因。

    6. 系统服务和依赖关系
    使用systemctl status <service>(针对systemd系统)或service <service> status(针对sysvinit系统)检查特定服务的状态,看是否有服务未能正常启动导致的问题。通过systemctl list-units --state=failed查看所有失败的服务。

    7. 核心模块和驱动问题
    如果问题与特定的硬件驱动或核心模块相关,可能需要更新或重新配置这些模块。

    8. 远程求助
    如果以上步骤无法解决问题,考虑将错误信息和日志文件中的相关内容发布到技术论坛或Stack Overflow等平台上寻求帮助。记得隐去敏感信息。

    9. 使用Live CD/DVD或USB
    在极端情况下,可以使用Linux Live CD/DVD或USB启动系统,然后从外部介质访问和修复主系统的文件,这有助于避免启动过程中由于系统文件损坏导致的问题。
  11. 如果Linux运行非常缓慢,如何进行故障排查?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    1. 查看内存使用情况
      free -m           查看系统内存的整体使用情况
      top            查看具体进程消耗的内存空间
      vmstat           查看内存使用的动态变化
    2. 查看磁盘使用情况
      dmesg           检查硬盘的信息
      df -Th            查看磁盘空间占用情况
      du -sh            定位占用空间大的文件或目录
    3. 查看磁盘IO使用情况
      iostat           查看系统分区的IO占用情况
      iotop          显示各个进程的IO情况
    4. 查看CPU使用情况
      cat /proc/cpuinfo、lscpu   检查CPU的信息
      uptime、w         查看系统负载
      top            查看cpu的平均负载
    5. 查看网络使用情况
      service --satus-all      查看本地所有服务的运行状态
      ps aux           查看本地各个进程的运行情况
      netstat -lnp         查看本地端口的监听情况
      tcpdump          使用抓包工具查看通信时间、端口、数据包长度等
  12. 如何直观的看到系统启动进程中各个服务的启动时间?

    1
    2
    3
    4
    5
    1. 使用systemd-analyze time 可以显示如下时间: (1)在启动第一个用户态进程(init)之前,内核运行了多长时间; (2)在切换进入实际的根文件系统之前,initrd(initial RAM disk)运行了多长时间; (3)进入实际的根文件系统之后,用户空间启动完成花了多长时间。

    2. 使用systemd-analyze blame 按照每个单元花费的启动时间从多到少的顺序,列出所有当前正处于活动(active)状态的单元。 这些信息有助于用户优化系统启动速度。

    3. 使用systemd-analyze plot 输出一个 SVG 图像,详细显示每个单元的启动时刻, 并高亮显示每个单元总计花了多长时间才完成启动。
  13. 讲一下CentOS7的启动流程?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    1. 开机(power on)

    2. 开机自检(POST)
    指计算机系统接通电源,BIOS程序的行为,包括对cpu,系统主板,基本内存,扩展内存,系统ROM、BIOS等器件的测试,如果发现错误,给操作者提示或者警告,简化加快该过程,可使系统能够快速启动。

    3. BIOS对硬件进行检测
    basic input output system基本输入输出系统,BIOS是个人电脑启动时加载的第一个软件,它是一组固化到计算机内主板上一个ROM芯片上的程序,保存着计算机最重要的基本输入输出程序、开机后自检程序和系统自启动程序,它可以从CMOS中读写系统设置的具体信息。主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

    4. boot启动顺序检查

    5. 硬盘引导,从MBR查找启动程序
    一个盘片可以划分出很多磁道,磁道上划分63个扇区,一个扇区是512个字节。MBR是硬盘中最开始的扇区,硬盘里有个位置0磁盘0柱面1扇区–>MBR(主引导记录)–>master boot record

    6. 拉起grub2引导程序,加载/boot里的文件系统的驱动,调用对应内核文件(vmlinuz、initramfs)
    vmlinuz 内核程序文件(相当于皇上)
    initramfs 给内核程序提供一个初始化的内存文件系统的镜像文件,临时的根文件系统的镜像文件,提供程序和配置文件
    init 初始化
    ram 内存里存储
    fs 文件系统 filesystem

    7. systemd进程
    systemd是initramfs里的一个去启动的程序,pstree -p可以查看
    centos7/8第一个进程是systemd
    centos6第一个进程是init

    8. 启动对应的运行级别里的服务
    查看当前的运行级别
    [root@localhost ~]# runlevel
    N 3
    1
    2
    N代表最开始进入的模式,如果是N表示没有进行模式切换
    在centos7/8中主要使用multi-user和graphical两种级别
    [root@localhost ~]# systemctl get-default
    multi-user.target
    1
    2
    设置运行级别:set-default graphical/multi-user

    9./etc/rc.local 和 /etc/fstab
    /etc/rc.local:该文件脚本添加配置可以设置开机启动
    /etc/fstab:告诉linux系统正常启动过程中挂载的磁盘分区

    14. login
    根据/etc/passwd和/etc/shadow检测用户名和密码是否正确

    15. 运行用户家目录下的环境变量初始化文件
    /etc/profile
    ~/.bash_profile
    ~/.bashrc
    /etc/bashrc
  14. 如何对现有LVM卷进行扩容?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1. 基本流程是pv的扩容、vg的自动扩容、lv的扩容、文件系统的扩容

    2. 如果要扩容主分区
    使用cloud-utils-growpart对主分区进行扩容

    3. 数据分区
    使用 pvscan 查看当前pv情况
    使用 pvresize /dev/nvme0n1p3进行磁盘扫描
    扩展 lv lvextend -l +100%free /dev/cl/root

    4. 注意xfs格式和ext4格式的区分
  15. 一个目录占用磁盘空间特别大,随后删除了文件夹内的文件,但磁盘占用并未减少,这可能是什么原因引起的?

    1
    2
    3
    4
    5
    6
    7
    1. 使用lsof工具查看是否有进程在占用的文件;
    lsof | grep deleted
    echo "" > /proc/292709/fd/3
    或者杀死进程,这个方法不推荐

    2. 在 Linux 文件系统中,一个文件由目录项dentry、索引节点inode和数据块block三部分组成。
    文件数据都存储在 block 中,那么我们指定读取某个文件数据的时候,操作系统就需要知道这个文件存储在哪个 block 上 ,而文件的数据存放位置信息被存放到了 inode 上,所以我们先要找到这个文件对应的inode号。使用stat命令可以查看inode信息
  16. Linux内存使用中buffer和cache的区别是什么?它们用在哪里?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    buffer是即将要被写入磁盘的,而cache是被从磁盘中读出来的.
    Cache为了提高访问“命中率”,要的是快速找到,Cache多数情况下是不考虑顺序的.
    Buffer是为了减少频繁操作,把一系列类似的事情攒起来一次干,Buffer多数情况下是考虑顺序的,多用FIFO(先进先出)算法。
    echo 3 > /proc/sys/vm/drop_caches
    查看buffer和cache
    cat /proc/meminfo | grep -E 'Cached|Buffers'
    Buffers: 12876 kB
    Cached:1908952 kB
    SwapCached: 48 kB
  17. Linux系统内存占用特别高,如何确定是物理内存不足,还是程序错误

    1
    2
    3
    在Linux中,内存被占满并不总是坏事,并不能简单根据“内存占用了90%”就武断下结论说“内存不够了”。

    Linux会尽可能多地使用内存。换句话说,可能你的某个程序申请了大量内存,尽管并不常用,但是没有比它更紧迫的请求内存的程序存在,那么Linux仍会让这些大量的内存被该程序占用。因此,尽管看起来你的程序占掉了90%,但是这时如果你新启动了一个占物理内存20%的进程,那么Linux就会把物理内存中的20%换页到硬盘上,然后把这腾出来的空间交给新程序使用,这样你仍然能够启动这个占用大量内存的程序,而不会遇到“内存不足,无法启动”的错误。因此,当物理内存占用率高时,要结合CPU的I/O wait时间和vmstat -s中的active memory来一起判断。如果这两个数值都不高,那么你的系统仍然是健康的。但如果这俩都比较高,说明Linux在拼命换页,也就是说,Linux在不断地把物理内存空间腾出来,以便让其他程序运行,这就真的表示内存不够了。
  18. 如何收集Redhat Linux的日志并提交工单?

    使用官方源中的Sosreport 工具来进行设备信息和日志的收集。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ sudo dnf install sos
    $ sudo sosreport
    $ sudo mv /var/tmp/sosreport-docker-2024-05-10-mtlkwut.tar.xz ./
    $ tar -xf sosreport-docker-2024-05-10-mtlkwut.tar.xz
    $ cd sosreport-docker-2024-05-10-mtlkwut/
    $ ls
    boot dmidecode free ip_addr lib mount ps root-symlinks sos_logsuname var
    date environment hostname ip_route lsmod netstat pstree run sos_reports uptime version.txt
    df etcinstalled-rpms last lsof procroot sos_commands sysusrvgdisplay
  19. 在生产环境中,一台比较重要的应用服务器出现了crash产生的crash dump了,这种情况如何处理?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    当程序发生内存越界访问等行为时,会触发OS的保护机制,此时OS会产生一个信号(signal)发送给对应的进程。当进程从内核态到用户态切换时,该进程会处理这个信号。此类信号(比如SEGV)的默认处理行为生成一个coredump文件。
    # 安装配置kdump
    dnf install -y kexec-tools crash
    systemctl enable --now kdump
    # 以 root 用户身份使用文本编辑器(如 vim 或 Gedit )打开 /etc/default/grub 配置文件。
    #在这个文件中,找到以 GRUB_CMDLINE_LINUX 开头的行,如下所示:
    GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel/swap crashkernel=auto rd.lvm.lv=rhel/root rhgb quiet"
    #更改所需内核命令行参数的值。然后,保存文件并退出编辑器。
    #使用编辑 的默认 文件重新生成 GRUB2 配置。如果您的系统使用 BIOS 固件,请执行以下命令:
    grub2-mkconfig -o /boot/grub2/grub.cfg
    # 在带有 UEFI 固件的系统中,执行以下命令:
    grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
    # 检查kdump是否正常运行
    systemctl status kdump
    # 默认内核崩溃转储文件路径 /var/crash
    # 使用如下命令手动触发系统panic
    echo c > /proc/sysrq-trigger
    # 查看转储路径下的文件,并用crash命令查看转储文件
  20. 生产环境中的日志存储方案有哪些?你以前用过什么方案?

    1
    2
    3
    4
    实际应用中会有多种日志解决方案:
    1. 单节点方式:部署rsyslog将日志文件传输到指定的 rsyslog server ,将日志文件进行单纯打包、转储或者导入MySQL中
    2. 分布式方式:部署ELK日志收集环境,通过 filebeat 来将日志传输到 Elasticsearch 中,然后通过Kibanan来展示和查询
    3. 商用解决方案:日志易

虚拟化环境

  1. VMware标准交换机和分布式交换机的区别是什么?

    1
    2
    3
    4
    5
    标准交换机VSS是VMware vSphere环境中的传统网络交换机实现。它是与主机直接关联的,并且不提供跨多个主机的分布式功能VMware vSphere标准交换机适用于简单环境。

    分布式交换机是VMware vSphere中更高级的网络交换机实现,它提供了一个集中管理的、跨多个ESXi主机的交换机解决方案,适用于复杂生产环境。在逻辑上,VDS提供了一个单一的交换机视图,但实际上,它可能由多个物理交换机和上行链路组成,以实现高可用性和负载均衡。

    标准交换机与特定主机关联,不支持跨主机策略。分布式交换机集中管理,支持策略一致性和高级功能,提供高可用性和负载均衡。
  2. 如何进行VMware环境的补丁更新升级?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    1. 登录Vmware官网下载最新的补丁包;
    2. 将下载好的升级包上传到存储里
    3. 开启主机的SSH服务,并将主机切换到维护模式下(注意把虚拟机迁移到其余主机)
    4. 通过SSH连接到主机确认当前版本
    5. 查找补丁的配置文件名称
    6. 执行升级,使用 esxcli software profile update -p ESXi-*** -d /vmfs/volumes/datastore1/***.zip
    7. 升级后输入重启命令reboot
    8. 退出维护模式,检查升级后的版本

    其他方式:
    1. 使用新版ISO安装文件原地覆盖升级
    2. 使用vcenter WEB页面更新选项进行升级
    1. 上传ISO文件
    2. 建立基线
    3. 执行安装
    3. 使用Lifecycle Manage进行升级
  3. 做过VMware环境的大版本更新升级没有?这个更新升级的流程是什么?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    VMware 虚拟化环境是个复杂的软件系统,其大版本迁移是一个艰巨的工程。大版本升级基本可以分为两种情况,一个是原地升级,一个是迁移升级。
    拿原地升级举例:
    1. 准备工作
    0. 查阅官方文档,确认迁移路径和软硬件兼容性;
    1. 建立迁移软件版本目标和迁移项目目标,明确是原地升级,还是迁移升级;
    2. 组建迁移团队,明确相关责任和干系人清单;
    3. 准备迁移目标服务器,安装计划虚拟化系统;
    4. 配置网络硬件环境和存储环境,确保迁移网络和存储的可靠、安全
    2. 实施迁移
    0. 挑选良辰吉日,排除其他工作杂事干扰;
    1. 将无虚机的备份服务器或者新服务器升级到目标版本;
    2. 将vcenter迁移到新版本主机上,进行备份之后,完成升级;
    3. 将次要或者不重要虚机关机迁移到以及完成升级的主机上
    4. 依次升级所有主机
    3. 收尾工作
    1. 检验所有虚机运行情况
    2. 与干系人确认主机运行情况
    3. 整理操作记录、形成操作文档,添加到内部知识库。
  4. 虚拟化环境中的虚机突然重启了,如何定位故障和进行排错?

    1
    2
    3
    4
    1. 收集vmss或vmsd内存文件
    2. 利用 vmss2core将vmss文件转储,以便厂家或其他用户分析当时故障情况
    3. 一般来说本地esxi存储日志vmkernel.log,检查相应主机对应时间段的错误
    4. 查看vcenter日志,HA功能偶尔会导致虚机重启
  5. VMware环境中需要注意哪些日志文件?如何收集虚拟化环境中的日志?

    1
    2
    3
    4
    5
    VMware环境中的日志主要关注FT、System、Storage、 VirtualMachines、Userworld、Congfiguration、Logs、Core等日志。

    1. 早期vSphere 5.x和vSphere 6.0产品中日志的收集方法,我们可以通过vSphere client客户端登录到单台ESXi主机中,找到“文件”中“导出”菜单中的“导出系统日志”选项。如果是vcenter server的虚拟化管理中心的话,我们则点击数据中心,选择“系统管理”--> “导出系统日志”。
    2. vSphere 6.5以后使用client控制台,找到“菜单”中的“系统管理”选项,选择导出支持包,选择日志信息导出。
    3. 通过Putty等SSH工具连接到该ESXi主机,然后执行vm-support,开始收集日志,最后会生产一个tgz文件。
  6. 使用过开源的KVM解决方案么?具体使用过有哪些厂家的解决方案?

    1
    主要使用发行版自带KVM作为试验环境,并使用过ovirt、pve和华为的FusionSphere。
  7. 将虚机从VMware迁移到OpenStack,有哪些工具,你使用过几个?

    1
    使用过官方的virt-v2v,个人比较喜欢使用StarWind V2V Image Converter。

硬件管理

  1. 你用过哪些服务器和存储设备?使用过FC-SAN环境的存储么?

    1
    服务器主要使用过惠普的380G5、戴尔的R730XD。存储使用过惠普的EVA4400、戴尔的SC8000。维护过Windows Server和Linux的iSCSI服务。
  2. SAN和iSCSI的区别是什么?

    1
    存储设备的类型基本分类有DAS、NAS和SAN。DAS是直连存储,NAS是将文件系统从存储端映射到主机,SAN是将块文件从存储端映射到主机端。SAN存储是一种基于CS架构的系统,其中客户端在SAN中称为启动器,服务端在SAN称为目标器。SAN存储基本可以分为FC-SAN和IP-SAN。FC-SAN是存储数据使用FC协议进行读写,速度快成本高可靠性好;而IP-SAN是使用TCP/IP协议进行传输,速度较快、成本低、可靠性一般。IP-SAN的主要实现形式就是iSCSI。
  3. 如何创建iSCSI服务和挂载iSCSI磁盘?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    1. 配置iSCSI的Target
    1. 在服务器上,安装targetcli
    2. 配置后端存储
    3. 创建iqn号和acl
    4. 放通防火墙

    2. 配置客户端Initator
    1. 安装iscsi-initiator-utils
    2. 配置认证账户和密码
    3. iscsiadmin发现target
    4. 扫描和挂载系统
    5. 创建分区和文件系统
  4. Linux主机对FC存储进行扫盘的命令是什么?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1. 使用脚本进行扫描
    dnf install -y sg3_utils
    ./rescan-scsi-bus.sh
    2. 使用系统命令
    # 运行下面的命令来查找系统中所有的主机总线编号:
    ls /sys/class/scsi_host
    host0 host1 host2
    # 得到主机总线编号后,运行以下命令来发现新的磁盘:
    echo "- - -" > /sys/class/scsi_host/host0/scan
    echo "- - -" > /sys/class/scsi_host/host1/scan
    echo "- - -" > /sys/class/scsi_host/host2/scan

数据库管理

  1. 用过Oracle或者MySQL数据库么?
  2. Oracle RAC是如何搭建的,简述一下Oracle RAC的方案?

网络服务

  1. 用过哪些中间件产品?

    1
    使用过Nginx、Haproxy、lvs和Keepalived
  2. 如何对Nginx的日志进行切割?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件。在所有时间内nginx产生的日志均保存在同一个文件下, 随着访问量的增加,尤其是access.log增长极快,服务器会很快消耗磁盘空间。

    logrotate是一个linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间/大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。

    logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于 /etc/cron.daily/logrotate。

    新建nginx文件, 存放在/etc/logrotate.d/ 文件夹下, 内容如下

    /usr/local/nginx/logs/access.log {
    daily
    rotate 7
    missingok
    dateext
    compress
    delaycompress
    notifempty
    sharedscripts
    postrotate
    [ -e /usr/local/nginx/logs/nginx.pid ] && kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
    }
  3. 使用过Zabbix么?监控过哪些产品?

    1
    2
    部署实施过Zabbix单节点监控系统。
    主要用于宿主机监控和网络设备监控。
  4. 解释一下DNS解析的原理。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DNS就是域名系统,是因特网中的一项核心服务,是用于实现域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
    域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本都是二级域名。

    1、首先客户端由浏览器发起一个DNS解析请求,如果本地缓存服务器中找不到结果,则首先会向根服务器查询,根服务器里面记录的都是各个顶级域所在的服务器的位置,当向根请求http://www.sujx.net的时候,根服务器就会返回.cn服务器的位置信息。

    2、递归服务器拿到.cn的权威服务器地址以后,就会寻问cn的权威服务器,知不知道http://www.sujx.net的位置。这个时候cn权威服务器查找并返回http://sujx.net服务器的地址。

    3、继续向http://sujx.net的权威服务器去查询这个地址,由http://sujx.net的服务器给出了地址;

    4、最终才能进行http的链接,顺利访问网站。

    5、这里补充说明,一旦递归服务器拿到解析记录以后,就会在本地进行缓存,如果下次客户端再请求本地的递归域名服务器相同域名的时候,就不会再这样一层一层查了,因为本地服务器里面已经有缓存了,这个时候就直接把http://www.sujx.net的A记录返回给客户端就可以了。
  5. DNS的查询有两种方式,分别解释一下解析流程。

    1
    2
    3
    4
    5
    6
    迭代查询
    转发器按照域名级别高低,先后查询根服务器、.net域服务器、sujx.net域服务器,最终得到授权应答。这个查询过程即迭代查询。迭代的意思是:需要经过多次挨个查询,才能得到相应的结果。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。

    递归查询
    递归的意思是:只需要发出一次请求,就能得到相应的结果。比如主机-本地DNS、本地DNS-转发器,都是递归查询。如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。
    因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

开放性问题

  1. 200台Linux主机,要求不使用LDAP或者活动目录,如何设计ROOT的权限管理?

    1
    2
    3
    4
    1. 关闭主机root的密码访问;
    2. 使用root或者指定其他账号的密钥访问;
    3. 搭建jumpserver,使用本地数据库管理访问账号;
    4. 在jumpserver中建立不同的用户组并对资产进行授权管理
  2. 如何理解基线?

    1
    2
    基线的概念来自于美术素描,随着项目管理思想的深入,基线的概念被带入到IT管理和建设中来。基线是IT环境的一个“快照”。它提供一个正式标准,随后的工作基于此标准,并且只有经过授权后才能变更这个标准。建立一个初始基线后,以后每次对其进行的变更都将记录为一个差值,直到建成下一个基线。
    冻结产品需求,控制变更范围,涉及系统版本 配置文件 程序参数登记归档,建立指标文件
  3. 在安全合规方面,你有哪些实践,做过什么方案?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    安全合规要求有两个方面,一个是技术方面,一个是管理方面:
    技术要求
    包括“安全物理环境”、“安全通信网络”、“安全区域边界”、“安全计算环境”和“安全管理中心”。
    管理要求
    包括“安全管理制度”、“安全管理机构”、“安全管理人员”、“安全建设管理”和“安全运维管理”。

    1. 通过活动目录,对用户建立鉴权制度,所有文档、网络访问、邮件、内部IM使用同一的认证体系。
    2. 建立堡垒机和用户群组,实现到主机级别的用户访问控制;
    3. 建立统一的日志中心和SIEM安全审计中心,归档设备日志,建立可查询的web页面;
    4. 部署网络防火墙、HIDS、WAF、漏洞扫描等网络设备,提高防范入侵能力;
    5. 全面部署SSL证书,生产环境访问实现加密,备份数据统一使用bitlocker进行128位强加密;
    6. 建立两地三中心,数据多重备份,严格管理访问介质;
    7. 通过内部OA,建立IT变更的审批、实施流程