Ansible
Ansible是一款极其简单的开源的自动化运维工具,基于Python开发,集合了众多运维工具(puppet, cfengine, chef, func, fabric)的优点。实现了批量系统配置,批量程序部署,批量运行命令等功能。同时Ansible是基于模块工作,其实现批量部署的是ansible所运行的模块。
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:可实现多级指挥。
在ansible内容中保留秘密数据并仍然公开共享,那么可以在playbooks中使用Vault。Ansible Vault,它包含在Ansible中,可以加密和解密Ansible使用的任何结构化数据文件。
Ansible将编排与配置管理、供应和应用程序部署结合并统一在一个易于使用的平台上。
Ansible的一些主要场景包括:
Ansible中受管主机列在主机清单(inventory)文本文件中,清单还将这些系统组织成group,以便更容易地进行批量管理。一个Inventory定义了Ansible将管理的主机集合。这些主机还可以分配至组,可以对组进行批量管理。组可以包含子组,主机可以是多个组的成员。Inventory根据类型可分为静态清单和动态清单:
Ansible 只使用最高优先级配置文件中的设置,其它配置文件中的设置将被忽略。即使存在其他优先级较低的文件,它们的设置也将被忽略,并且不会与所选配置文件中的设置相结合。
$ANSIBLE_CONFIG环境变量指定的任何文件都将覆盖所有其他配置文件。如果没有设置该变量,接下来将检查运行ansible命令的目录以查找ansible.cfg文件。如果该文件不存在,则检查用户的主目录以查找.ansible.cfg文件。如上配置文件都不存在时,才使用全局/etc/ansible/ansible.cfg文件。
Ad-Hoc命令是一种快速执行单个Ansible任务的方法,适合于不需要永久保存该任务,临时执行的场景。Ad-Hoc是简单的控制台操作,无需编写剧本就可以运行。它们对于快速测试和更改非常有用。
Ansible 利用变量存储整个 Ansible 项目文件中可重复使用的值,从而可以简化项目的创建和维护,并减少错误的发生率。在定义Ansible变量时,通常有如下三种范围的变量:
简单循环:
复杂(嵌套)循环:
Ansible模块被设计成幂等的,即在一个适当编写的剧本中,剧本及其任务可以在不更改受管主机的情况下多次运行,除非它们需要进行更改以使受管主机达到所需的状态。
然而,有时当一个任务对系统进行了更改后同时需要运行另一个任务。例如,对服务的配置文件的更改可能需要重新加载服务,以便更改后的配置生效。此时就需要使用hanlder程序。handler程序是响应由其他任务组成的通知的任务。每个handler程序都有一个全局惟一的名称,并在剧本中任务块的末尾触发。
如果没有任务通过名称调用handler程序,它将不会运行。
如果一个或多个任务都调用handler程序,它将在剧中的所有其他任务完成后仅运行一次。
因为handler程序是任务,所以可以在handler程序中使用与处理任何其他任务相同的模块。通常,handler程序用于重新启动主机和重新启动服务。
handler程序可以视为非活动任务,只有在使用notify语句显式调用时才会触发这些任务。
在 playbook 中, blocks 是囊括了任务的子句;
blocks 允许对任务进行逻辑分组,并可用于控制任务的执行方式,例如,管理员可以定义一组主要任务和一组附加任务,附加任务仅在第一组失败时执行。为此,可利用三个关键字在 playbook 中使用块:
Ansible审查每个任务的返回代码,以确定任务是否成功或失败。默认情况下,当一个任务失败时,Ansible会立即中止该主机上的其他操作,并跳过所有后续任务。
实际生产中,若希望即使任务失败也能继续执行play,Ansible也包含了多种特性用于管理任务错误:
忽略任务失败:在任务中使用ignore_errors关键字忽略错误,即使任务失败,也继续在主机上执行playbook。
数据中心有各种不同类型的主机。如web服务器、数据库服务器,基于开发环境的服务器。随着时间的推移,具有处理所有这些情况的任务和人员的Ansible playbook将变得庞大而复杂。
Ansible Galaxy是一个由各种Ansible管理员和用户编写的Ansible角色的公共库。它是一个包含数千个Ansible角色的归档文件,并且有一个可搜索的数据库,帮助Ansible用户识别可能帮助他们完成管理任务的角色。Ansible Galaxy包括指向新用户和角色开发人员的文档和视频的链接。
通过在所有主机上并行运行任务,Ansible可以对剧本的执行进行更多的控制。默认情况下,Ansible默认最多并行5个,因此它将同时在5台不同的机器上运行一个特定的任务。Ansible可以通过配置forks来设置并行执行任务数量。
同时Ansible也可以通过serial来减少ork数量所指定的并行书,serial关键字主要用于控制滚动更新,避免一次性更新过多的节点。
Ceph
Ceph是一个分布式的数据对象存储,Ceph相对其他存储系统具有如下优势:
Ceph主要特点如下:
Ceph体系架构主要由RADOS和RADOS GW和RBD以及CephFS构成。
OSD主要提供存储资源,每一个disk、SSD、RAID group或者一个分区都可以成为一个OSD,而每个OSD还将负责向该对象的复杂节点分发和恢复;
Monitor维护Ceph集群并监控Ceph集群的全局状态,提供一致性的决策。
Ceph存储池Pool是Ceph存储集群用于存储对象的逻辑分区。
Pool中存在一定的数量的PG,PG将对象存储在一组由CRUSH算法确定的osd中。
Ceph使用CRUSH算法将对象分配给池中的一个PG,根据池的配置和CRUSH算法,PG自动映射到一组OSDs。
一个PG里包含一堆对象,一个对象只能属于一个PG。
所有Ceph存储集群的部署都始于部署一个个Ceph节点、网络和Ceph存储集群。Ceph存储集群至少需要一个Ceph Monitor和两个OSD守护进程。而运行Ceph文件系统客户端时,则必须要有元数据服务器(Metadata Server)。
Ceph的应用场景主要由它的架构确定,Ceph提供对象存储、块存储和文件存储。
Librados提供了应用程序对RADOS的直接访问,目前Librados已经提供了对C、C++、Java、Python、Ruby和PHP的支持。
此类场景基于Librados之上,增加了HTTP协议,提供RESTful接口并且兼容S3、Swfit接口。RADOSGW将Ceph集群作为分布式对象存储,对外提供服务。
此类场景也是基于Librados之上的,细分为下面两种应用场景。
第一种应用场景为虚拟机提供块设备。通过Librbd可以创建一个块设备(Container),然后通过QEMU/KVM附加到VM上。通过Container和VM的解耦,使得块设备可以被绑定到不同的VM上。
第二种应用场景为主机提供块设备。这种场景是传统意义上的理解的块存储。
以上两种方式都是将一个虚拟的块设备分片存储在RADOS中,都会利用数据条带化提高数据并行传输,都支持块设备的快照、COW(Copy-On-Write)克隆。最重要的是RBD还支持Live migration。
此类应用是基于RADOS实现的PB级分布式文件系统,其中引入MDS(Meta Date Server),它主要为兼容POSIX文件系统提供元数据,比如文件目录和文件元数据。
Docker
Docker主要有如下特性:
标准化
高性能
轻量级
Docker容器可以有四种状态:
Dockerfile 是软件的原材料,Docker 镜像是软件的交付品,而 Docker 容器则可以认为是软件的运行态。从应用软件的角度来看,Dockerfile、Docker 镜像与 Docker 容器分别代表软件的三个不同阶段,Dockerfile 面向开发,Docker 镜像成为交付标准,Docker 容器则涉及部署与运维。
虚拟化技术依赖物理CPU和内存,是硬件级别的;
而docker构建在操作系统上,利用操作系统的containerization技术,所以docker甚至可以在虚拟机上运行。
传统的虚拟化技术在构建系统的时候较为复杂,需要大量的人力;
而docker可以通过Dockfile来构建整个容器,重启和构建速度很快。
虚拟化系统一般都是指操作系统级概念,比较复杂,称为“系统”;
而docker开源而且轻量,称为“容器”,单个容器适合部署少量应用,比如部署一个redis、一个memcached。
容器主要使用如下技术:
Docker体系相对简单,主要涉及如下5个组件:
docker客户端则扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。
docker服务端是一个服务进程,管理着所有的容器。
docker镜像,一个能够运行在docker容器上的一组程序文件,是一个只读的模板,不包含任何动态数据。
docker容器,就是运行程序的载体,容器是镜像运行时的实体。
Docker仓库是集中存放镜像文件的场所,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
Docker利用了网络的命名空间特性,实现了不同容器之间的网络隔离。命名空间可以支持网络协议栈的多个实例,独立的协议栈被隔离到不同的命名空间中。
因此处于不同命名空间中的网络栈是完全隔离的,彼此之间无法通信。每个独立的命名空间中可以有自己独立的路由表及独立的iptables设置来提供包转发、NAT及IP包过滤等功能。
Linux文件系统:由bootfs和rootfs组成,bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel,当kernel被加载到内存之后bootfs就被卸载掉了。rootfs包含的就是典型linux系统中/dev,/proc,/bin,/etc等标准目录。
Docker文件系统:Docker容器是建立在Aufs分层文件系统基础上的,Aufs支持将不同的目录挂载到同一个虚拟文件系统下,并实现一种layer的概念。Aufs将挂载到同一虚拟文件系统下的多个目录分别设置成read-only,read-write以及whiteout-able权限。docker 镜像中每一层文件系统都是read-only。
Docker使用Linux的Namespaces技术来进行资源隔离,其中Network Namespace实现隔离网络。
一个Network Namespace提供了一份独立隔离的网络环境,包括网卡、路由、Iptable规则等,Docker网络有如下四种模式:
docker跨主机通信按原理可通过以下三种方式实现:
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
Apache服务器是一个非常流行、功能强大并且开源的Web服务器,基于HTTP超文本传输协议运行,这一协议提供了服务器和客户端Web浏览器通信的标准。它支持SSL、CGI文件、虚拟主机等许多功能特性。
Apache虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。Apache具有两种类型的虚拟主机:基于名称的虚拟主机和基于IP的虚拟主机。
它们都是MPM,Worker和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 服务的访问控制
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器。可以作为一个HTTP服务器进行网站的发布处理,同时也可以作为反向代理进行负载均衡的实现。其主要特点有:
基于Nginx的特性,Nginx的应用场景主要有:
HTTP是建立在TCP上,一次HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上再进行HTTP请求。
HTTP请求建立在一次TCP连接基础上,对于HTTP会话,一次TCP连接可以建立多次HTTP请求。
master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程则是处理基本的网络事件。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
Nginx 是一个高性能的 Web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步非阻塞机制 。
使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响。
其次,采用独立的进程,可以让进程互相之间不会影响 ,如果一个进程发生异常退出时,其它进程正常工作,master进程则很快启动新的worker进程,确保服务不会中断,从而将风险降到最低。
缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当有大量请求时,会导致系统性能下降 。
当某个工作进程接收到客户端请求以后,调用 IO 进行处理,如果不能立即得到结果,就去处理其他请求(即为非阻塞 )。而客户端在此期间也无需等待响应,可以进行其他任务(即为 异步 )。
当IO返回时,就会通知此工作进程。该进程得到通知,暂时挂起当前处理的事务去响应客户端请求 。
对于Nginx而言,每一个虚拟主机相当于一个在同一台服务器中却相互独立的站点,从而实现一台主机对外提供多个 web 服务,每个虚拟主机之间是独立的,互不影响的。通过 Nginx 可以实现虚拟主机的配置,Nginx 支持三种类型的虚拟主机配置:
缓存对于Web至关重要,尤其对于大型高负载Web站点。Nginx缓存可作为性能优化的一个重要手段,可以极大减轻后端服务器的负载。通常对于静态资源,即较少经常更新的资源,如图片,css或js等进行缓存,从而在每次刷新浏览器的时候,不用重新请求,而是从缓存里面读取,这样就可以减轻服务器的压力。
使用Nginx作为代理缓存后,可加快客户端的访问,其过程大致如下:
代理(forward)是一个位于客户端和原始服务器(origin server)之间的服务器,即代理服务器。为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标原始服务器,然后代理服务器向原始服务器转交请求并将获得的内容返回给客户端。
其通常有如下三种代理模式:
盗链指的是在自己的界面展示非本服务器上的内容,通过技术手段获得其他服务器的资源。绕过他人资源展示页面,在自己页面向用户提供此内容,从而减轻自己服务器的负担,因为真实的空间和流量来自其他服务器。
因此,通常为了避免被盗链,通常Web服务器建议配置防盗链。Nginx防盗链其主要防盗链思路是能区别哪些请求是非正常用户请求,对于非正常用户的请求直接反馈403或重定向至其他页面。
负载均衡是将负载分摊到多个操作单元上执行,从而提高服务的可用性和响应速度,带给用户更好的体验。对于Web应用,通过负载均衡,可以将一台服务器的工作扩展到多台服务器中执行,提高整个网站的负载能力。其本质采用一个调度者,保证所有后端服务器都将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡。
Nginx作为负载均衡器具有极大的优势,主要体现在:
Nginx作为负载均衡器具有极大的优势,其负载均衡策略可以划分为两大类:内置策略和扩展策略,扩展策略为第三方提供。
内置策略
扩展策略
nginx负载均衡(反向代理)包含内置的或第三方扩展来实现服务器健康检测的。如果后端某台服务器响应失败,nginx会标记该台服务器失效,在特定时间内,请求不分发到该台上。
为了提高网站的响应速度,减轻程序服务器(Tomcat,Jboss等)的负载,对于静态资源,如图片、js、css等文件,可以在反向代理服务器中进行缓存,这样浏览器在请求一个静态资源时,代理服务器就可以直接处理,而不用将请求转发给后端服务器。对于用户请求的动态文件,如servlet、jsp,则转发给Tomcat,Jboss服务器处理,这就是动静分离。即动态文件与静态文件的分离。
动静分离可通过location对请求url进行匹配,将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。通常将静态资源放到nginx中,动态资源转发到tomcat服务器中。
同源策略是一个安全策略。同源,指的是协议,域名,端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。
从一个域名的网页去请求另一个域名的资源,或任何协议、域名、端口有一处不同的请求,就被当作是跨域,即都被当成不同源。
通常基于安全考虑,Nginx启用了同源策略,即限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制。
Nginx若要实现跨域访问,可通过JSONP和CORS进行实现。
重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
URL重写是指通过配置conf文件,以让网站的URL中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态、301重定向、浏览器定向等。当客户端浏览某个网址时,将其访问导向到另一个网址的技术。
其主要场景有如下两个:
地址重写和地址转发有以下不同点:
301和302状态码都表示重定向,表示浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(客户端输入的地址A瞬间变成了另一个地址B)。其主要差异为:
Keepalived + Nginx 实现Nginx的高可用:通过Keepalived来实现同一个虚拟IP映射到多台Nginx代理服务器,从而实现Nginx的高可用性。
Heartbeat + Nginx 实现Nginx的高可用:通过Heartbeat的心跳检测和资源接管、集群中服务的监测、失效切换等功能,结合Nginx来实现高可用性。
Nginx系列教程(一)| 手把手教你在Linux环境下搭建Nginx服务 Nginx系列教程(二)| 一文带你读懂Nginx的正向与反向代理 Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡 Nginx系列教程(四)| 一文带你读懂Nginx的动静分离 Nginx系列教程(五)| 利用 Nginx+Keepalived 实现高可用技术 Nginx系列教程(六)| 手把手教你搭建 LNMP 架构并部署天空网络电影系统
SSL(Secure Socket Layer)安全套接字层是一种数字证书,它使用ssl协议在浏览器和web server之间建立一条安全通道,数据信息在client与server之间的安全传输。
HTTPS(Hypertext Transfer Protocol Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定。
HTTPS也可以理解为HTTP over SSL,即HTTP连接建立在SSL安全连接之上。
作者:木二 链接:https://www.yuque.com/docs/share/d3dd1e8e-6828-4da7-9e30-6a4f45c6fa8e
m
」获取!
点个[在看],是对杰哥最大的支持!