合肥网站建设创优,动画设计参考文献,国外html响应式网站模板,数据分析系统搭建1、简述Ansible及其优势#xff1f;
Ansible是一款极其简单的开源的自动化运维工具#xff0c;基于Python开发#xff0c;集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置#xff0c;批量程序部署#xff0c;批量运行命令等功能。同…1、简述Ansible及其优势
Ansible是一款极其简单的开源的自动化运维工具基于Python开发集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置批量程序部署批量运行命令等功能。同时Ansible是基于模块工作其实现批量部署的是ansible所运行的模块。
Ansible其他重要的优势 跨平台支持Ansible在物理、虚拟、云和容器环境中为Linux、Windows、UNIX和网络设备提供无代理支持。 人类可读的自动化Ansible playbook以YAML文本文件的形式编写易于阅读有助于确保每个人都理解他们将要做的事情。 对应用程序的完美描述Ansible playbook可以进行任何更改并且可以描述和记录应用程序环境的每个细节。 易于管理的版本控制Ansible剧本和项目是纯文本。它们可以像源代码一样处理并放在现有的版本控制系统中。 支持动态库存Ansible管理的机器列表可以从外部资源动态更新以便随时捕获所有受管服务器的正确的当前列表无论基础设施或位置如何。 易于与其他系统集成的编排HP SA、Puppet、Jenkins、Red Hat Satellite以及存在于环境中的其他系统都可以被利用并集成到Ansible工作流中。
2、简述Ansible工作机制及其特性
Ansible是一款自动化运维工具基于Python开发具有批量系统配置, 批量程序部署, 批量运行命令等功能。
其工作机制如下
1、用户使用Ansible或Playbook在服务器中断输入Ansible的Ad-Hoc命令集或Playbook 2、Ansible遵循预先编排的规则将Playbooks逐条拆解为Play 3、Play组织成Ansible可识别的任务Task 4、Task会调用任务所涉及的所有模块Module和插件Plugin 5、读取Inventroy中定义的主机列表 6、通过SSH认证默认将任务集以临时文件或命令的形式传输到远程客户端执行并返回执行结果。 其特性如下 7、no agents不需要在被管控主机上安装任何客户端只需SSH、Python即可建议Python版本为2.6.6以上 8、no server无服务器端, 使用时直接运行命令即可 9、modules in any languages基于模块工作, 丰富的内置模块可使用任意语言开发模块 10、yaml, not code使用yaml语言定制剧本playbook易于管理API简单明了 11、ssh by default基于SSH工作整个过程简单、方便、安全建议使用公钥方式认证 12、strong multi-tier solution可实现多级指挥。
3、简述Ansible中如何保存敏感数据
在ansible内容中保留秘密数据并仍然公开共享那么可以在playbooks中使用Vault。Ansible Vault它包含在Ansible中可以加密和解密Ansible使用的任何结构化数据文件。
4、简述Ansible适合的场景
Ansible将编排与配置管理、供应和应用程序部署结合并统一在一个易于使用的平台上。
Ansible的一些主要场景包括: 配置管理集中配置文件管理和部署是Ansible的一个常见场景。 应用程序部署当使用Ansible定义应用程序并使用Ansible Tower管理部署时团队可以有效地管理从开发到生产的整个应用程序生命周期。 部署当在系统上部署或安装应用程序时Ansible和Ansible Tower可以帮助简化供应系统的流程无论是PXE启动的裸金属服务器或虚拟机还是从模板创建虚拟机或云实例。 持续交付创建CI/CD管道需要许多团队的协调和参与。如果没有一个简单的自动化平台团队协作很难完成。而Ansible playbook在应用程序的整个生命周期中可以保持适当的部署(和管理) 安全性和审计当安全策略在Ansible中定义时可以将站点范围的安全策略的扫描和修复集成到其他自动化流程中。安全性是部署的所有内容中不可或缺的一部分。 编排配置本身不能定义环境需要定义多个配置如何交互并确保可以将不同的部分作为一个整体来管理。
5、简述Ansible Inventory
Ansible中受管主机列在主机清单inventory文本文件中清单还将这些系统组织成group以便更容易地进行批量管理。一个Inventory定义了Ansible将管理的主机集合。这些主机还可以分配至组可以对组进行批量管理。组可以包含子组主机可以是多个组的成员。Inventory根据类型可分为静态清单和动态清单 静态主机Inventory可以由文本文件定义。 动态主机Inventory可以由脚本或其他程序根据需要使用外部信息提供者生成。
6、简述Ansible配置文件优先级
Ansible 只使用最高优先级配置文件中的设置其它配置文件中的设置将被忽略。即使存在其他优先级较低的文件它们的设置也将被忽略并且不会与所选配置文件中的设置相结合。
$ANSIBLE_CONFIG环境变量指定的任何文件都将覆盖所有其他配置文件。如果没有设置该变量接下来将检查运行ansible命令的目录以查找ansible.cfg文件。如果该文件不存在则检查用户的主目录以查找.ansible.cfg文件。如上配置文件都不存在时才使用全局/etc/ansible/ansible.cfg文件。
7、简述Ansible ad-hoc命令
Ad-Hoc命令是一种快速执行单个Ansible任务的方法适合于不需要永久保存该任务临时执行的场景。Ad-Hoc是简单的控制台操作无需编写剧本就可以运行。它们对于快速测试和更改非常有用。
8、简述Ansible ad-hoc和playbook的区别 Ad-Hoc 命令可以作为一次性命令对一组目标主机运行单个、简单的任务。 Ad-Hoc 不适合复杂配置管理或编配场景Ad-Hoc 一次只能调用一个模块和一组参数。当需要多个操作时必须使用多个 Ad-Hoc 来执行。 playbook可以实现以一种简易重复的方式对一组目标主机运行多个复杂的任务。 Playbook 是描述要在受管主机上实施的必要配置或程序性步骤的文件。 Playbook 为配置管理和部署提供了强大而灵活的解决方案。 Playbook 可以将冗长而复杂的管理任务转变为可轻松重复的历程并且可预测成果然而。 playbook 是一个文本文件其中包含一个或多个按顺序运行的play的列表。 playbook中可以将playbook中的tasks保存为人类可读且可立即运行的形式。 play 是一组有序的任务应该对从目录中选择的主机运行。
9、简述Ansible变量
Ansible 利用变量存储整个 Ansible 项目文件中可重复使用的值从而可以简化项目的创建和维护并减少错误的发生率。在定义Ansible变量时通常有如下三种范围的变量 global范围从命令行或Ansible配置中设置的变量 play范围在 play 和相关结构中设置的变量 host范围inventory、facts 或 register 的变量在主机组和个别主机上设置的变量。
10、简述Ansible如何实现任务的循环
简单循环 Ansible支持使用loop在一组item上迭代任务 loop可以使用列表中的每个项、列表中每个文件的内容、生成的数字序列或使用更复杂的结构来重复任务。 使用loop使管理员不必编写使用相同模块的多个任务。
复杂嵌套循环 with_nested键用于嵌套循环循环在循环中运行。它需要一个包含两个或多个列表的列表。例如将一个列表划分为两个列表任务将迭代第一个列表中的每一项与第二个列表中的每一项。
11、简述Ansible hanlder
Ansible模块被设计成幂等的即在一个适当编写的剧本中剧本及其任务可以在不更改受管主机的情况下多次运行除非它们需要进行更改以使受管主机达到所需的状态。
然而有时当一个任务对系统进行了更改后同时需要运行另一个任务。例如对服务的配置文件的更改可能需要重新加载服务以便更改后的配置生效。此时就需要使用hanlder程序。handler程序是响应由其他任务组成的通知的任务。每个handler程序都有一个全局惟一的名称并在剧本中任务块的末尾触发。
如果没有任务通过名称调用handler程序它将不会运行。
如果一个或多个任务都调用handler程序它将在剧中的所有其他任务完成后仅运行一次。
因为handler程序是任务所以可以在handler程序中使用与处理任何其他任务相同的模块。通常handler程序用于重新启动主机和重新启动服务。
handler程序可以视为非活动任务只有在使用notify语句显式调用时才会触发这些任务。
12、简述Ansible Block
在 playbook 中 blocks 是囊括了任务的子句
blocks 允许对任务进行逻辑分组并可用于控制任务的执行方式例如管理员可以定义一组主要任务和一组附加任务附加任务仅在第一组失败时执行。为此可利用三个关键字在 playbook 中使用块 block定义要运行的主要任务 rescue定义将在 block 子句中定义的任务失败时运行的任务 always定义始终都独立运行的任务不论 block 和 rescue 子句中定义的任务是成功还是失败。
13、简述Ansible如何处理play错误的
Ansible审查每个任务的返回代码以确定任务是否成功或失败。默认情况下当一个任务失败时Ansible会立即中止该主机上的其他操作并跳过所有后续任务。
实际生产中若希望即使任务失败也能继续执行playAnsible也包含了多种特性用于管理任务错误
忽略任务失败在任务中使用ignore_errors关键字忽略错误即使任务失败也继续在主机上执行playbook。
14、简述Ansible角色
数据中心有各种不同类型的主机。如web服务器、数据库服务器基于开发环境的服务器。随着时间的推移具有处理所有这些情况的任务和人员的Ansible playbook将变得庞大而复杂。 角色允许将复杂的剧本组织成独立的、更小的剧本和文件。 角色提供了一种从外部文件加载任务、处理程序和变量的方法。 角色也可关联和引用静态的文件和模板。 角色可以编写成满足普通用途需求并且能被重复利用。 定义角色的文件具有特定的名称并以严格的目录结构进行组织。
15、简述Ansible Galaxy
Ansible Galaxy是一个由各种Ansible管理员和用户编写的Ansible角色的公共库。它是一个包含数千个Ansible角色的归档文件并且有一个可搜索的数据库帮助Ansible用户识别可能帮助他们完成管理任务的角色。Ansible Galaxy包括指向新用户和角色开发人员的文档和视频的链接。
16、简述Ansible如何控制任务的并行执行
通过在所有主机上并行运行任务Ansible可以对剧本的执行进行更多的控制。默认情况下Ansible默认最多并行5个因此它将同时在5台不同的机器上运行一个特定的任务。Ansible可以通过配置forks来设置并行执行任务数量。
同时Ansible也可以通过serial来减少ork数量所指定的并行书serial关键字主要用于控制滚动更新避免一次性更新过多的节点。
17、简述Ansible故障后的排查思路 日志判断默认情况下Ansible没有配置为将其输出记录到任何日志文件中。可通过ansible.cfg配置文件default部分中的log_path参数或$ANSIBLE_LOG环境变量进行配置。然后通过日志进行定位。 Debug模块调试模块是Ansible可用的模块之一它可以更好地了解控制节点上正在进行的操作。这个模块可以在playbook执行时为某个变量提供值。 syntax-check通过ansible-playbook 命令的 --syntax-check命选项检查剧本的YAML语法。 diffAnsible还提供了--diff选项。此选项报告对受管主机上的模板文件所做的更改。如果与--check选项一起使用这些更改将显示出来而不是实际执行。从而判断Ansible整个过程需要做何种更改。
一文详解 Ansible 自动化运维
Ceph
1、简述Ceph的优势及其特点
Ceph是一个分布式的数据对象存储Ceph相对其他存储系统具有如下优势 CRUSH算法ceph摒弃了传统的集中式存储元数据寻址的方案而使用CRUSH算法完成数据的寻址操作。能够实现各类负载的副本放置规则例如跨机房、机架感知等。Crush算法有相当强大的扩展性理论上支持数千个存储节点从而增强了Ceph弹性扩展和高可用性。 高可用通过CRUSH算法指定副本的物理存储位置以分隔故障域支持数据强一致性ceph可以忍受多种故障场景并自动尝试并行修复。 高扩展性Ceph本身并没有主控节点扩展起来比较容易并且理论上它的性能会随着磁盘数量的增加而线性增长。 特性丰富Ceph支持三种调用接口对象存储块存储文件系统挂载。三种方式可以一同使用。
Ceph主要特点如下 统一存储 无任何单点故障 数据多份冗余 存储容量可扩展 自动容错及故障自愈。
2、简述Ceph存储体系架构
Ceph体系架构主要由RADOS和RADOS GW和RBD以及CephFS构成。 RADOSReliable, Autonomic Distributed Object Store是Ceph的底层核心RADOS本身也是分布式存储系统CEPH所有的存储功能都是基于RADOS实现。RADOS由两个组件组成OSD和Monitor。
OSD主要提供存储资源每一个disk、SSD、RAID group或者一个分区都可以成为一个OSD而每个OSD还将负责向该对象的复杂节点分发和恢复
Monitor维护Ceph集群并监控Ceph集群的全局状态提供一致性的决策。 RADOS GW和RBDRADOS GateWay、RBD其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。其中RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway以供相应的对象存储应用开发使用。RBD则提供了一个标准的块设备接口常用于在虚拟化的场景下为虚拟机创建volume。 CEPHFSCEPHFS则提供了POSIX接口用户可直接通过客户端挂载使用。
3、简述Ceph Pool有几种类型
Ceph存储池Pool是Ceph存储集群用于存储对象的逻辑分区。
Pool中存在一定的数量的PGPG将对象存储在一组由CRUSH算法确定的osd中。
Ceph使用CRUSH算法将对象分配给池中的一个PG根据池的配置和CRUSH算法PG自动映射到一组OSDs。
一个PG里包含一堆对象一个对象只能属于一个PG。
4、简述Ceph节点的角色
所有Ceph存储集群的部署都始于部署一个个Ceph节点、网络和Ceph存储集群。Ceph存储集群至少需要一个Ceph Monitor和两个OSD守护进程。而运行Ceph文件系统客户端时则必须要有元数据服务器Metadata Server。 Ceph OSDsCeph OSD守护进程 Ceph OSD 的功能是存储数据处理数据的复制、恢复、回填、再均衡并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。当Ceph存储集群设定为有2个副本时至少需要2个OSD守护进程集群才能达到activeclean状态Ceph默认有3个副本。 MonitorsCeph Monitor维护着展示集群状态的各种图表包括监视器图、OSD图、归置组PG图、和CRUSH 图。 MDSsCeph元数据服务器MDS为Ceph文件系统存储元数据也就是说Ceph块设备和Ceph 对象存储不使用MDS。元数据服务器使得POSIX文件系统的客户端可以在不对Ceph存储集群造成负担的前提下执行诸如ls、find等基本命令。
5、简述Ceph的适应场景
Ceph的应用场景主要由它的架构确定Ceph提供对象存储、块存储和文件存储。 LIBRADOS应用
Librados提供了应用程序对RADOS的直接访问目前Librados已经提供了对C、C、Java、Python、Ruby和PHP的支持。 RADOSGW应用
此类场景基于Librados之上增加了HTTP协议提供RESTful接口并且兼容S3、Swfit接口。RADOSGW将Ceph集群作为分布式对象存储对外提供服务。 RBD应用
此类场景也是基于Librados之上的细分为下面两种应用场景。
第一种应用场景为虚拟机提供块设备。通过Librbd可以创建一个块设备Container然后通过QEMU/KVM附加到VM上。通过Container和VM的解耦使得块设备可以被绑定到不同的VM上。
第二种应用场景为主机提供块设备。这种场景是传统意义上的理解的块存储。
以上两种方式都是将一个虚拟的块设备分片存储在RADOS中都会利用数据条带化提高数据并行传输都支持块设备的快照、COWCopy-On-Write克隆。最重要的是RBD还支持Live migration。 CephFSCeph文件系统
此类应用是基于RADOS实现的PB级分布式文件系统其中引入MDSMeta Date Server它主要为兼容POSIX文件系统提供元数据比如文件目录和文件元数据。
Docker
1、简述Docker的特性
Docker主要有如下特性
标准化 保证一致的运行环境 弹性伸缩快速扩容 方便迁移 持续集成、持续交付与持续部署
高性能 不需要进行硬件虚拟以及运行完整的操作系统
轻量级 快速启动 隔离性 进程隔离
2、简述Docker容器的几种状态
Docker容器可以有四种状态 运行 已暂停 重新启动 已退出
3、简述Dockerfile、Docker镜像和Docker容器的区别
Dockerfile 是软件的原材料Docker 镜像是软件的交付品而 Docker 容器则可以认为是软件的运行态。从应用软件的角度来看Dockerfile、Docker 镜像与 Docker 容器分别代表软件的三个不同阶段Dockerfile 面向开发Docker 镜像成为交付标准Docker 容器则涉及部署与运维。
4、简述Docker与KVM虚拟机的区别 容器部署简单虚拟机部署相对复杂。
虚拟化技术依赖物理CPU和内存是硬件级别的
而docker构建在操作系统上利用操作系统的containerization技术所以docker甚至可以在虚拟机上运行。 容器秒级启动虚拟机通常分钟级启动。
传统的虚拟化技术在构建系统的时候较为复杂需要大量的人力
而docker可以通过Dockfile来构建整个容器重启和构建速度很快。 容器需要的资源如磁盘、CPU、内存相对更少。 容器比较轻便虚拟机相对较重。
虚拟化系统一般都是指操作系统级概念比较复杂称为“系统”
而docker开源而且轻量称为“容器”单个容器适合部署少量应用比如部署一个redis、一个memcached。
5、简述Docker主要使用的技术
容器主要使用如下技术 Cgroup资源控制 Namespace访问隔离 rootfs文件系统隔离 容器引擎用户态工具生命周期控制
6、简述Docker体系架构
Docker体系相对简单主要涉及如下5个组件 Docker客户端 – Docker
docker客户端则扮演着docker服务端的远程控制器可以用来控制docker的服务端进程。 Docker服务端 – Docker Daemon
docker服务端是一个服务进程管理着所有的容器。 Docker镜像 – Image
docker镜像一个能够运行在docker容器上的一组程序文件是一个只读的模板不包含任何动态数据。 Docker容器 – Docker Container
docker容器就是运行程序的载体容器是镜像运行时的实体。 Docker镜像仓库 -- Registry
Docker仓库是集中存放镜像文件的场所Docker仓库分为公开仓库Public和私有仓库Private两种形式。
7、简述Docker如何实现网络隔离
Docker利用了网络的命名空间特性实现了不同容器之间的网络隔离。命名空间可以支持网络协议栈的多个实例独立的协议栈被隔离到不同的命名空间中。
因此处于不同命名空间中的网络栈是完全隔离的彼此之间无法通信。每个独立的命名空间中可以有自己独立的路由表及独立的iptables设置来提供包转发、NAT及IP包过滤等功能。
8、简述Linux文件系统和Docker文件系统
Linux文件系统由bootfs和rootfs组成bootfs主要包含bootloader和kernelbootloader主要是引导加载kernel当kernel被加载到内存之后bootfs就被卸载掉了。rootfs包含的就是典型linux系统中/dev,/proc,/bin,/etc等标准目录。
Docker文件系统Docker容器是建立在Aufs分层文件系统基础上的Aufs支持将不同的目录挂载到同一个虚拟文件系统下并实现一种layer的概念。Aufs将挂载到同一虚拟文件系统下的多个目录分别设置成read-onlyread-write以及whiteout-able权限。docker 镜像中每一层文件系统都是read-only。
9、简述Docker网络模式
Docker使用Linux的Namespaces技术来进行资源隔离其中Network Namespace实现隔离网络。
一个Network Namespace提供了一份独立隔离的网络环境包括网卡、路由、Iptable规则等Docker网络有如下四种模式 host模式host模式下容器将不会获得独立的Network Namespace该模式下与宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡不会配置独有的IP等而是使用宿主机的IP和端口。 container模式Container 网络模式是 Docker 中一种较为特别的网络的模式处于container模式下的 Docker 容器会共享其他容器的网络环境因此两个或以上的容器之间不存在网络隔离而配置container模式的容器又与宿主机以及除此之外其他的容器存在网络隔离。 none模式none模式下Docker容器拥有自己的Network Namespace但是并不为Docker容器进行任何网络配置和构造任何网络环境。Docker 容器采用了none 网络模式那么容器内部就只能使用loopback网络设备不会再有其他的网络资源。Docker Container的none网络模式意味着不给该容器创建任何网络环境容器只能使用127.0.0.1的本机网络。 bridge模式bridge模式是Docker默认的网络设置此模式会为每一个容器分配Network Namespace、设置IP等并将该宿主机上的Docker容器连接到一个虚拟网桥上。
10、简述Docker跨主机通信的网络实现方式
docker跨主机通信按原理可通过以下三种方式实现 直接路由方式直接在不同宿主机之间添加静态路由 桥接方式如pipework通过静态指定容器IP为宿主机IP同一个网络的形式即可实现。 Overlay隧道方式使用overlay网络实现Overlay网络指在现有网络层之上叠加的虚拟化技术实现应用在网络上的承载并能与其他网络业务分离并且以基于IP的网络技术为主如flannel、ovsgre。
11、简述flannel网络模型实现原理
Flannel为每个host分配一个subnet容器从subnet中分配IP这些IP可以在host间路由容器间无需使用nat和端口映射即可实现跨主机通信。每个subnet都是从一个更大的IP池中划分的flannel会在每个主机上运flanneld的agent负责从池子中分配subnet。
Flannel使用etcd存放网络配置、已分配的subnet、host的IP等信息Flannel数据包在主机间转发是由backend实现的目前已经支持UDP、VxLAN、host-gw、AWS VPC和GCE路由等多种backend。
高中生也能读懂的Docker入门教程Docker 入门终极指南边学边用10 个冷门但又非常实用的 Docker 使用技巧Docker 入门看这一篇就够了
Apache 与 Nginx
1、简述什么是Apache服务器
Apache服务器是一个非常流行、功能强大并且开源的Web服务器基于HTTP超文本传输协议运行这一协议提供了服务器和客户端Web浏览器通信的标准。它支持SSL、CGI文件、虚拟主机等许多功能特性。
2、简述Apache虚拟主机
Apache虚拟主机相当于一个在同一台服务器中却相互独立的站点从而实现一台主机对外提供多个 web 服务每个虚拟主机之间是独立的互不影响的。Apache具有两种类型的虚拟主机基于名称的虚拟主机和基于IP的虚拟主机。
3、简述Apache的Worker MPM和Prefork MPM之间的区别
它们都是MPMWorker和Prefork有它们各自在Apache上的运行机制取决于哪种模式启动Apache。Worker MPM和Prefork MPM基本的区别在于它们产生子进程的处理过程。
1、Prefork MPM中一个主httpd进行被启动这个主进程会管理所有其它子进程为客户端请求提供服务。Worker MPM中一个httpd进程被激活则会使用不同的线程来为客户端请求提供服务。
2、Prefork MPM使用多个子进程每一个进程带有一个线程Worker MPM使用多个子进程每一个进程带有多个线程。
3、Prefork MPM中的连接处理每一个进程一次处理一个连接而在Worker MPM中每一个线程一次处理一个连接。
4、内存占用Prefork MPM占用庞大的内存而Worker MPM占用更小的内存。
详解 Linux 环境下部署 HTTPD 服务如何在 Linux 环境下部署 AWStats 分析系统来监控 Web 站点一文读懂 HTTPD 服务的访问控制
4、简述Nginx是什么及其主要特点
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。可以作为一个HTTP服务器进行网站的发布处理同时也可以作为反向代理进行负载均衡的实现。其主要特点有 占有内存少并发能力强。 Nginx使用基于事件驱动架构使得其可以支持数以百万级别的TCP连接。 高度的模块化和自由软件许可证使得第三方模块非常丰富。 Nginx是一个跨平台服务器可以运行在LinuxWindowsFreeBSDSolarisAIXMac OS等操作系统上。
5、简述Nginx和Apache的差异 Nginx是一个基于事件的Web服务器Apache是一个基于流程的服务器 Nginx所有请求都由一个线程处理Apache单个线程处理单个请求 Nginx避免子进程的概念Apache是基于子进程的 Nginx在内存消耗和连接方面更好Apache在内存消耗和连接方面一般 Nginx的性能和可伸缩性不依赖于硬件Apache依赖于CPU和内存等硬件 Nginx支持热部署Apache不支持热部署 Nginx对于静态文件处理具有更高效率Apache相对一般 Nginx在反向代理场景具有明显优势Apache相对一般。
6、简述Nginx主要应用的场景
基于Nginx的特性Nginx的应用场景主要有 http服务器Nginx是一个http服务可以独立提供http服务可以做网页静态服务器。 虚拟主机可以实现在一台服务器虚拟出多个网站。 正反代理负载均衡或加速当网站的访问量达到一定程度后单台服务器不能满足用户的请求时需要用多台服务器集群可以使用Nginx做反向代理并且多台服务器可以平均分担负载。
7、简述Nginx HTTP连接和请求的关系
HTTP是建立在TCP上一次HTTP请求需要先建立TCP三次握手称为TCP连接在连接的基础上再进行HTTP请求。
HTTP请求建立在一次TCP连接基础上对于HTTP会话一次TCP连接可以建立多次HTTP请求。
8、简述Nginx支持哪些访问控制方式 连接限制Nginx自带的limit_conn_module模块TCP连接频率限制模块和limit_req_mudule模块HTTP请求频率限制模块支持对连接频率以及请求频率、来源进行限制通常可可以用来防止DDOS攻击。 IP限制Nginx使用http_access_module模块可实现基于IP的访问控制但通过代理可以绕过限制。 账号限制Nginx使用http_auth_basic_module模块可实现用户密码的登录限制。 流量限制Nginx使用http_core_moduleblock模块可实现客户端传送响应的速率限制。
9、简述Nginx Master进程和Worker节点
master进程主要用来管理worker进程包含接收来自外界的信号向各worker进程发送信号监控worker进程的运行状态当worker进程退出后(异常情况下)会自动重新启动新的worker进程。
worker进程则是处理基本的网络事件。多个worker进程之间是对等的他们同等竞争来自客户端的请求各进程互相之间是独立的。一个请求只可能在一个worker进程中处理一个worker进程不可能处理其它进程的请求。
10、简述Nginx如何处理HTTP请求 首先Nginx 在启动时会解析配置文件获取需要监听的端口与 IP 地址然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket创建 Socket设置 addr、绑定ip和端口然后listen 监听)。 然后再 fork 出多个子进程出来。 之后子进程会竞争 accept 新的连接。此时客户端就可以向 nginx 发起连接了。当客户端与nginx完成TCP三次握手与 nginx 建立好一个连接后。此时某一个子进程会 accept 成功得到这个建立好的连接的 Socket 然后创建 nginx 对连接的封装。 接着设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。 最后Nginx 或客户端来主动关掉连接完成整个HTTP请求的处理。
11、简述Nginx对于HTTP请求采用哪两种机制进行处理
Nginx 是一个高性能的 Web 服务器能够同时处理大量的并发请求。它结合多进程机制和异步非阻塞机制 。 多进程机制服务器每当收到一个客户端请求时就有服务器主进程 master process生成一个子进程worker process和客户端建立连接进行交互直到连接断开该子进程就结束了。
使用进程的好处是各个进程之间相互独立不需要加锁减少了使用锁对性能造成影响。
其次采用独立的进程可以让进程互相之间不会影响 如果一个进程发生异常退出时其它进程正常工作master进程则很快启动新的worker进程确保服务不会中断从而将风险降到最低。
缺点是操作系统生成一个子进程需要进行 内存复制等操作在资源和时间上会产生一定的开销。当有大量请求时会导致系统性能下降 。 异步非阻塞机制每个工作进程使用异步非阻塞方式可以处理多个客户端请求 。
当某个工作进程接收到客户端请求以后调用 IO 进行处理如果不能立即得到结果就去处理其他请求即为非阻塞 。而客户端在此期间也无需等待响应可以进行其他任务即为 异步 。
当IO返回时就会通知此工作进程。该进程得到通知暂时挂起当前处理的事务去响应客户端请求 。
12、简述Nginx支持哪些类型的虚拟主机
对于Nginx而言每一个虚拟主机相当于一个在同一台服务器中却相互独立的站点从而实现一台主机对外提供多个 web 服务每个虚拟主机之间是独立的互不影响的。通过 Nginx 可以实现虚拟主机的配置Nginx 支持三种类型的虚拟主机配置 基于 IP 的虚拟主机较少使用 基于域名的虚拟主机 基于端口的虚拟主机
13、简述Nginx缓存及其作用
缓存对于Web至关重要尤其对于大型高负载Web站点。Nginx缓存可作为性能优化的一个重要手段可以极大减轻后端服务器的负载。通常对于静态资源即较少经常更新的资源如图片css或js等进行缓存从而在每次刷新浏览器的时候不用重新请求而是从缓存里面读取这样就可以减轻服务器的压力。
14、简述Nginx作为代理缓存后客户端访问的过程
使用Nginx作为代理缓存后可加快客户端的访问其过程大致如下 第一步客户端第一次向Nginx请求数据A 第二步当Nginx发现缓存中没有数据A时会向服务端请求数据A 第三步服务端接收到Nginx发来的请求则返回数据A到Nginx并且缓存在Nginx 第四步Nginx返回数据A给客户端应用 第五步客户端第二次向Nginx请求数据A 第六步当Nginx发现缓存中存在数据A时则不会请求服务端 第七步Nginx把缓存中的数据A返回给客户端应用。
15、简述Nginx代理及其类型
代理forward是一个位于客户端和原始服务器(origin server)之间的服务器即代理服务器。为了从原始服务器取得内容客户端向代理服务器发送一个请求并指定目标原始服务器然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。
其通常有如下三种代理模式 正向代理forward proxy一个位于客户端和原始服务器(origin server)之间的服务器为了从原始服务器取得内容客户端向代理发送一个请求并指定目标(原始服务器)然后代理向原始服务器转交请求并将获得的内容返回给客户端。 反向代理reverse proxy指以代理服务器来接受 Internet上的连接请求然后将请求发给内部网络上的服务器并将从服务器上得到的结果返回给 Internet 上请求连接的客户端此时代理服务器对外就表现为一个反向代理服务器。 透明代理
16、简述Nginx盗链及如何防护
盗链指的是在自己的界面展示非本服务器上的内容通过技术手段获得其他服务器的资源。绕过他人资源展示页面在自己页面向用户提供此内容从而减轻自己服务器的负担因为真实的空间和流量来自其他服务器。
因此通常为了避免被盗链通常Web服务器建议配置防盗链。Nginx防盗链其主要防盗链思路是能区别哪些请求是非正常用户请求对于非正常用户的请求直接反馈403或重定向至其他页面。
17、简述Nginx负载均衡的意义
负载均衡是将负载分摊到多个操作单元上执行从而提高服务的可用性和响应速度带给用户更好的体验。对于Web应用通过负载均衡可以将一台服务器的工作扩展到多台服务器中执行提高整个网站的负载能力。其本质采用一个调度者保证所有后端服务器都将性能充分发挥从而保持服务器集群的整体性能最优这就是负载均衡。
18、简述Nginx负载均衡的优势
Nginx作为负载均衡器具有极大的优势主要体现在 高并发连接 内存消耗少 配置文件非常简单 成本低廉 支持Rewrite重写规则 内置的健康检查功能 节省带宽 稳定性高
19、简述Nginx负载均衡主要的均衡机制策略
Nginx作为负载均衡器具有极大的优势其负载均衡策略可以划分为两大类内置策略和扩展策略扩展策略为第三方提供。
内置策略 轮询默认Nginx根据请求次数将每个请求均匀分配到每台服务器 weight加权轮询加权轮询则是在第一种轮询的基础上对后台的每台服务赋予权重服务器的权重比例越大被分发到的概率也就越大。 least_conn最少连接将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。 ip_hashIP 哈希绑定处理请求的服务器。第一次请求时根据该客户端的IP算出一个HASH值将请求分配到集群中的某一台服务器上。后面该客户端的所有请求都将通过HASH算法找到之前处理这台客户端请求的服务器然后将请求交给它来处理。
扩展策略 fair按后端服务器的响应时间来分配请求响应时间短的优先分配。 url_hash按访问url的hash结果来分配请求使每个url定向到同一个后端服务器后端服务器为缓存时比较有效。
20、简述Nginx负载均衡反向代理通过什么方式实现后端RS的健康检查
nginx负载均衡反向代理包含内置的或第三方扩展来实现服务器健康检测的。如果后端某台服务器响应失败nginx会标记该台服务器失效在特定时间内请求不分发到该台上。 fail_timeout该指令定义了多长时间服务器将被标记为失败。在fail_timeout后服务器还是failednginx将检测该服务器是否存活如果探测成功将标记为活的。 max_fails该指令设置在fail_timeout期间内连续的失败尝试。默认情况下max_fails为1。如果被设置为0该服务器的健康检测将禁用。
21、简述Nginx动静分离
为了提高网站的响应速度减轻程序服务器TomcatJboss等的负载对于静态资源如图片、js、css等文件可以在反向代理服务器中进行缓存这样浏览器在请求一个静态资源时代理服务器就可以直接处理而不用将请求转发给后端服务器。对于用户请求的动态文件如servlet、jsp则转发给TomcatJboss服务器处理这就是动静分离。即动态文件与静态文件的分离。
22、简述Nginx动静分离的原理
动静分离可通过location对请求url进行匹配将网站静态资源HTMLJavaScriptCSSimg等文件与后台应用分开部署提高用户访问静态代码的速度降低对后台应用访问。通常将静态资源放到nginx中动态资源转发到tomcat服务器中。
23、简述Nginx同源策略
同源策略是一个安全策略。同源指的是协议域名端口相同。浏览器处于安全方面的考虑只允许本域名下的接口交互不同源的客户端脚本在没有明确授权的情况下不能读写对方的资源。
24、简述Nginx跨域及如何实现
从一个域名的网页去请求另一个域名的资源或任何协议、域名、端口有一处不同的请求就被当作是跨域即都被当成不同源。
通常基于安全考虑Nginx启用了同源策略即限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
Nginx若要实现跨域访问可通过JSONP和CORS进行实现。
25、简述Nginx重定向及其使用的场景
重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置如网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向。
URL重写是指通过配置conf文件以让网站的URL中达到某种状态时则定向/跳转到某个规则比如常见的伪静态、301重定向、浏览器定向等。当客户端浏览某个网址时将其访问导向到另一个网址的技术。
其主要场景有如下两个 将一串很长的网址转成较短的网址从而实现便于传播、易于记忆。 调整或更换Web服务器网址域名又必须要变更如访问目录、访问扩展名HTML变为PHP、访问域名为了能使旧的访问依旧生效从而实现自动重定向到新的网站。
26、简述Nginx地址重写、地址转发、反向代理 地址重写为了实现地址的标准化如地址栏中中输入 www.baidu.com. 也可以输入 www.baidu.cn。最后都会被重写到 www.baidu.com 上。浏览器的地址栏也会显示www.baidu.com。即nginx把收到客户端请求的内容所对应的服务器地址发给客户端让客户端自己去获取nginx同时返回302正确信息。 地址转发指在网络数据传输过程中数据分组到达路由器或桥接器后该设备通过检查分组地址并将数据转发到最近的局域网的过程。 反向代理当浏览器访问网站时nginx反向代理服务器会代替客户端向后端服务器查找所需的内容然后nginx反向代理服务器会把查找的内容返回给客户端。
27、简述Nginx地址重写和地址转发的差异
地址重写和地址转发有以下不同点 地址重写会改变浏览器中的地址使之变成重写成浏览器最新的地址。而地址转发不会改变浏览器的地址的。 地址重写会产生两次请求而地址转发只会有一次请求。 地址转发一般发生在同一站点项目内部而地址重写且不受限制。 地址转发的速度比地址重定向快。
28、简述Nginx 301和302重定向及其区别
301和302状态码都表示重定向表示浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址这个地址可以从响应的Location首部中获取客户端输入的地址A瞬间变成了另一个地址B。其主要差异为 301代表永久性转移(Permanently Moved)旧地址A的资源已经被永久地移除了这个资源不可访问了搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址 302代表暂时性转移(Temporarily Moved)旧地址A的资源还在仍然可以访问这个重定向只是临时地从旧地址A跳转到地址B搜索引擎会抓取新的内容而保存旧的网址。
29、简述Nginx高可用的常见方案
Keepalived Nginx 实现Nginx的高可用通过Keepalived来实现同一个虚拟IP映射到多台Nginx代理服务器从而实现Nginx的高可用性。
Heartbeat Nginx 实现Nginx的高可用通过Heartbeat的心跳检测和资源接管、集群中服务的监测、失效切换等功能结合Nginx来实现高可用性。
Nginx系列教程一| 手把手教你在Linux环境下搭建Nginx服务Nginx系列教程二| 一文带你读懂Nginx的正向与反向代理Nginx系列教程三| 一文带你读懂Nginx的负载均衡Nginx系列教程四| 一文带你读懂Nginx的动静分离Nginx系列教程五| 利用 NginxKeepalived 实现高可用技术Nginx系列教程六| 手把手教你搭建 LNMP 架构并部署天空网络电影系统
30、简述SSL和HTTPS
SSLSecure Socket Layer安全套接字层是一种数字证书它使用ssl协议在浏览器和web server之间建立一条安全通道数据信息在client与server之间的安全传输。
HTTPSHypertext Transfer Protocol Secure是超文本传输协议和SSL/TLS的组合用以提供加密通讯及对网络服务器身份的鉴定。
HTTPS也可以理解为HTTP over SSL即HTTP连接建立在SSL安全连接之上。
任何程序错误以及技术疑问或需要解答的请添加