天天看点

《HBase管理指南》一1.3 Amazon EC2的安装及准备

本节书摘来异步社区《hbase管理指南》一书中的第1章,第1.3节,作者: 蒋燚峰 译者: 苏南,更多章节内容可以访问云栖社区“异步社区”公众号查看。

amazon ec2(amazon elastic compute cloud)是一种可在云计算环境中提供具有可伸缩行的计算能力的web服务。通过使用amazon ec2,我们只需用很低的成本就可以轻松地体验到完全分布式运行的hbase的运行模式。本书中用来展示hbase各种管理操作的所有服务器都运行在amazon ec2上。

本节将介绍如何安装amazon ec2环境,这是在ec2上安装hbase的准备工作。我们将建立在amazon ec2上一个名称服务器和客户端。你也可以使用其他一些托管服务(比如rackspace)或使用一些真正的服务器来建立hbase集群。

管理实例需要使用一些ec2命令行工具。你可以按照如下网页中的操作说明来下载并安装这些命令行工具。

为了能够登录到ec2实例上,你需要一个公钥/私钥对。你可以使用该网页中的操作指令来生成自己的密钥对,然后将你的公共密钥上传到ec2上。

在你登录到一个实例上之前,你必须进行访问授权。下面这个链接中包含有如何向默认安全组添加规则的操作说明。

在完成上述这些步骤之后,请按照下面的清单进行一下检查,以确保一切都已准备就绪。

x.509证书:检查x.509证书是否已经上传。你可以在自己帐户的security credentials(安全凭据)页中完成此项检查。

ec2密钥对:检查ec2密钥对是否已经上传。您可以在aws management console | amazon ec2 | network & security | key pairs中完成此项检查。

访问权限:检查是否已授权可以进行访问。此项检查可在aws management console | amazon ec2 | network & security | security groups | inbound中完成。

环境变量设置:检查是否已完成了环境变量的设置。举例来说,下面这段代码就可以显示出我所设置的环境变量;你要确保其中所使用的ec2_url正确地表明了你所属的地区。

我们需要先通过ec2命令行工具来导入自己的ec2密钥对,然后才能管理这些ec2实例。

键入如下这条命令来验证设置是否正确。

如果上述这些设置都已正确完成,该命令将显示出各实例的设置信息,所显示的内容应与你在之前使用命令进行配置时的信息类似。

下载示例代码

如果只是为了体验一下hbase,那么使用以ebs为后端的32位ami是最具成本效益的选择。要确保你所选择的是为你所属地区而提供的ami。由于本书所使用的地区是us-west(us-west-1),所以对我们来说,该ami的id是ami-77287b32。这是一个32位的小ec2实例。小实例很便宜,因此适合用来在ec2中对hbase进行体验。如果是生产环境,建议你至少使用带ebs的高内存超大实例(high-memory extra large instance)或一个真正的服务器。

请按照以下步骤操作你的ec2实例,以便为使用hbase做好准备。我们将启动两个ec2实例,一个作为dns/ntp服务器,另一个作为dns/ntp客户端。

1.启动一个微实例来作为dns/ntp服务器。本书后面的章节将一直使用ns1.hbase-admin-cookbook.com(ns1)来作为该服务器的完全限定域名(fqdn)。

2.启动一个小实例作为dns/ntp客户端。本书后面的章节将一直使用client1. hbase-admin-cookbook.com(client1)作为该客户端的fqdn。

3.在aws management console中验证这些实例是否都已启动,也可以通过键入以下命令进行验证。

在该命令的输出中,应该能够看到两个实例。从ec2-describe-instances命令的输出结果或aws management console中,可以看到这些已启动实例的公网dns。它们的dns应该是一些格式大致为ec2-xx-xx-xxx-xx.us-west-1.compute.amazonaws. com的值(如图1-2所示)。

《HBase管理指南》一1.3 Amazon EC2的安装及准备

4.使用如下命令通过ssh登录实例。

5.在为服务器安装软件包之前,先使用如下命令更新软件包索引文件。

6.使用如下命令将实例所属时区修改为你所在的时区。

7.使用如下命令在dns服务器上安装ntp服务器守护程序。

8.使用如下命令在客户机/服务器上安装ntp客户端。

9.分别修改/etc/ntp.conf配置文件,让ns1作为ntp服务器运行,让client1作为一个以ns1为服务器的ntp客户端来运行。

因为在ntp设置中没有什么hbase特别要求的配置,所以这里就不对此进行详述了。在本书的示例源码中,可以找到服务器端和客户端不同ntp.conf文件的示范样本。

10.在ns1上安装bind9作为dns服务器。

bind9还需要进行一下配置,以使之成为内部域名查找时的首选主服务器和外部域名查找时的缓存服务器。dns服务器也需要进行配置,以使其他ec2实例可以更新自己在dns服务器上的记录。

这部分内容并不属于本书所要讲述的范畴,所以我们将不对此进行详述。bind9配置文件的样本,请参阅本书所附带的示例源码。

11.对于client1,只需配置其把ns1作为自己的dns服务器就可以了。

12.自动更新dns主机名。将客户端ec2实例的用户数据设为其主机名。打开aws management console的my instances页,在实例列表中选中client1并将其关闭,然后单击instance actions | view | change user data。在图1-3所示的弹出页面输入你想要给该实例使用的主机名(在本例中为client1)。

《HBase管理指南》一1.3 Amazon EC2的安装及准备

13.创建一个使用该用户数据来更新dns服务器上该客户端的记录的脚本。

14.最后,在rc.local文件中添加下列脚本,以使ec2-hostname.sh可以在启动时由rc.local调用执行。

首先,我们启动了两个实例,一个微实例作为dns/ntp服务器,一个小实例作为其客户端。为了能给其他实例提供名称服务,dns名称服务器必须一直保持运行。使用微实例可以降低你的ec2成本。

在第3步中,我们设置好了ntp服务器和客户端。我们让ntp服务器与dns服务器运行在同一个实例上,然后在其他所有实例上运行ntp客户端。

注意: 请确保hbase集群中各成员的时钟上基本一致。

ec2实例可以按需启用和关闭,并且还无需为已关闭的实例付费。但重新启动ec2实例会使实例的ip地址发生改变,这会给hbase的运行带来麻烦。我们可以运行一个dns服务器来为hbase集群中所有ec2实例提供名称服务,这样就可以解决ip地址变化的问题。我们可以让其他ec2实例在每次重新启动时都更新一下自己在dns服务器上的名称记录。

这就是我们在第4步和第5步中做的事情。第4步是常规的dns设置。在第5步中,我们把实例的名称保存在了该实例的用户数据属性中,这样做的目的是:在该实例重新启动后,我们仍可以使用ec2 api来找回它的名字。此外,我们还可以通过ec2 api来获得该实例的私有ip地址。有了这些数据,我们就可以在实例每次重启时向dns服务器发送一个dns update命令更新该实例名称对应的ip地址。这样,我们就可以始终使用一个固定主机名来访问该实例了。

只有dns实例需要一直保持运行。在不需要运行hbase集群时,我们可以将其他所有实例都关掉。

继续阅读