目录
一、什么是 ECS
1.1 什么是弹性计算 ECS
1.2 弹性计算 ECS 的定位
1.2.1 弹性的伸缩能力
1.2.2 计算的基础运行环境
二、ECS 的基本概念
2.1 ECS 相关概念、地域与可用区
2.2 实例规格
2.2.1 在官网上创建之后会有各种各样的规格集,规格集的命名规则是怎样的?
2.2.2 上图有两大块,一块是入门级,一块是企业级。
2.3 规格族业务场景
2.4 镜像、磁盘、快照
2.4.1 镜像的本质就是快照
2.4.2 镜像、磁盘以及实例之间的关系
三、ECS 基础组件
3.1 块存储
3.2 存储产品对比
3.3 镜像
4.4 镜像的功能
3.5 快照
3.5.1 基本功能
3.5.2 高级功能
3.6 安全组
3.7 专有网络 VPC
3.8 专有网络和交换机概述
四、ECS 运维最佳实践
4.1 ECS-镜像最佳实践
4.2 ECS-快照最佳实践
4.3 ECS-安全组最佳实践
五、ECS 生命周期
阿里云 ACP 认证官网:阿里云云计算工程师ACP认证 (Alibaba Cloud Certified Professional - Cloud Computing)
考试大纲:
注意:目前知识点只适用于 2023年4月3日前!!! (如有新版知识点后续会补上更新)
云服务器 ECS(Elastic Compute Service) 是一种简单高效、处理能力可弹性伸缩的计算服务。具有快速创建,使用简单,性能卓越、稳定可靠,降低 IT 成本,功能特性丰富等特点。
ECS 是一个计算的服务,它有几个非常显著的特点,包括稳定性,单机 SLA 可以达到三个九,后面还会有 0.075,业界最高单机 SLA 的要求,并且在多 AZ、多可用区、多实例可用性达到四个九以上,云盘可靠性达到八个九,甚至九个九;其次会有宕机迁移的功能,包括预测硬件故障进行主动的迁移的功能,还有快照备份的功能等等,这些都可以保障云上业务或云上 ECS 的稳定性。弹性无论是从横向的纬度、扩容的台数或者是纵向的,可以把它纵向伸缩到更大的规格,云盘本身也有一些可扩容的功能。安全免费提供 DDoS 防护攻击,搭配其它各种各样云安全的产品,会保障云盘的安全、os 内部的安全等等。高性能、易用性会有各种各样的软件,包括数值镜像的功能,其中的一个模板或者镜像可以快速的进行大批量的复制,形成一套集群满足业务要求。最后是可拓展性,可拓展性 ECS 有各种各样的产品,无论是现在 ECS 跟其它的产品进行无缝连接或者 ECS 本身衍生出来的产品,比如说数据库,数据库是单独部署在一台物理机上的,是放在 ECS 本身的,其次还有一套线上办公的远程办公的解决方案,给客户提供了一个云桌面,背后也是由 ECS 来承接的。ECS 有这么多产品形态,并且有这么多的业务场景,所以对 ECS 本身的了解以及它的一些功能使用,对这些知识的掌握是至关重要的,这样才能更好地了解由它承载的业务。
ECS (云服务器)是阿里云产品体系中,最基础的计算服务,通常用作应用程序的运行环境,其最重要的特点是弹性+计算。
ECS 的最重要的特点是弹性,支持垂直和水平扩展两种能力。垂直扩展,可以在几分钟内升级CPU和内存,实时升级带宽;水平扩展,可以在几分钟内,创建数百个新的实例,完成任务后,可以立刻销毁这些实例。
弹性这个功能不再仔细讲解,对于垂直扩展和水平扩展阿里云本身都是支持的,客户可以根据个人的需求,比如说发现创建的 ECS 承担网站的业务,之前用的是16 核,发现 CPU 不够用了,经常会出现打满的情况,可以去做内存的升级。CPU 内存的升级,可以对于它网络带宽也进行升级。对于水平扩展来说,在大促的环境下,可以通过一些产品迅速扩展出来数百个甚至数万台实例承载新的业务,或者是新突增的业务,当流量高峰过后,这些实例都可以进行销毁或释放。这样对于流量高峰的场景,比如黑色星期五、双十一、六一八的一些活动都是有很大帮助的,可以帮助客户更好地规划资源,以及节省成本。
每个 ECS 实例上都运行着用户选择的操作系统,一般是某个 Linux 或 Windows 的发行版。用户的应用程序运行在实例的操作系统之上。
较好的实践是将 ECS 和其他云计算产品配合使用,例如,将使用 ECS 运行 webserver 上,使用 RDS 作为数据库,OSS 作为文件存储。应避免完全将原有物理服务器上的应用都照搬跑到云服务器上。
计算 ECS 最终的功能或者用途是作为一个操作系统客户的应用程序是跑在上面的,可能是 Linux 或者 Windows,或者是其它的一些版本等。总之,客户的应用程序是跑在这台实例例上,作为一个计算资源帮助客户完成业务。举一个简单的例子,ECS 可以和其他的云产品搭配使用。以前自己做个人开发的时候,可能会把原来物理机上的所有应用包括这台物理机上既会部署 injects,也会部署 mysql,甚至包括其它的把持久存储放在硬盘上,这样就会导致应用直接放到云服务器,云服务器出现问题的时候整个应用会挂掉,这样会有高可用的风险,而且会有耦合性的风险,所以比较好的实践是将 ECS 和其它云原生产品或者是云计算产品结合搭配使用。
举个例子,在很常见的网络场景,前面是用户入口,放一个云的 DNS,比如说网站上静态的页面、视频的加载,可以使用 OSS 加 CDN 可以快速对用户请求的内容进行响应。如果这个请求是动态,写数据库的请求,或者是填表的请求,会走到 SLB,这是流量分发的一个东西,可以把它理解成 enges 或者理解成一个七层的 tagin 的服务器。通过他来做分发,可以分发给多台 ECS 做网络的负载均衡,ECS 在这里面起到的作用是将用户的请求进行计算类型的处理,这个请求想要写一个东西,会根据业务的程序把它解析成真正要用到的一个表中,放到数据库里面,云上的 RDS。中间也可以加一些缓存,在这当中,有一些数据会写到数据库中,有些数据库可能会写到持久化的存储中,可以把它的一些数据备份或写到 oss 中,ECS 在这中间起到重要的作用是,把业务的一些逻辑或计算在 ECS 上做运行,然后把它跟其他的云产品搭配,搭配成整体的业务系统,这是简单的对 ECS 的介绍。
ECS主要有三块组成,计算,存储,网络,相互关联的元素组成,包括实例 instanc、磁盘 disk、快照 snapshot、镜像 image、安全组 security group、虚拟专有网络 VPC(Virtual Private Cloud)。
ECS 涉及到虚拟化的技术,包括分布式存储的技术、SDN(虚拟网络的技术)、软件应用网络技术,这三者之间是相互关联并且相互合作才能完成 ECS 本身的逻辑处理。下图是一套比较完整的 ECS 能承接的业务,有一些功能等等。
比如用户可以通过控制台、可以通过 API 做一些操作,操作的手段可以通过一些运维编排、通过自动化的脚本、通过云助手,或者直接远程登录 SSH 的方式进入到实例进行操作。通过什么方式创建这台实例?可以通过部署集的方式,通过一些脚本、弹性伸缩、资源编排等等方式去创建实例。右边是收付费方式,提供了多种灵活的方式,包括常见的、基本的包年包月、按量付费,抢占式实例一般是对一些计算型,可能突然有一个十点钟、有一个活动或有一个计算类的任务,需要马上起一批实例,这批实例价格会比较便宜,跑完之后可能会立马释放,对突增型的业务场景可以使用到 HRN实例,对成本有一些节约,包括预留实例券、节省计划等等,无论是库存方面,还是成本方面,都会提供到一些相应的计划或者一些选项,帮助大家去操作、购买。最重要的是到实例内部的功能,实例里面有实例的原数据,包括实例名、用户名、密码,metadata 更多的是实例的属性,假如他是两核四G的,所属的集群类似于这样的信息。userdata 更多的是用户专属的信息,比如说实例的用户名,它的登陆的密码等等,最后是系统事件,实例会有一些宕机迁移或者储存运维的操作,会以实例系统事件的方式提供给用户。
黄色部分是要讲的重点,ECS 主要的组件有实例本身、块存储、磁盘,其次有一些快照、镜像,包括跟网络相关,比如说尽力网络或VC网络安全组,其次就是弹性网卡上会有公网 IP 以及 VPC 之间的沟通用到的私网 IP。实例本身是一台虚拟服务器,里面包含了 CPU、内存,把它想当成一台自己用到的 PC,里面的内容,包括一些功能都是在创建的时候可以选择。镜像本身是提供实例的运维环境,提供实例的操作系统,初始化的应用包括预装的软件等等,如果不用阿里提供的官方镜像,想用自己的镜像的话,可以使用到自定义镜像,里面可以装一些自己想要的软件。比如说有些客户会使用自定义,预装一些软件,包括杀毒软件、防火墙,还有一些 proxy 等等。其次是磁盘跟快照,磁盘是快存储的一个设备,这个设备主要是用来提供 ECS 的操作系统,也会提供一些存储的数据,包括可以把一些数据库放在上面,把业务使用的文件放在上面,后续会详细讲解块存储里面的内容。快照顾明思议就是会做一个 snapshot,某一时刻云盘的数据状态,主要是用来做一些数据备份、数据恢复,它跟镜像之间也可以进行相互转换,用来做自定义镜像。安全组是在同一个地域,如果有需要保护到这台实例的进出方向的网络的时候,把它想象成一个云平台侧的虚拟的防火墙,主要是用来做一些实例的保护和控制等等。最后是 VPC,VPC 在逻辑上把云上的所以网段进行隔离,可以通过 VPC 自定义所有网络的IP段,包括开支路由表、网端等等。基本上涉及的计算类就是实例本身,具体物理核的内容看不到,虚拟化用虚拟核的方式包容,磁盘快照都是跟存储相关的,网络相关比较多的是安全组,以及 VPC1、弹性网卡等。
地域与可用区的概念,下图是一个从上到下的区分:
它其实是在逐渐细化的。比如说 global 是一个唯一指定的全局资源,比如说一个UID 的账号,没有人会跟你有冲突,或者是你的实例 ID,实例 ID 是全局里面没有冲突的,这样是唯一能够标注资产的途径。global 往下来是 region,数据中心的位置,比如 ABC 放的分别是上海、杭州、香港,每个 region 代表它所处的物理中心,部署的时候,如果想要远程连接好所服务客户,性能更好是要部署在离用户或者离自己最近的一个地方,物理中心相对来说比较近的一个地方。在物理中心之后,创建 ECS 之后,会有一个可用区的概念,虽然是在同一个物理机上,同一个数据中心,但是这个数据中心,如果都使用了同一套的电力资源跟网络资源,真的出现一些自然灾害或者是人为的故障,导致一个电源挂掉,那么整个数据中心都会受影响。虽然数据中心本身有一些在备的功能,但是会对客户造成较大的损失,由此诞生了 AZ 的概念,每个可用区有一套独立的电力跟网络资源,不会受到自然灾害的影响。假如两个可用区,一个是上海的 G 区,一个是上海的 S 区,有了不同的可用区之后,他们会 host 自己的电力跟网络,不会受到一些硬件的影响。AZ 概念也是这样诞生的,越大的数据中心可用区越多,在部署在同一个 region,比如说部署在上海选择性更多,超过八个以上可用区,在这些可用区选择分批部署,保证不会受到电力的影响,或者可用机硬件的影响。
在一个可用区下面会有 cluster(集群)概念,集群也是一个虚拟的概念,上面的这些其实都是一些虚拟的概念,AZ 是用物理隔板完全隔出来,这些都是逻辑上的,可以把一个 AZ 或几台 server,可能会在一个大的数据中心,可以用逻辑的方式、不同的 pdu 做一个供电。Cluster 是一个逻辑的概念,在一个云环境当中对一个产品享用或配置同样的环境,无论是云上的硬件配置,还是软件配置,都是一个逻辑的概念。Cluster 再往下会有 node,有一些 rec,有一些机位的槽来放物理机。部署包括产品组件的更新都是会一点点往上去做的,根据产品的能力,每个 cluster 做相应的轮转逻辑,或者针对每个 AZ 做轮转逻辑,先更新上海 G 区,再更新上海 H 区等等,类似于这样的部署策略。客户在 cluster 层面是看不到的,因为这里面是逻辑的概念,知道了其实也没有用处,知道在哪个 AZ 是比较重要的,保证相互如果出现一些 power failure,出现一些 VSW,出现的一些问题能够保证不同可用区之间是相互隔离,不会相互影响。这些概念在云上都是通用的。
ecs 是产品类型,规格族是 ecs 使用的业务场景,比如说 c 代表 computer,g 代表通用型,r 代表内存,ebm 代表裸金属型,每一个符号、每一个字母代表的是不同的使用场景。
它们的区别是入门级实例更多是共享型实例,共享型实例是 ECS 的 CPU、后台的资源可能会有争抢,比如说跟另外一个租户都在用共享型实例,共享同样速度机的资源,导致性能被抑制住,这种情况是会发生的,所以共享型只建议在个人测试或个人开发当中所使用,把它叫做入门级。其次就是企业级,企业级更多是独享型,就是当实例起来之后会专门用物理集独有的资源为 ECS 服务,做到了更高规格的资源隔离,这样就会保证线程跑的进程,比如说有12 个核,后面就是真正有12 个核在为物理机服务。在企业级的情况下,无论是办公环境还是大课的环境都建议客户使用独享型的实例,企业级的实例进行部署包括业务的运行。否则的话,共享型出现性能的抖动、业务的抖动都是有可能。下面大家会看到 x large、2x large 类似于这样的情况,“nx large”nx 越大代表的是 CPU 的核数越多,想要去买会有一个倍数的方式,比如说 2x、4x、8x,可以通过这种运营方式,更好地去了解到为什么命名。
下面是不同的实例,这些实例的规格,具体每个规格在什么业务上使用,可以看下图。比如说哪些是网站推荐使用的?哪些是 AH 所使有的?类似于这样的使用场景,在以后的工作或者想要搭建服务器的时候可以参考一下。
快照和磁盘可以相互转换
统盘可以创建镜像备份
镜像和实例可以相互转换
数据盘支持扩容(最大支持 32T)
生活当中遇到镜像的本质是可以直接用来创建 ECS 的,包括可以直接创建一些实例,因为这是一台 ECS 所需要的环境,就像在装自己的 笔记本一样,需要一个 ISO,镜像就是里面讨论到的 ISO。镜像的本质在阿里云的环境上也是一个快照,会把里面的数据做一些记录,做镜像的那一瞬间,数据的状态类似于快照的概念。镜像跟快照的关系,镜像可以直接用来创建实例,镜像作为一个运营环境,可以通过镜像批量的产生很多实例,但是快照本身不能直接创建实例,但是快照可以形成一个镜像,就是可以用快照做一个镜像,但是镜像是有实例的运营环境的,必须得是一个系统盘,里面含有操作系统的。快照跟磁盘本身是可以相互转换的,做备份的时候其实是在做快照,快照本身是存磁盘,去做了数据的 snapshot,这样就把磁盘当时的状态以拍照的形式保存下来。如果想要把数据做回滚,就要把快照创建成一个磁盘,把磁盘重新放到实例上,这样就有当时做快照的数据了。
其次就是磁盘跟镜像的关系,可以通过磁盘创建镜像,创建磁盘的前提在于这个磁盘一定是一个系统盘,因为镜像是一个操作系统的载体,如果单纯的拿一个数据盘,没有操作系统,是没有办法创建镜像的,因为里面没有实例该运行的环境。最后是数据盘,数据盘在阿里云上支持扩容到 32T,这样可以保证实例以及放的数据库可以扩展到 32T,去支撑业务的运行。
块存储是阿里云为云服务器 ECS 提供的块设备产品,具有高性能和低时延的特点,支持随机读写。您可以像使用物理硬盘一样格式化并建立文件系统来使用块存储,满足大部分通用业务场场景下的数据存储需求。
云盘:数据块级别的块存储产品。云盘采用多副才 本的分布式机制,具有低时延、高性能、持久性、高可靠等特点,支持随时创建、扩容以及释放。
本地盘:ECS 实例所在物理机上的本地硬盘设备。本地盘能够为 ECS 提供本地存储访问能力,具有低时延、高随机 IOPS、高吞吐量和高性价比的优势。
块存储是 ECS 最基础的部分,包括可以在 ECS 上存储数据,它上面有高性能、低延迟的特点,跟正常装一块硬盘在电脑上一样,同时也可以用移动硬盘做一些热插拔等,这些非常方便让客户在很多业务场景下做数据存储。块存储在 ECS 上主要分两大部分,一个是云盘,云盘用到的是盘古式的文件系统,保证写过来的数据是有三副本的功能,放在三个不同的存储集群上,有非常高的数据可靠性,并且有各种各样的规格供大家使用,像平时用到的或者对性能要求不是那么高的, HDD 会用到最开始或最早创建出来的高效云盘或普通云盘。如果对性能有要求的,或者对延迟有要求的,会推荐客户使用SSD、 ESSD,或者是最新推出的 PL-X,AutoPL,它们的区别是可以把 SSD 理解成第一代 SSD,ESSD 是第二代 SSD。性能上有也有不一样的区分,包括ESSD会有0,1,2,3这样规格的分类,越往上它的吞吐 LPS throughput,还有延迟都会有不一样的标准,再到最新一代的 PL-X 和 AutoPL 特点是可以自定义 ESSD 的性能。以前 PL0 更多的是会把它限制在一个区间,根据128G 做一个极限,往上加130G,会多不少的 LPS。但是会有大小的限制,只有创建的更大 LPS 才会更大,但是 ESSD 或 AutoPL 的特点是可以自定义想要的 LPS 以及 throughput。
其次,讲到的是用本地盘的概念,很多客户会有这样的需求,就是 eme 的本地盘,SATA 本地盘。它的特点主要在于本地磁盘跟实例放在同一个物理机上,优势是云盘的存储放在另外一个物理服务器上,通过相应的协议走到云盘,这会跨很多条例,比如说跨虚拟化的组件,跨一些网络的组件,到物理机的网口,再经过交换机等等,再到另外的云盘上所在的交换机,再到物理服务器上的网口,再通过盘古的一些程序去找,经过的路径越多延迟能力越高。但是对于本地盘来讲,它由于是在同一个物理机上,它的速度会非常快,延迟就很低,同样也会提供好的性能。但是本地磁盘的稳定性,是非常依赖物理机的,是没有盘古分布式系统的多副本的功能,比如说写一个三副本,对于一个自动节点挂掉之后,还有其他两个副本供读取,保证数据的完整性,但是在本地盘的情况下,它的存储完全依赖于物理机的磁盘。凡是硬件使用过程中肯定是有损耗的,如果真的物理机或者磁盘发生故障了,都会导致本地盘的数据丢失,这种情况下是没有办法挽救的。如果使用本地盘,建议大家不要把数据完整性要求高的部署在本地盘上。如果有需要的话,一定要把本盘的东西做近期的备份,无论是备份到云盘上,还是备份到其他的 oss 上,定期备份是要做的。选本地盘的时候一定要慎重或者了解当中的风险,如果真的出了故障造成数据丢失,也会承担相应的风险。
这里面的产品除了刚才讲到的块存储,用在 ECS 的云盘上,还会涉及到大家日常使用开发用到的 OSS,也是类似于块存储,以对象的方式把内容放进去。最后一个是共享存储,用到文件存储的 NAS。它们三个的特点,块存储用磁盘分区,创建文件系统;OSS 的特点是它的存储级别可以达到 TB,甚至KB,用来存一些网站的图片或者音视频,这种非结构化的数据都是非常方便,而且便宜的;NAS 是一个协议类型的存储,可以通过标准的文件协议,NFS 协议的方式访问数据,像之前讲到的,用企业的文件共享或者容器当中用到的 Storage class,类似于这些场景下都是会用到的。因为容器 pot 可能会去访问共享的存储文件,包括部门之间有一些文件想要分享给其他人,除了走 OSS 比较复杂之外,无论是用 Windows 还是 mack,创建一个 SMB 的 sever,或创建一个 NFS 的 sever。
访问方式,ECS 是通过 POSIX 挂盘的方式随机读写,OSS 更多的是做一些通过 SDK、REST 进行一些访问,更多是追加去写的方式去写文件;NAS 需要通过挂载,根据挂载定义它的访问方式。IOPS 级别来讲,块存储是很高的,因为这是通过 SSE 的方式访问,相对来说 OSS 极限的 IOPS 的量是没有这么大的,业务实践方式决定的它的动作,通过 HZP 或者是 IPS 的方式进行访问。
其次是吞吐量,块存储相对来说也要看选的规格,本身差距也没有特别大。延迟是一个明显的特点,如果用到块存储级别可能是秒级,OSS 跟 NAS 可能是在毫秒级,所以对延迟的要求,不使用的时候可以考虑块存储。容量上相对来说块储存是没有 OSS 跟 NAS 功能。文件级的授权,块存储是不支持的,OSS 跟 NAS 是支持文件级别的认证和授权,包括 OSS 可以去鉴定 IP、鉴定用户的认证等等。NAS 可以通过一些协议,NSS 方式对于文件访问的权限进行配置。终上所述,在应用场景下,在低延迟、高 IOPS 的环境下用到块存储,对于容量有要求,或资源存储的量比较大,同时需要大量的客户端 HTB 访问,是对象存储,比如说 CDN,一些网站的搭建等等。NAS 本身是部门之间的文件共享,容器的环境下,这两页更多的讲的是块存储能力,以及它的优势。
镜像提供实例的操作系统、初始化应用数据及预装的软件。操作系统支持多种Linux发行版本和不同的Windows版本。
公共镜像:阿里云官方提供的 Linux 镜像,皆是正版授权,安全性好,稳定性高。公共镜像包含了 Windows Server 系统镜像和主流的 Linux 系统镜像。
自定义镜像:您使用实例或快照创建的镜像,或是您从本地导入的自定义镜像。
共享镜像:在阿里云平台上可以把部分上传的自定共享给其他部门。
镜像市场镜像:由阿里云官方或三方服务商 ISV 通过阿里云云市场授权提供的镜像。
镜像是实例的运行环境,里面包括实例的操作系统到底是 Windows 还是 Linux,会放预装软件以及初始化的应用等等。镜像分为几类,一个是阿里云提供的官方镜像,无论是 Linux 还是 senteos、Windows 等等主流的市场镜像,这些镜像都是经过镜像测试,并且有正版授权的,来保障它的使用性和安全性。很多客户在第一次使用会选择公共镜像来保证用起来比较顺畅,用了比较多之后,大家可以尝试使用自定义镜像,想从本地或者是 oracle 想在云上跑业务,而不是在本地去跑,可以把镜像作一些相应的检查包括修改,最后以自定义的方式导入,镜像就可以在阿里云上运行了。自定义镜像,无论是通过镜像去改,还是装一些软件把它做成一个自定义镜像,从本地到进都是可以的,最主要的目的是里面已经预装好了想要的软件,或者应用数据,不再需要公共镜像做一些初始化等等。有了自定义镜像,想要给其他人也使用,做好的镜像里面已经包含了一些杀毒软件,包含了公司的ERP系统,把这个镜像共享给公司的同事和其他部门是可以做到的,自己做好的镜像可以共享给其他 UID 等等。最后一个是发现镜像需要正版的授权或者是手头不知道怎样做镜像,或者说想用以前在线下用的F5,在阿里云官方市场会有 ISV 授权,通过这些镜像直接部署也可以把防火墙通过镜像市场的镜像搭建出来并部署。
镜像的功能主要是三个大的功能,第一个是可以快速的部署环境,主要用途是在阿里云上会有各种各样的操作系统,已经提供好的系统,可以通过现有的、已经存在的镜像快速的搭出环境,做测试也好,做业务的部署也好。
第二个功能是批量部署环境,批量部署无论是通过自定义镜像,比如说 ECS 有快照,可以建自定义镜像,用这个模板批量的部署一些应用。自定义镜像中适用的场景会遇到比如说需要做一些批量的发布,短期内对系统的应用也不会做更改,可以通过自定义镜像把应用快速的发布。还有一些场景,比如说做数据的迁移,想从经典网络下面迁到 VPC 网络下面也可以搭建一个自定义镜像,通过自定义镜像把机器从经典网络环境,重新创建在 VPC网络环境下,还有一些跨可用区、跨地域的场景,也可以通过自定义镜像进行创建,还原系统。
第三个功能是备份环境,想要备份还原,做一些跨可用区的部署会用到自定义镜像。
快照最常用的事务场景是在定期备份当中可以安装设定的年月日以及具体的时刻做一些自动的快照备份,里面会涉及到一些创建快照的动作,用一些自动的快照策略定期的在某天或者是每周五的凌晨两点做快照,保障系统会有定期的数据备份。临时的数据备份有客户经常忘记做的,比如说在做系统更新、应用发布的时候有一些临时的变更,如果变更出错了,为了防止变更出错,在执行变更之前要手动的做一次快照创建,系统备份。还有一些例子,比如说在做系统盘的扩容,还有磁盘数据的迁移等等,在这种情况下都会做一些手动的快照。其次,可以通过快照创建镜像,或者用快照创建云盘,这些都是快照的用途,都是为了把某一时刻云盘记录下的数据状态能够把它写起来,或者把数据恢复到某个状态。最后是快照可以做一些快速的复制其它的地域,保障快照可以做一些迁移。
快照的机制就是用到的一些增量的备份,第一次做了一个完整性的快照,在做增量快照的时候可以去动修改的部分。
比如说对 B1 跟 C1 做修改,对这两个部分做增量快照的记录,就会发现,如果没做什么更改,第二个快照会做的很快,或者后面快照做的很快。如果到了第三次只对 B2 修改,进行一个记录,用它的原数据做一些项目的标记。
也可以在同一个地域创建镜像、创建云盘,在不同的地域可以做复制,当云盘出现问题的时候可以通过快照做回滚,来保障数据不丢失。
这些高级功能客户也会用到,第一种是快照极速可用,云盘的数据如果变化很大的情况下,就会发现创建快照的速度会越来越长,因为增量的数据变多了,会花更多时间把这些数据记录下来。针对于 ESSD 推出了快照记录可用功能,这个功能可以加快快照的创建速度,基本上能达到秒级把快照建出来,一般想要用快照快速搭建一个测试的环境,这个时候就可以把创建快照极速可用功能开启,可以把快照快速建出来。比如说有一些问题想要对这台实例做一些操作,做这些高风险操作之前,可以用快照极速可用功能,然后把快照快速建出来,否则会等很久。这些高危的操作包括系统的扩容、更换系统盘、业务系统做更新类似于这些等等,都建议做一下快照,数据量比较大的话,可以用快照极速可用功能。
第二个高级功能是应用一致性快照,有很多客户做快照之后做回滚会发现应用有数据丢失,原因是做快照的时候是底层去做,不会把内存的数据记录下来,因为内存在做快照的时刻并没有刷到盘上,在这种情况下,可能会出现应用数据丢失,或某些应用没有办法起来的情况。应用一致性快照的目的就是为了保证打快照的瞬间应用或业务系统会把里面所在的数据都落盘进处理,尤其是在一些数据库的应用下,会发现有这些问题。应用一致性快照原理是通过阿里云助手,就是一个 agent,通过这个 agent 保障数据是能够真正进行落盘的,它实现的功能 Windows 上用的是 USS,Copy 这个功能,Linux 就是需要根据每个应用不同的方法去做,官方文档上有相应的例子,比如说 mysql 会给出一些 demo 的脚本,怎样把相应的事物进行落盘的操作等等,可以在阿里官网上查看,不同的应用需要自己编写不同的脚本,但是给的一些案例可以参考使用。
安全组可以理解为云上的虚拟防火墙,用于控制组内 ECS 实例的入流量和出流量,从而提高 ECS 实例的安全性。安全组具备状态检测和数据包过滤能力,您可以基于安全组的特性和安全组规则的配置在云端划分安全域。可以通过原组进行匹配,匹配出来之后决定它的动作是通过还是拒绝。可以通过云IP、通过协议、通过目的端口、策略和优先级这些因素决定是否要对 ECS 进行放行,还是拒绝,这些都是可以在安全组上配置的。安全组里面有一些简单的功能,比如说做组组授权,这是非常实用的一个功能,默认 ECS 如果是安全组的话,在不同安全组下面 ECS 或弹性网卡之间是相互隔离的。如果通过安全组的组组授权,比如启动一个安全组,授权另一个安全组的访问,可以保证这两个安全组的 ECS 能够实现内网之间的互通,这是一个比较实用的功能,而不是说这两台机器使用不同的安全组就没法进行通信了。正常情况下希望把 VPC 打通,或其他的方式让这两台 ECS 通信,加一些安全组的规则之类,如果对于安全组进行相互授权的话,就可以实现两个安全组内的 ECS 进行内网访问。
第二个是安全组实例之间的隔离,比如说普通安全组之间也有这样的功能,就是安全组内的 ECS 内网进行隔离,其他安全组默认的也是内网进行隔离。还有一些功能是更换安全组和克隆安全组,快速的将 ECS 的业务环境进行相应的流量隔离。
专有网络(Virtual Private Cloud,简称 VPC)可以帮助用户基于隧道技术,实现数据链路层的隔离,为每个用户提供一张独立隔离的安全网络环境。在 VPC 内部,用户可以以自定义 IP 地址范围、网段、路由表和网关等。VPC 推荐设置的是 192168.0.0/16、17216.0.0/12 和 10.00.0/8 三个标准IPv4私网网段。
下面讲解 VPC 跟交换机,这一部分更多的是在网上这一方面做云上的部署的时候考虑到对于不同网段的规划,包括到底用什么样的网段怎样跟云下,如果有云下的环境,保证时段的不冲突,其次就是两个 VPC 之间怎样做互通等等。阿里云的 VPC 是通过 VX 量方式做数据链路层的隔离,在这上面可以自定义相应的网段,下面是默认推荐的几个网段,192168.0.0/16、17216.0.0/12 和 10.00.0/8,也可以做一些变更,但是需要提起公安做一些变更等等。在一个个网段下面再去画 VSW,里面的交换机去做具体网段的切割,不同网段下面可以放不同的 ECS,放一些 RDS 不同的资源等等,用来做内网的沟通。
在专有网络 VPC(Virtual PrivateCloud)中使用云资源前,您必须先创建一个专有网络和交换机。您可以在一个专有网络中创建多个交换机来划分子网。一个专有网络内的子网默认私网互通。
如果已经画好了某个网段相应的子网,假如在大的 VPC 下面画了三个子网,会有三个交换机,三个交换机其中两个在可用区a,第三个在可用区 b,在这种情况下会创建相应的系统路由表,通过路由表进行相应的路由。系统路由表是这样创建的,可以增加里面的规格,现有的规格建议去查看,里面有预设好,比如说从公网网段进来的路由,或者有一些云产品自己划分的路由的网段,会有相应的路由表去做一些配置。如果需要自己配置一些自定义的路由,需要指定给某个服务或某些网段来使用,可以用到自定义路由表,也可以自己去 VPC 下创建,去进行网络的管理。
交换机(VSwitch)是组成专有网络的基础网络设备,用来连接不同的云资源实例。专有网络是地域级别的资源,专有网络不可以跨地域,但包含所属地域的所有可用区。您可以在每个可用区内创建一个或多个交换机来划分子网。
创建专有网络后,系统会自动为您创建一张系统路由表并为其添加系统路由来管理专有网络的流量。一个专有网络只有一张系统路由表。该系统路由表在创建专有网络的时候自动为您创建,您不能手动创建也不能删除系统路由表。
您可以在专有网络内创建自定义路由表,然后将其和交换机绑定来控制子网路由,更灵活地进行网络管理。每个交换机只能关联一张路由表。
下面讲解运维测的最佳实践,刚才讲了很多组件,比如磁盘、镜像、快照、安全组等等,这些组件在日常生活当中或日常运维当中,最佳实践建议的有哪些点?
讲镜像是因为对云上运维管理来说,镜像运维非常频繁。因为在做一些自定义的部署,包括数据的复制,这些其实都用到了自定义镜像,这些镜像在实践上需要注意以下事项。
对于 4GiB 以上内存的云服务器,请选择 64 位操作系统,因为 32 位操作系统存在 4GiB 的内存寻址限制。
不要停止 Windows 系统自带的 AlivunService 服务或自带的 shutdownmonexe 进程,停止后可能会影响控制台正常关机或者重启。
如果您使用普通云盘,不建议使用虚拟内存。如果使用高效云盘、SSD 云盘或 ESSD 云盘,可以根据实际情况使用虚拟内存。
swop 跟 page file 的概念,如果系统长期内存占用率比较高,新的服务或进程在申请内存的时候发现内存不够,会去查看有没有虚拟内存的配置,虚拟内存最主要的是把一些存储介质,比如说磁盘空间虚拟成内存空间供进程组使用,这样就能保证在内存比较紧张的情况下,能够申请内存而不是把 OAM 或申请不到的内存报错,类似于这样的情况。为什么普通云盘不建议开启虚拟内存呢?因为这里会存在速度上的差异,内存的速度是非常快的,如果使用普通云盘的话,普通云盘更多的是用到sdd,它的读写速度是相对比较慢的,它跟内存速度不一致的话,或者性能差距比较大会使应用受到影响。如果用到的是 SSD或 ESSD 这样的云盘,可以根据实际情况开启或扩大虚拟内存。里面的 page file 也是非常重要的一点,就是在配一些 dant 的情况下,需要通过 page file 把内存写到硬盘上。实例可能会出现蓝屏的问题,这种情况下可以查看自己的 page file 的配置的大小是多少,其次,他配置的位置,因为遇到的一些情况默认会放在C盘下,有很多客户 C 盘的可用空间是比较小的,就会导致 page file 配置成了 32G,跟内存是一样的,但是 C 盘的可用空间只有 20 个 G,导致蓝屏之后要写到 C 盘里,写不进去。要确保 page file 所配置的路径的可用空间是足够大的,至少要大于内存加 1MB,加 1MB 是为了保证会不会有额外的空间消耗。
批量跨地域部署 ecs-复制镜像
当需要做一些批量跨地域的部署 ECS ,建议使用复制镜像的方式,假如在上海有一批业务跑的比较好,目前也已经上量,想要把这套业务完整的复制到香港地区,可以通过复制镜像的方式把镜像移植到香港,在香港做批量的部署。
自定义镜像导入-SMC 实例迁移
自定义镜像的导入跟 SMC 实例迁移,这也是很多客户会遇到的问题。比如说很多客户想把云下的一些或者从其他的云搬到阿里云上,有两种方式,第一种方式是通过自定义镜像导入,线下通过自己的机器上把VHD 做一些处理,官方都是有处理的办法,包括要开启哪些服务,安装哪些驱动等等,把哪些服务停掉,这些都经过处理之后上传到 ESS 里面做自定义镜像的导入。这是其中一种方法,还有另外一种方法是很多客户说使用到的 SMC 的功能,通过迁移化的方式直接把来自Vivian 的,或者是直接来自 oracle 的实例自动迁移到阿里云上,对于实例迁移或者是搬站的一些情况可以根据实际的情况做选择。
快照最主要的目的是备份和恢复,会遇到一些问题,比如说很多客户没打快照,需要找实例恢复,这没有办法做到,因为他做了误删除。建议大家对于生产上的业务尽量使用自动快照策略打快照,出了问题至少还有数据保存在上面,最快的 2t 恢复生产。注意的事项比较罕见,同一时间集群中大量快照并发创建有可能会触发底层流控,有可能触发的情况是创建快照的速度比较慢,如果真的出现这种问题,建议做一下事情。
建议把快照的策略做一些变化,把自动快照的时间尽量打散。建议不同的策略建议设置不同的触发时间。如果对于集群的压力、盘古的压力比较大,建议每个策略间隔两个小时左右。建议设置在业务低峰期,因为快照本身会消耗一些 IO,对磁盘性能有一定影响。高峰期一定要打,不同的业务场景下的状态显示不太一样,多多少少会有一些影响。对于核心业务快照的数量,包括频次一定要做到位,会有一些客户在做配置的时候,自己并不清楚这是否是一个核心动作,是否是一个高位的操作。请做一些配置,无论是装软件或者是做一些比较大的配置变动,比如说升级内核,对运动做一些调试,尽量在云平台做一个快照,Windows 舞台打补丁更新之前会做一个快照,可能这台机器半年没有重启或者更早没有重启,更新之后重启不一定是系统更新导致没有办法起来,可能是历史遗留性问题,比如说驱动的签名出现问题、驱动的组件丢失,或者是磁盘的分区出现问题都有可能导致,但是它的出发条件就是重启。如果在重启之前已经打了快照,更好的方便去把应用或数据进行恢复,所以一定要在运维操作之前对快照、对数据安全、数据备份要心存敬畏。建议对核心ECS管控测及实例内部重大配置前必须做快照。
安全组涉及的内容比较多,下面是客户经常咨询的问题。比如说安全组明明配置了,但是访问还有问题,包括安全组的规则增多,导致没有办法增加规格,这些都是客户经常咨询或运维当中碰到的问题。首先,安全组是一个有状态的应用,意思是在一个会话连接当中,这个会话是有一定时长的,建立连接之后,比如这个会话已经经历了安全组,经过安全组之后在会话期内逆方向的连接也好或数据包也好,都是被允许的,出方向同样也是被允许的。安全组作为有状态的应用不需要在入方向配,放行之后,出方向同样也要配一个方向,因为入的一端做了回包,理论上也是要放行,除非这个包在其他地方被卡住了。但是安全组这一段放行,出方向就不需要再做同样的配置了。
第二个是普通安全组和企业安全组,在创建安全组的时候会有这样一个提示,到底是普通安全组还是企业安全组。普通安全组日常环境用的比较多,企业安全组更多的是面对企业级的场景,它可以容纳更多的实例,比如实例的弹性网卡、SIP可以放的更多,而且它的访问规格更加严格。比如说一个普通安全它的实例网卡内网之间是互通的,比如说在一个普通安全组内,2台 ECS 是互通的,但是企业安全组是隔离的,需要再配置相应的规格。
添加安全组规则时遵循最小授权原则,只允许特定IP,尤其是开发官网的情况下,遇到一些问题,大家默认都用斯格林去开放 Linux 访问,可能会被一些提高攻击扫到,会被暴力破解扫到,有可能机器就会被黑掉。在个人使用的时候,配置安全组要格外谨慎,尤其是对官网的一些服务。
第四个是安全组的规则要尽量简单、简洁,单个实例可以加入多个安全组,如果在一个安全组加了特别多的条数,就会导致管理起来比较复杂,对于后台也会有一些风险。一台实例可以加入多个安全组,一个安全组用一个途,假如有一个叫 NGX-We,里面的规则只针对 web 使用;另外一个比如说叫 NGX-DB,这个归 DB 使用。如果需要同一个安全组,可能这两个都需要加,可以把 NGX-Web 和 NGX-DB 都加给 ECS,是没问题的。默认来讲,一个实例允许加入五个安全组,所以对于单个安全组尽量不要放太多的规则、太复杂的规则,这样自己管理起来也比较麻烦。
对于安全组进行相应的分类,这样可以保证管理的简洁程度,避免直接修改线上的安全组,改了线上安全组,加在上面的不论是 ecs 还是弹性网卡等等,这些可能都会涉及到很多,可能客户改了一个不确定它的影响是什么之类的,或者对线上产生一个比较大的影响。在做安全做变更的时候,可以先克隆一个安全组做测试,安全组有复制的功能,测试之后保证实例之间的通信正常,再去进行生产环境的变更。
安全组最佳的实践第一点是普通安全组里面有一些组件的授权,比如说组组授权去做配置;第二点是安全组的规划,安全组的规划默认来讲安全组有一个数量的上限是5×200,5×200的意思是这个实例允许加入的安全组的数量是五个,每个安全组最大的规格数,就是出方向和入方向在一起最多可以配200个。如果还想再加安全组,是没办法加的。还有一种情况是200个安全组的规格不满足现在运维的要求,可以修改,比如说最多是四个安全组,每个实例加四个安全组,规格增加到250,或者是500,但是最多只能加两个安全组,原则就是最多不要超过1000。如果真正没有办法满足要求,有两个办法,第一个办法是看一下有没有冗余的安全组的规格,可以在现有的安全组的规格上做一些轻易;第二个方法是可以用别的云产品,在现在的云环境当中不只是通过安全组做流量的控制,可以通过防火墙,就是 CFword 的功能进行 VPC 之间的并且共享的隔离,通过 CFword 功能进行相应的出入方向的控制,不过这是一个新的产品,或者是需要购买的产品,限制不满足要求的时候,可以用云防火墙上的功能。
当 VM 收到创建实例的请求之后,会进入一个 pending 的状态。总共有七个状态,分别是 pending、starting、running、stopping、stopped、destroying、destroyed,destroying 和 destroyed 释放,释放用的相对没那么多。中间态就是稳态,稳态就是理想态,理想态并不是中间的过程,而是最后达到一个理想的结果,中间态有 pending、starting、stopping,这几个是中间态,就是还没有达到真正理想的状态,在这个状态下很可能会出现一些问题。可能会出现以下问题,从创建实例到 pending 的过程当中,后台会查看这台实例到底有没有欠费;其次是后台到底有没有资源可以开,比如说这里面会涉及到两大块,会有账号的费用,这台 ecs 是否欠费,有没有性控的一些要求等等。
第二块叫资源的调度,比如申请一个巨大规格的实例,资源的调度可能不太够,暂时在所选的区域没有发现合适的集群、合适的节点去调度给所创建的资源,这个时候可能会处于pending 状态,pending是一个中间状态,后面可能会变成 feel bel,可能会报错。如果是这样的情况下,一般控制台会给一个报错信息,比较明显的报错信息,如果没有的话会报一个 interl,或库存不足。这样情况下,一般来说会有一个request ID,request ID 可以记下来提交给阿里云售后的人员,到底 request ID 后台是用来做什么的,通过 request ID 作为唯一标识来去判断整体创建的,只通过这个去做判断。
第一步过了之后就到了 starting,starting 代表后台的控制面,收到了创建的请求,需要正式开始去建,在已经得到的调度,在上面去加载镜像,去创建 VPC,把网卡 report 后台的资源组装起来,这个过程是这台实例在 starting 的状态。这个过程会出现的问题,比如说 starting 失败,可能会进入 stop,甚至是进入 file 的状态。一般会有哪些问题?这个机器在关机的过程中发现这台虚拟机所在的物理机硬件出现问题,这是有可能的;还有一些可能就是速度机上的软件,有一些进程出现了异常,导致这台机器开不起来,没有办法正常启动;还有一种情况是用到自定义镜像,自定义镜像本身没有配置好,没有装相应的驱动,没有自定义一些脚本,最后导致这台实例没有正常的处于理想的 running 的状态。无论是 Linux 还是 Windows,自带一些阿里云的进程,这些进程会保它的心跳,根据心跳判断这台实例到底有没有起来,比如说在Windows 当中一直处于转圈的状态,在这种状态下真正的服务是没有提起来的,这种情况下一直处于 starting 的状态,没有进入到最后稳定的 running 的状态,就会导致超时创建超过多长时间,会显示 file、stop 的状态
如果这些都顺利完成了,可以进入到正常的 running 状态。在 pending 状态下可能会遇到一些问题,starting 状态下遇到的问题,当需要把这台实例停止的时候,有可能会有哪些问题?第一个是之前提到的把 os 内部的阿里云使用到的进程关闭掉,导致控制台发出信号 osname 没法收到,这种情况下关闭是不成功的,os 没有相应的。stop 会有几种类型,有停机收费跟节省停机两种模式,以前叫做停机收费跟停机不收费,但是停机不收费是收费的,所以改成节省停机,就是省钱,但是还会花一点钱。停机收费顾名思义就是保留所有的计算资源,包括公网IP,计算资源包括 VCPU 和内存,实例 ping 在这台数字机上,不能动,资源还是自己的,什么时候开机在这台机器上集起来 ,但是会收费,因为占有资源。节省停机会把这些计算资源释放,包括固定的公网IP释放掉,这部分计算资源的钱是省下来的,会节约一大比开销。 节省停机还会保留云盘的数据,还有一些 eip,如果用的弹性公网的IP是会保留的,这些还是会收费,所以叫节省停机。停机之后处于 stopped 的状态,还会涉及到实例释放。如果是包年包月还没到齐是不支持释放的,会有释放失败的可能性因素。如果需要提前释放,可以走客服申请退款或控制台上先转成按量付费在进行释放,会根据使用包年包月的时间做相应的配置,或者是退款之类的。实例释放之后,所有实例的ID、固定的公网IP、系统盘、数据盘,如果没有做特殊的配置,比如说保留数据盘等等,这些都会随着释放资源都释放掉,是不可恢复的。
有很多客户或者运维,无论是通过脚本,还是通过一些 API 的调用,参数可能会写错,比如说某些正则匹配符号或者是变量的授权写错了,导致误释放了一些实例,是没办法恢复的。如何避免这种情况?释放的时候实例有释放保护,就是相当于打一个锁,如果是重要的实例,可以把这个锁开启。有的时候可能是同一个 UID 下的子账号导致的这样的问题,可以把释放保护开启。