在亚马逊AWS EC2上手动搭建和配置非关系型数据库MongoDB的过程和步骤

   05/09/2016 10:56 pm   大 中 小 简体 繁體 字体:
    559人参与

虽然AWS Market上有卖pre-installed MongoDB的EC2实例,但为了了解MongoDB搭建流程,我还是选择了手动在EC2实例上搭建MongoDB数据库的过程.

为什么选择MongoDB?

1.性能

在大数据时代中,大数据量的处理已经成了考量一个数据库最重要的原因之一。而MongoDB的一个主要目标就是尽可能的让数据库保持卓越的性能,这很大程度地决定了MongoDB的设计。在一个以传统机械硬盘为主导的年代,硬盘很可能会成为性能的短板,而MongoDB选择了最大程度而利用内存资源用作缓存来换取卓越的性能,并且会自动选择速度最快的索引来进行查询。MongoDB尽可能精简数据库,将尽可能多的操作交给客户端,这种方式也是MongoDB能够保持卓越性能的原因之一。

2.扩展

现在互联网的数据量已经从过去的MB、GB变为了现在的TB级别,单一的数据库显然已经无法承受,扩展性成为重要的话题,然而现在的开发人员常常在选择扩展方式的时候犯了难,到底是选择横向扩展还是纵向扩展呢?

横向扩展(scale out)是以增加分区的方式将数据库拆分成不同的区块来分布到不同的机器中来,这样的优势是扩展成本低但管理困难。

纵向扩展(scale up) 纵向扩展与横向扩展不同的是他会将原本的服务器进行升级,让其拥有更强大的计算能力。这样的优势是易于管理无需考虑扩展带来的众多问题,但缺点也显而易见,那就是成本高。一台大型机的价格往往非常昂贵,并且这样的升级在数据达到极限时,可能就找不到计算能力更为强大的机器了。

而MongoDB选择的是更为经济的横向扩展,他可以很容易的将数据拆分至不同的服务器中。而且在获取数据时开发者也无需考虑多服务器带来的问题,MongoDB可以将开发者的请求自动路由到正确的服务器中,让开发者脱离横向扩展带来的弊病,更专注于程序的开发上。

3.使用

MongoDB采用的是NoSQL的设计方式,可以更加灵活的操作数据。在进行传统的RDBMS中你一定遇到过几十行甚至上百行的复杂SQL语句,传统的RDBMS的SQL语句中包含着大量关联,子查询等语句,在增加复杂性的同时还让性能调优变得更加困难。MongoDB的面向文档(document-oriented)设计中采用更为灵活的文档来作为数据模型用来取代RDBMS中的行,面向文档的设计让开发人员获取数据的方式更加灵活,甚至于开发人员仅用一条语句即可查询复杂的嵌套关系,让开发人员不必为了获取数据而绞尽脑汁。

本文主要参考官方教程:

http://docs.mongodb.org/ecosystem/platforms/amazon-ec2/#deploy-mongodb-on-ec2

只是在部分步骤上多注解一下。

注解:

1. 创建一个用户并配置

https://console.aws.amazon.com/iam/home?#users,创建新用户(Create New User),按步骤获取access key id和secret access key。

在Permission Tab中,赋予该用户Administrator的权限:

非关系型数据库MongoDB

 

2. 按照官方教程,我们需要通过EC2 Command Line Tool来创建EC2实例。

下载EC2 Command Line Tool(http://aws.amazon.com/developertools/351)后的安装步骤:http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/InstallEC2CommandLineTools.html

3. 创建新EC2实例时,我们按照官方教程,使用命令(该命令只适合支持EC2 Classic的用户创建,稍后详述):

ec2-run-instances ami-05355a6c -t m1.large -g [SECURITY-GROUP] -k [KEY-PAIR] -b “/dev/xdf=:200:false:io1:1000″ -b “/dev/xdg=:25:false:io1:250″ -b “/dev/xdh=:10:false:io1:100″ –ebs-optimized true

其中:

ec2-run-instances命令详解:http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-RunInstances.html

ami-05355a6c代表Image ID,即EC2的机型。最简单的查看Amazon支持哪些ami型号的办法,就是手动在Dashboard里点击Launch New Instance,第一步就是问你需要创建哪种AMI。你可以在页面中查看AMI列表:

aws ami镜像

 

其他可以参考AMI的办法:机型可参照http://aws.amazon.com/amazon-linux-ami/页面下方表格。还有一篇文章讲到如何选择合适的AMI:http://askubuntu.com/questions/53582/how-do-i-know-what-ubuntu-ami-to-launch-on-ec2

-k命令指定你登陆的KeyPair的名字。必须出现在https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#KeyPairs:

-b命令实现Blocking Device Mapping功能,让你的EC2实例接上Amazon EBS(http://aws.amazon.com/ebs/)。上述命令中的/dev/xdf、/dev/xdg和/dev/xdh挂载点可能需要适当修改。关于Blocking Device Mapping详解,见:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html

-g命令指定生成的服务器所属的Security Group。该命令只适合支持EC2 Classic的用户创建。Amazon支持的另外一种EC2的平台为EC2 VPC。通过这里:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html查看EC2 Classic和EC2 VPC的区别。

如何查看自己的账户支持EC2的哪种平台?

至你的EC2 Dashboard页面中,右上角有一个supported platform显示你当前支持的平台。

那么EC2 VPC的用户如何通过Command Line来创建一个EC2 VPC的实例呢?

不需要再使用-g命令指定Security Group了。但需要使用-s指定所属的subnet id。查看自己当前的subnet ID,请至https://console.aws.amazon.com/vpc/home?region=us-east-1#c=VPC&s=subnets

那么贴一下创建EC2 VPC的命令吧:

ec2-run-instances ami-05355a6c -t m1.large -s [SUBNET-ID] -k [KEY-PAIR] -b “/dev/sdf=:200:false:io1:1000″ -b “/dev/sdg=:25:false:io1:250″ -b “/dev/sdh=:10:false:io1:100″ –ebs-optimized true

由于你创建的是EC2 VPC实例,你还需要配置Subnet、Internet Gateway、Custom Route Table、Security Group以及Elastic IP:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html

另外,Amazon还提供了另一种Command Line Interface,通过JS字符串来配置ec2实例。(本人未测试)

a. 下载最新版的AWS Command Line Interface:http://aws.amazon.com/cli/。注意,这里不再是MongoDB官方页面指向的Command Line Tool的地址了。

b. 安装。

c. 在命令行中通过aws configure配置在第一步中创建的用户以及你想创建实例的region。以下是Region列表:

  • us-east-1
  • ap-northeast-1
  • sa-east-1
  • ap-southeast-1
  • ap-southeast-2
  • us-west-2
  • us-gov-west-1
  • us-west-1
  • cn-north-1
  • eu-west-1
  • fips-us-gov-west-1

d. 使用aws ec2 run-instances命令。用法:http://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html

 

关键词: , , , , , , , 

最多人阅读内容