资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
如何使用阿里云前言前言大家好。我们是成都瑞小博科技 (www.rippletek.com)。自从去年 10 月在阿里云购买了第一台 ECS 并部署服务后,到现在已过去了一年。在这一年间,随着业务的扩张和用户规模的增长。我们的 ECS 数量从 1 台增长为 20 台,并开通了 SLB, RDS, OSS, CDN,OCS, SLS, MQS 等多项业务。在这一年中,通过工单系统得到了阿里云的技术支持团队和开发团队的大量帮助和指导。在“应该如何使用阿里云“这个问题上,也积累了一些心得和经验,希望和大家分享,抛砖引玉。 初探初探 ECS使用阿里云的第一步, 当然是购买一台 ECS(后面称为 ecs1)。这台 ECS 应该是什么样的配置呢?一般情况下,我们建议的最低配置是单核,2G 内存。如果只有 1G 的内存,运行阿里云的一键 lamp 安装脚本可能会 oom。操作系统,如果是从头开始建站,建议使用 Ubuntu 14.04. 相比 CentOS 6.5, Ubuntu 的内核版本更高,能玩的花样也更多(比如docker)。带宽的话,1M 其实就够了。无论如何,不要超过 5M。根据阿里云的带宽阶梯计价公式,1M 带宽的月单价是 21 元,2M 比 1M 多 23(即 44 元,后面类推),3M 比 2M多 25, 4M 比 3M 多 27, 5M 比 4M 多 29, 而一旦超过 5M, 每多 1M 带宽,价格就多 100 元! 所以,带宽越高,每 M 的单价也越高。同时,对于需要高可用的服务,根本不可能通过 ECS 的外网带宽开出去。所以,购买 1M 带宽,获得一个外网 IP,就足够了。至于数据盘,一般情况下,你不会需要它。ECS 购买完成后,你会收到阿里云的短信通知,发给你 root 密码。用那个密码登入用那个密码登入 ECS 后,应该做的第一件事是加入后,应该做的第一件事是加入 authorized_key 并并删除删除 root 密码密码:复制代码1.mkdir .ssh2.chmod 700 .ssh3.vi .ssh/authorized_keys #加入自己的 id_rsa.pub4.chmod 600 .ssh/authorized_keys5.passwd -d root这样,可以在根本上杜绝 root 密码被猜中的可能性。初探初探 SLB第二步,购买一个公网的负载均衡器 SLB(后面称为 slb1)。如果你的域名已申请好,可以把域名指向 slb1 了。为了保证服务的高可用性,服务一定要通过为了保证服务的高可用性,服务一定要通过 SLB 开出去。开出去。设想一下,如果你的服务是走单台 ECS 出去,某天你需要修改一下 apache 的配置,修改完毕后,service httpd restart 却发现 httpd 进程没有起来 (由于 httpd.conf 里有个小小的笔误.)。事实上,这个时候你就已经停服了!这也是为什么前面建议不必购买高带宽 ECS 的原因。为了避免出现上面提到的那种尴尬的情况,SLB 的后端服务器至少要有两台 ECS 并配置好 health check。 尽管我们现在只有 ecs1,如果上面的服务环境已经部署 ok, 就先把它加入到 slb1 的后端服务器组里,然后在浏览器里输入我们的域名开始测试吧!然后,我们还需要另一台 ECS。再探再探 ECS第三步,再购买一台 ECS(后面称为 ecs2)。这一次,如果我们的业务代码本身不用从 internet 上获取数据的话,我们可以试试内网 ECS,即 0M 带宽的机器。这样的机器没有带宽费用,会便宜一些,更重要的是,它没有公网 IP,所以也更安全。下面问题来了:它没有公网 IP,我如何 ssh 上去?它无法访问 internet,我如何使用 yum, apt 这类包管理器来搭建业务环境? 对于第一个问题,有两个解决办法:1.先 ssh 到有公网 IP 的 ecs1 上,然后再 ssh ecs2 的内网 IP,搞定2.也可以通过一些配置,实现内外网无感知的直接 ssh 上去,方法如下:在 ecs1 上安装 nc 工具,并修改/etc/hosts, 加入 ecs2 的解析修改本地终端的.ssh/config, 加入配置复制代码1.lililililililililiHost ecs2/lili ProxyCommand ssh rootecs1 exec nc %h %p/li/li/li/li/li/li/li/li/li在本地终端的/etc/hosts 中加入 ecs1 的解析然后,ssh rootecs2 即可直接登录 ecs2 对于第二个问题,也有两个解决办法:1.在 ecs1 上架设如 privoxy 一类的 http 代理,然后在 ecs2 的/etc/bashrc 文件中加入这行代码 export http_proxy=“http:/ecs1:“,然后 ecs2 就可以走 ecs1 的代理使用 curl, yum 等工具像外网 ECS 一样工作了。2.给 ecs1 的系统盘做个磁盘快照,并建立一个自定义镜像,然后对对 ecs2 使用使用“替换系替换系统盘统盘”的操作把系统盘替换为我们刚刚创建的自定义镜像就可以立即获得和的操作把系统盘替换为我们刚刚创建的自定义镜像就可以立即获得和 ecs1 完全完全一样的系统环境一样的系统环境!我们一般是把上面两个办法结合起来使用,快速搭建环境。在 ecs2 环境 ok 后,也将它加入 slb 的后端服务器组。至此,我们消除了 ecs1 的单点,再也不用为重启 web server这种事情纠结了。但是 ecs2 并没有公网 IP,如何才能访问它以确认服务 OK? 有两种办法:1.ssh tunnel. 在测试机器 test 和 ecs2 分别建立 ssh tunnel 到 ecs1 的同一端口对接起来.2.建一个测试用的公网 SLB 作为代理网关,里面只放 ecs2 一个节点。用公网 SLB的 IP 就能访问 ecs2 了。显然,第 2 种办法要简单得多,所以我们一般用这种办法 :)在系统设计上,方便性和安全性存在冲突,内网 ECS 亦是一例。在进阶篇 中,我们会进一步讨论内网 ECS 的优缺点。分布式计算的几个基本概念分布式计算的几个基本概念在继续我们后面的云端飞行旅程之前,我先介绍几个分布式计算的基本概念。阿里云平台提供的几个基础服务正是为了解决这几个问题才开放出来的。1.Single Point Failure (SPF), 单点故障。在一个服务系统中,因为一个节点的故障,导致整个系统不可用。例如上面提到的网站域名指向 ecs1 的 IP,但 ecs1 上的 web server restart 失败的情形2.Redundancy,冗余。为了解决 SPF,在系统的关键路径上,必须存在两个或更多的选择。即当一个节点失效后,仍有其他的节点可以继续提供服务。3.Stateless Node,无状态节点。为了让多个计算节点具有完全一致的行为,单个节点上面一定不能有自己独有的状态信息。4.Load Balance, 负载均衡。多个计算节点共同承担系统负载。SLB 这一工具已经解决了 1,2,4 这三点。那么,我们如何从 ECS 上抽离状态信息以实现无状态节点呢?为此,阿里云提供了另外两个工具:RDS 抽离动态数据和抽离动态数据和 OSS 抽离抽离静态数据将静态数据将 ECS 变为无状态的计算节点变为无状态的计算节点。可以把 RDS 当成一个超大型的 Mysql 数据库集群,OSS 当成一个超大型的文件存储集群。RDS 和和 OSS我们先讨论 RDS。虽然阿里云提供了 lamp 的一键安装包 sh-1.3,但事实上,本地的mysql 服务是不需要的。RDS 的可靠性,易用性和可扩展性都比自己搭建的 mysql 服务器要好很多。如果你仍在使用自己的 mysql 数据库,强烈建议迁移到 RDS。再说说 OSS。ECS 的本地磁盘上只应存放业务代码和配置,20G 的系统盘完全够用,这就是为什么前面不建议购买数据盘的原因。用于下载或用户上传的数据文件都可以存到OSS 中。对于一个基本的建站业务而言, 将动态数据存 RDS,静态文件存 OSS,就实现了ECS 的无状态。在这样的框架下,可以方便的对系统扩容:1.当访问量变大,现有计算资源紧张时,对 ECS 进行横向(增加 ECS 的节点个数)或纵向(增加单个节点的 CPU 核心和内存)扩展2.如果数据库访问出现瓶颈,升级 RDS 实例至更高配额CDN 和和 OCS后面,很自然的可以开通 CDN 为 OSS 的访问加速。这一点,从定价上不难看出OSS+CDN 是阿里云希望用户使用的方式。OSS 的流量是 0.8 元/GB,而 CDN 是 0.4. OSS通过 CDN 出去,不仅访问速度更快,还能降低成本。如果 RDS 中有一部分数据的读取频率比更新频率高很多,可以通过将这部分数据缓存入 OCS,在提升系统响应速度的同时缓解 RDS 的读取压力。RDS+OCS 业务代码的实现逻辑:1.如果要从 RDS 的表 table0 中读取主键为 id 的数据项,先尝试从 OCS 中读取key=“table0_id“的数据,如果命中,则使用从缓存中读取的数据,不用再访问 RDS2.如果缓存不命中,访问 RDS 读出数据 v,以 key=“table0_id“, value=v 写入 OCS3.当 table0 中的 id 数据项被变更或删除的同时,删除 OCS 中 key=“table0_id“的数据小结综上,我们介绍了如何使用阿里云提供的 ECS,SLB,RDS,OSS,CDN 和 OCS 这 6 个业务来构建我们自己的高可用业务网站系统。它的基本结构如下图所示:几点说明:1.通过外网 SLB 的 IP 向外提供服务,用户请求通过 SLB 分发到后端的几个 ECS 来计算处理2.利用 RDS 和 OSS 来抽离状态数据,使得 ECS 成为无状态的计算节点3.可以利用 OCS 缓存 RDS 的数据, CDN 缓存 OSS 的数据,提高访问速度前情提要及概述前情提要及概述在基础篇中,我们介绍了如何利用阿里云的几个基础服务: ECS, SLB, RDS, OSS, CDN 和 OCS 来构建一个高可用的业务网站系统。在本篇中,我们将进一步介绍上面这些基础工具,以及如何从单业务系统拓展到多业务系统,和日常开发和运维的一些常用技巧。多业务系统之间的交互手段多业务系统之间的交互手段我们从几个具体的 case 说起吧 :) case #1 利用消息队列实现的固件定制系统如上图所示,先是由一个 web 前端的表单系统将用户的输入参数组装为一条消息放入固件生成的请求队列中,后面由固件构建集群取得用户的配置参数,生成固件后存入OSS,再将生成的结果放入结果消息对列中,前端系统获取结果后更新 RDS 的状态。我们可以利用阿里云提供的 MQS 服务非常方便的在两个业务系统之间实现用消息队列异步传输小尺寸数据。如果尺寸较大,亦可以通过往 RDS/OCS 或 OSS 中写入临时数据,用消息队列传输 key 或 url 来解决。 case #2 利用 ODPS/RDS 实现的非实时数据分析系统ODPS 是一个阿里云上的接口类似 Hadoop + Hive 的数据分析系统。我们可以部署多个数据收集节点,将数据存入 ODPS。再搭建一个数据分析集群,定期对写入 ODPS 的新数据进行提取,然后将提取的结果放入 RDS。最后由一个 web 前端系统读取 RDS 中的数据生成报表呈现给最终用户。这种 reader/writer 的模式是两个业务系统之间通信的常见方式,只要是两个系统之间可以共享的系统资源,都可以通过一端写入,另一端读出来实现通信。而在阿里云的系统设计中,同一账户下的 ECS 可以共享 RD
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号