NGINX和阿帕奇的区别:

  1. 性能和高并发处理:Nginx在性能和高并发处理方面(短时间能能支持大量访问请求的情况)具有优势。Nginx使用异步事件驱动的架构,可以处理大量并发连接,并在高负载情况(任务过多,导致队列长度过大)下表现出色,适合处理高流量的网站和应用程序。Apache则使用多线程模型,每个连接通常使用一个线程,因此在高并发环境下可能会出现性能瓶颈。

  2. 内存消耗:Nginx通常比Apache占用更少的内存,这意味着在资源有限的环境中,如容器化部署中,Nginx可能是更好的选择。

  3. 配置和模块化:Apache的配置文件通常更为复杂,需要较长的学习曲线,而Nginx的配置相对简单和直观。Nginx还以其高度的模块化和灵活性而闻名,可以通过添加第三方模块来扩展其功能。

  4. 功能和用途:Apache在处理动态内容和处理复杂的URL重写等方面较为强大,适合传统的Web应用程序。Nginx则在处理静态内容、反向代理、负载均衡和高并发请求等方面表现出色,适合用于高性能的Web服务器、反向代理服务器和负载均衡服务器。

第四点详细部分点击我(●’◡’●)

docker和虚拟化的区别

传统方式是在硬件层面实现虚拟化,需要有额外的虚拟机管理应用和虚拟机操作系统层。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,因此更加轻量级。

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有如下显著优势:

  1. Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式(数分钟)要快得多;
  2. Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器
  3. Docker通过类似Git设计理念的操作来方便用户获取、分发和更新应用镜像,存储复用,增量更新;
  4. Docker通过Dockerfile支持灵活的自动化创建和部署机制,以提高工作效率,并标准化流程。
  5. Docker容器除了运行其中的应用外,基本不消耗额外的系统资源,在保证应用性能的同时,尽量减小系统开销。传统虚拟机方式运行N个不同的应用就要启用N个虚拟机(每个虚拟机需要单独分配独占的内存、磁盘等资源),而Docker只需要启动N个隔离得“很薄的”容器,并将应用放进容器内即可。应用获得的是接近原生的运行性能。

ansible的模块

声明:

1
2
3
4
5
6
7
8
9
10
 /etc/ansible/hosts目录下
#定义自己的组
[all_servers]
server1
server2
server3
[node1]
server2
[node2]
server3

ansible参数说明:

1
2
3
4
5
6
7
-a MODULE_ARGS:指定模块的参数
-m MODULE_NAME:指定模块
-C:检查执行结果
-e EXTRA_VARS:指明变量名
-f FORKS:指定并发进程数
-i INVENTORY:指定主机清单文件
--syntax-check:检查执行命令是否存在语法错误

user :

1
2
3
4
5
6
7
8
ansible‐doc ‐s user  #查看模块的参数
1.添加系统用户,指定uid、家目录、主组及注释
ansible -m user -a "system=yes name=zhangsan home=/home/zhangsan uid=111 group=zhangsan comment='hello zhangsan'" node1
2.删除用户及家目录
ansible -m user -a "name=zhangsan state=absent remove=yes" node1
#注意remove=yes: 这是一个可选参数,当设置为yes时,会一并删除用户的主目录和邮件池。如果不设置或设置为no,则只删除用户账户,保留其主目录和邮件池。
3.添加系统用户,指定uid、家目录、主组及注释、密码、shell
ansible -m user -a "system=yes name=zhangsan home=/home/zhangsan uid=111 group=root comment='hello zhangsan' password='123456' shell=/bin/bash " node2

group

1
2
3
4
#设置系统组
ansible -m group -a "name=eagles gid=111 system=yes" node1
#删除系统组
ansible -m group -a "name=eagles gid=111 state=absent" node1

command

默认使用的模块(可默认不写)

1
2
ansible -a "touch /root/ansible.txt" all_servers 
ansible -a "find / -name ansible.txt" all_servers

插一句:

Raw模块与command模块在Ansible中的主要区别体现在它们的执行方式和适用场景上。

  1. 执行方式:Raw模块允许在远程主机上直接执行任意的命令,不受Python环境的限制。它通常用于无法安装Python的系统,如网络设备等。而command模块在远程主机上执行命令时,会先使用Python的subprocess模块,通过shell环境来执行命令。
  2. 适用场景:Raw模块主要用于执行一些低级的、复杂的SSH命令,这些命令可能不适合通过command模块执行。而command模块则更适用于执行简单的、不需要管道符或重定向功能的命令。
1
ansible all_servers -m raw -a "touch /root/ansible.txt"

shell

调用bash执行命令
但是某些复杂的操作即使使用shell也可能会失败
解决方法:将操作写到脚本中,通过script模块

1
ansible -m shell -a "find / -name ansible.txt" all_servers

script

1
2
3
4
5
6
7
8
9
10
11
chdir参数: 此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到 chdir 参数指定的目录中。
creates参数: 使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考 command 模块中的解释。
removes参数: 使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考 command 模块中的解释。
[root@server1 ~]# vim test.sh
#!/bin/bash
for i in `seq 5`
do
mkdir -v /root/test_${i}.txt
rmdir -v /root/test_${i}.txt
done
ansible -m script -a '/root/test.sh chdir=/tmp creates=test2' node2

copy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
backup:在覆盖之前,将源文件备份,备份文件包含时间信息。      
content:用于替代“src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径
directory_mode:递归设定目录的权限,默认为系统默认权限
force:强制覆盖目的文件内容,默认为yes
others:所有的file模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制
ansible -m copy -a "src=/本地文件 dest=/远程文件" nodes
在创建文件时修改文件的属主和属组信息
ansible -m copy -a "src=/root/test.sh dest=/root/test1 owner=zhangsan group=eagles" node1
在传输文件时修改文件的权限信息,并且备份远程主机文件
ansible -m copy -a "src=/root/test.sh dest=/root/test2 backup=yes mode=777" node1
创建一个文件并直接编辑文件
ansible -m copy -a "content='hello eagles\n' dest=/root/test3" node1

file

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
force:需要在两种情况下强制创建软链接,一种是源文件不存在,但之后会建立的情况下;另一种是目标软链接已存在,需要先取消之前的软链,然后创建新的软链,有两个选项:yes|no      
group:定义文件/目录的属组
mode:定义文件/目录的权限
owner:定义文件/目录的属主
path:必选项,定义文件/目录的路径
recurse:递归设置文件的属性,只对目录有效
src:被链接的源文件路径,只应用于state=link的情况
dest:被链接到的路径,只应用于state=link的情况
state:
absent: 删除文件
directory:如果目录不存在,就创建目录
file:验证文件是否存在,即使文件不存在,也不会被创建
link:创建软链接
hard:创建硬链接
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其后修改时间
1
2
3
4
5
6
7
8
9
10
创建目录
ansible -m file -a "name=test1 owner=root group=root mode=644 state=directory " node1
创建文件
ansible -m file -a "path=/root/test2 owner=root group=root mode=644 state=touch" node1
删除文件/目录
ansible -m file -a "path=/root/test2 state=absent" node1
创建软链接文件
ansible -m file -a "src=/root/test1 dest=/root/test2 state=link" node2
创建硬链接文件
ansible -m file -a "src=/root/test.txt dest=/root/test2 state=hard" node2

yum

1
2
3
4
5
6
7
8
9
10
    conf_file         #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置。 
disable_gpg_check #是否禁止GPG checking,只用于`present' or `latest'。
disablerepo #临时禁止使用yum库。 只用于安装或更新时。
enablerepo #临时使用的yum库。只用于安装或更新时。
name= #所安装的包的名称
state #present安装, latest安装新的, absent 卸载软件。
update_cache #强制更新yum的缓存
ansible -m yum -a "name=httpd state=latest" node1
ansible -m yum -a "name=mariadb state=latest" node1
...

service

1
2
3
4
5
6
7
8
9
10
11
12
ansible-doc -s service
> SERVICE (/usr/lib/python2.7/site‐packages/ansible/modules/system/service.py)
Controls services on remote hosts. Supported init systems include BSD init, OpenRC, SysV, Solaris
SMF, systemd, upstart. For Windows targets, use the [win_service] module instead.
* note: This module has a corresponding action plugin.
arguments #命令行提供额外的参数
enabled #设置开机启动,可以设置为yes或者no。
name= #服务名称
runlevel #开机启动的级别,一般不用指定。
sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。
state #started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置
ansible -m service -a "name=httpd state=started" node1

selinux

1
2
3
4
5
6
7
# selinux模块针对selinux的修改操作是针对配置文件进行修改的
‐ name: Change policy and state of SELinux
selinux:
configfile: # path to the SELinux configuration file, if non‐standard
policy: # name of the SELinux policy to use
state: # (required) The SELinux mode
ansible -m selinux -a "state=enforcing policy=targeted" node1

setup

1
2
ansible -m setup node1   #获取远程主机的详细信息
ansible-doc -l # 可以查询ansible具有的所有模块

讲一下OSI七层模型 详细讲述数据是什么形式流通的 每一层负责干什么

第一层:物理层

  • 数据形式:物理层负责原始比特流的传输,处理传输介质上的物理信号。
  • 职责:提供通信介质和机械、电气、功能的规程,确保在通信介质之间进行可靠的位的发送和接收。

第二层:数据链路层

  • 数据形式:数据链路层将比特流组织成帧,实现数据的帧封装和解封装,保证数据的可靠传输。
  • 职责:确定传输信息帧的格式,检测物理层发生的差错,确保数据帧无差错地在两个相邻节点之间传输。

第三层:网络层

  • 数据形式:网络层将数据包(或报文分组)从源节点发送到目的节点。
  • 职责:提供建立、保持和终止网络的连接,负责路由选择和转发,确保数据包能够正确地从源地址传输到目的地址。

第四层:传输层

  • 数据形式:传输层将来自会话层的数据分割成较小的单元,称为段(segment),并进行重新组装。
  • 职责:对通信的双方提供服务,确保数据的可靠、经济地传输,实现数据的分段和重组,以及流量控制和差错控制。

第五层:会话层

  • 数据形式:会话层数据主要关注会话的建立、管理和终止。
  • 职责:负责在两个用户进程之间建立、管理和终止会话,同步不同设备上的各种应用之间的对话,并管理对话中的数据交换。

第六层:表示层

  • 数据形式:表示层处理数据的表示方式,如数据格式的转换、加密和解密等。
  • 职责:处理有关字符集、数据编码的转换,执行信息的压缩、加密、解密等功能,以确保发送方和接收方能够正确地解释所传输的信息。

第七层:应用层

  • 数据形式:应用层数据是用户产生的具体数据,如电子邮件、网页请求等。
  • 职责:通过应用程序间的交互来完成特定的网络应用,服务内容取决于网络的用途。应用层协议定义了应用进程之间的交互规则,为不同的网络应用提供服务。

在OSI模型中,数据的流通从应用层开始,逐层向下传递,经过表示层、会话层、传输层、网络层、数据链路层,最后到达物理层进行传输。在接收端,数据则按照相反的顺序,从物理层开始逐层向上解析和处理,最终到达应用层供用户使用。这种分层结构使得每一层都能专注于完成自己的任务,同时与其他层保持清晰的接口,便于网络的扩展和维护。

讲一下交换机

交换机是一种用于电信号转发的网络设备,其核心功能是根据通信两端传输信息的需要,自动完成信息交换,把要传输的信息送到符合要求的相应路由上。

交换机通常具有多个端口,可以连接多台设备,如计算机、服务器、网络打印机等,实现数据的传输和交换。它内部有一个MAC地址表,记录了网络中所有MAC地址与该交换机各端口的对应信息。当交换机收到数据时,会检查其目的MAC地址,并根据MAC地址表将数据从目的主机所在的接口转发出去。如果数据帧中的目的MAC地址不在MAC地址表中,则会向所有端口转发,这个过程称为泛洪。

交换机可以根据不同的需求进行配置,支持带宽控制、流量管理、VLAN等功能,从而有效地管理网络资源和提升网络性能。在企业网络、商务大厦网络、酒店宽带网络等场景中,交换机都扮演着重要的角色。

此外,交换机有多种类型,如以太网交换机、电话语音交换机、光纤交换机等,以满足不同网络环境和应用需求。

交换机和路由器的区别是什么?

  • 路由器可以给你的局域网自动分配IP,虚拟拨号,就像一个交通警察,指挥着你的电脑该往哪走,你自己不用操心那么多了,交换机只是用来分配网络数据的。

  • 路由器可以把一个IP分配给很多个主机使用,这些主机对外只表现出一个IP。

    交换机可以把很多主机连起来,这些主机对外各有各的IP。

  • 交换机工作在中继层,根据MAC地址寻址。

    路由器工作在网络层,根据IP地址寻址,可以处理TCP/IP协议,而交换机不可以。

  • 路由器提供了防火墙的服务,交换机不能提供该功能。路由器仅仅转发特定地址的数据包,不传送不支持路由协议的数据包传送和未知目标网络数据包的传送,从而可以防止广播风暴(广播(一个数据帧或包被传输到本地网段 (由广播域定义)上的每个节点)在网段内大量复制,传播数据帧,导致网络性能下降,甚至网络瘫痪)。

    • 简单的说路由器专管入网,交换机只管配送,路由就是给你找路让你上网的,交换机只负责开,交换机上面要没有路由你是上不了网的。

路由器图

交换机图

DNS是干什么的 你有部署过DNS服务器吗?

DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的,又名“域名解析服务器”.

部署过

blog.guixiang.top 解析ip

文本三剑客讲一下

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

详细查看知识集锦2

shell用法

Linux网络管理的所有命令 每个命令干什么的

Linux 网络管理命令包括:

  1. ifconfig: 用于查看和配置网络接口的配置信息。

  2. route: 用于查看和配置路由表。

  3. netstat: 用于查看网络连接和统计信息。

  4. nslookup: 用于查询域名解析。

  5. ping: 用于测试主机间网络连通性。

  6. traceroute: 用于查看数据包在网络中传递的路径。

  7. iptables: 用于配置防火墙规则。

  8. ip: 是iproute2Linux 网络管理命令有很多,常用的有:

  9. ifconfig: 查看和配置网络接口的信息。

  10. netstat: 查看网络连接状态和统计信息。

  11. ping: 检测主机之间的网络连通性。

  12. route: 查看和配置路由表。

  13. traceroute: 查看数据包在网络中传输的路径。

  14. nslookup: 查询域名服务器(DNS)信息。

  15. dig: 查询DNS信息。

  16. host: 查询DNS信息。

  17. nmap: 扫描网络主机的开放端口。

  18. arp: 查看和管理arp缓存。

详见 Linux网络命令大全-CSDN博客

tcp ip三次握手四次挥手讲清原理 发送什么包

TCP四次挥手是TCP连接释放的过程,确保双方都能够安全地关闭连接,而不会导致数据包丢失或混乱。以下是TCP四次挥手的详细过程:

第一次挥手:客户端向服务器发送一个FIN数据包(FIN=1,seq=u),表示主动断开连接,不再向服务器发送数据,但仍可以接收数据。此时,客户端进入FIN_WAIT1状态。
第二次挥手:服务器收到FIN断开请求后,发送一个ACK响应报文(ACK=1,ack=u+1),表示同意断开请求。此时,服务器进入CLOSE_WAIT状态,客户端收到ACK报文后,由FIN_WAIT_1转换成FIN_WAIT_2状态。
第三次挥手:服务器发送FIN报文给客户端(FIN=1,seq=w),表示服务器也准备关闭连接。此时,服务器进入LAST_ACK状态,等待客户端的确认。
第四次挥手:客户端收到FIN报文后,发送一个ACK响应报文给服务器(ACK=1,ack=w+1),表示已经收到服务器的关闭请求。然后,客户端进入TIME_WAIT状态,等待2MSL(最长报文段寿命)时间后,如果没有收到服务器的报文,则证明对方已正常关闭,客户端的连接最终关闭。服务器在收到ACK报文后,关闭连接。

需要注意的是,四次挥手的每一步都有其独特的目的,确保数据在关闭过程中能够被完整传输,同时也允许延迟的数据包在关闭后仍然能够被接收

tcp和udp的区别

TCP是面向连接的,UDP是无连接的
TCP是可靠的,UDP是不可靠的
TCP是面向字节流的,UDP是面向数据报文的
TCP只支持点对点通信,UDP支持一对一,一对多,多对多
TCP报文首部20个字节,UDP首部8个字节
TCP有拥塞控制机制,UDP没有
TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区