如何使用阿里云
前言
大家好。我们是成都瑞小博科技 (www.rippletek)。
从去年10月在阿里云购买了第一台ECS并部署服务后,到现在已过去了一年。在这一年间,随着业务的扩张和用户规模的增长。我们的ECS数量从1台增长为20台,并开通了SLBmysql下载后为什么不是一个安装包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 .ssh
2.chmod 700 .ssh
3.vi .ssh/authorized_keys #加入自己的id_rsa.pub
4.chmod 600 .ssh/authorized_keys
5.passwd -d root
这样,可以在根本上杜绝root密码被猜中的可能性。
初探SLB
第二步,购买一个公网的负载均衡器SLB(后面称为slb1)。如果你的域名已申请好,可以把域名指向slb1了。为了保证服务的高可用性,服务一定要通过SLB开出去。设想一下,如果你的服务是走单台ECS出去,某天你需要修改一下apache的配置,修改完毕后,service httpd restart却发现httpd进程没有起来 (由于f里有个小小的笔误..)。事实上,这个时候你就已经停服了!这也是为什么前面建议不必购买高带宽ECS的原因。
为了避免出现上面提到的那种尴尬的情况,SLB的后端服务器至少要有两台ECS并配置好health check。 尽管我们现在只有ecs1,如果上面的服务环境已经部署ok, 就先把它加入到slb1的后端服务器组里,然后在浏览器里输入我们的域名开始测试吧!然后,我们还需要另一台ECS。
再探ECS
第三步,再购买一台ECS(后面称为ecs2)。这一次,如果我们的业务代码本身不用从int
ernet上获取数据的话,我们可以试试内网ECS,即0M带宽的机器。这样的机器没有带宽费用,会便宜一些,更重要的是,它没有公网IP,所以也更安全。下面问题来了:
它没有公网IP,我如何ssh上去?
它无法访问internet,我如何使用yum, apt这类包管理器来搭建业务环境?
对于第一个问题,有两个解决办法:
1.先ssh到有公网IP的ecs1上,然后再ssh ecs2的内网IP,搞定
2.也可以通过一些配置,实现内外网无感知的直接ssh上去,方法如下:
在ecs1上安装nc工具,并修改/etc/hosts, 加入 ecs2 <ecs2内网ip地址>的解析
修改本地终端的.ssh/config, 加入配置
复制代码
1.[li][li][li][li][li][li][li][li][li]Host ecs2[/li][li]    ProxyCommand ssh root@ecs1 exec nc %h %p[/
li][/li][/li][/li][/li][/li][/li][/li][/li]
在本地终端的/etc/hosts中加入 ecs1 <ecs1外网ip地址>的解析
然后,ssh root@ecs2 即可直接登录ecs2
对于第二个问题,也有两个解决办法:
1.在ecs1上架设如privoxy一类的http代理,然后在ecs2的/etc/bashrc文件中加入这行代码 export http_proxy="ecs1:<proxy_port>",然后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"的数据,如果命中,则使用从缓存中读取的数据,不用再访问RDS
2.如果缓存不命中,访问RDS读出数据v,以key="table0_id", value=v写入OCS
3.当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 利用消息队列实现的固件定制系统

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。