ceph、docker、Apache、nginx⾯试题
简述ansible及其优势?
ansible是⼀款及其简单的开源的⾃动化运维⼯具,基于python开发,集合了众多运维⼯具(puppet、CFengine、chef、funct、fabric)的优点。实现了批量系统配置,批量程序部署,批量运⾏命令等功能。同时ansible是基于模块⼯作,其实现批量部署的是ansible 所运⾏的模块。
ansible其他重要的优势
1、跨平台⽀持:ansible在物理、虚拟、云和容器环境中为linux、Windows、Unix和⽹络设备提供⽆代理⽀持。
2、⼈类可读的⾃动化:ansible playbook以yaml⽂本⽂件的形式编写,易于阅读,有助于确保每个⼈都理解他们将要做的事情。
3、对于应⽤程序的完美描述:ansible playbook可以进⾏任何更更改,并且可以描述和记录应⽤程序环境的每个细节。
4、易于管理的版本控制:ansible剧本和项⽬是纯⽂本。他们可以像源代码⼀样处理,并放在现有的版本控制系统中。
5、⽀持动态库存:ansible管理的机器列表可以从外部资源动态更新,以便随时捕获所有易于管服务器的正确的当前列表,⽆论基础设施或者位置如何。
6、易于与其他系统集成的编排:HP SA 、puppet、Jenkins、Redhat satellite,以及存在于环境中的其他⼦系统,都可以被利⽤并集成到ansible⼯作流中。
简述ansible⼯作机制及其特性?
ansible是⼀款⾃动化运维⼯具,基于python开发,具有批量系统部署,批量程序部署、批量运⾏命令等功能。
其⼯作机制如下:
1、⽤户使⽤ansible或者playbook,在服务器中端输⼊ansible的AD-HOC命令集或playbook。
qq油箱2、ansible遵循预先编排的规则将playbook逐条拆解为play。
3、play组织成ansible可识别的任务(tack)
4、task会调⽤任务所涉及的所有模块(module)和插件(plugin)
5、读取inventory中定义的主机列表
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 :可实现多级指挥
简述Ansible中如何保存敏感数据
在ansible内容中保留秘密数据并仍然公开共享,那么可以在playbooks中使⽤Vault。Ansible Vault,它包含在Ansible中,可以加密和解密Ansible使⽤的任何结构化数据⽂件。
简述Ansible适合的场景?
Ansible将编排与配置管理、供应和应⽤程序部署结合并统⼀在⼀个易于使⽤的平台上。Ansible的⼀些主要场景包括:
1、配置管理:集中配置⽂件管理和部署是Ansible的⼀个常见场景。
2、应⽤程序部署:当使⽤Ansible定义应⽤程序,并使⽤Ansible Tower管理部署时,团队可以有效地管理从开发到⽣产的整个应⽤程序⽣命周期。
3、部署:当在系统上部署或安装应⽤程序时,Ansible和Ansible Tower可以帮助简化供应系统的流程,⽆论是PXE启动的裸⾦属服务器或虚拟机,还是从模板创建虚拟机或云实例。
4、持续交付:创建CI/CD管道需要许多团队的协调和参与。如果没有⼀个简单的⾃动化平台,团队协作很难完成。⽽Ansible playbook在应⽤程序的整个⽣命周期中可以保持适当的部署(和管理)
5、安全性和审计:当安全策略在Ansible中定义时,可以将站点范围的安全策略的扫描和修复集成到其他⾃动化流程中。安全性是部署的所有内容中不可或缺的⼀部分。
6、编排:配置本⾝不能定义环境,需要定义多个配置如何交互,并确保可以将不同的部分作为⼀个整体来管理。
简述Ansible Inventory?
Ansible中受管主机列在主机清单(inventory)⽂本⽂件中,清单还将这些系统组织成group,以便更容易地进⾏批量管理。⼀个Inventory定义了Ansible将管理的主机集合。这些主机还可以分配⾄组,可以对组进⾏批量管理。组可以包含⼦组,主机可以是多个组的成员。Inventory根据类型可分为静态清单和动态清单:
1、静态主机Inventory可以由⽂本⽂件定义。
2、动态主机Inventory可以由脚本或其他程序根据需要使⽤外部信息提供者⽣成。
简述Ansible配置⽂件优先级?
Ansible 只使⽤最⾼优先级配置⽂件中的设置,其它配置⽂件中的设置将被忽略。即使存在其他优先级较低的⽂件,它们的设置也将被忽略,并且不会与所选配置⽂件中的设置相结合。
$ANSIBLE_CONFIG环境变量指定的任何⽂件都将覆盖所有其他配置⽂件。如果没有设置该变量,接下来将检查运⾏ansible命令的⽬录以查ansible.cfg⽂件。如果该⽂件不存在,则检查⽤户的主⽬录以查.ansible.cfg⽂件。如上配置⽂件都不存在时,才使⽤全
局/etc/ansible/ansible.cfg⽂件。
简述Ansible ad-hoc命令?
Ad-Hoc命令是⼀种快速执⾏单个Ansible任务的⽅法,适合于不需要永久保存该任务,临时执⾏的场景。Ad-Hoc是简单的控制台操作,⽆需编写剧本就可以运⾏。它们对于快速测试和更改⾮常有⽤。
简述Ansible ad-hoc和playbook的区别?
1、Ad-Hoc 命令可以作为⼀次性命令对⼀组⽬标主机运⾏单个、简单的任务。
2、Ad-Hoc 不适合复杂配置管理或编配场景,Ad-Hoc ⼀次只能调⽤⼀个模块和⼀组参数。当需要多个操作时,必须使⽤多个 Ad-Hoc 来执⾏。
3、playbook可以实现以⼀种简易重复的⽅式对⼀组⽬标主机运⾏多个复杂的任务。
4、Playbook 是描述要在受管主机上实施的必要配置或程序性步骤的⽂件。
5、Playbook 为配置管理和部署提供了强⼤⽽灵活的解决⽅案。
6、Playbook 可以将冗长⽽复杂的管理任务转变为可轻松重复的历程,并且可预测成果然⽽。
7、playbook 是⼀个⽂本⽂件,其中包含⼀个或多个按顺序运⾏的play的列表。
8、playbook中,可以将playbook中的tasks保存为⼈类可读且可⽴即运⾏的形式。
9、play 是⼀组有序的任务,应该对从⽬录中选择的主机运⾏。
简述Ansible变量?
Ansible 利⽤变量存储整个 Ansible 项⽬⽂件中可重复使⽤的值,从⽽可以简化项⽬的创建和维护,并减少错误的发⽣率。在定义Ansible 变量时,通常有如下三种范围的变量:
global范围:从命令⾏或Ansible配置中设置的变量;
play范围:在 play 和相关结构中设置的变量;
host范围:inventory、facts 或 register 的变量,在主机组和个别主机上设置的变量。
简述Ansible如何实现任务的循环?
简单循环
1、Ansible⽀持使⽤loop在⼀组item上迭代任务;
2、loop可以使⽤列表中的每个项、列表中每个⽂件的内容、⽣成的数字序列或使⽤更复杂的结构来重复任务。
3、使⽤loop使管理员不必编写使⽤相同模块的多个任务。
复杂(嵌套)循环
with_nested键⽤于嵌套循环,循环在循环中运⾏。它需要⼀个包含两个或多个列表的列表。例如,将⼀个列表划分为两个列表,任务将迭代第⼀个列表中的每⼀项与第⼆个列表中的每⼀项。
简述Ansible hanlder?
Ansible模块被设计成幂等的,即在⼀个适当编写的剧本中,剧本及其任务可以在不更改受管主机的情况下多次运⾏,除⾮它们需要进⾏更改以使受管主机达到所需的状态。
然⽽,有时当⼀个任务对系统进⾏了更改后同时需要运⾏另⼀个任务。例如,对服务的配置⽂件的更改可能需要重新加载服务,以便更改后的配置⽣效。此时就需要使⽤hanlder程序。handler程序是响应由其他任务组成的通知的任务。每个handler程序都有⼀个全局惟⼀的名称,并在剧本中任务块的末尾触发。
如果没有任务通过名称调⽤handler程序,它将不会运⾏。
如果⼀个或多个任务都调⽤handler程序,它将在剧中的所有其他任务完成后仅运⾏⼀次。
因为handler程序是任务,所以可以在handler程序中使⽤与处理任何其他任务相同的模块。通常,handler程序⽤于重新启动主机和重新启动服务。
handler程序可以视为⾮活动任务,只有在使⽤notify语句显式调⽤时才会触发这些任务。
简述Ansible Block?
在 playbook 中, blocks 是囊括了任务的⼦句;
blocks 允许对任务进⾏逻辑分组,并可⽤于控制任务的执⾏⽅式,例如,管理员可以定义⼀组主要任务和⼀组附加任务,附加任务仅在第⼀组失败时执⾏。为此,可利⽤三个关键字在 playbook 中使⽤块:
block:定义要运⾏的主要任务;
rescue:定义将在 block ⼦句中定义的任务失败时运⾏的任务;
always:定义始终都独⽴运⾏的任务,不论 block 和 rescue ⼦句中定义的任务是成功还是失败。
简述Ansible如何处理play错误的?
Ansible审查每个任务的返回代码,以确定任务是否成功或失败。默认情况下,当⼀个任务失败时,Ansible会⽴即中⽌该主机上的其他操作,并跳过所有后续任务。
实际⽣产中,若希望即使任务失败也能继续执⾏play,Ansible也包含了多种特性⽤于管理任务错误:
忽略任务失败:在任务中使⽤ignore_errors关键字忽略错误,即使任务失败,也继续在主机上执⾏playbook。
简述Ansible⾓⾊?
数据中⼼有各种不同类型的主机。如web服务器、数据库服务器,基于开发环境的服务器。随着时间的推移,具有处理所有这些情况的任务和⼈员的Ansible playbook将变得庞⼤⽽复杂。
手机绑定银行卡1、⾓⾊允许将复杂的剧本组织成独⽴的、更⼩的剧本和⽂件。
2、⾓⾊提供了⼀种从外部⽂件加载任务、处理程序和变量的⽅法。
3、⾓⾊也可关联和引⽤静态的⽂件和模板。
4、⾓⾊可以编写成满⾜普通⽤途需求,并且能被重复利⽤。
5、定义⾓⾊的⽂件具有特定的名称,并以严格的⽬录结构进⾏组织。
简述Ansible Galaxy?
Ansible Galaxy是⼀个由各种Ansible管理员和⽤户编写的Ansible⾓⾊的公共库。它是⼀个包含数千个Ansible⾓⾊的归档⽂件,并且有⼀个可搜索的数据库,帮助Ansible⽤户识别可能帮助他们完成管理任务的⾓⾊。Ansible Galaxy包括指向新⽤户和⾓⾊开发⼈员的⽂档和视频的链接。
简述Ansible如何控制任务的并⾏执⾏?
读取配置文件失败通过在所有主机上并⾏运⾏任务,Ansible可以对剧本的执⾏进⾏更多的控制。默认情况下,Ansible默认最多并⾏5个,因此它将同时在5台不同的机器上运⾏⼀个特定的任务。Ansible可以通过配置forks来设置并⾏执⾏任务数量。
同时Ansible也可以通过serial来减少ork数量所指定的并⾏书,serial关键字主要⽤于控制滚动更新,避免⼀次性更新过多的节点。
简述Ansible故障后的排查思路?
关于清明节的作文300字
1、⽇志判断:默认情况下,Ansible没有配置为将其输出,记录到任何⽇志⽂件中。可通过ansible.cfg配置⽂件default部分中的log_path 参数或$ANSIBLE_LOG环境变量进⾏配置。然后通过⽇志进⾏定位。
2、Debug模块:调试模块是Ansible可⽤的模块之⼀,它可以更好地了解控制节点上正在进⾏的操作。这个模块可以在playbook执⾏时为某个变量提供值。
3、syntax-check:通过ansible-playbook 命令的 --syntax-check命选项检查剧本的YAML语法。
4、diff:Ansible还提供了–diff选项。此选项报告对受管主机上的模板⽂件所做的更改。如果与–check选项⼀起使⽤,这些更改将显⽰出来,⽽不是实际执⾏。从⽽判断Ansible整个过程需要做何种更改。
简述Ceph的优势及其特点?
Ceph是⼀个分布式的数据对象存储,Ceph相对其他存储系统具有如下优势:
1、CRUSH算法:ceph摒弃了传统的集中式存储元数据寻址的⽅案,⽽使⽤CRUSH算法完成数据的寻址操作。能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强⼤的扩展性,理论上⽀持数千个存储节点,从⽽增强了Ceph弹性扩展和⾼可⽤性。
2、⾼可⽤:通过CRUSH算法指定副本的物理存储位置以分隔故障域,⽀持数据强⼀致性,ceph可以忍受多种故障场景并⾃动尝试并⾏修复。
3、⾼扩展性:Ceph本⾝并没有主控节点,扩展起来⽐较容易,并且理论上,它的性能会随着磁盘数量的增加⽽线性增长。
4、特性丰富:Ceph⽀持三种调⽤接⼝:对象存储,块存储,⽂件系统挂载。三种⽅式可以⼀同使⽤。Ceph主要特点如下:
5、统⼀存储;
6、⽆任何单点故障;
7、数据多份冗余;
8、存储容量可扩展;
9、⾃动容错及故障⾃愈。
简述Ceph存储体系架构?
Ceph体系架构主要由RADOS和RADOS GW和RBD以及CephFS构成。
1、RADOS(Reliable, Autonomic Distributed Object Store)是Ceph的底层核⼼,RADOS本⾝也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现。RADOS由两个组件组成:OSD和Monitor。
①OSD主要提供存储资源,每⼀个disk、SSD、RAID group或者⼀个分区都可以成为⼀个OSD,⽽每个OSD还将负责向该对象的复杂节点分发和恢复;
②Monitor维护Ceph集并监控Ceph集的全局状态,提供⼀致性的决策。
2、RADOS GW和RBD:RADOS GateWay、RBD其作⽤是在librados库的基础上提供抽象层次更⾼、更便于应⽤或客户端使⽤的上层接⼝。其中,RADOS GW是⼀个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应⽤开发使⽤。RBD则提供了⼀个标准的块设备接⼝,常⽤于在虚拟化的场景下为虚拟机创建volume。
3、CEPHFS:CEPHFS则提供了POSIX接⼝,⽤户可直接通过客户端挂载使⽤。
简述ceph pool 有⼏种类型?
Ceph存储池Pool是Ceph存储集⽤于存储对象的逻辑分区。池类型确定池⽤于确保数据持久性的保护机制,Ceph有两种Pool类型:
replication类型:在集中分布每个对象的多个副本。
erasure coding类型:将每个对象分割成块,并将它们与其他擦除编码块⼀起分发,以使⽤⾃动纠错机制保护对象。
简述Ceph Pool、PG、ODDs的关系?
Ceph存储池Pool是Ceph存储集⽤于存储对象的逻辑分区。
Pool中存在⼀定的数量的PG,PG将对象存储在⼀组由CRUSH算法确定的osd中。
Ceph使⽤CRUSH算法将对象分配给池中的⼀个PG,根据池的配置和CRUSH算法,PG⾃动映射到⼀组OSDs。
⼀个PG⾥包含⼀堆对象,⼀个对象只能属于⼀个PG。
简述Ceph节点的⾓⾊?
所有Ceph存储集的部署都始于部署⼀个个Ceph节点、⽹络和Ceph存储集。Ceph存储集⾄少需要⼀个Ceph Monitor和两个OSD守护进程。⽽运⾏Ceph⽂件系统客户端时,则必须要有元数据服务器(Metadata Server)。
1、Ceph OSDs:Ceph OSD守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的⼼跳来向Ceph Monitors提供⼀些监控信息。当Ceph存储集设定为有2个副本时,⾄少需要2个OSD守护进程,集才能达到active+clean状态(Ceph默认有3个副本)。
2、Monitors:Ceph Monitor维护着展⽰集状态的各种图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH 图。
3、MDSs:Ceph元数据服务器(MDS)为Ceph⽂件系统存储元数据(也就是说,Ceph块设备和Ceph 对象存储不使⽤MDS)。元数据服务器使得POSIX⽂件系统的客户端,可以在不对Ceph存储集造成负担的前提下,执⾏诸如ls、find等基本命令。
简述Ceph的适应场景?
Ceph的应⽤场景主要由它的架构确定,Ceph提供对象存储、块存储和⽂件存储。
1、LIBRADOS应⽤
Librados提供了应⽤程序对RADOS的直接访问,⽬前Librados已经提供了对C、C++、Java、Python、Ruby和PHP的⽀持。
2、RADOSGW应⽤
此类场景基于Librados之上,增加了HTTP协议,提供RESTful接⼝并且兼容S3、Swfit接⼝。RADOSGW将Ceph集作为分布式对象存储,对外提供服务。
3、RBD应⽤
此类场景也是基于Librados之上的,细分为下⾯两种应⽤场景。
第⼀种应⽤场景为虚拟机提供块设备。通过Librbd可以创建⼀个块设备(Container),然后通过QEMU/KVM附加到VM上。通过Container和VM的解耦,使得块设备可以被绑定到不同的VM上。
第⼆种应⽤场景为主机提供块设备。这种场景是传统意义上的理解的块存储。
以上两种⽅式都是将⼀个虚拟的块设备分⽚存储在RADOS中,都会利⽤数据条带化提⾼数据并⾏传输,都⽀持块设备的快照、
COW(Copy-On-Write)克隆。最重要的是RBD还⽀持Live migration。
CephFS(Ceph⽂件系统)
此类应⽤是基于RADOS实现的PB级分布式⽂件系统,其中引⼊MDS(Meta Date Server),它主要为兼容POSIX⽂件系统提供元数据,⽐如⽂件⽬录和⽂件元数据。
简述Docker的特性?
Docker主要有如下特性:
正宗手抓饼1、标准化
保证⼀致的运⾏环境
弹性伸缩,快速扩容
⽅便迁移
持续集成、持续交付与持续部署
2、⾼性能
不需要进⾏硬件虚拟以及运⾏完整的操作系统
3、轻量级
快速启动
隔离性
进程隔离
简述Docker容器的⼏种状态?
Docker容器可以有四种状态: