linux运维工程师面试题汇总

linux运维工程师面试题汇总

文章目录


UTC(世界标准时间)

:::success
协调世界时,又称世界标准时间或世界协调时间,简称UTC(从英文“Coordinated Universal Time”/法文“Temps
Universel Coordonné”而来),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
:::

GMT(格林尼治平时)

:::success
格林尼治平时(又称格林尼治平均时间或格林尼治标准时间,旧译格林威治标准时间;英语:Greenwich Mean
Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)。
:::

CST(北京时间)

:::success
北京时间,China Standard Time,中国标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8。
不过这个CST这个缩写比较纠结的是它可以同时代表四个不同的时间: Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30 China Standard Time UT+8:00
Cuba Standard Time UT-4:00
Java Date使用UTC时间,如 Tue Jan 05 14:28:41 CST 2016 表示China Standard Time UT+8:00 。
:::

linux基础知识

journalctl

:::success
这个命令是systemd的journalctl工具的一部分,用于查询和查看系统日志。
-f选项表示“follow”,它会实时地显示新添加到日志的条目。-u选项后面跟着的是服务的名称。
journalctl -fu 服务名称
:::

Minio、NFS(Network File System)和FTP(File Transfer Protocol)都是用于文件存储和传输的解决方案,但各有其特定的用途和优势。

:::success
Minio是一个高性能的分布式对象存储系统,用于存储大容量非结构化的数据,如图片、视频、日志文件等。它实现了大部分亚马逊S3云存储服务接口,可以看做是S3的开源版本。Minio的特色在于其简单、轻量级和对开发者的友好性。
NFS是一种分布式文件系统协议,用于在本地操作系统和远程文件系统之间建立桥梁,实现跨平台文件共享。NFS允许用户像访问本地文件一样访问远程文件,无需关心文件的具体存储位置。这使得NFS成为在企业环境中实现文件共享和协作的理想选择。
FTP则是一种基于客户端-服务器的文件传输协议,用于在计算机网络上传输文件。FTP允许用户在客户端和服务器之间建立连接,并通过这个连接上传或下载文件。FTP协议的优点在于其成熟、稳定,且广泛应用于各种操作系统平台。然而,FTP协议的安全性较低,数据传输时通常不加密,可能会被非法获取。
综上所述,Minio主要用于存储大容量非结构化数据,NFS用于实现跨平台文件共享和协作,而FTP则用于在客户端和服务器之间传输文件。这些解决方案各有其优势和适用场景,可以根据具体需求选择合适的方案。
:::
image.png
image.png

物理服务器,你们公司用的是什么型号?都是什么配置(多大内存、多少cpu、磁盘多大)

:::success
对于物理服务器的配置,我了解到我们公司主要使用的是戴尔R750的服务器。CPU数量我们是2个英特尔至强银牌4210处理器,每个处理器具有10个核心,内存我们会根据实际需求选择合适的容量,一般为64GB或128G不等。磁盘方面的话,我们主要是根据实际需求选择合适的大容量磁盘,一般为2个1TB SAS硬盘,磁盘阵列的话使用的是RAID1,以提高数据可靠性。
此外,我们还会考虑服务器的扩展性、稳定性和品牌等方面的因素。我们会选择一些知名品牌的服务器,并确保能够获得良好的售后服务和技术支持。
:::

你都了解linux那些常用知识

:::success
给普通用户提权
常见的创建用户,创建文件目录等
以及进行磁盘的分区和添加磁盘等操作
:::

CentOs6和CentOs7有什么区别

:::success
1. 文件系统的区别: centos6: ext4 centos7: xfs
xfs系统格式在处理大文件时比较出色,高并发方面也比ext4高
ext4在恢复速度上比较快其次就是处理小文件时比较出色
2. 防火墙不一样: 6是iptables 7 是filewalld
3. 内核版本不一致: 6是2.6 7是3.10
:::

linux操作系统如何优化?(rocky linux)

:::success
1、 禁用不必要的系统服务和进程,减少资源占用
2、 选择轻量级的应用程序和工具,减少系统负担
3、 定期清理系统垃圾和临时文件,释放磁盘空间
4、 选择合适的文件系统,如ext4,提高文件访问速度和系统稳定
5、 使用系统监控工具,及时发现系统性能问题进行处理
:::

调优 Linux 存储系统可以显著提高性能和可靠性,特别是在处理大量数据或需要快速响应的应用场景下。以下是一些常见的 Linux 存储系统调优方法:

:::success

  1. 选择合适的文件系统
    • 不同的文件系统对于不同的工作负载和需求可能具有不同的性能表现。例如,ext4 在大多数 Linux 发行版中是默认的文件系统,但在某些场景下,像是处理大量小文件时,可能会选择 XFS 或 Btrfs 等文件系统。
  2. 使用适当的 RAID 级别
    • 如果你使用 RAID 阵列来提高数据冗余性和性能,选择合适的 RAID 级别非常重要。不同的 RAID 级别对性能、容错能力和成本有不同的影响。常见的 RAID 级别包括 RAID 0、RAID 1、RAID 5、RAID 6 和 RAID 10。
  3. 优化磁盘调度器
    • Linux 内核中有多种磁盘调度器可供选择,如 CFQ、Deadline 和 NOOP。根据工作负载和硬件配置,选择适合的调度器以提高磁盘 I/O 性能。
  4. 调整文件系统参数
    • 可以通过调整文件系统的参数来优化性能。例如,通过调整 ext4 文件系统的挂载选项来改善性能,或者使用 Btrfs 的子卷和快照功能来提高灵活性和可靠性。
  5. 使用 LVM 进行管理
    • 逻辑卷管理器(LVM)允许对多个磁盘进行抽象和管理,提供了更灵活的存储管理。使用 LVM 可以方便地扩展、缩小和迁移逻辑卷,从而提高存储系统的灵活性和可管理性。
  6. 使用 SSD 缓存
    • 如果你的存储系统使用了机械硬盘(HDD),可以考虑使用 SSD 作为缓存来加速访问速度。Linux 中有多种方式可以实现 SSD 缓存,如使用 dm-cache 或 bcache 等。
  7. 定期进行磁盘碎片整理
    • 磁盘碎片可能会影响文件系统的性能,特别是在频繁写入和删除文件的情况下。定期进行磁盘碎片整理可以优化文件的存储布局,提高访问速度。
  8. 监控和调整系统资源使用
    • 使用工具监控系统资源的使用情况,包括 CPU、内存和磁盘 I/O 等。根据监控结果调整系统配置,优化资源使用,提高系统性能。
      :::
在linux系统中怎么只下载不安装

:::success
image.png
:::

CentOS和Ubuntu有什么区别?

:::info
1.生产商不同
CentOS来自于Red Hat Enterprise Linux,Ubuntu基于Debian发行版和GNOME桌面环境
2.安装软件命令不同
centos使用的是yum命令,而ubuntu中使用的是apt-get命令
Ubuntu 使用 apt 来更新,CentOS 使用 yum;
Centous 更加稳定 Ubuntu升级包可能会造成系统不稳定和不安全。
CentOS使用.rmp包,以及使用yum进行软件管理;Ubuntu使用.deb包,以及apt-get进行软件管理。
:::

什么是虚拟主机?

:::success
虚拟主机是一种特殊的软硬件技术,它可以将网络上的每一台计算机分成多个虚拟主机,每个虚拟主机可以独立对外提供web服务,这样就可以实现一台主机对外提供多个web服务,每个虚拟主机之间是独立的,互不影响。
:::

文件句柄的概念

:::success
**文件句柄数(File Handle)**是操作系统中用于标识文件(包括设备、管道、套接字等)的一种标识符。在Linux系统中,每个进程都拥有一定数量的文件句柄。这些文件句柄可以指向打开的文件并通过文件句柄对其进行读写操作
:::

cpu利用率和cpu负载区别

CPU利用率和CPU负载是两个不同的概念,它们有以下区别:

  1. 定义:CPU利用率是指CPU在单位时间内完成的任务数,而CPU负载是指正在使用和等待使用CPU的平均任务数。
  2. 反映内容:CPU利用率反映的是CPU的繁忙程度,而CPU负载反映的是系统负载状况。
  3. 影响因素:CPU利用率受程序运行状况影响,而CPU负载受正在运行或等待处理的任务数影响。

综上,虽然CPU利用率和CPU负载都是描述CPU运行状态的指标,但它们在定义、反映内容和影响因素上存在差异。

软链接和硬链接的区别

:::success

  1. 软链接(symbolic link):
    • 软链接是指向文件或目录的路径的指针,类似于Windows系统中的快捷方式。
    • 创建软链接使用ln -s命令,语法为:ln -s 源文件 目标链接
    • 软链接可以跨文件系统,可以链接目录,并且可以链接不存在的文件。
  2. 硬链接(hard link):
    • 硬链接是文件系统中的一个实体,指向文件的索引节点(inode),删除原文件不影响硬链接,但删除硬链接不会影响原文件。
    • 创建硬链接使用ln命令,语法为:ln 源文件 目标链接
    • 硬链接只能链接文件,不能链接目录,而且只能链接存在的文件。

innode号也一样
软链接的主要用途包括:

  1. 创建符号链接:软链接可以用来创建指向文件或目录的符号链接,方便用户访问文件或目录。
  2. 跨文件系统链接:软链接可以跨越不同的文件系统,使得可以在不同的存储设备之间创建链接。
  3. 更新和维护:软链接可以用于在不同的位置保持文件的一致性,当原文件更新时,软链接也会更新。

硬链接的主要用途包括:

  1. 节省存储空间:硬链接可以节省存储空间,因为多个硬链接指向同一个文件,不会产生额外的存储开销。
  2. 备份:可以使用硬链接创建文件的备份,因为硬链接指向同一份数据,不会占用额外的存储空间。
  3. 文件共享:多个用户可以共享同一个文件,通过创建硬链接,多个用户可以访问同一份数据,而不需要每个用户都拥有一份副本。
    :::
怎么查看包的MD5值

:::success
MD5sum +包名
:::

查看网关?

:::success
Ip route
:::

查看系统平均负载?

:::success
Uptime
:::

Top里以内存进行排序?

:::success
进入top摁下shift+m
:::

fdisk命令用于列出系统上所有可用的磁盘及其分区信息

:::success
fdisk -l
:::

查看文件系统类型

:::success
df -Th
:::

查看系统版本号

:::success
Uname -a
:::

Linux内网时间对对齐

:::success
**Timedatectl ** 外网时间对齐:ntpdate ntp.aliyum.com
:::

查看MAC地址

:::success
cat /sys/class/net/eth0/address
ifconfig命令,可以看到网络接口卡的信息,其中包括MAC地址
ip addr命令,也可以在输出的网络接口卡信息中找到MAC地址,通常会跟在ether后面
dmesg | grep eth0命令,也可以在输出信息中找到MAC地址。这个命令通常用于诊断设备故障,但也可以用来查看MAC地址。
cat /etc/sysconfig/network-scripts/ifcfg-eth0命令,就可以在输出中找到HWADDR字段,后面跟的就是MAC地址
:::

查看当前进程可以打开的最大文件描述符数量

:::success
ulimit -n
临时修改: ulimit -SHn 加参数
永久生效: vim /etc/security/limits.conf
:::

储存管理

Lvm怎么做

:::success
先确定基本分区—把那些分区做成物理卷(pv也就是做记号)—加入卷组(vg)是建立在pv上的—做逻辑卷(lv)是从卷组里拿出空间,起了个名字,建立在vg上。
:::

开机挂载的文件是?

:::success
在/etc/rc.d/rc.local写入配置文件—添加执行权限(+x)–reboot(重启)
:::

如何手动挂载一个分区好的盘?

:::success
先创建一个挂载目录(mkdir /mnt/disk)— 给权限+挂载(mount -o rw /dev/sdb1 /mnt/disk1)
:::

查看inode号?Inode号满了的情况怎么处理?

:::success
Stat /etc/hosts(查看inode号) 删除不用的文件或者目录,调整inode分配策略,格式化文件系统,扩大文件系统。
:::

取消挂载?

:::success
umount /mnt/disks/
:::

什么是Swap?为什么需要Swap?

Swap是一种虚拟内存技术,用于将内存中暂时不需要的数据移到磁盘空间中,以释放内存空间供其他程序使用。当物理内存不足时,Swap可以充当扩展内存的角色,避免系统因内存不足而崩溃。

raid0 1 5 区别

:::success
1、raid0:数据条带卷,最少需要两块磁盘,每块磁盘写一部分数据 磁盘利用率100%,读写速度快
2、raid1:镜像raid,一般需要两块磁盘,每块磁盘存放一样的数据 读的速度快 写速度慢,磁盘利用率是50%
3、raid5:最少需要3块磁盘,将数据分开存放到两块磁盘上,另一快存放校验码,当一块数据损坏时 校验码可以恢复丢失的数据 磁盘利用率大于70%
4、raid6:最少需要4块盘,两块存放校验码;磁盘利用率60%
5、raid10:先镜像再条带(混合raid)也可以先条带后镜像最少需要4块盘,任何两块盘发生故障数据都不会丢失
:::

D状态进程

:::success
D 状态进程(TASK_UNINTERRUPTIBLE),处于不可中断的睡眠状态,指进程不响应异步信号。
绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。而D状态存在的意义就在于,内核的某些处理流程是不能被打断,比如进程调用read系统调用对某个设备文件进行读操作,一般需要使用D状态对进程进行保护,以避免进程与设备交互的过程被打断,造成设备陷入不可控的状态。这种情况下的D状态总是非常短暂的,通过ps命令基本上不可能捕捉到。
但是我捉到了,在执行md5sum命令时经常捉到,D状态往往是由于 I/O 资源得不到满足,而引发等待~
这是个关键点,既然IO得不到满足就查一下IO,计算md5也就从磁盘上读一些文件,所以怀疑问题出现在磁盘的读写上,进而想测一些磁盘的读写速度,这就用到了今天想说的 dd 命令。
:::

linux下使用dd命令测试磁盘的读写速度
dd if=/tmp/testfile of=/dev/null bs=1M 
if=/tmp/testfile:从/tmp/testfile文件读取数据。  (if表示input file) 
of=/dev/null:将数据丢弃,以便只测试读取速度而不保存数据。 (of表示output file)
bs=1M:设置块大小为1MB。 
dd if=/dev/zero of=/tmp/testfile bs=1M count=1000 conv=fdatasync 
if=/dev/zero:从/dev/zero设备读取数据(无限的零数据流) 。  (if表示input file )
of=/tmp/testfile:将数据写入到/tmp/testfile文件中。 (of表示output file) 
bs=1M:设置块大小为1MB。 
count=1000:写入1000个1MB大小的块,总共1GB的数据。 
conv=fdatasync:在每次写入后,等待数据同步到磁盘。 
dd if=/dev/zero of=/tmp/testfile bs=4k count=100k oflag=direct 。
if=/dev/zero:从/dev/zero设备读取数据(无限的零数据流)。
of=/tmp/testfile:将数据写入到/tmp/testfile文件中。
bs=4k:设置块大小为4KB。
count=100k:写入100k个4KB大小的块,总共400MB的数据。
oflag=direct:绕过文件系统缓存,直接进行I/O操作。

:::success
总结

  • /dev/zero 是一个特殊的文件,当你读它的时候会得到无限的空字符,可用来初始化文件,不产生IO
  • /dev/null 也是一个特殊的文件,它丢弃一切写入其中的数据,被称为黑洞,也不产生IO
  • 网络硬盘受存储带宽的影响,一旦带宽被打满,硬盘读写速度也就慢了
    :::
磁盘阵列RAID如何做?

:::info
磁盘阵列(RAID,Redundant Arrays of Independent Disks)是一种数据存储技术,通过把多个独立的物理磁盘组合成一个逻辑上的磁盘阵列,以提高数据可靠性和数据传输性能。以下是进行磁盘阵列配置的一般步骤:

  1. 硬件准备:准备一定数量的磁盘驱动器(HDD或SSD),以及一个支持RAID的控制器卡(或集成在主板上的RAID控制器)。
  2. 连接硬件:将磁盘驱动器连接到控制器卡,确保连接线插紧,并按照控制器的说明进行连接。
  3. 启动系统:启动计算机,进入操作系统或BIOS设置界面。
  4. 安装驱动程序:根据控制器的制造商和型号,下载并安装相应的驱动程序。
  5. 创建RAID阵列:在操作系统或RAID控制器的配置界面中,选择创建RAID阵列。根据控制器的文档和界面提示,选择阵列类型、磁盘数量、大小、RAID级别等参数。
  6. 分区与格式化:创建完RAID阵列后,需要对阵列进行分区和格式化。在操作系统中,使用磁盘管理工具进行分区和格式化操作。
  7. 配置冗余:根据需要配置RAID冗余功能。一些RAID级别(如RAID 1、RAID 5等)会提供数据冗余功能,以增加数据可靠性和容错能力。
  8. 安装与配置软件:安装所需的软件,如备份软件、数据恢复软件等,并进行配置。
  9. 测试与监控:完成配置后,对阵列进行测试,确保其正常工作。同时,定期监控阵列的状态和性能,以确保数据的可靠性和安全性。

需要注意的是,具体的步骤和参数可能会因不同的控制器和操作系统而有所不同。在进行磁盘阵列配置时,建议参考控制器的官方文档和操作系统的相关指南,以确保正确配置和操作。
:::

进程和线程什么区别

:::success
进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)
**线程:**同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小。(线程是cpu调度的最小单位)
总的来说,进程是操作系统中分配资源的基本单位,而线程是进程内的执行单元,多个线程共享同一个进程的资源。进程之间的切换开销比较大,而线程之间的切换开销比较小。同时,线程之间可以更方便地进行通信和共享数据。
:::

网络方面

局域网中,广播风暴产生的原因及解决方法是什么?

:::success
广播风暴是局域网中一种常见的网络故障,它会对网络性能产生严重影响。以下是广播风暴产生的原因及解决方法:
广播风暴产生的原因:

  1. 网络设备原因:例如交换机配置错误,可能会将本应丢弃的广播帧转发出去,导致广播风暴。
  2. 网卡物理损坏:损坏的网卡可能会不断向交换机发送大量的数据包,从而产生广播风暴。
  3. 网络环路:例如一条物理网络线路的两端同时接在了一台网络设备中,就会产生广播风暴。
  4. 网络病毒:一些网络病毒(如Funlove、震荡波、RPC等)会在网络中大量传播,消耗大量的网络带宽,引起广播风暴。

解决广播风暴的方法:

  1. 检查网络设备配置:确保交换机等网络设备的配置正确,避免将广播帧转发到不必要的端口。
  2. 检查并更换损坏的网卡:如果发现网卡物理损坏,应及时更换。
  3. 避免网络环路:合理规划网络拓扑结构,避免产生网络环路。
  4. 安装杀毒软件并定期更新:及时安装和更新网络杀毒软件,防止病毒在网络中传播。
  5. 使用网络管理工具进行监控:使用网络管理工具(如Sniffer等)监控网络数据流量,及时发现并处理广播风暴。

通过以上方法,可以有效地预防和解决局域网中的广播风暴问题,提高网络性能和稳定性。
:::

osi七层网络模型

:::success
应用层:针对应用约定的标准 HTTP(超文本传输协议) Telnet(远程协议)
表示层:约束数据格式,负责格式转化,加密。解密。
会话层:建立、维护、管理(解除)会话。数据的传输通道。
传输层:约定数据采用何种方式进行传递
网络层:提供逻辑地址(IP地址,用于在网络中标识每一台设备,作用于网络间的通信,提供路由和选路)
数据链路层:提供MAC(物理)地址,每个MAC地址写在网卡上
物理层:约定接口类型,传输速
:::

谈下打开网站的过程

:::success
①DNS解析
②建立tcp连接
③发送请求
④服务器处理请求并返回报文
⑤浏览器解析渲染页面
:::
image.png

叙述下http工作原理和注意事项

:::success
客户端连接到Web服务器,发送HTTP请求,服务器接受请求并返回HTTP响应,释放TCP连接,客户端浏览器解析HTML内容
http是无连接、无状态,每次连接只处理一个请求,对事务没有记忆能力,又是媒体独立的,只有客户端和服务器知道如何处理数据内容,可以传输任何类型的数据
:::

http传输面临的风险有哪些

:::success
窃听风险:黑客可以获知通信内容。
篡改风险:黑客可以修改通信内容。
冒充风险:黑客可以冒充他人身份参与通信。
:::

Http与 Https 的区别是什么?

:::success
HTTP和HTTPS的主要区别体现在安全性、连接方式、端口号、SSL证书以及性能影响等方面。

  1. 安全性:HTTP协议在传输过程中不加密,数据容易被窃听、篡改或伪造。而HTTPS协议使用SSL或TLS协议进行通信加密,可以保证数据在传输过程中的安全性。
  2. 连接方式:HTTP协议使用TCP连接,而HTTPS协议使用SSL或TLS协议,需要进行握手和认证等多个步骤才能建立连接。虽然会增加一定的延迟,但连接建立后可以保持一段时间,提高数据传输效率。
  3. 端口号:HTTP协议默认使用80端口进行通信,而HTTPS协议默认使用443端口进行通信。
  4. SSL证书:在使用HTTPS协议时,服务器需要安装SSL证书。当客户端发起HTTPS请求时,服务器会将自己的SSL证书发送给客户端,客户端会验证证书的有效性。如果证书无效或者被篡改,客户端会发出警告提示。
  5. 性能影响:由于HTTPS需要进行加密和解密等额外的操作,因此在传输数据时会比HTTP协议消耗更多的CPU和内存资源。这会对服务器的性能产生一定的影响,尤其是在高负载的情况下。

综上,HTTP和HTTPS之间的主要区别在于安全性、连接方式、端口号、SSL证书以及性能影响等方面。在传输机密数据或者需要保护隐私的数据时,建议使用HTTPS协议;而在不需要保护数据安全性的情况下,使用HTTP协议则更为简单和高效。
:::

如何防止DDOS攻击

:::success
DDOS攻击即分布式拒绝服务攻击,它是一种利用大量合法的分布式服务请求来攻击目标,使得目标服务器过载并拒绝合法请求的攻击方式。为了防止DDOS攻击,可以采取以下措施:

  1. 过滤不必要的服务和端口:只开放必要的服务端口,例如WWW服务器只开放80端口,将其他所有端口关闭或在防火墙上做阻止策略。
  2. 过滤RFC1918 IP地址:RFC1918 IP地址是内部网的IP地址,像10.0.0.0、192.168.0.0 和172.16.0.0,它们不是某个网段的固定的IP地址,而是Internet内部保留的区域性IP地址。过滤这些地址可以防止攻击时伪造的大量虚假内部IP。
  3. **在骨干节点配置防火墙:**防火墙本身能抵御DDOS攻击和其他一些攻击。在发现受到攻击的时候,可以将攻击导向一些牺牲主机,这样可以保护真正的主机不被攻击。
  4. 使用负载均衡设备:当一台路由器被攻击死机时,另一台将马上工作,从而最大程度的削减了DDOS的攻击。
  5. 启用端口过滤和IP地址过滤:通过配置防火墙来启用端口过滤和IP地址过滤,以阻止攻击者发起的DDOS攻击。
  6. 启用应用程序缓存、应用程序池和应用程序负载均衡:通过配置这些功能可以减少服务器的响应时间,从而降低攻击者发起的DDOS攻击的成功率。
  7. 启用DNS抗攻击:配置DNS抗攻击可以阻止攻击者发起的DDOS攻击。
  8. 加大服务器网络带宽:选购服务器时,可以加大服务器网络带宽,以应对DDOS攻击。
  9. 检查访问者的来源:使用Unicast Reverse Path Forwarding等通过反向路由器查询的方法检查访问者的IP地址是否是真,如果是假的,将予以屏蔽。

此外,定期进行安全审计和漏洞扫描也是防止DDOS攻击的重要措施。同时,加强安全意识和培训员工也是防止DDOS攻击的重要手段之一。如果遭受DDOS攻击,应立即采取相应的应对措施,如暂时关闭不必要的服务或资源,向相关部门报告并寻求帮助等。
:::

telnet与ssh的区别

:::success
Telnet和SSH都是远程登录协议,但它们在安全性、传输方式和功能方面存在显著差异。

  1. 安全性:Telnet是一种明码传输的协议,数据和口令在传输过程中都是以明文形式存在的,因此Telnet的安全性相对较差。相比之下,SSH是一种加密传输的协议,其传输方式是以加密形式进行的,可以有效防止数据和口令被窃取,因此SSH更加安全。
  2. 传输方式:Telnet通过TCP/IP协议来访问远程计算机,其传输的数据和口令是明文形式的。而SSH则可以在TCP/IP协议的基础上提供加密通道,进一步保护数据的安全。
  3. 功能:Telnet功能相对较少,它主要用于简单的远程登录和管理。而SSH除了可以代替Telnet进行远程登录和管理之外,还可以为ftp、pop、基础PPP提供一个安全的通道。
  4. 端口号:Telnet的端口号是23,而SSH的端口号是22。
  5. 版本:SSH有SSH1和SSH2两个版本,两者不兼容。SSH1又分为1.3和1.5两个版本,采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输。SSH2增加了AES和Twofish等对称加密算法。

综上,由于SSH具有更强的安全性,更多的功能和更灵活的版本选择,因此在实际应用中更广泛使用。而Telnet由于使用简便,在一些特定场景仍有使用。
:::

udp与tcp的区别,各自有什么特点

:::success
TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议(IP)中两种主要的传输协议,它们有以下区别和特点:
TCP:

  1. 面向连接:TCP是一种面向连接的协议,需要在传输数据之前先进行握手建立连接。
  2. 可靠传输:TCP提供了数据传输的确认和重传机制,能够保证数据按照发送的顺序和完整性进行接收。
  3. 流量控制和拥塞控制:TCP具有流量控制和拥塞控制机制,能够有效地避免网络拥塞,提高数据传输的效率和可靠性。
  4. 数据顺序:TCP是一种字节流协议,数据在传输过程中是有序的。
  5. 传输方式:TCP是双向的,可以实现全双工通信。

UDP:

  1. 无连接:UDP是一种无连接协议,发送数据之前不需要建立连接。
  2. 不可靠:UDP没有像TCP那样的确认和重传机制,因此不能保证数据的可靠传输。
  3. 无序:UDP发送的数据包可能在网络中乱序到达,接收端需要重新排序以还原原始数据。
  4. 简单快速:UDP协议相对简单,处理速度快,适用于实时应用如音频、视频传输等。
  5. 单向通信:UDP是单向的,只能实现简单的数据传输功能。

总的来说,TCP和UDP各有其特点和使用场景。TCP主要适用于需要可靠、有序和错误校验的数据传输,如网页浏览、电子邮件等应用;而UDP则适用于实时性要求较高、错误容忍度较高的场景,如在线游戏、VoIP(语音通话)等应用。
:::

Ssl协议主要提供的服务

:::success
SSL协议主要提供的服务包括:

  1. 认证用户和服务器,确保数据发送到正确的客户机和服务器。
  2. 加密数据以防止数据中途被窃取。
  3. 维护数据的完整性,确保数据在传输过程中不被改变。

SSL协议的工作流程包括服务器认证阶段和用户认证阶段。在服务器认证阶段,客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接。服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息。客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器。服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。在用户认证阶段,经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
SSL协议是互联网安全协议的基石之一,广泛应用于保障数据传输的安全性。然而,随着互联网安全威胁的不断演变,SSL协议的安全漏洞已经被发现并被广泛讨论,因此目前已经有了更加安全的协议替代品,如TLS协议。
:::

nfs

nfs?

:::success
远程共享存储、是在linux内核中实现
:::

nfs工作原理?

:::success
因为nfs功能很多,使用的端口也不同,nfs不能固定端口,所以需要rpc来记录nfs的端口,这样可以通过rpc实现服务端和客户端的rpc来沟通
:::

RPC和NFS之间又是如何之间相互通讯的?

:::success
nfs开启后,会随机使用一些端口,然后就会去向rpc去注册这些端口,并被rpc记录下来,开启111端口,等待客户端rpc请求,如果有请求,服务端的rpc就会将记录的nfs端口信息告诉客户端
:::

nfs的特点?

:::success
已经做好格式化了,可以直接用
nfs文件系统仅支持基于ip的用户访问控制
nfs的客户端主要是linux
nfs可以提供文件系统的共享
nfs端口一直在变,需要安装rpc来记录端口信息
:::

ftp

ftp两种工作模式

:::success
ftp主动模式:客户端开启一个端口在1024到65535之间,向服务端的21端口建立连接,客户端同时开启一个N+1端口,告诉服务端,我监听的是N+1端口,服务端接到请求之后,用自己的20端口数据传输到客户端的N+1端口。
ftp被动模式:客户端同时开启两个端口都在1024到65535之间,客户端的一个端口跟服务端的21端口建立连接,并请求服务端再开一个随机端口。服务端接到请求之后,开启一个随机端口,并告诉客户端我开启的端口号是多少,客户端用另一个端口与服务端的随机端口进行传输数据。
:::

ftp的工作原理?

:::success
ftp是文件传输协议,可以实现客户端和服务端共享文件,上传和下载文件,ftp通过tcp协议生成一个虚拟连接,用户可以通过客户端向ftp服务端上传,下载,删除文件,ftp服务端可以同时共享给多人使用
:::

ftp特点?

:::success
提供文件共享服务,实现上传下载
21号端口建立tcp连接,20 号端口传输数据
:::

ftp的服务器?

:::success
Vsftp,/etc/vsftpd/vsftpd.conf
在unix/linux中最主流的ftp服务,优点是小巧轻快,安全易用,稳定高效,满足企业跨部门,多用户的使用(1000用户)。
:::

ftp和nfs传输的区别

:::success
● 文件系统类型 FTP是一种基于客户端-服务器的协议,用于文件传输。**NFS则是一种分布式文件系统协议,**作为本地操作系统和远程文件系统之间的桥梁,可以实现跨平台文件共享。
● 传输速度和效率 由于FTP是基于客户端-服务器的协议,所以需要进行连接的建立和关闭,因此相对于NFS,FTP传输的速度较慢,效率也较低。而NFS则是通过一些标准和规定管理远程文件系统的,直接访问远程文件系统,传输速度和效率更高。
:::

mysql数据库

mysql主从复制的模式

:::success
MySQL的主从复制(Master-Slave Replication)是一种数据同步机制,其中一个MySQL服务器(称为主服务器或Master)处理所有的写操作,并将其数据更改复制到一个或多个MySQL服务器(称为从服务器或Slave)。这种配置可以提高数据冗余、故障转移和读取性能。
以下是MySQL主从复制的常见模式:

  1. 异步复制
    • 这是MySQL默认的主从复制模式。
    • 当主服务器上的数据发生变化时,这些变化会被写入二进制日志(binary log)。
    • 从服务器上的I/O线程读取主服务器上的二进制日志,并将它们写入从服务器上的中继日志(relay log)。
    • 从服务器上的SQL线程读取中继日志并执行其中的指令,从而同步主服务器的数据更改。
    • 由于从服务器是异步执行数据更改的,所以可能会存在主从之间的短暂数据延迟。
  2. 半同步复制
    • 半同步复制是MySQL的一种可选模式,它介于异步复制和同步复制之间。
    • 在半同步复制中,当主服务器上的数据发生变化时,它会等待至少一个从服务器确认已经接收到了这些更改并写入了中继日志。
    • 这确保了在主服务器崩溃的情况下,至少有一个从服务器拥有最新的数据。
    • 但需要注意的是,半同步复制可能会增加写操作的延迟。
  3. 组复制(全同步复制)
    • MySQL组复制是MySQL 5.7及更高版本中的一个功能,它允许你设置一个服务器组,其中每个成员都可以处理读写操作。
    • 在组复制中,数据更改会在组成员之间进行同步,从而实现高可用性。
    • 组复制需要至少三个服务器节点,并且每个节点都可以处理客户端连接。
  4. 多源复制(全同步复制)
    • 多源复制允许一个从服务器从多个主服务器复制数据。
    • 这可以提高数据同步的灵活性和效率,但也可能增加复杂性。
    • 需要注意的是,多源复制在某些情况下可能会导致数据冲突或不一致。

在选择适合的主从复制模式时,你需要考虑你的应用需求、性能要求、故障转移策略等因素。例如,如果你需要确保数据的一致性并愿意牺牲一些性能,那么半同步复制可能是一个好选择。如果你需要高可用性并希望每个节点都能处理读写操作,那么组复制可能更适合你。
:::

关系型数据库与非关系型数据库的区别

:::success
**关系型数据库:**使用表结构,格式一致便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性。但是当遇到海量数据的时候读写效率将会大大降低,由于表结构固定所以灵活度不高。
**非关系型数据库:**存储格式有很多种比如说key-value形式、文档形式、图片形式等格式比较灵活。因为可以使用硬盘或者随机存储器作为载体所以读写速度快。而且有较高的扩展性和灵活度。但是没有sql支持,没有事务处理不能保证数据的一致致。
:::
:::success
原子性:事务中的所有操作要么全部成功,要么全部失败回滚。这意味着事务的操作如果成功就全部应用到数据库中,如果失败则不会对数据库有任何影响
一致性:事务必须确保数据库从一个一致性状态变换至另一个一致性状态。无论事务执行前后的数据如何变化,事务结束后,数据库应该保持原有的完整性和一致性。
隔离性:事务执行的时候不会被别的事务影响。
持久性:一旦事务被提交,对数据库的更改就是永久性的。即使在数据库系统 遇到故障的情况下,这些更改也不会丢失。这意味着事务提交后其所做的更改不会因为系统的暂时问题而被撤销或损坏。
:::

数据库存储引擎
innodb支持事务提交和回滚、崩溃修复和并发控制。如果对事务的完整性要求比较高和并发控制的话可以选择innodb
myisam有较高的查询,插入速度,但是不支持事务。插入速度快,空间和内存使用比较低。
memory将表存储在内存中,读写速度极快,但是安全性很低。

mysql的数据类型

:::success
整型,浮点型,字符串型,日期时间型,枚举型,集合型。
:::

表完整性约束

:::success
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
NULL 标识是否允许为空,默认为NULL
NOT NULL 标识该字段不能为空,可以修改。
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号,正数
:::

索引的选用原则

:::success
常用于查询条件的字段比较适合作为索引,唯一性太差,更新太过于频繁的字段不适合作为索引。
:::

导致sql执行慢的原因

:::success
1.硬件问题。比如网速太慢,内存不足,i/o吞吐量小,磁盘空间满了等。
2.没有创建索引或者索引失效了。
3.数据量太多了(建议分库分表,读写分离)
4.服务器调优及各个参数设置
:::

物理备份和逻辑备份的区别

物理备份逻辑备份
备份方式备份数据库物理文件只备份数据库建表,建库,插入数据的SQL语句
优点恢复起来速度比较快备份文件比较小,只备份表中的数据和表结构
缺点备份文件大,表空间,数据,结构,索引等都备份了恢复起来比较慢,需要重新建立索引和表结构插入数据等。

物理备份方式
完整备份每次对数据进行完整的备份,即对整个数据库备份、数据库结构和文件结构的备份
增量备份每次备份上一次备份到现在产生的新数据,只有在上次完备或者增备后被修改的数据进行备份。
差异备份备份自从第一次完整备份之后被修改的所有数据,每次备份都基于第一次完整备份进行备份

主从复制的作用

:::success
1.做数据的热备,作为后备数据库,在主数据库故障之后可以迅速的切换到从库继续工作,避免造成数据丢失。
2.提高读写性能,主从复制可以实现读写分离,从而提高数据的读写性能和吞吐量。
3.负载均衡,可以结合读写分离,主从复制可以在主节点提供写服务的同时,由从节点提供读服务,分担服务器负载,提高服务器的并发量。
:::

主从复制的原理

:::success
需要主库开启binlog日志
当主库上的数据更改时会把数据更改操作记录到本地的binlog日志中。从库的i/o线程读取主库的binlog日志并写入到自己的relay日志中。最后从库的sql线程会在自己的数据库上执行relaylog中的事件,达到主从同步的效果
:::

msyql主从数据不一致原因

:::success
1.网络延迟;因为主从复制是基于binlog的复制,通过网络传送binlog文件,所以网络延迟是引起数据不一致的原因
2.主从服务器负载不一致:当任何一台服务器负载过高都会导致其中一台的线程分配的资源不足导致数据部不一致
3.数据库版本差异过大。
:::

读写分离的好处

:::success
主要通过将读操作和写操作分别分配在不同的服务器上分摊服务器压力,提高系统的处理效率。
:::

mysql优化

:::success
安全方面:可以修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql。
性能方面:升级硬件比如说内存、磁盘。设置索引,优化sql语句等。
架构方面:部署读写分离,高可用。
参数优化:innodb的buffer参数调大,连接数调大、缓存的参数优化。
:::

平常优化过那些sql语句?

:::success
在查询数据内容时,尽量避免使用select * ,输入详细的字段查询
选择合适的数据类型,减少存储空间的使用
设置合适的索引,可以快速查询操作,减少数据库的扫描和查找时间
:::

mysq5.7和8.0的区别

:::success
sql语句差异MySQL5.7可以直接用grant创建用户 8.0 需要先创建用户在用grant赋权
1、账户与安全方面不一样,5.7版本可以使用grant all直接创建用户并给授权,而在8.0则是分开了,需要先创建用户,在授权
2、改进了性能,8.0对查询优化和执行引擎进行了改进,引入了新的InnoDB事务日志格式,提高了性能和可伸缩性
3、新的数据类型、8.0还引入了包括Geospatial数据类型和Invisible字段。
:::

mysql事务的使用场景

:::success
需要一次执行多条语句的时候,要么全部成功,要么全部失败
:::

mysql的隔离性有几个隔离级别

:::success
读未提交、读已提交、可重复读、串行化
:::

mysql脏数据的概念

:::success
事务a修改了数据但是还没提交,事务b引用了事务a的数据,但是事务a的数据由于某些原因回滚了,那么事务b读取的数据就是脏数据
解决办法:将隔离级别改成读已提交
:::

mysql幻读

:::success
一个事务读取某些行后,另一个事务插入新行的情况。在这种情况下,第一个事务再次读取同样的范围时,会“看到”这些新插入的行,就好像它们一直都在那里一样。
:::

msyql和oracle的区别

:::success
首先最大的区别就是mysql是开源的 oracle是收费的 oracle是大型数据库而mysql是中小型数据库
:::

关系型数据库特点

:::success
使用表结构,格式一直便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性
:::

mysql缺点

:::success
由于mysql是关系型数据库所以当遇到海量数据的时候读写效率将会大大降低,而且表结构固定所以灵活度不高。
:::

一个表超过多少行查询速度会慢下来

:::success
单表 三万
:::

读写分离的好处?

:::success
** 提高性能** 分摊服务器压力 提高机器的系统处理效率
** 提高并发性** 通过读写分离将读操作和写操作分别在不同的服务器上执行从而提高并发性
** 降低主服务器的负载**
数据备份和灾难恢复
:::

主从复制延迟大比较慢原因

主从复制延迟较大的原因主要有以下几种:

  1. 硬件配置差异:主库和从库的硬件配置不一致,特别是当从库的硬件性能较差时,会导致复制延迟。
  2. 网络问题:网络延迟或网络带宽问题可能导致主从复制延迟。例如,跨公网主从复制容易产生网络延迟。
  3. 主库并发事务量大:如果主库的事务并发量太大,来不及传送到从库,也会导致复制延迟。
  4. 大事务执行:如果主库的一个事务执行时间较长,例如执行了10分钟,那么从库在接收到binlog后也需要等待10分钟再执行,从而导致了复制延迟。
  5. 从库查询压力大:如果从库的查询压力过大,消耗了大量的CPU资源,也会影响同步的速度。
  6. 主库写binlog方式:主库的写binlog是顺序IO,而从库读取binlog也是顺序IO,这可能会影响复制速度。
  7. 慢SQL语句:如果从库执行了大量的慢SQL语句,那么复制的速度也会受到影响。
  8. 主从复制的设计问题:例如,主从复制单线程,如果主库写并发太大,那么会导致复制延迟。
  9. 从库数量过多:如果主库有太多的从库,那么可能会导致复制延迟。

要解决这些问题,你可以考虑以下几个方面:

  1. 优化硬件配置:尽可能使主库和从库的硬件配置保持一致或接近一致。
  2. 优化网络环境:优化网络环境,减少网络延迟和增加网络带宽。
  3. 优化主库并发事务:通过优化事务设计、减少事务的复杂度等方式来减少并发事务的数量。
  4. 分批传输大事务:将大事务分成多个小事务,分批传输到从库,以减少单次传输的数据量。
  5. 优化从库查询:通过优化查询语句、建立合适的索引等方式来减少从库的查询压力。
  6. 使用GTID和并行复制:使用GTID进行复制,并通过并行复制来提高复制速度。
  7. 优化慢查询:找出并优化慢查询语句,以减少其执行时间。
  8. 调整主从复制参数:调整复制相关参数,如增加线程数、调整数据传输的缓冲区大小等。
  9. 减少从库数量:尽量减少主库管理的从库数量,以提高复制效率。

导致SQL执行慢的原因

导致SQL执行慢的原因有多种,主要包括以下几点:

  1. 硬件问题:如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
  2. 没有索引或者索引失效:当对某个字段进行运算、函数操作时,可能导致无法使用索引,从而影响查询速度。
  3. 数据过多:如果数据量过大,查询时需要扫描的数据行数就会增加,可能导致查询变慢。
  4. 服务器调优及各个参数设置问题:例如,数据库的配置参数设置不当,可能会影响到查询性能。
  5. 数据库本身压力较大:如果数据库本身的性能压力就比较大,资源比较紧张,CPU占用率或者IO利用率很高,也会导致所有的语句执行起来都比较慢。
  6. 表锁冲突和行锁冲突:当一个简单的查询长时间未返回结果时,可能是表被锁住了。这通常通过查看sql语句的状态来发现。
  7. 索引未命中:如果字段上没有索引,那么就只能走主键id顺序扫描,一直扫描到第n行才能停下来。给表数据加索引可以快速提升查询性能。
  8. 多表join查询:即使每张表的索引都可以起到作用,但由于数据量过多,扫描的行数仍然是巨大的,这会使查询速度受到影响。一般来说,超过3个表的join就应该尽量避免。

mysql和Oracle有什么区别?

:::success
1、MySQL开源,可以免费使用;而Oracle收费,不开源
2、Oracle功能强大的企业级数据库系统,支持复杂的事务和大规模数据处理;而MySQL通常用于中小型应用和网站,对于大规模企业级应用的复杂查询和事务处理相对较弱
3、MySQL支持多种存储引擎,包括InnoDB、MyISAM等,每种存储引擎有不同的特性和适用场景;而Oracle数据库使用统一的存储引擎,有丰富的功能和性能优化选项
4、由于MySQL是开源的,因此使用成本相对较低,技术支持有限;而Oracle数据库的使用成本较高,但有完善的技术支持和服务。
:::

http

I/O多路复用的三种模式?

:::warning
**select模式:**使用select系统调用来监视多个文件描述符的状态变化,一旦文件描述符就绪,select就会返回,然后程序可以对就绪的文件描述符进行操作。
poll模式:与select类似,也是用来监视多个文件描述符的状态变化,不同的是,poll没有描述符数量限制,且效率更高。
**epoll模式:**LInux特有的I/O多路复用机制,使用epoll系统调用来监视多个文件描述符的状态变化,效率更高,且没有描述符数量限制。
:::

HTTP 工作原理

:::warning
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。

Web服务器有:Nginx,Apache服务器,IIS服务器(Internet Information Services)等。
:::

HTTP三点注意事项:

:::warning

  • **HTTP是无连接:**无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • **HTTP是媒体独立的:**只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
  • **HTTP是无状态:**HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    :::
HTTP状态码列表:
状态码状态码英文名称中文描述
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

udp与tcp的区别,各自有什么特点

:::warning
TCP:
面向连接:TCP协议在传输数据之前需要先建立连接,并在传输完成后进行相应的关闭操作。这种面向连接的特性使得TCP能够保证数据传输的可靠性和顺序性。
可靠传输:TCP通过校验和、重传控制、序号标识、滑动窗口和确认应答等机制实现可靠传输,确保数据无差错、不丢失、不重复,并且按序到达。
全双工通信:TCP提供全双工通信模式,允许数据在双向间同时传输,但需要由发送方和接收方通过三次握手建立连接和四次挥手关闭连接。
数据流量控制和拥塞控制:TCP具有数据流量控制和拥塞控制机制,能够避免网络拥堵,提高网络通信效率。
数据封装与解封装:TCP将应用程序的数据进行封装,并逐层进行传输,到达目的地后再进行解封装,还原成应用程序的数据。

UDP:
**无连接:**UDP协议不需要在传输数据前建立连接,而是直接发送数据报文。因此,UDP协议具有较好的实时性和效率。
尽最大努力交付:UDP协议尽最大努力将数据报文交付给目标地址,但不保证可靠交付。因此,UDP适用于对实时性和效率要求较高的应用,如音频、视频通信等。
面向报文:UDP将应用程序的数据封装成数据报文,每个数据报文独立发送,以最大程度地减少数据丢失或重复的可能性。
简单和高效:UDP协议相对于TCP协议更为简单和高效,因为其不需要建立连接和进行流量控制等操作。此外,UDP首部开销小,只有8个字节。
:::

正/反向代理的区别

:::success
反向代理:隐藏真实的服务器,客户端不知道真正提供服务的是谁,服务端的响应信息由代理服务器转发给客户端。反向代理代理的是服务端
正向代理:隐藏真实的客户端,服务器不知道真实的客户端是谁,客户端的请求信息由代理服务器转发给服务端。正向代理代理的是客户端。
:::

Apache

apache工作原理?

:::success
apache是基于多进程模型的web服务器,使用传统的多线程多进程方式来处理客户请求,每个请求有独立的进程或线程处理可以同时处理多个请求,消耗系统资源也多
:::

apache工作模式?

:::success
进程模式,进程去处理请求,容易消耗内存,某个进程出现问题不会影响其他请求,对稳定性有要求是使用
线程模式,使用多个子进程,每个子进程有多个线程,用线程去处理请求,消耗内存小,但稳定性不好,在访问量大的时候使用
:::

nginx和apache的区别?

:::success
1、nginx是http和反向代理服务器,apache是基于多进程模型的web服务器
2、 nginx在处理高并发大量连接的情况表现出色,能高效的处理并发请求,apache在处理静态内容效果良好,在处理高并发大连接情况下,性能会受影响
3、apache每个请求都要独立的进程和线程处理,占用内存较多,而nginx采用的异步和事件驱动机制所以可以在占用较少的内存处理更多的并发连接
:::

nginx

介绍一下nginx的io多路复用

:::success
Nginx的IO多路复用是一种机制,用于在单个线程中管理多个IO流,以提高服务器的并发处理能力和吞吐量。通过使用IO多路复用技术,Nginx可以在单个工作进程中处理数千个并发连接,而不会耗尽系统资源。
Nginx的IO多路复用基于事件驱动模型,使用epoll作为后端实现。epoll是Linux系统下的一种IO多路复用机制,它允许程序同时监听多个文件描述符,并在其中一个或多个文件描述符可读、可写或发生异常时返回。
在Nginx中,每个请求连接都会被封装成一个请求对象,并关联到一个socket描述符上。通过使用IO多路复用技术,Nginx可以在一个工作进程中同时处理多个请求对象,而不需要为每个请求创建一个新的线程或进程。
Nginx的IO多路复用机制具有以下优点:

  1. 高并发处理能力:通过在单个工作进程中管理多个IO流,Nginx可以同时处理数千个并发连接,提高了服务器的并发处理能力和吞吐量。
  2. 资源利用率高:由于Nginx使用单个线程来处理多个请求,不需要为每个请求创建一个新的线程或进程,从而减少了系统资源的浪费。
  3. 稳定性好:由于Nginx的IO多路复用机制是基于事件驱动的,当某个请求发生异常时,不会影响到其他请求的处理。这有助于提高服务器的稳定性。
  4. 可扩展性好:Nginx的IO多路复用机制可以方便地扩展到更多的文件描述符和请求对象,从而支持更多的并发连接和请求。

总之,Nginx的IO多路复用技术是一种高效、稳定、可扩展的机制,用于提高服务器的并发处理能力和吞吐量。
:::

nginx简介

:::success
nginx是一款轻量级的web服务器和反向代理服务器,同时也是一款负载均衡软件,支持七层负载和四层负载。可以做动静分离,nginx功能非常多,比如说地址重写,回话保持,防盗链,访问流量控制等。
:::

为什么选用nginx

:::success
作为web服务器,相比apache,nginx占用更少的资源,支持更多的并发连接。nginx处理请求是异步非阻塞的,而apache杂事阻塞型的,在高并发的情下nginx能保持低资源低消耗高性能。

提高访问速度:反向代理服务器可以缓存目标主机返回的数据,当下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,避免了重复获取资源的时间,从而提高了访问速度。
保护Web服务器:反向代理服务器可以保护Web服务器免受已知漏洞的影响,因为请求不会直接到达Web服务器。
负载均衡:反向代理服务器可以充当负载均衡器,解决网站同时处理大量请求的问题,使Web服务器能够更好地处理请求,并提高系统的性能。
Nginx 需要配置文件里面定义,如果后端地址比较多,需要用upstream 模块定义后端服务器地址池,然后再server模块中,定义location模块,用Proxy_pass 转发到此地址池。这样的效果,其实还起到了七层负载均衡的作用。其实还起到了反向代理的作用。
:::

nginx都能做什么

:::success
web服务器,代理服务器,负载均衡服务器
:::

nginx都有哪些功能

:::success
虚拟主机、反向代理、地址重写、会话保持、流量控制、防盗链
image.png
:::

nginx如何优化

:::success
性能:work进程数量和cpu内核数保持一致
调大最大连接数
增大文件句柄数量
GZIP压缩功能可以考虑打开
安全:隐藏nginx版本号
:::

Gzip压缩的使用场景

etc/sys
:::success
**gzip_comp_level ** 设置gzip压缩等级,等级越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大
gzip_min_length 当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩gzip_types 设置需要压缩的MIME类型,非设置值不进行压缩
:::

nginx如何隐藏版本号

:::success
在http块里增加 server_tokens off
:::

gzip压缩怎么使用?

:::success
1、开启gzip压缩功能
2、设置允许压缩页面的最小字节数
3、设置压缩缓冲区大小
4、设置压缩版本
5、设置压缩比率(最小为1,最大为9,越小传输越慢)
:::

七层负载和四层负载的区别

:::success

  1. 工作层级:四层负载均衡主要工作在传输层,而七层负载均衡则工作在应用层。
  2. 处理方式:四层负载均衡主要处理网络层的IP和端口信息,而七层负载均衡则更进一步,处理应用层的协议信息,如HTTP、HTTPS等。
  3. 功能:四层负载均衡主要用于TCP/UDP流量的负载均衡,而七层负载均衡则主要用于HTTP等应用层协议的负载均衡。
  4. 效率:四层负载均衡相对效率较高,而七层负载均衡效率较低
    :::
四层负载和七层负载有什么区别

当您访问百度网站时你的浏览器上就会显示“http://www.baidu.com”,那么这个就是百度网站的URL了。

四层负载均衡七层负载均衡
基于基于IP+Port的
主要基于传输层的信息
基于虚拟的URL或主机IP等
基于应用层进行工作
类似于路由器代理服务器
复杂度
性能高;无需解析内容中;需要算法识别 URL,Cookie 和 HTTP head 等信息
安全性
额外功能会话保持,图片压缩,等

:::warning
总结:从上面的对比看来四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。
:::

nginx为什么要平滑升级

:::success
为了在不中断服务的前提下,对服务器上的应用程序进行更新或迁移。
:::

nginx平滑升级操作

:::success
(1)在不停掉老进程的情况下,启动新进程。
(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求。
(3)新进程接受新请求。
(4)老进程处理完所有请求,关闭所有连接后,停止。
:::

nginx平滑升级使用的信号

:::success
主进程支持的信号

  • TERM, INT: 立刻退出
  • QUIT: 等待工作进程结束后再退出
  • KILL: 强制终止进程
  • **HUP: **重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
  • USR1: 重新打开日志文件
  • USR2: 启动新的主进程,实现热升级
  • WINCH: 逐步关闭工作进程

工作进程支持的信号

  • **TERM, INT: **立刻退出
  • QUIT: 等待请求处理结束后再退出
  • **USR1: **重新打开日志文件
    :::
nginx流量控制

:::success
Nginx中一个非常实用的功能我们可以用来限制用户在给定时间内HTTP请求的数量。这可以用于安全目的,例如减慢暴力破解的速率,以及保护上游服务器不被过多的用户请求压垮。
:::

异步非阻塞

:::success
程序会发起一个操作,然后继续执行其他任务,而不是等待该操作完成。当操作完成时,程序会收到通知,然后可以获取结果并进行后续处理。这种方式可以提高程序的效率和响应性,因为它可以同时处理多个任务,而不是依次执行。
:::

会话保持

:::success
将同一客户端的请求总是发往同一个后端服务器。
:::

为什么要做动静分离

:::success
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
:::

Tomcat优化主要包括以下几个方面:

:::success

  1. 内存优化:Tomcat的默认内存配置可能较低,对于大型项目或高并发访问可能不够用。可以通过调整JVM参数来优化内存配置。具体来说,可以在Tomcat的启动脚本(如catalina.sh)中设置JAVA_OPTS参数,包括-Xms(初始堆大小)、-Xmx(最大堆大小)等,来合理分配内存资源。
  2. 线程优化:Tomcat使用线程池来处理请求,线程池的配置对Tomcat的性能有很大影响。可以调整Tomcat的线程池参数,如maxThreads(最大线程数)、minSpareThreads(最小空闲线程数)等,来适应不同的负载情况。
  3. 连接优化:Tomcat的连接数配置也是优化的一个重要方面。可以调整Tomcat的连接器(Connector)配置,如maxConnections(最大连接数)、acceptCount(等待队列长度)等,来提高Tomcat的并发处理能力。
  4. 缓存优化:Tomcat支持多种缓存机制,如页面缓存、对象缓存等。可以通过合理配置缓存参数,如缓存大小、缓存策略等,来提高Tomcat的响应速度和并发处理能力。
  5. 压缩优化:Tomcat支持对传输内容进行压缩,可以减少网络传输的数据量,提高网站的响应速度。可以在Tomcat的连接器配置中启用压缩功能,并设置压缩的阈值和压缩算法等参数。
  6. 静态资源优化:对于静态资源的访问,可以通过配置Tomcat的虚拟路径(Virtual Host)和别名(Alias)等来实现静态资源的快速访问。同时,还可以使用CDN(内容分发网络)来加速静态资源的传输,提高网站的访问速度。
  7. 监控和日志优化:Tomcat提供了丰富的监控和日志功能,可以通过合理配置和使用这些功能来实时了解Tomcat的运行状态和问题所在。可以调整Tomcat的日志级别和输出方式,以便更好地进行问题定位和故障排除。

总之,Tomcat优化需要从多个方面进行综合考虑和调整,包括内存、线程、连接、缓存、压缩、静态资源和监控等方面。通过合理的优化配置和调整参数,可以提高Tomcat的性能和并发处理能力,提升网站的响应速度和用户体验。
:::

负载均衡

lvs负载均衡的四种工作模式

:::success
NAT:网络地址转换模式,进站/出站的数据流量经过分发器/负载均衡器(IP负载均衡,他修改的是IP地址) --利用三层功能
DR:直接路由模式,只有进站的数据流量经过分发器/负载均衡器(数据链路层负载均衡,因为他修改的是目的mac地址)–利用二层功能mac地址
TUN:隧道模式,只有进站的数据流量经过分发器/负载均衡器
full-nat::双向转换,通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发
:::

LVS 优势与不足

:::success
1、优势
高并发连接、稳定性强、成本低廉、配置简单、支持多种算法(分配方式)、支持多种工作模式、应用范围广
2、不足
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
:::

nginx和lvs有什么区别

:::success
LVS:专业的负载均衡软件,但是只支持四层负载均衡。负载能力强、并发量大、配置非常简单、工作稳定、无流量传输占用cpu资源小,速度快能支持所有应用,是一个基于Linux内核的负载均衡软件。
Nginx**:**工作在第七层,支持四层负载和七层负载。可以针对HTTP应用本身做分流策略、对网络的依赖小、安装配置比较简单,测试起来也很方便、负载均衡和稳定度比不上LVS,Nginx还具有高可用性和可扩展性,能够处理大量的并发请求,适用于各种规模的应用。
:::

常见的负载均衡软件有哪些,都有那些特点

常见的负载均衡软件包括LVS、Nginx和HAProxy。

  1. LVS:基于4层网络协议,几乎无流量产生,内存**、CPU占用资源低,应用范围广,**不仅对Web服务做负载均衡,而且可结合其他应用做负载,如LVS+MySQL负载均衡。配置简单,可配置东西较少,无流量,LVS只分发请求,而流量并不从它本身出去,保证了均衡器IO的性能不会收到大流量的影响。有个虚IP概念。
  2. Nginx:基于7层网络协议,对Http应用做分流策略,如配置域名。高负载、稳定。支持上万高并发。负载能力小于LVS。安装配置简单,支持的正则比Haproxy丰富。且对网络稳定性的依赖非常小。可通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,把返回错误的请求重新提交到另一个节点。作Web服务器,反向代理\负载均衡。
  3. HAProxy:支持虚拟主机,可工作在4层、7层。负载均衡效率上来讲Haproxy比Nginx更出色,在并发处理上也是优于Nginx。能够补充Nginx的一些缺点,如支持Session的保持,Cookie的引导。同时支持通过获取指定的url来检测后端服务器的状态。支持负载均衡策略较多。如roundrobin简单轮询、leastconn最少服务器连接数、static-rr权重轮询、uri哈希、sourceIP哈希、url_param请求的URL参数等。

以上是常见的负载均衡软件及其特点,这些软件各有优缺点,请根据实际需求选择合适的软件。

负载均衡算法有哪写

:::success
A、**轮询(默认**):每个请求按时间顺序逐一分配到不同的后端服务器;
B、**ip_hash:使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,有助于保持会话的一致性;
C、**url_hash**:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候效率;
D、
fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;<br />E **加权轮询**:根据配置的权重的大小而分发给不同服务器不同数量的请求。<br />F **热备`:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务
:::

lvs的工作模式

:::success
dr
nat
tun
:::

keepalived的工作原理

:::success
Keepalived的工作原理主要基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)来实现集群的高可用性。VRRP是一种实现路由器高可用的协议,通过将多台提供相同功能的路由器组成一个路由器组,其中一台作为master,其他作为backup。Master会定期发送VRRP报文,如果backup在一定时间内没有收到报文,就认为master出现故障,然后根据VRRP的优先级选举一个backup成为新的master。
在Keepalived中,VRRP模块负责实现VRRP协议,用于故障隔离和负载均衡器间的失败切换。此外,Keepalived还支持Layer3、Layer4和Layer5的检查机制,通过定期向服务器发送ICMP或TCP数据包,检测服务器的状态。如果服务器出现故障,Keepalived会将其从集群系统中剔除,以保证集群的高可用性。
因此,Keepalived的工作原理主要是通过VRRP协议和多层检查机制来实现集群的高可用性,防止单点故障的发生。
:::

LVS调度算法

:::warning
调度算法用于决定LVS如何选择后端的RealServer

1. 轮循调度(Round Robin)(简称rr)
调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2. 加权轮循(Weighted Round Robin)(简称wrr)
调度器通过“加权轮循”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3. 最少链接(Least Connections)(LC)
调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用 “最小连接” 调度算法可以较好地均衡负载。
4.加权最少链接(Weighted Least Connections)(WLC)
在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
LVS的默认调度算法。
5. 基于局部性的最少链接(Locality-Based Least Connections)(LBLC)
“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
6. 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
7. 目标地址散列(Destination Hashing)(DH)“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
8. 源地址散列(Source Hashing)(SH)“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
9. 最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C。
10.最少队列调度(Never Queue Scheduling NQ)(NQ)
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算

:::

ansible

什么是ansible

:::success
ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
:::

Ansible是做什么的?

:::success
ansible是自动化运维工具,基于python开发,分布式,轻量级实现批量系统配置、批量程序部署、批量运行命令。
:::

Ansible的工作原理是什么?

:::success
ansible是基于模块和ssh工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提提
:::

ansible特点

:::success
Ansible特性
1)、no agents:不需要在被管控主机上安装任何客户端,更新时,只需在操作机上进行一次更新即可(不用安装客户端。分布式的
2)、no server:无服务器端,使用时直接运行命令即可
3)、modules in any languages:基于模块工作,可使用任意语言开发模块
4)、yaml,not code:使用yaml语言定制剧本playbook
5)、ssh by default:基于SSH工作
6)、strong multi-tier solution:可实现多级指挥
:::

ansible常用的模块

:::success
yum、ping、shell、copy、service等模块
:::

Asnible角色使用过吗?举个例子

:::success
使用角色部署过nginx
:::

CDN是什么服务?有什么作用?

:::success
CDN即内容分发网络,它是一种基于互联网的服务,提高用户访问的响应速度和成功率:加快网站访问,为了实现跨运营商,跨地域的全网覆盖,为了保障网络完全(阿里云腾讯云都有cdn加速服务)
:::

redis:6.2.7

关系型数据库和非关系型数据库的区别?

:::success
关系型数据库:使用表结构,格式一直便于维护。因为sql语句通用可以复杂查询所以使用起来比较方便。支持事务安全性较高能保证数据的完整性和一致性。但是当遇到海量数据的时候读写效率将会大大降低,由于表结构固定所以灵活度不高。
非关系型数据库:存储格式有很多种比如说key-value形式、文档形式、图片形式等格式比较灵活。因为可以使用硬盘或者随机存储器作为载体所以读写速度快。而且有较高的扩展性和灵活度。但是没有sql支持,出了redis外没有事务处理不能保证数据的一致性和完整性
:::

Redis的优点都有哪些?

:::success
(1) 速度快,因为数据存在内存中。
(2) 支持丰富数据类型,支持string,list,set,hash等
(3) 支持事务,操作都是原子性,就是对数据的更改要么全部执行,要么全部不执行
(4) 丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
:::

Redis的数据持久化方式有几种?什么区别

:::success
** RDB相当于把数据拍了个快照,但是可能因为在拍快照的时候,有新的数据生成,导致数据不够完整。AOF的完整性会高一点,因为AOF记录的数据的的写指令,再重启之后,只需要将这些指令从新执行一遍,就能够恢复数据。我们一般使用的是RDB方式,AOF视情况开启,一般只会选择一种,因为开启两种的话,可能会对redis造成一定的压力。只用RDB的话虽然数据完整性不高,但是影响也不大,因为数据库中还有一份,只需要同步到redis就行。**
RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;
特点:
1.周期性
2.不影响数据写入 #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。
3.高效 #一次性还原所有数据
4.完整性较差 #故障点到上一次备份,之间的数据无法恢复。
**AOF(Append Only File)**则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:
1.实时性
2.完整性较好
3.体积大 #记录数据的指令,删除数据的指令都会被记录下来。
:::

redis缓存穿透?redis缓存雪崩?redis缓存击穿?

:::success
**缓存穿透:**请求根本不存在的资源,恶意或频繁请求一个不存于缓存的数据,导致请求直接访问后端数据库,导致压力过大,从而卡死或宕机。
** 解决方法:**对空值进行缓存,对redis进行实时监控,使用布隆过滤器(用户访问的时候判断该资源是否存在,不存在则直接拒绝访问),使用接口校检(类似于用户权限的拦截)
** 缓存雪崩:**redis中大量的key集体过期,使大量缓存失效或过期同时发生,从而导致所有请求都去访问后端数据库DB,导致数据库CPU和内存负载过高,甚至宕机。
** 解决方法:**合理设置缓存的过期时间,通过分散缓存的过期时间,避免同时发生大量缓存失效。使用多级架构,设置缓存标记,使用锁或者队列的方式。
** 缓存击穿:**redis中的某个热点key过期,但是此时有大量的用户访问该过期key
**解决方法:**提前对热点数据进行设置,监控数据,适时调整,使用锁机制。
:::

Redis的集群模式有几种?有什么区别

:::success

  1. 主从复制模式:当从节点启动后会主动向主节点发送SYNC指令,主节点接收到SYNC指令后会调bgsave指令来创建一个子进程来对数据进行持久化操作,在此期间主节点收到的新指令都会缓存到内存中,当bgsave指令执行完后主节点会将持久化好的rdb文件发送给从节点,从节点将rdb中的数据存储到内存之后,缓存在主节点 内存中的指令也会发送给从节点。
  2. 哨兵模式:通过多个哨兵节点(进程)共同监控数据节点的运行状况。当某个节点发生故障时,哨兵机制可以自动完成Redis主从切换,从而实现系统的高可用性。但是,哨兵模式不支持数据分片。
  3. Cluster模式:这是Redis官方实现的分布式集群方案,通过分片来实现数据的分布式存储和高可用性。它能够自动进行数据的转移与重新平衡。Cluster模式相较于前两种方式更具有优势,如高可用性、数据分片和负载均衡等。
    :::
redis相比memcached有哪些优势

:::success
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
(2) redis可以持久化其数据
:::

redis常见性能问题和解决方案

:::success
(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件
(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次
(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内
(4) 尽量避免在压力很大的主库上增加从库
(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)…
这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。
redis集群的工作原理
主多从+哨兵模式
:::

Redis和Mysql区别?

:::success
mysql数据库是关系型数据库,使用表结构易于维护,支持事务处理能保证数据的完整性和一致性,支持sql语句,可以复杂查询,使用方便。但是因为表结构固定而不够灵活。一旦遇到海量数据读写性能效率将会大大折扣。
redis是非关系型数据库,存储格式灵活支持多种文件格式,比如key-values,文档形式,图片形式等,因为数据都是写在内存上的所以读写速度比较快但是同时也不太安全,一旦服务器出现故障数据就会丢失。值得一提的是Redis作为非关系型数据库它支持事务处理。
:::

redis-cluster集群有什么优点?

:::success
首先是高可用性Redis Cluster支持主从复制和故障转移,一旦某个主节点故障那么对应的从节点会自动切换成主节点,当出现故障的主节点修复之后将会切换为从节点。其次就是高性能 Redis cluster采用数据分片技术,将数据分散存储在集群中的所有节点来提高系统的性能。然后就是扩展性高,Redis cluster支持动态扩展,可以随时添加新的节点。最后就是管理方便,可以方便的进行对节点的删除、增加、数据迁移等操作。
:::

git&jenkins

git和svn的区别

:::success
Git:分布式,更安全,每一次克隆都是一次完整的备份,客户端服务端都可以充当服务端
Svn:集中式,备份的都是最新的代码,必有一个服务端
Git clone 传输所有的历史代码 git pull 传输本地仓库有改变的
:::

GitHub、Gitee、Gitlab有什么区别?

:::info

  • git 是一种版本控制系统,是一个命令,是一种工具。
  • github 是一个基于git实现在线代码托管的仓库,向互联网开放,企业版要收钱。
  • gitlab 类似 github,一般用于在企业内搭建git私服,要自己搭环境。
  • gitee 即码云,是 oschina 免费给企业用的,不用自己搭建环境。

GitHub、GitLab 不同点:
1、GitHub如果使用私有仓库,是需要付费的,GitLab可以在上面搭建私人的免费仓库。
2、GitLab让开发团队对他们的代码仓库拥有更多的控制,相对于GitHub,它有不少的特色:
(1)允许免费设置仓库权限
(2)允许用户选择分享一个project的部分代码
(3)允许用户设置project的获取权限,进一步提升安全性
(4)可以设置获取到团队整体的改进进度
(5)通过innersourcing让不在权限范围内的人访问不到该资源
:::

GitLab-Runner的CI/CD制作过程可以简单概述为以下几个步骤:

:::success

  1. 配置Runner:首先,你需要在GitLab上配置Runner。Runner是执行CI/CD作业的关键组件,它负责在指定的机器或容器上执行作业。你需要设置Runner的URL、token以及执行器等关键参数。
    :::
    :::success

  2. 定义.gitlab-ci.yml文件:在项目的根目录下创建或编辑.gitlab-ci.yml文件,这是GitLab CI/CD的配置文件。在这个文件中,你可以定义各种阶段(stage)、作业(job)以及它们之间的关系。每个作业都包含了一组指令,这些指令描述了Runner应如何执行特定的任务。
    :::
    :::success

  3. 提交代码并触发CI/CD:当你提交代码到GitLab仓库时,GitLab会根据.gitlab-ci.yml文件的配置自动触发CI/CD管道。这个管道会按照你在配置文件中定义的阶段和作业顺序执行。
    :::
    :::success

  4. Runner执行作业:Runner会按照配置,从GitLab拉取代码,并在指定的环境(如Docker容器或物理机)中执行作业。作业的执行结果会实时反馈到GitLab的界面中,你可以看到每个作业的执行状态、输出日志等信息。
    :::
    :::success

  5. 测试与部署:在CI/CD过程中,通常会包含自动化测试和部署的步骤。例如,你可以定义一个作业来运行单元测试或集成测试,确保代码的质量。另一个作业则可能负责将代码部署到生产环境。
    :::
    :::success

  6. 查看报告与结果:CI/CD执行完成后,你可以在GitLab的界面中查看详细的报告和结果。这包括每个作业的执行状态、测试结果、构建产物等信息。
    :::
    :::success
    通过以上步骤,GitLab-Runner可以帮助你实现自动化的代码测试、构建和部署,提高开发效率和质量。
    :::

版本回退

:::success
已经提交了不合适的修改到版本库时,想要撤销本次提交,使用版本回退,不过前提是没有推送到远程库。
image.png
:::

Jenkins的构建流程是什么?构建之前,都需要注意哪些细节配置

:::success
Jenkins是一种开源的持续集成工具,用于自动化各种构建、测试和部署任务。下面是Jenkins的构建流程以及构建前需要注意的细节配置:
Jenkins构建流程:

  1. 项目配置:在Jenkins中创建一个新的项目或任务,并根据需求配置相关的参数。这包括选择构建触发器(如定时构建、轮询SCM等)、配置源码管理(如Git、SVN等)、配置构建环境(如JDK版本、构建工具等)以及配置构建步骤(如编译、测试、打包等)。
  2. 构建触发:当满足构建触发条件时(如定时任务到达指定时间、代码仓库发生变化等),Jenkins将开始执行构建任务。
  3. 拉取代码:Jenkins根据配置的源码管理信息,从代码仓库中拉取最新的代码。
  4. 构建执行:Jenkins按照配置的构建步骤执行构建任务。这包括编译代码、运行测试用例、生成报告等。
  5. 构建后操作:在构建完成后,Jenkins可以执行一些后续操作,如部署应用到服务器、发送构建结果通知等。

构建前需要注意的细节配置:

  1. JDK配置:确保Jenkins服务器已经安装了正确的JDK版本,并在Jenkins的系统配置中设置了JDK的路径。
  2. 源码管理配置:根据项目需求选择合适的源码管理工具(如Git、SVN等),并配置好仓库地址、认证信息等。
  3. 构建工具配置:根据项目需求选择合适的构建工具(如Maven、Gradle等),并配置好相关参数和路径。
  4. 构建触发器配置:根据需求选择合适的构建触发器,如定时构建、轮询SCM等。如果选择轮询SCM,需要配置好轮询的间隔时间和SCM的相关信息。
  5. 构建步骤配置:根据项目需求配置好构建步骤,如编译、测试、打包等。确保每个步骤都正确配置,并且依赖的插件已经安装。
  6. 构建后操作配置:根据需求配置好构建后的操作,如部署应用到服务器、发送构建结果通知等。确保相关的服务器信息和通知方式已经正确配置。
  7. 插件安装:根据项目需求安装必要的Jenkins插件,以支持特定的构建任务或功能。

以上是Jenkins的构建流程以及构建前需要注意的细节配置。在实际使用中,还需要根据具体项目需求进行调整和优化。
:::

jenkins是用来做什么的

:::success
Jenkins是一个开**源的持续集成(CI)和持续交付(CD)工具,主要用于自动化构建、测试和部署软件项目。**以下是Jenkins的主要功能和用途:

  1. 自动化构建:Jenkins可以根据代码仓库的变化自动触发构建过程,包括编译、打包、生成构建报告等,从而节省开发人员的时间和精力。
  2. 自动化测试:Jenkins可以自动运行各种测试工具和测试框架,如JUnit、Selenium等,以确保代码的质量和稳定性。
  3. 自动化部署:Jenkins可以自动化部署软件到各个环境,如开发环境、测试环境和生产环境等。Jenkins可以根据不同的条件自动触发部署过程,如测试通过、发布计划等。
  4. 持续集成:Jenkins可以将不同的开发分支自动合并,并进行编译、测试和部署等流程,以确保代码的集成和交付的质量和稳定性。
  5. 持续交付:Jenkins可以实现自动化的持续交付,从代码的编写到部署的全过程实现自动化,实现快速的软件交付。
  6. 插件扩展:Jenkins拥有丰富的插件生态系统,可以扩展其功能和集成其他工具,以满足不同项目的需求。

总之,Jenkins通过自动化和持续集成的方式,可以提高开发团队的协作效率,减少手动操作和人为错误,实现快速、高效的软件交付。
:::

jenkins的工作流程

:::success
从git仓库拉取代码(需要git插件,jenkins服务器下载git,并将jenkins的公钥配置到代码仓库的ssh密钥,jenkinsweb界面配置自己的私钥),通过maven编译打包(可以达成war包或jar包,需要jdk和maven的环境和插件),将打包好的包发送到web服务器的网站发布目录(需要将jenkins的公钥发送到web服务器对应的用户家目录)
:::

jenkins功能强大到哪里

:::success
jenkins可以进行参数化构建,版本回退(可以基于修订号以及标签、分支进行版本回退或构建)。也可以实现自动发布,定时发布,需要在jenkins和gitlab仓库配置gitlab webhook插件。
:::

maven是来干嘛的,编译打包的时候可以加什么参数

:::success
我们一般编译打包的,用clean、package,但是还有其他参数,这个没有太去查过,不过应该不难,可以打成war包,发布到tomcat的默认发布目录中,或者打成jar包,直接使用命令 java -jar jar包名称 运行,一般微服务会打成jar包
:::

参数化构建有什么作用?如何设置

:::success
一种是标签的形式,一种是提交的形式
做之前需要先在jenkins机器上装一个插件 Git Parameter 这个插件,
然后再配置页面选择添加参数
自己给参数起个名字,最好见名知义,然后提交的把指定分支内的内容改成参数,需要用${}包裹着,最好还是选择倒序排列方式
:::

Jenkins怎么结合ansible使用

:::success

:::

Jenkins参数化构建有什么作业?怎么做?

:::success

:::

Jenkins构建一次项目所需的时间取决于多个因素,包括项目的规模、复杂性、硬件性能、构建配置和并行构建等。因此,无法给出具体的构建时间。

:::success
一般来说,对于一个较小的项目,构建时间可能在几秒钟到几分钟之间;而对于一个较大的项目,构建时间可能会更长,可能需要十几分钟到几个小时不等。
为了加快构建速度,可以考虑以下方法:

  1. 优化构建配置:检查并优化Jenkins的构建配置,例如并行构建、使用适当的构建工具和插件等。
  2. 增加硬件资源:通过增加CPU、内存或磁盘容量等硬件资源,可以提高构建度。
  3. 分布式构建:使用分布式构建可以将构建任务分布在多个节点上,从而提高构建速度。
  4. 缓存依赖项:将依赖项缓存起来,避免每次构建时重新下载或构建。

综上所述,Jenkins构建一次项目的时间取决于多个因素,但通过优化配置、增加硬件资源和采用分布式构建等方法,可以加快构建速度。
:::

一般jenkins上跑多少个项目

:::success
Jenkins可以同时运行多个项目,具体数量取决于硬件资源、项目复杂度、并行构建策略等因素。一般来说,Jenkins上可以同时运行数十个甚至上百个项目,但具体数量应根据实际情况而定。
为了合理地管理项目数量业务领域、技术领域或其他维度进行划分,避免项目之间的冲突和资源浪费。

  1. 分布式构建:将项目分散到多个节点上进行构建,提高构建效率和资源利用率。
  2. 优化构建配置:通过优化构建配置,提高构建效率,减少构建时间。#腾讯会议:756-723-333#腾讯会议:756-723-333#腾讯会议:756-723-333#腾讯会议:756-723-333#腾讯会议:756-723-333
  3. 监控和预警:对Jenkins的资源使用情况进行实时监控,发现资源瓶颈和问题及时处理。

综上所述,Jenkins上可以同时运行多个项目,但应合理管理项目数量,确保资源的有效利用和项目的顺利进行。
:::

ZABBIX

Zabbix监控的优缺点有哪些如何弥补缺点

:::success
优点:开源、无软件成本、server端对设备性能要求低、支持的设备多,自带多种监控模板、能实现自动化监控、开放式接口,扩展性强。
缺点:需在被监控主机上安装agent, 所有数据都存在数据库里,产生的数据量很大,瓶颈主要在数据库。UI图形展示(grafana)

  1. 减少不必要的监控项:审查Zabbix监控项的配置,删除或者禁用不必要的监控项,以减少对数据库的查询负担。
  2. 定期备份和清理历史数据:定期备份和清理Zabbix数据库中的历史数据,确保数据库的大小和性能得到有效的管理和维护。
  3. 使用Zabbix代理:使用Zabbix代理来收集数据,减少直接对数据库的查询次数。代理可以在被监控的主机上运行,定期收集数据并发送给Zabbix服务器,减轻了对数据库的直接访问。
    :::
Zabbix监控模式有几种?什么区别?

:::success

:::

zabbix怎么实现监控的?

:::success
1.创建主机群组
2.创建主机加入主机组
3.添加模板
4.模板关联主机
5.创建监控项
6.创建触发器
7.配置告警动作
8.创建图形
:::

zabbix的监控模式?

:::success
**被动模式:**server端向agent端请求获取监控项配置的相关数据,agent端响应,并将数据发送给server端 ,监控对象上报故障
**优点:**占用网络资源少,占用存储资源少
**缺点:**及时性差
**主动模式:**agent端主动向server请求与自己相关监控配置,主动将server配置的监控项的相关数据发送给server端 ,定时查看业务状态
优点:及时性好
**缺点:**占用资源=-098
:::

zabbix监控过什么

:::success
zabbix监控redis集群的状态监控mysql主从的状态,mysql查询吞吐量(show global status like “questions”;)、连接情况( show status like ‘%connect%’;)、缓冲池情况(show variables like ‘innodb_buffer_pool%’)
nginx的状态,cpu利用率,cpu负载、磁盘使用情况
:::

常用命令

:::success
zabbix_get -s 192.168.153.178 -k system.cpu.load[all,avg5] -p 10050 点对点命令 分布式

rpm -qa | grep “zabbix” 查看版本
:::

什么是Zabbix?它的作用是什么?

:::success
Zabbix是一款开源的网络监控和管理系统,用于实时监测各种网络参数、服务器状态和网络服务。它可以帮助管理员及时发现并解决网络和服务器方面的问题,提高系统的稳定性和可靠性。
:::

讲讲你对监控的理解,监控的目的是什么

:::success
保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
:::

你们公司有多少台被监控的机器?每天产生多少监控数据

:::success

:::

你们监控多少台机器?每台机器多少监控项?每天产生多少监控数据

:::success

:::

zabbix自定义监控怎么做

:::success
先创建监控脚本,测试一下能否获取到我们想获取的值,然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件,在文件中写入UserParameter=,,key就是自定义监控项的名字,command是要执行的命令或者你创建的脚本的执行路径
:::

zabbix的自动发现功能

:::success
创建发现规则,扫描一个规则范围内的ip,然后创建发现主机后的action动作,我们一般都有创建好的模板,模板关联某个主机群组(有监控项、触发器、动作),发现主机后,将它添加到主机群组,实现自动化监控
:::

zabbix分布式监控有什么特点

:::success
主要缓解server监控端的压力,当agent过多时,server需要跟多个agent进行交互,数据过多时,server承受不住那么大的压力。所以可以在server和agent之间增加proxy,proxy代替server搜集数据,然后将数据统一发送给server。
轻量级:
1.占用资源少(内存、CPU)
2.大小 小
3.对基础环境几乎没有依赖性
:::

zabbix遇到过什么问题

:::success
**问题1:**主机有30多个图形,但是查看时只显示了20个图形。
**原因:**是因为zabbix的php默认值为20。
**解决:**修改zabbix前端默认配置文件 defines.inc.php中的 ZBX_MAX_GRAPHS_P ER_PAGE变量值,重启服务即可。

**问题2: **内存溢出导致zabbix_server服务关闭?
**解决:**修改/etc/zabbix/zabbix_server.conf配置文件里添加CacheSize=1024M ,重启服务

**问题3:**Zabbix给新机器添加监控,按正常操作完成后,发现主机那一栏最后的灯不亮
**解决:**检查防火墙和SELinux是否关闭,查zabbix_server日志,查zabbox是否启动,来回检查了好几遍,没发现问题,删除后重新加了两遍,还是灯不亮,后来在网上找相关的解决方法,试了发现不是自己遇到的问题,等过了一段时间发现灯正常亮了。
:::

zabbix agent端能够执行脚本,但是zabbix server端zabbix get获取不到数据,响应超时,为什么

:::success
可能是防火墙没有开放,可以看一下日志,如果没有报错的话说明请求根本就没有发送过去,可以看一下agent端的配置文件有没有问题,如果有错误日志可以看一下是拒绝访问还是那些问题。
:::

Zabbix是怎么开启微信报警的?

:::success
首先,需要有一个微信企业号。(一个实名认证的[微信号]一个可以使用的[手机号]一个可以登录的[邮箱号]
下载并配置微信公众平台私有接口。
配置Zabbix告警,(增加示警媒介类型,添加用户报警媒介,添加报警动作)。
:::

Zabbix监控了多少客户端,客户端是怎么进行批量安装的?根据实际公司台数回答。

:::success

  1. 使用命令生成密钥。
    2. 将公钥发送到所有安装zabbix客户端的主机。
    3. 安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。
    4. 创建一个安装zabbix客户端的脚本。
    5. 执行该脚本。
    6. 验证。
    :::
zabbix报警媒介分为几种类型?

:::success
E-mail 邮件和企业微信和短信报警类型
企业微信:流程
1. 准备企业微信
应用:报警机器人
AgentID 1000021
Secret Fir-nxf0G2_TwO8woWXOWOPFWkaeECh3AfnfIJwubgk
企业 CorpID wwd5348195e1cdd809
部门id 1
2. api调试工具
3. Python报警监控脚本
4. 监控脚本测试:
5. zabbix 创建告警媒介,设置报警消息模板和恢复消息模板
6. zabbix 添加告警用户,创建用户组,用户群组,用户,报警媒介写上企业微信成员名
7. Zabbix 添加报警动作
8. 微信测试报警 如果测试 http服务停stop停掉
:::

你们都监控Redis的什么指标?怎么做的?

:::success
Redis响应一个请求的时间
2. 平均每秒处理请求总数
3. 已使用内存
4.客户端连接数
怎么做:
先创建监控脚本,测试一下能否获取到我们想获取的值,AWK和cat都可以截取 内 容
然后在zabbix_agentd.conf.d目录下创建以.conf结尾的文件
在文件中写入UserParameter=,,
key就是自定义监控项的名字
command是要执行的命令或者你创建的脚本的执行路径
在zabbix页面端设置自定义监控项
zabbix后台用
zabbix_get -s ip key 测试获取值是否正确。
:::

iptables

Iptables和Firewalld有什么区别?

:::success
iptables和firewalld在Linux防火墙配置和管理方面存在一些重要的区别。以下是两者之间的主要差异:

  1. 动态与静态规则管理
    • iptables:iptables使用静态规则集,这意味着一旦规则被配置,它们将保持不变,直到被手动更改或整个规则集被刷新。
    • firewalld:firewalld则使用动态规则集,允许管理员动态地添加、删除或修改规则,而不会影响现有的会话和连接。
  2. 规则更新方式
    • iptables:在iptables中,一旦规则被修改,需要全部刷新才能生效。
    • firewalld:firewalld则允许在不中断现有连接的情况下更新规则。
  3. 规则结构
    • iptables:iptables基于链式规则,规则按照特定的顺序进行匹配和执行。
    • firewalld:firewalld使用区域和服务的概念,使得规则管理更为直观和简单。
  4. 默认策略
    • iptables:iptables的默认策略是允许,即除非明确拒绝,否则流量都被允许通过。
    • firewalld:firewalld的默认策略是拒绝,这意味着除非明确设置允许,否则流量将被阻止。
  5. 实现方式
    • iptables:iptables是Linux内核中的一个模块,它直接与内核的netfilter交互来实现防火墙功能。
    • firewalld:firewalld是一个用户空间的守护进程,它也依赖于内核的netfilter来实现防火墙功能,但提供了更为友好的界面和更高级的功能。
  6. 易用性
    • iptables:iptables的配置相对复杂,需要一定的技术背景和经验。
    • firewalld:firewalld提供了更为直观和易于使用的界面,使得非专业用户也能轻松配置和管理防火墙规则。

总结来说,iptables和firewalld在规则管理、更新方式、规则结构、默认策略、实现方式和易用性等方面存在显著差异。iptables提供了更为底层的控制,但需要更多的技术背景和经验;而firewalld则提供了更为直观和易于使用的界面,使得防火墙管理变得更加简单和方便。
:::

iptbales的四表五链

:::success
四表 必须是小写
raw ------------追踪数据包, ----此表用处较少,可以忽略不计。
mangle ------------给数据包打标记,做标记。
nat ------------网络地址转换即来源与目的的IP地址和port的转换。
filter ------------做过滤的,防火墙里面用的最多的表。
#表的应用顺序:raw-》mangle-》nat-》filter
五链:(必须是大写)链里面写的是规则。
PREROUTING -----------------进路由之前数据包
INPUT -----------------就是过滤进来的数据包(输入)
FORWARD -----------------转发
OUTPUT -----------------发出去的数据包
POSTROUTING -----------------路由之后数据包
#所有的访问都是按顺序:
入站:比如访问自身的web服务流量。先PREROUTING(是否改地址),再INPUT(是否允许)到达程序。
转发:经过linux网关的流量.先PREROUTING(是否改地址),然后路由。转发给FORWARD(转发或者丢弃),最后经过POSTROUTING(看看改不改地址。)
出站:源自linux自身的流量.先OUTPUT,再给POSTROUTING(是否改IP)。
#规则顺序:逐条匹配,匹配即停止。
image.png
:::

ELK由ElasticSearch(简称ES)、Logstash和Kibana三个开源工具组成:

:::success
elk组件
(1)Elasticsearch:负责日志搜索和存储
●ES功能:搜集、分析、存储数据三大功能
●特点:分布式;零配置;自动发现;索引自动切片;索引副本机制

(2)Logstash:负责日志的收集、分析、和处理
(3)kibana:负责日志的可视化
配置他的ip嘛
(4)过程:
logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面

通过 Logstash 将抓取 到的数据发 ElasticSearch 集群,然后进⾏后续的数据分析活动,最后⽤ Kibana 展示结果。⽅便观察获取想要的服务的⽇志信息;
:::

遇到问题及解决方案: Logstash 无法启动,提示 bind address;
解决方法:logstash 会加载所有 conf 格式的文件,删除不必要的文件,保留一个conf文件即可注意:在Logstash配置文件里设置索引要带有时间后缀,以便删除防止日志量大,磁盘紧张;

3、Kibana

:::success
Kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮你汇总、分析和搜索重要数据日志。c/s
:::

Grafana

:::success
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
是一个开源的数据可视化工具,用于监控和分析大规模的指标数据。它可以将各种数据源(如Prometheus、Elasticsearch、InfluxDB等)中的数据进行可视化展示,帮助用户更直观地理解数据、监控系统性能和分析趋势。Grafana提供了丰富的图表类型和灵活的配置选项,使用户可以根据自己的需求定制展示方式,同时支持报警功能,能够及时通知用户系统出现异常情况。Grafana已经成为许多公司和组织在数据监控和分析领域的首选工具之一。
:::

kibana和grafana

:::success
Kibana更适合用于日志数据的分析和搜索,而Grafana更适合用于时间序列数据的实时监控和可视化。
是两种流行的开源数据可视化工具,用于实时监控和分析数据。它们有以下一些区别:

  1. Kibana主要用于Elasticsearch数据的可视化和分析,而Grafana可以连接多种不同的数据源,包括Elasticsearch、InfluxDB、Prometheus等。
  2. Kibana更专注于日志和指标数据的可视化,而Grafana更适用于时间序列数据的可视化。
  3. Kibana提供了更丰富的搜索和过滤功能,适用于处理大量的日志数据。Grafana则更强调实时监控和仪表盘的展示。
  4. Kibana提供了更多的数据分析和探索功能,例如聚合、分组、排序等。Grafana则更注重数据的可视化和展示。
    :::

elk工作流程

:::success
logstash安装在需要搜集日志的主机上,负责搜集日志,并发送给es集群(配置文件中input配置日志搜集的位置,filter过滤作用,output配置输出es集群的ip地址),es集群负责存储日志数据,kibana提供可视化日志分析界面
elasticsearch提供搜集、分析、存储数据三大功能。他的特点有:分布式、零配置、自动发现、索引自动切片,索引副本机制
:::

logstash有哪些组件

没了,后期再联系
可以,我这边也喜欢主动去学习新的技术。

:::success
input、filter、output
logstash主要是用来进行日志的搜集、过滤、分析的工具,支持大量的数据获取方式,一般工作方式为C/S。client端安装在需要搜集日志的主机上,server端负责将受到的各节点日志进行过滤,修改并发送到elasticsearch上。
:::

logstash的过滤功能用过吗,过滤的是什么

:::success
logstash过滤功能用过,实用filter模块过滤日志或者数据,但是我们用的是filebeat实现过滤功能的,直接在采集的时候过滤不需要的内容,incloud_lines指定记录包含某些内容的行。exclude_lines指定过滤包含某些内容的行。TIPS:与multiline联合使用的时候,会针对合并后的记录再过滤。
:::

es集群是怎么保证数据的高可用的*

:::success
ES集群通过数据复制(不会存在同一台机器上,另外两台也会存储)和分片机制(所有信息分成片 小绿框),将数据分散存储在多个节点上,即使某个节点故障,数据仍可从其他节点获取,同时提供自动故障转移和健康监控功能,确保数据高可用性。
:::

搜集过什么数据,怎么过滤的

:::success
数据没有搜集过,只搜集过日志信息,用来给开发优化代码。比如nginx的访问日志,其他服务的错误日志,主要搜集error和warn信息。通过filebeat的处理器进行过滤。
:::

Dockerdf -idf -idf -i

Docker的网络有几种,有什么区别?

:::success

  1. 网络桥接 bridge:默认模式。每个容器都会连接到一个Linux网桥,并被分配一个可路由的IPv4地址。
  2. 主机网络 host:容器共享宿主机的网络。
  3. 无指定网络 none:容器关闭网络。
  4. container:将多个容器连接到同一个网络段,彼此可以直接通信。
  5. overlay:覆盖网络,多主机的容器互联。

主要区别如下:

  1. bridge:相对隔离,通过端口映射访问,可配置 docker0 桥接器。
  2. host:不隔离,直接使用宿主机网络。
  3. none:完全隔离,关闭网络。
  4. container:连接指定容器,与连接容器在同一网段。
  5. overlay:跨主机容器互联,实现容器的高可用与伸缩。

举例:

  1. bridge:
    默认模式,使用 docker run -p 8080:80 nginx 映射端口访问。
  2. host:
    使用 docker run –network host nginx 直接使用宿主机 80 端口。
  3. none:
    使用 docker run –network none nginx 关闭容器网络。
  4. container:
    先运行一个容器 docker run -d –name nginx nginx
    再运行一个容器连接到它 docker run -d –network container:nginx ubuntu

理解各种网络模式的区别和用途,可以让我们为 Docker 容器选择恰当的网络设置。比如:

  1. 需要完全隔离时可以使用 none 网络。
  2. 多个容器需要互通时可以使用 container 网络。

image.png
:::

你都写过什么Dockerfile,详细的说一下?

:::success
**定制化基础镜像
制作mysql镜像:**容器数据持久化****制作redis镜像: **容器数据持久化
:::

docker常用的命令举例说说

:::success

docker ps

docker ps命令用于列出当前正在运行的Docker容器

docker pull

docker pull命令用于从Docker Registry或Docker Hub中拉取镜像。

docker images

docker images命令用于列出本地主机上的Docker镜像列表。

docker run

docker run命令用于在Docker容器中运行一个新的应用程序或服务。

image.png

docker info

docker info命令用于显示有关Docker守护程序的系统信息,包括Docker版本、操作系统类型和版本、CPU和内存使用情况、镜像和容器数量等。

docker logs

docker logs命令用于查看Docker容器的日志。它可以显示容器的标准输出和标准错误输出。
image.png

docker rm

docker rm 命令用于删除已经停止的容器。

docker rmi

docker rmi命令用于删除本地的一个或多个镜像。

docker exec

docker exec命令用于在正在运行的Docker容器中执行命令。
cp

docker stats

docker stats命令用于查看Docker容器的实时资源使用情况,包括CPU、内存、网络和磁盘等方面的数据,可以帮助用户监控和优化容器的性能。

docker save

docker save命令用于将Docker镜像保存成tar包文件。

docker load

docker load命令用于将本地文件系统中的Docker镜像加载到Docker引擎中。这些镜像可以是通过docker save命令保存的.tar文件,也可以是通过其他方式获得的Docker镜像文件。

docker import

docker import命令用于将本地文件或者目录打包成镜像,可以用于创建一个新的镜像或者将现有的镜像导入到Docker Registry。

docker inspect

docker inspect命令用于查看Docker对象的详细信息,包括容器、镜像、网络、卷和服务等。

docker cp

docker cp命令用于将容器内的文件或目录复制到主机或从主机复制到容器内。
image.png
:::

docker logs	 --since 2021-01-01 mycontainer

Docker的优势有哪些?

:::success
Docker是一种容器化技术,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,并在不同的环境中进行部署和运行。Docker的优势包括:

  1. 标准化和一致性:Docker使用标准化的镜像文件格式来打包应用程序及其依赖项,这确保了在不同环境中部署的应用程序具有一致性和可预测性。
  2. 轻量级和高效:Docker容器比虚拟机更轻量级,因为它们共享主机操作系统的内核。这使得Docker容器在启动和停止时更快,并且占用的资源更少。
  3. 可移植性和灵活性:Docker容器可以在不同的操作系统和平台上运行,这使得它们非常适合在开发、测试和生产环境之间进行迁移。此外,Docker还提供了强大的编排工具,如Docker Swarm和Kubernetes,可以轻松地管理和扩展容器化应用程序。
  4. 隔离性:Docker容器提供了应用程序之间的隔离,这意味着一个容器中的应用程序不会干扰另一个容器中的应用程序。这有助于确保应用程序的稳定性和安全性。
  5. 版本控制和协作:Docker镜像可以被版本控制,这使得开发人员可以轻松地跟踪和管理应用程序的更改。此外,Docker还提供了协作工具,如Docker Hub,使开发人员可以共享和重用镜像。
  6. 简化部署和运维:Docker提供了一种简单的方法来部署和更新应用程序,而无需担心底层基础设施的配置和管理。此外,Docker还提供了丰富的工具和插件,可以轻松地监控和管理容器化应用程序。

总之,Docker的优势在于它提供了一种高效、可移植、隔离和易于管理的容器化技术,使得开发人员能够更轻松地构建、部署和运行应用程序。
:::

Dockerfile中的ADD和COPY指令有什么区别?

:::success
image.png
:::

Dockerfile中的CMD和ENTRYPOINT指令有什么区别?

:::success
image.png
:::

kubernetes

k8s的组件有哪些?有什么作用?

:::success
**master:**kube-apiserver:**Kubernetes的API服务器,负责接受和处理来自其他组件和用户的API请求,并将它们转化为Kubernetes内部操作。
**kube-controller-manager(肯戳类迈内街儿):**Kubernetes的控制器管理器,负责监控Kubernetes集群中各种资源的状态,并进行自动化的故障检测、故障恢复、自动伸缩等操作。
**kube-scheduler(思改就了):**Kubernetes的调度器,负责为新的Pod分配合适的Node,并将Pod绑定到相应的Node上。
node:
**kubelet(库伯来特):**Kubernetes的节点代理,负责管理节点上的Pod,并与其他组件协调完成Pod的创建、启动、监控和销毁等操作。
**kube-proxy:**Kubernetes的代理,负责为Service提供负载均衡和服务发现功能,并将外部网络请求路由到相应的Pod上。
**etcd:**Kubernetes的数据存储,负责存储Kubernetes集群中的所有状态数据,包括集群配置、资源对象的状态和所有Pod的运行状态等。
**coredns:**Kubernetes的DNS解析服务,为Pod提供DNS解析服务,并支持Kubernetes服务发现功能。
**ingress-controller(一隔瑞士肯戳了):**Kubernetes的入口控制器,用于管理和路由外部网络流量到集群内的服务。

Master节点
Master节点负责集群的管理,相关联的组件有ETCD数据库、Controller Manager、Scheduler、kube-apiserver。Master节点协调集群的各个活动,例如资源调度、动态伸缩、维护应用状态以及滚动更新等。

  1. ETCD数据库
    etcd数据是一个高可用的分布式键值数据库,可用于服务发现。etcd采用raft一致性算法,基于GO语言实现。由于raft算法采用多数投票机制,所以建议采用奇数个数节点。
  2. ** kube-apiserver**
    k8s对外唯一的接口,提供http/https RESTfull API,即kubernetes API。所有的请求都通过这个接口进行通信。包括认证授权、数据校验以及集群状态更新。通过apiserver将集群状态信息持久化到ETCD中。默认端口为6443
  3. Controller Manager
    Controller Manager作为集群内部的管理控制中心,负责集群的Node,Pod副本,endpoint,namespace等的管理,当集群中的某个Node宕机,Controller Manager会及时发现此故障并快速修复,将集群恢复成预期的工作状态。
    Controller Manager包括Replication Controller,Node Controller,Namespace Controller,ServiceAccount Controller,Token Controller,Service Controller,endpoint Controller,ResourceQuata Controller
  4. Scheduler
    Scheduler的核心功能是监听apiserver来获取podSpec.NodeName为空的pod,然后为这个pod创建一个binding,指示这个pod创建在哪个节点上。然后把调度结果写到apiserver持久化到ETCD中。
    调度过程:

首先过滤掉不满足条件的节点,这个过程成为预选(predicate)
PodFitsResources:节点上剩余的资源是否大于 pod 请求的资源
PodFitsHost:如果 pod 指定了 NodeName,检查节点名称是否和 NodeName 匹配
PodFitsHostPorts:节点上已经使用的 port 是否和 pod 申请的 port 冲突
PodSelectorMatches:过滤掉和 pod 指定的 label 不匹配的节点
NoDiskConflict:已经 mount 的 volume 和 pod 指定的 volume 不冲突,除非它们都是只读
然后把节点按照优先级进行排序,这个过程叫优选(priority)
LeastRequestedPriority:通过计算 CPU 和 Memory 的使用率来决定权重,使用率越低权重越高。换句话说,这个优先级指标倾向于资源使用比例更低的节点
BalancedResourceAllocation:节点上 CPU 和 Memory 使用率越接近,权重越高。这个应该和上面的一起使用,不应该单独使用
ImageLocalityPriority:倾向于已经有要使用镜像的节点,镜像总大小值越大,权重越高
关于调度的亲和性(nodeAffinity)、反亲和性、污点(Taint)、容忍(Toleration)
调度亲和性等特性
Node节点
Node主要为应用程序提供运行环境,并接受Master管理,并按照Master要求进行对容器进行管理。主要组件包括kubelet、kube-proxy、CNI网络插件等。

  1. ** kubelet**
    kubelet是node节点的agent,当Scheduler确定pod运行在某个节点上时,会将pod的具体配置信息(image,network,volume等)发送给节点的kubelet,kubelet会根据配置信息进行创建容器,并将容器运行结果报告给Master。另外,kubelet还会周期性的向Master报告pod以及node节点的运行状态。
  2. kube-proxy
    kube-proxy是k8s工作节点上的一个网络代理组件,它的作用是将发往service的流量负载均衡到正确的后端pod。kube-proxy监听API server中的service和endpoint的变化,并通过iptables或者IPVS创建不同的路由规则,以实现上述目的。

iptables模式,kube-proxy默认模式,当前模式下,kube-proxy监听service和endpoint的变化,当service创建时,kube-proxy在iptables中追加新的规则,对于service中的每一个endpoint,会在iptables中追加一条DNAT规则,将目的地址设置为真正提供服务的pod地址;再为service追加规则,设定动作为跳转到对应的endpoint规则上
ipvs模式,ipvs在INPUT阶段也是基于netfilter的hook功能,与iptables类似。但是转发规则是通过工作在内核空间下的hash表作为存储的数据结构。在这种模式下,只需要通过ipset来验证具体的请求是否满足某条规则。当service变化时,只需要更新ipset记录,不需要改变iptables规则链,因此可以保证iptables中的规则不会根据service的创建越来越多。同时,ipvs的性能也高于iptables,因为当service变化时,ipvs只需要对特定的hash表进行更新,而iptables则需要更新整个规则表。

  1. CNI网络插件
    CNI是k8s用于实现pod间相互通信的标准接口。常用的网络插件有flannel和calico
    kubernetes配置CNI网络插件后,其容器网络创建流程为:

kubernetes先创建pause容器生成对应的netns
CNI driver根据配置调用具体的网络插件(flannel或者calico)
CNI插件给pause容器配置具体的网络,pod中的其他容器都使用pause网络
当容器删除是,回收网络资源

  1. flannel
    flannel一般以daemonset方式运行,主要负责编织跨节点pod通信,启动后会完成以下几件事情:

创建容器挂载的cni配置文件;
从api-server中获取本节点的pod-cidr,生成配置文件subnet.env;
如果是vxlan模式,则创建一个名为flannel.1的vxlan设备,把这个设备的IP地址和MAC地址以及本节点的IP地址记录到节点的注解中;
启动一个协程,不断检查本地主机的路由信息,如果检查到缺失,则重新创建;
从api-server订阅资源变化的事件,维护路由表,邻居表以及fdb表。
当集群中新增一个节点时,CNI的初始化流程如下:
6. 新增一条到新增节点pod网段的路由,并指定从flannel.1设备走,下一跳为新增节点的vxlan设备的IP;
7. 新增一条邻居表项,指定新增节点的vxlan设备的MAC地址信息;
8. 新增一条fdb表项,指定到新增节点vxlan设备的MAC的下一跳为新增节点的主机IP

  1. Calico
    Calico是一个由BGP协议组成的纯三层网络。通过BGP协议实现网络互通,通过iptables实现访问控制。
    Calico网络中,每个node节点都是一个虚拟路由器,运行着一个软件bird,把node设置成为一个BGP speaker,与其他node节点进行路由通告,实现内部网络互通。当集群网络过于庞大时,可以通过BGP router reflector与所有node节点进行路由通告,而node节点只需要与router reflector进行同步路由即可。

calico工作组件
felix:运行在每个node节点上的agent,主要负责网络接口的管理、监听,路由,ARP管理、ACL管理和同步,状态上报等;
BIRD:用于监听Felix注入的路由信息,通过BGP协议广播给其他node节点上的BIRD,使路由保持同步
etcd:分布式键值数据库,主要用于网络信息的存储,保持与集群网络一致
router reflector(RR):在大型网络中,仅仅使用BGP Client形成mesh网络会受到规模限制,所以RR与集群中所有的node节点的BGP Client互通,进行路由通告,然后各个节点只需要从RR中获取路由即可,形成星型网络,极大的提高了路由同步效率。
calico的两种网络模式
IPIP
IPIP模式是将一个IP层封装进IP层的一个tunnel,pod网络通过与目标pod网络的主机IP形成一个点对点的tunnel。
BGP
BGP模式通过维护集群网络的IP路由信息来保障路由可达性,没有隧道等其他封装开销,完全由主机维护各节点的路由表进行通信。
037a826f1acdc5558481ae06a90e197.png
:::

k8s和Docker-compose有什么区别?

:::success
Docker-compose是一个基于Docker的单主机容器编排工具,它只能在一台机器上启动和管理容器。而Kubernetes则是一个跨主机的集群部署工具,它可以管理多个节点,并自动进行资源的分配和负载均衡。
:::
image.png
image.png
image.png
image.png

1.k8s的node亲和性有什么特点?

:::success
答:Node亲和性,**指的是pod和node节点之间的亲和性,**也就是控制pod调度到node的策略。
可以给node节点打标签,在创建pod的yaml文件中,去设置条件,匹配node节点的标签;
里面有硬限制、软限制
硬限制是匹配到pod才能正常分配到node节点,匹配不到pod运行失败
软限制是尽量满足匹配规则,如果不满足,也会将pod调度到资源充分的node节点
:::
可以自己跟面试官举个例子

2.k8s的pod亲和性有什么特点?

:::success
答:pod亲和性性,是pod与pod之间的调度策略;我们一般还是通过匹配标签来设置策略
首先有一个正在运行的pod,上面已有标签;
那么运行新的pod的时候,这个pod会去设置亲和性策略;
有硬限制,软限制
硬限制是必须满足策略,pod才能正常调度;
软件只是尽量满足策略,如果不满足,pod也会正常调度
:::

探针的三种存活模式

:::success

  1. 活跃 存活 liveness
    livenessProbe:指示容器是否正在运行。如果存活态探测失败,则 kubelet 会杀死容器, 并且容器将根据其重启策略决定未来。如果容器不提供存活探针, 则默认状态为 Success。
    重启策略包括
  • Always(默认):始终重启容器,无限次数地尝试恢复应用程序的健康状态。
  • OnFailure:仅在容器失败(退出状态码非零)时重启容器,尝试恢复应用程序的健康状态。
  • Never:永不重启容器,不会尝试恢复应用程序的健康状态。
  1. 就绪 Readiness
    readinessProbe:指示容器是否准备好为请求提供服务。如果就绪态探测失败, 端点控制器将从与 Pod 匹配的所有服务的端点列表中删除该 Pod 的 IP 地址。 初始延迟之前的就绪态的状态值默认为 Failure。 如果容器不提供就绪态探针,则默认状态为 Success。
  2. 启动 startup
    startupProbe: 指示容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被 禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器依其 重启策略进行重启。 如果容器没有提供启动探测,则默认状态为 Success。
    :::
    探针定义方式
    :::success
    **执行命令(Exec):**通过在容器内执行特定的命令来检查应用程序的状态。如果命令的返回状态码是 0,探针被认为是成功的;否则,探针被认为是失败的。
    **发送 HTTP 请求(HTTP GET):**通过发送 HTTP GET 请求到容器内的指定端点来检查应用程序的状态。如果返回的 HTTP 状态码在 2xx 或 3xx 范围内,探针被认为是成功的;否则,探针被认为是失败的。
    **TCP 套接字(TCP Socket):**通过尝试建立到容器内指定端口的 TCP 连接来检查应用程序的状态。如果连接成功建立,探针被认为是成功的;否则,探针被认为是失败的。
    :::
k8s的pod反亲和性?

:::success
答:与pod亲和性相反,匹配到则不调度到该节点;
也有硬限制、软限制
硬限制是必须满足策略,pod则会调度到其他node上;
软限制是尽量满足策略,如果不满足,pod也会正常调度,但是首先会调度到其他没有限制的node节点
:::

污点是什么?

:::success
污点是设置到node的属性
污点类型有3种;
Noschedule:pod不会调度到本节点,对原来的pod无影响
PreferNoschedule:pod尽量不调度到本节点,如果没有其他节点,也会接受调度
NoExecute:pod不会调度到本节点,还会驱逐原有的pod
:::

容忍是什么?

:::success
容忍一般是结合污点使用;容忍是设置到pod上
pod若想调度到存在污点的node节点上,就需要给pod设置对应的污点容忍;
比如K8s-master节点自带污点,正常情况下,pod不会调度到master节点;
但是可以设置pod的容忍,让pod调度到k8s-master节点。
:::

Secret介绍

:::success
k8s secrets用于存储和管理一些敏感数据,比如密码,token,密钥等敏感信息。它把 Pod 想要访问的加密数据存放到 Etcd 中。然后用户就可以通过在 Pod 的容器里挂载 Volume 的方式或者环境变量的方式访问到这些 Secret 里保存的信息了,从名字上看,我们应该也能想到,有一些不太方便向外人展示的信息加密是secret的主要功能。
:::

configMap介绍

:::success
ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件,从名字上看,我们也应该能想到,此类资源主要是做配置映射的,当然了,配置的一般内容是包括环境变量,命令行参数以及配置文件的形式这些的。
ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。如果需要存储加密信息时可以使用Secret对象。主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。
:::

ServiceAccount:给pod提权的

:::success
ff0d0536bb355ee2499dfb323ae6d0a.png
:::

k8s Pod副本控制器

:::success
kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制pod的具体状态和行为。
部分控制器类型如下:
ReplicationController 和 ReplicaSet:都不支持热更,rs可以指定标签选择器
Deployment
DaemonSet
StatefulSet
Job/CronJob
HorizontalPodAutoscaler
:::

K8S存储管理volume、PV/PVC

:::success
2fd70c5a11069f8bcc32c31d325c11f.png
:::

dashboard(部署和访问 Kubernetes 仪表板)

部署dashboard官方链接:https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/#uploading-a-yaml-or-json-file
image.png

service

:::success
Service是为了管理具有相同功能的一组Pod而定义的一种资源对象
通过Pod的Label Selector访问Pod组。

  • Service的IP保持不变(Headless Servcie除外,下面会单独讲),保证了访问接口的稳定性,屏蔽了Pod的IP地址变化带来的影响,进而实现解耦合。虽然这样,还是建议使用ServiceName进行访问(k8s内部的pod可以用ServiceName访问)。
  • Service通过kube-proxy借助iptables/ipvsadm提供负载均衡的能力,实现反向代理,将请求转发到合适的Pod上。
    :::
Kubernetes的资源对象可以根据其功能划分为多个类别,每个类别下都有特定的资源对象。以下是一些主要的Kubernetes资源对象及其简要描述:

:::success

  1. 工作负载类
  • Pod:Kubernetes中的最小可部署单元,可以包含一个或多个紧密关联的容器。Pod定义了应用程序的网络和存储配置,以及容器之间的通信规则。
  • ReplicaSet:确保运行指定数量的Pod副本。
  • Deployment:用于管理Pod副本的控制器,可以定义应用程序的期望状态,包括所需的Pod数量和更新策略等。
  • StatefulSet:管理有状态的应用程序。
  • DaemonSet:确保每个节点运行一个Pod副本。
  • Job:用于运行一次性任务。
  • Cronjob:按预定时间计划运行Job。
  1. 负载均衡类
  • Service:为Pod提供访问方式,如负载均衡、服务发现等。
  • Ingress:用于HTTP(S)路由的API对象,提供外部访问集群服务的入口。
  1. 配置和存储类
  • Volume:为Pod提供持久化存储。
  • CSI:容器存储接口,用于扩展存储选项。
  • ConfigMap:用于存储配置信息,供Pod中的容器使用。
  • Secret:用于存储敏感信息,如密码、令牌等。
  • DownwardAPI:允许Pod中的容器访问其自己的信息以及集群信息。
  1. 集群类
  • Namespace:为资源提供逻辑隔离。
  • Node:集群中的物理或虚拟机器。
  • RoleClusterRole:定义权限。
  • RoleBindingClusterRoleBinding:将角色绑定到用户或组。
  1. 元数据类
  • HPA (Horizontal Pod Autoscaler):根据CPU或其他自定义指标自动调整Pod的副本数。
  • PodTemplate:用于创建Pod的模板。
  • LimitRange:为资源设置限制范围。

此外,还有一些其他资源对象,如PersistentVolume (PV)PersistentVolumeClaim (PVC),它们用于管理持久化存储。
请注意,Kubernetes是一个不断发展的平台,新的资源对象和功能可能会随着时间的推移而添加。因此,为了获取最新的信息,建议查阅Kubernetes的官方文档或相关社区资源。
:::
image.png
:::success
k8s
k8s驱动:在1.22中之后,如果用户没有设置Cgroupfs驱动程序,默认是systemd
pod:
亲和性:node节点之间的亲和力,pod之间的亲和力,pod之间的反亲和力
污点:Taints
容忍:Toletations
健康检查:探针规则有存活探针livenessProbe
就绪探针readinessProbe
启动探针startupProbe
探针有三种探测方式:exec、tcpSocket和httpGet
镜像的拉去策略有三种:ifNotPresent、always和never
secret:用来存放小片的敏感数据,比如密码,token,秘钥
创建秘钥有两种方法:
1、使用命令方式
2、用yaml文件的方式
私钥的类型有:generic 这个是模糊的类型 opaque
还有一种是私仓的模式:docker-registry
要想进行热更新需要两个条件:
1、使用卷挂载
2、还要使用yaml方式进行创建
否则是没办法进行更新的
configmap:这个资源对象存储的数据一般都不需要进行加密,一般都是存储一些配置文件的类型
创建ConfigMap的方式也算是两种:
1、命令行的方式
2、yaml的方式

	命令行的方式有:<br />			1、指定参数进行创建、<br />			2、指定文件的形式进行创建<br />			3、指定目录的方式进行创建<br />	使用ConfigMap的方式有三种:<br />			1、环境变量方方式<br />			2、通过pod方命令行进行运行<br />			3、使用volume的方式进行挂载<br />     在挂载时如果不使用subPath会导致目录会被覆盖<br />     这个时候可以引用一个subPath参数<br />     但是使用了之后,这个配置文件不支持热更新了

 configmap的热更新也必须是使用yaml文件,而且不能使用subPath参数

sa:ServiceAccount主要是给pod提供一个身份认证,分配权限问题,提高系统的安全性。

clusterrole:集群角色

rc:ReplicationController副本控制器
设置副本的数量,根据标签进行保持pod的数量,不支持镜像的更新
还可以通过手动扩容和缩容

rs:ReplicaSet也是副本控制器,跟rc的区别差不多

Deployment:副本控制器,可以控制pod的数量,支持手动的扩容和缩容,还支持镜像的更新。

DaemonDets:给每个节点运行一个pod副本,当有节点加入时,会给他新增一个pod,当节点移除时,会把pod收回。

sts:StatefulSet有状态的
稳定的,唯一的网络标识符:每个Pod都拥有一个基于其顺序索引的稳定的主机名
稳定的、持久的存储
有序的、优雅的部署和缩放
emptyDir:临时存储,创建pod时,会在node节点上容器申请一个临时的目录,但是跟随者容器的生命周期存活,当容器删除目录也会随之删除,一般emptyDir用于测试。

hostPath:
PV:PersistentVolume是外部存储系统中的一块存储空间,由管理创建和维护的。与Volume一样,PV具有持久性,生命周期独立于Pod
capacity:指定PV的容量
accessModes:指定访问模式
ReadWriteOnce:PV能以read-write模式mount到单个节点
ReadOnlyMany:PV能以read-only模式mount到多个节点
ReadWriteMany:PV能以read-write模式mount到多个节点
persistentVolumeReclaimPolicy:指定PV的回收策略
Retain:需要管理员手动回收
Recycle:清除PV中的数据
Delete:删除Storage Provider上对应存储资源
storageClassName:指定PV的class的类型

PVC:PersistentVolume是对PV的申请Claim。PVC通常是由普通用户创建和维护。当pod需要分配资源时,用户可以创建一个PVC,指明资源存储的容量大小和访问模式等信息,Kubernetes会查找并提供满足条件的PV。

有了pvc,用户只需告诉k8s需要什么样的存储资源,而不必关心真正的空间从哪里分配,如何访问等底层细节信息。这些Storage Provider的底层信息交给管理员来处理,只有管理员才应该关心创建PV的细节信息。

PV的静态供应:这个是我们提前创建一个PV,然后PVC去绑定PV,之后在Pod中使用

PV的动态供应:是在没有满足PVC条件的PV,会自动创建PV。相比静态供给,动态供给给有明显的优势;不需要提前创建PV,减少了管理员的工作量,效率高。
当引用副本控制器的时候是很方便的,不需要一个一个的创建pv

Service:暴露pod,当删除pod之后,客户能正常的感知并访问,负载均衡
属于四层负载
service是按照标签的形式去寻找pod的,
ClusterIP、NodePort,LoadBalancer和ExternalName
ClusterIP:这个是负责集群内部分配给集群内部使用的Service的IP地址
NodePort:在ClusterIP的基础之上,为集群内的每台物理机绑定一个端口,外网通过任意节点的物理机IP加端口来访问服务。

endpoint:k8s集群的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址。
里面记录的关系会根据pod的改变而更新

Ingress:属于七层负载,暴露服务
由2中东西进行组成,一种是Ingress-Controller控制器
一种是Ingress规则
可以允许域名访问,支持ssl/TLS

RBAC:Role-Base Access Control 基于角色的访问控制

用户:k8s有两种用户,一种是User,一种是Service Account<br />		其中User是给人用的,Service Account给进程用的,让进程有相关权限<br />	角色:是一系列权限的集合,例如一个Role可包含读取和列出Pod的权限【ClusterRole和Role类似,其权限范围是整个集群】

**Role与ClusterRole**<br />		Role:角色可以由命名空间内的Role对象定义,一个Role对象只能用于授权对某一单一命名空间中资源的访问权限<br />	ClusterRole:整个Kubernetes集群范围内有效角色则通过ClusterRole对象实现

如何对pod提权:需要先创建一个serviceAccount声明,然后通过clusterRole和clusterRoleBinding来进行绑定,实现sa具有指定clusterRole的角色的权限,然后在需要提权的pod里面进行service Account的引用就可以对pod进行提权了

:::
:::success
当管理 Kubernetes 环境时,以下是一些常用的 kubectl 命令,kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互和管理。
配置和管理
1.查看集群信息
** kubectl cluster-info**
2.查看集群节点
** kubectl get nodes**
3.查看命名空间
** kubectl get namespaces**
4.设置当前使用的命名空间
kubectl config set-context --current --namespace=<namespace-name>
5.查看 Pod
kubectl get pods
6.查看 Pod 的详细信息
kubectl describe pod <pod-name>
7.查看服务
kubectl get services
8.查看特定命名空间下的资源
kubectl get pods/services/deployments -n <namespace-name>
9.查看日志
kubectl logs <pod-name>
10.进入 Pod 内部
kubectl exec -it <pod-name> – /bin/bash
11.创建资源
kubectl apply -f <yaml-file>
12.删除资源
kubectl delete <resource-type> <resource-name>
13.扩展 Pod 的副本数
kubectl scale deployment <deployment-name> --replicas=<replica-count>
14.查看集群事件
bash
kubectl get events
调试和故障排除
15.检查节点
kubectl describe node <node-name>
16.检查网络
kubectl get services --all-namespaces
17.查看 Pod 的 IP 和端口
kubectl get pod <pod-name> -o wide
18.查看 Pod 的日志
kubectl logs <pod-name>
19.查看 Pod 的描述
kubectl describe pod <pod-name>
20.查看特定标签的 Pod
kubectl get pods -l <label-key>=<label-value>
安全和访问控制
21.查看角色和角色绑定
kubectl get roles
kubectl get rolebindings
22.查看服务账户
kubectl get serviceaccounts
23.查看授权策略
kubectl get clusterroles
kubectl get clusterrolebindings
其他常用命令
24.查看 Kubernetes 版本
kubectl version
25.查看 API 资源
kubectl api-resources
26.查看特定资源的详细信息
kubectl describe <resource-type> <resource-name>
27.获取帮助
kubectl --help
这些是一些常用的 kubectl 命令,可用于管理和调试 Kubernetes 集群中的应用和资源。根据需要,您可以使用这些命令来执行各种操作,包括创建、删除、扩展和监视 Kubernetes 资源。
:::

prometheus

:::success
Q:什么是Prometheus?
**A:**Prometheus是一个开源的系统监控和警报工具集,用于收集、存储和查询时间序列数据。
Q:Prometheus的主要组件有哪些?
**A:**Prometheus由以下主要组件组成:

  • Prometheus Server:负责收集和存储时间序列数据。
  • Exporters:用于收集特定应用或系统的指标数据,并将其暴露给Prometheus进行抓取。
  • Alertmanager:用于定义和发送警报通知。

Q:Prometheus的数据模型是什么?
**A:**Prometheus使用时间序列数据模型,其中每个时间序列由唯一的标识符(metric name和一组标签)和对应的时间戳-值对组成。
Q:如何在Prometheus中定义监控指标?
**A:**可以使用Prometheus的自有查询语言PromQL来定义监控指标。通过指标名称和标签来唯一标识监控指标,并使用各种函数和操作符来进行数据查询和聚合。
Q:如何配置Prometheus进行目标抓取?
**A:**可以通过Prometheus的配置文件prometheus.yml来定义抓取配置。在配置文件中指定要抓取的目标(如Exporter的地址和端口),并设置抓取频率等参数。
Q:Prometheus如何处理数据存储和保留策略?
**A:**Prometheus使用本地磁盘存储时间序列数据。数据存储采用分块压缩格式,同时可以配置数据保留策略,以控制数据的存储时间和保留期限。
Q:如何设置警报规则并配置Alertmanager?
A:可以使用Prometheus的配置文件prometheus.yml来定义警报规则,并配置Alertmanager的通知方式和接收者
Q:Prometheus支持哪些查询操作和聚合函数?
**A:**Prometheus支持丰富的查询操作和聚合函数,如过滤、计算率、求和、平均值、最大值、最小值等,以便对监控指标进行灵活的数据查询和分析。
Q:什么是Prometheus的服务发现机制?
**A:**Prometheus提供多种服务发现机制,如静态配置、文件发现、Consul、Kubernetes等,用于自动发现和抓取要监控的目标。
Q:Prometheus的可视化和查询界面是什么?
**A:**Prometheus提供一个内置的可视化和查询界面,称为Prometheus Web UI,可以在浏览器中访问,并通过PromQL进行数据查询和展示。
Q:什么是Prometheus的推模式(Push)和拉模式(Pull)抓取?
**A:**Prometheus的推模式抓取是指被监控的目标主动向Prometheus发送指标数据,而拉模式抓取是Prometheus主动从目标中拉取指标数据。
Q:如何在Prometheus中配置持久化存储?
A:可以使用Prometheus的–storage.tsdb.path参数来配置持久化存储路径,以便将时间序列数据持久化保存在磁盘上。
Q:Prometheus是否支持高可用性(HA)部署?如果是,如何实现?
A:是的,Prometheus支持高可用性部署。可以通过使用多个Prometheus实例并结合使用服务发现和联邦(Federation)来实现高可用性。
Q:什么是Prometheus的Alertmanager?它的作用是什么?
**A:Prometheus的Alertmanager是用于处理和发送警报通知的组件。**它能够根据预定义的警报规则接收来自Prometheus的警报,并根据配置的通知方式发送警报通知。
Q:什么是Prometheus的持续查询(Continuous Queries)?
**A:**Prometheus的持续查询是预定义的查询语句,定期计算和聚合时间序列数据,并将结果存储在新的时间序列中,以供后续查询和展示使用。
:::

kafka,rabbitMQ

image.png

常见端口

:::success
mysql端口3306 版本5.7稳定
Nginx端口80 版本1.24.0
Ssh 端口22
http 端口80
https 端口443(CA中心发ssl协议)
NFS端口2049
RPC端口111
DNS端口Tomcat端口8005 版本:8.5
jenkins版本:2.414
jdk版本:11
zabbix版本:5.0
gitlab版本:16
maven版本: 3.8.7

你们服务用的都是什么版本的?

(1) Mysql 5.7 (2) jdk 1.8 (3) nginx 1.20
(4) redis 6.0 (5) tomcat 8.5.45 (6) zabbix 5.0
(7) jenkins 2.346 (8) elk 5.4 (9) gitlab 12.6.3 (10) docker 17.03.2 (11)kubernetes 1.27.4

你们的服务端口是多少?

(1) http 80 (2) https 443 (3) ftp 21 (4) ssh 22 (5) Mysql 3306 (6) redis 6379 (7) nginx 80 (8) tomcat 8080 (9) zabbix-server 10051 (10) zabbix-agent 10050 (11) ES 9200 (12) kibana 6501 (13) grafana 3000 (14) jenkins 运行在 tomcat 8080 (15) rabbitmq web 页面用的是 15627 (16) java 链接的用 567
:::

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时康康

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值