Apache Storm是一项大数据技术,使软件,数据和基础架构工程师能够实时处理高速,大容量数据并提取有用信息。任何涉及实时处理高速数据流的项目都可以从中受益。
Zookeeper是Storm依赖于正常运行的关键分布式系统技术。
Storm是一个很好的解决方案的一些用例:
本指南介绍了如何使用一组shell脚本在Linode云上创建Storm集群,这些脚本使用Linode的应用程序编程接口(API)以编程方式创建和配置大型集群。这些脚本都是由本指南的作者通过GitHub存储库提供的。此应用程序堆栈也可能受益于大量磁盘空间,因此请考虑使用我们的Block Storage服务进行此设置。
警告外部资源不在我们的控制之内,可以在我们不知情的情况下进行更改和/或修改。在执行之前,请务必自行查看第三方网站的代码。
部署的体系结构如下所示:
从应用程序的角度来看,数据流如下所示:
应用程序流程从客户端开始,与Storm客户端一起提供用户界面。它与Nimbus节点联系,该节点是Storm集群操作的核心。Nimbus节点获取集群的当前状态,包括来自Zookeeper集群的管理程序节点和拓扑的列表。Storm集群的管理程序节点不断将状态更新为Zookeeper节点,从而确保系统保持同步。
Storm处理和处理数据的方法称为拓扑。拓扑是执行单个操作的组件网络,由作为数据源的spout和bolt组成,它们接受传入的数据并执行诸如运行函数或转换之类的操作。数据本身,称为Storm术语中的流,以无限的元组序列的形式出现。
本指南将说明如何配置工作的Storm集群及其Zookeeper节点,但它不会提供有关如何开发用于数据处理的自定义拓扑的信息。有关创建和部署Storm拓扑的更多信息,请参阅Apache Storm教程。
注意本指南和引用的bash脚本中的步骤需要root权限。请务必执行以下步骤
root
。有关权限的更多信息,请参阅“ 用户和组”指南。
在本指南中,我们将使用以下名称作为参考我们将要创建的图像和集群的示例:
zk-image1
- Zookeeper图像zk-cluster1
- Zookeeper集群storm-image1
- 风暴形象storm-cluster1
- 风暴集群这些是我们将使用的名称,但欢迎您在创建自己的图像和群集时选择自己的名称。本指南将在所有示例命令中使用这些名称,因此请务必在适用的地方替换您自己的名称。
按照生成API密钥中的步骤安全地保存密钥。它将在后续步骤中输入配置文件。
如果密钥过期或被删除,请记住创建一个新密钥并更新api_env_linode.conf
集群管理器Linode上的API环境配置文件。这将在下一节中进一步解释。
第一步是设置中央Cluster Manager以存储所有Storm群集的详细信息,并使授权用户能够创建,管理或访问这些群集。这可以是本地工作站或Linode,但在本指南中将是Linode。
api_env_linode.conf
在文本编辑器中打开,并设置LINODE_KEY
为先前创建的API密钥(请参阅获取Linode API密钥)。
〜/风暴的Linode / api_env_linode.conf1
export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48...~/storm-linode/cluster_manager.sh
在文本编辑器中打开并更改以下配置设置以自定义Cluster Manager Linode的创建位置和方式:
ROOT_PASSWORD
:这将是Cluster Manager Linode上的root用户密码,并且是创建节点所必需的。将其设置为您选择的安全密码。Linode要求root密码至少包含以下4种字符类型中的2种:
如果密码中有空格,请确保将整个密码括在双引号("
)中。如果您的密码中有双引号,美元字符或反斜杠,请使用反斜杠(\
)对它们进行转义。
PLAN_ID
:默认值为1
Cluster Manager Linode创建为2GB节点,即最小的计划。这通常就足够了。但是,如果您想要更强大的Linode,请使用以下命令查看所有可用计划及其ID的列表:
source ~/storm-linode/api_env_linode.conf ~/storm-linode/linode_api.py plans
注意您只需source
在单个终端会话中运行此文件一次,除非您对其进行更改。DATACENTER
:这指定了创建Cluster Manager Linode的Linode数据中心。将其设置为最接近您所在位置的数据中心的ID,以减少网络延迟。还建议在将创建映像和群集节点的同一数据中心中创建群集管理器节点,以便它可以使用低延迟专用IP地址与它们通信并减少数据传输使用。
要查看数据中心及其ID列表,请执行以下操作:
source ~/storm-linode/api_env_linode.conf ~/storm-linode/linode_api.py datacenters tableDISTRIBUTION
:这是要在Cluster Manager Linode上安装的分发的ID。本指南仅在Ubuntu 14.04或Debian 8上进行了测试; 其他发行版不受支持。
默认值124
选择Ubuntu 14.04 LTS 64位。如果您想使用Debian 8,请将此值更改为140
。
注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions
以查看API中所有可用分布及其值的列表。KERNEL
:这是要在Cluster Manager Linode上安装的Linux内核的ID。默认值138
选择Linode提供的最新64位Linux内核。建议不要更改此设置。DISABLE_SSH_PASSWORD_AUTHENTICATION
:这将禁用SSH密码身份验证,并且仅允许Cluster Manager Linode进行基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no
。注意本节中显示的选项由linode_api.py
脚本生成,与使用Linode CLI工具显示的选项略有不同。请勿使用Linode CLI工具配置Manager节点。
完成更改后,保存并关闭编辑器。
请注意Cluster Manager Linode的公共IP地址。登录集群管理器以创建或管理集群时,您将需要此功能。
cluster_manager.sh
我们在上一步中运行的脚本在Cluster Manager Linode上创建了三个用户,并为您工作站上的所有用户生成身份验证密钥对,如下图所示:
~/.ssh/clustermgrroot
是Cluster Manager Linode的root用户的私钥。应尽可能限制对此用户凭据的访问。~/.ssh/clustermgr
是Cluster Manager Linode的clustermgr用户的私钥。这是一个特权管理用户,可以创建和管理Storm或Zookeeper集群。应尽可能限制对此用户凭据的访问。~/.ssh/clustermgrguest
是Cluster Manager Linode的clustermgrguest用户的私钥。这是一个无特权的用户,可供需要有关Storm集群的信息的任何人使用,但不能管理它们。这些通常是开发人员,他们需要知道群集的客户端节点IP地址才能向其提交拓扑。默认情况下禁用对集群管理器的SSH密码身份验证。建议保留默认设置。但是,如果要启用刚刚密码验证clustermgrguest用户为了方便,登录到新创建的群集管理器作为root
和下面的行追加到结束的/etc/ssh/sshd_config
:
的/ etc / SSH / sshd_config中1 2
Match User clustermgrguest PasswordAuthentication yes重新启动SSH服务以启用此更改:
service ssh restart
警告由于访问集群管理器可以访问所有Storm和Zookeeper集群及其正在处理的任何敏感数据,因此应将其安全配置视为关键,并且访问应尽可能具有限制性。
root
使用创建时显示的公共IP地址,以用户身份登录到集群管理器Linode :
ssh -i ~/.ssh/clustermgrroot root@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODEcluster_manager.sh
从root用户的目录中删除并关闭SSH会话:
rm cluster_manager.sh exitstorm-linode
目录并制作工作副本api_env_example.conf
。在这个例子中,我们将其称为api_env_linode.conf
:
cd storm-linode cp api_env_example.conf api_env_linode.confapi_env_linode.conf
在文本编辑器中打开新创建的文件并设置LINODE_KEY
为API密钥。
设置CLUSTER_MANAGER_NODE_PASSWORD
为在步骤11中为clustermgr用户设置的密码。
〜/风暴的Linode / api_env_linode.conf1 2 3
export LINODE_KEY=fnxaZ5HMsaImTTRO8SBtg48... ... export CLUSTER_MANAGER_NODE_PASSWORD=changeme保存更改并关闭编辑器。/home/clustermgr/.ssh/authorized_keys
,以便他们可以通过SSH以用户身份连接到Cluster Manager Linode clustermgr
。创建新的Storm集群涉及四个主要步骤,其中一些步骤仅在第一次时是必需的,并且在创建后续集群时可以跳过。
一个动物园管理员图像是安装了所有必要的动物园管理员软件和库主磁盘映像。我们将使用Linode Images创建我们使用Zookeeper映像的好处包括:
注意如果Zookeeper映像已存在,则此步骤不是必需的。多个Zookeeper群集可以共享相同的Zookeeper映像。事实上,保持图像数量较低是一个好主意,因为图像存储限制在10GB。 创建映像时,您应该拥有
clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodenew-image-conf
命令为新映像创建配置目录。在这个例子中,我们将调用我们的新图像zk-image1
:
./zookeeper-cluster-linode.sh new-image-conf zk-image1
这将创建一个名为zk-image1
包含构成映像配置的文件的目录:
zk-image1.conf
在我们的示例中命名,但如果您选择其他图像名称,则可能会有所不同。./zk-image1/zk-image1.conf
在文本编辑器中打开映像配置文件(在此示例中)。根据需要输入或编辑配置属性的值。该属性必须标记为输入或更改的默认值是REQUIRED:
DISTRIBUTION_FOR_IMAGE
指定Ubuntu 14.04或Debian 8以用于此映像。该指南还没有被任何其他版本或发行测试。
从此图像创建的所有群集的所有节点都将具有此分布。默认值124
对应于Ubuntu 14.04 LTS 64位。对于Debian 8 64位,将此值更改为140
。
注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions
以查看API中所有可用分布及其值的列表。
LABEL_FOR_IMAGE
一个标签,可帮助您将此图像与其他图像区分开来。如果您在Linode管理器中编辑或查看图像,将显示此名称。
KERNEL_FOR_IMAGE
Linode提供的内核版本用于此映像。默认值是138
,对应于Linode提供的最新64位内核。建议您将其保留为默认设置。
DATACENTER_FOR_IMAGE
将创建此映像的Linode数据中心。这可以是任何Linode数据中心,但如果在创建集群的同一数据中心中创建映像,则集群创建会更快。还建议在与Cluster Manager Linode相同的数据中心中创建映像。选择地理位置靠近您的场所的数据中心,以减少网络延迟。如果保持不变,将在Newark数据中心创建Linode。
此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表:
./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
IMAGE_ROOT_PASSWORD
- 需要
图像的默认root用户密码。从此映像创建的任何群集的所有节点都将此作为root密码,除非它在群集的配置文件中被覆盖。
IMAGE_ROOT_SSH_PUBLIC_KEY
和 IMAGE_ROOT_SSH_PRIVATE_KEY
以root用户身份进行SSH公钥认证的密钥对文件。使用此私钥登录的任何用户都可以进行身份验证root
。
默认情况下,cluster_manager.sh
安装程序已经创建了一个名为密钥对clusterroot
和clusterroot.pub
下~/.ssh/
。如果您希望用自己的密钥对替换这些密钥对,可以在此处创建自己的密钥并设置其完整路径。
IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION
这将禁用SSH密码身份验证,并且仅允许群集节点使用基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no
。
IMAGE_ADMIN_USER
管理员或开发人员可能必须登录到群集节点才能进行维护。而不是以root用户身份登录,最好以特权非root用户身份登录。该脚本在映像中创建具有此名称的特权用户(以及基于此映像的所有集群节点)。
IMAGE_ADMIN_PASSWORD
- 需要
设置密码IMAGE_ADMIN_USER
。
IMAGE_ADMIN_SSH_AUTHORIZED_KEYS
包含授权登录到群集节点的所有人员的公钥的文件IMAGE_ADMIN_USER
。此文件的格式应与标准SSH authorized_keys文件的格式相同。此文件中的所有条目都附加到图像的authorized_keys
文件中,并根据此图像继承到所有节点。
默认情况下,cluster_manager.sh
安装程序会创建一个新的clusteradmin
密钥对,并且此变量将设置为公钥的路径。您可以保留此生成的密钥对,并将生成的私钥文件分~/.ssh/clusteradmin
发给授权人员。或者,您可以收集授权人员的公钥并将其附加到~/.ssh/clusteradmin.pub
。
IMAGE_DISK_SIZE
图像磁盘的大小(MB)。默认值5000MB通常就足够了,因为安装只包含安装了Java和Zookeeper软件的操作系统。
UPGRADE_OS
如果yes
在安装任何软件之前更新和升级了发行版的软件包。建议保留默认设置以避免任何安装或依赖性问题。
INSTALL_ZOOKEEPER_DISTRIBUTION
要安装的Zookeeper版本。默认情况下,cluster_manager.sh
已经下载了3.4.6版。如果要安装其他版本,请手动下载并更改此变量。但是,建议保留默认值,因为此指南尚未针对其他版本进行测试。
ZOOKEEPER_INSTALL_DIRECTORY
Zookeeper将在映像上安装的目录(以及从此映像创建的所有集群节点上)。
ZOOKEEPER_USER
Zookeeper守护程序运行的用户名。这是一项安全功能,可通过利用Zookeeper守护程序中的某些漏洞来避免权限升级。
ZOOKEEPER_MAX_HEAP_SIZE
托管Zookeeper守护程序的JVM的最大Java堆大小。该值可以是百分比,也可以是固定值。如果固定值没有任何字符后缀,则将其解释为字节。如果后缀为K
,M
或G
,则分别将其解释为千字节,兆字节或千兆字节。
如果这太低,可能会导致内存不足错误,并导致Storm群集中的数据丢失或延迟。如果设置得太高,操作系统及其进程的内存将受到限制,导致磁盘抖动,这将对Zookeeper的性能产生严重的负面影响。
默认值为75%,这意味着最多可以为JVM保留75%的Linode RAM,其余的OS和其他进程保留25%。这是强烈建议不要更改此默认设置。
ZOOKEEPER_MIN_HEAP_SIZE
为托管Zookeeper守护程序的JVM提交的最小Java堆大小。该值可以是百分比,也可以是固定值。如果固定值没有任何字符后缀,则将其解释为字节。如果后缀为K
,M
或G
,则分别将其解释为千字节,兆字节或千兆字节。
如果此值低于ZOOKEEPER_MAX_HEAP_SIZE
,则提交此内存量,并且ZOOKEEPER_MAX_HEAP_SIZE
仅在JVM从OS请求时才分配额外的内存。这可能导致操作期间的内存分配延迟。所以不要把它设得太低。
这个值永远不应该超过ZOOKEEPER_MAX_HEAP_SIZE
。如果是,则Zookeeper守护程序将无法启动。
默认值为75%,这意味着75%的Linode RAM已提交(不仅仅是保留)到JVM,并且对任何其他进程都不可用。这是强烈建议不要更改此默认设置。完成更改后,保存并关闭编辑器。
create-image
命令创建映像,指定新创建的映像的名称和API环境文件:
./zookeeper-cluster-linode.sh create-image zk-image1 api_env_linode.conf
如果图像创建成功,输出结尾将如下所示:
Deleting the temporary linode xxxxxx Finished creating Zookeeper template image yyyyyy
如果进程失败,请确保您在Linode Manager中尚未拥有具有相同名称的现有Linode。如果这样做,请将其删除并再次运行该命令,或使用其他名称重新创建此图像。
注意在此过程中,将创建并删除一个临时的,短暂的2GB Linode。这将需要您的月度发票中的少量费用,并触发事件通知电子邮件发送到您在Linode注册的地址。这是预期的行为。在本节中,您将学习如何创建一个新的Zookeeper集群,其中每个节点都是现有Zookeeper映像的副本。如果尚未创建Zookeeper映像,请首先按照创建Zookeeper映像执行此操作。
注意如果Zookeeper群集已存在,则此步骤不是必需的。多个Storm群集可以共享同一个Zookeeper群集。 创建群集时,您应该拥有
clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodenew-cluster-conf
命令创建配置目录。在这个例子中,我们将调用我们的新集群配置zk-cluster1
:
./zookeeper-cluster-linode.sh new-cluster-conf zk-cluster1
这将创建一个名为zk-cluster1
包含主配置文件的目录,该目录zk-cluster1.conf
将在下一步中介绍。如果在运行上一个命令时选择了其他名称,则会相应地命名目录和配置文件。zk-cluster1.conf
文件并按如下所述进行更改。必须输入或更改其默认值的属性标记为REQUIRED:
DATACENTER_FOR_CLUSTER
Linode数据中心,将创建此群集的节点。集群的所有节点必须位于同一数据中心; 它们不能跨越多个数据中心,因为它们将使用专用网络流量进行通信。
这可以是任何Linode数据中心,但如果在创建映像和Cluster Manager Linode的同一数据中心中创建集群,则集群创建可能会更快。建议选择地理位置靠近您的场所的数据中心,以减少网络延迟。
此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表:
./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
CLUSTER_SIZE
构成此集群的节点的类型和数量。语法是:
plan:count plan:count ...
A plan
是2GB | 4GB | ... | 120GB
(参见所有计划的Linode计划)之一,并且count
是具有该计划的节点数。
例子:
Zookeeper集群中的节点总数必须为奇数。虽然群集可以包含不同计划的节点,但建议对所有节点使用相同的计划。建议避免使用非常大的集群。对于大多数用例,具有3-9个节点的集群就足够了。11-19节点将被视为“大”。超过19个节点的任何东西都会适得其反,因为在那时,Zookeeper会减慢依赖它的所有Storm集群。 仔细调整集群大小,因为从版本3.4.6开始,Zookeeper不支持动态扩展。调整大小的唯一方法是将其删除并创建一个新群集,为依赖它的任何Storm群集创建停机时间。
ZK_IMAGE_CONF
- 需要
Zookeeper映像目录或配置文件的路径,用作创建此集群节点的模板。每个节点的磁盘都是该映像的副本。
路径可以是绝对路径,也可以是相对于群集配置目录的路径。使用我们的例子,绝对路径将是/home/clustermgr/storm-linode/zk-image1
和相对路径../zk-image1
。
NODE_DISK_SIZE
每个节点磁盘的大小(MB)。这必须至少与所选图像的磁盘一样大,否则图像将无法正确复制。
NODE_ROOT_PASSWORD
(可选)您可以为节点指定root密码。如果为空,则root密码将IMAGE_ROOT_PASSWORD
位于映像配置文件中。
NODE_ROOT_SSH_PUBLIC_KEY
和 NODE_ROOT_SSH_PRIVATE_KEY
(可选)您可以为root用户身份验证指定自定义SSH公钥文件和私钥文件。如果为空,则键将是映像配置文件中指定的键。
如果要指定自己的密钥对,请为此新密钥对选择一个描述性文件名(例如:zkcluster1root),使用它们生成它们ssh-keygen
,并在此处设置它们的完整路径。
PUBLIC_HOST_NAME_PREFIX
群集中的每个Linode都有一个公共IP地址,可以从Internet上的任何位置访问,以及一个专用IP地址,只能从同一数据中心内同一用户的其他节点访问。
因此,每个节点都有一个解析为其公共IP地址的公共主机名。每个节点的公共主机将使用该值,接着是多个(例如,public-host1
,public-host2
等)。如果群集管理器节点是在从群集节点不同的Linode的数据中心,它使用公共主机名和公共IP地址进行通信集群节点。
PRIVATE_HOST_NAME_PREFIX
群集中的每个Linode都被赋予一个私有主机名,该主机名解析为其私有IP地址。每个节点的私有主机名将使用此值后跟一个数字(例如,private-host1,private-host2等)。群集的所有节点都通过其私有主机名相互通信。这也是使用主机hostname
命令为节点设置的实际主机名并保存在/etc/hostname
。
CLUSTER_MANAGER_USES_PUBLIC_IP
false
如果集群管理器节点与集群节点位于同一 Linode数据中心,请将此值设置为。这是推荐值。true
仅当集群管理器节点位于与集群节点不同的 Linode数据中心时才更改为。
警告正确设置此选项以避免关键群集创建失败非常重要。
ZOOKEEPER_LEADER_CONNECTION_PORT
Zookeeper节点用于将其关注者连接到领导者的端口。当选出新的领导者时,每个粉丝在该端口打开与领导者的TCP连接。除非您计划自定义防火墙,否则无需更改此设置。
ZOOKEEPER_LEADER_ELECTION_PORT
在法定人数期间用于Zookeeper领导者选举的端口。除非您计划自定义防火墙,否则无需更改此设置。
IPTABLES_V4_RULES_TEMPLATE
IPv4 iptables防火墙规则文件的绝对路径或相对路径。如果您计划自定义防火墙配置,请对此进行修改。
IPTABLES_V6_RULES_TEMPLATE
IPv6 iptables防火墙规则文件的绝对路径或相对路径。IPv6在所有节点上完全禁用,并且没有服务侦听IPv6地址。如果您计划自定义防火墙配置,请对此进行修改。完成更改后,保存并关闭编辑器。
create
命令创建集群:
./zookeeper-cluster-linode.sh create zk-cluster1 api_env_linode.conf
如果成功创建群集,则会打印成功消息:
Zookeeper cluster successfully created
可以使用以下describe
命令查看已创建集群的详细信息:
./zookeeper-cluster-linode.sh describe zk-cluster1
群集节点在创建后很快关闭。它们仅在任何Storm集群启动时启动。一个风暴图像是主盘了所有必要的风暴软件下载和安装时库。创建Storm映像的好处包括:
注意如果已存在Storm图像,则此步骤不是必需的。多个Storm群集可以共享相同的Zookeeper映像。事实上,保持图像数量较低是一个好主意,因为图像存储限制在10GB。 创建映像时,您应该拥有
clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodenew-image-conf
命令为新映像创建配置目录。在这个例子中,我们将调用我们的新图像storm-image1
:
./storm-cluster-linode.sh new-image-conf storm-image1
这将创建一个名为storm-image1
包含构成映像配置的文件的目录:
其他文件是辅助配置文件。它们包含合理的默认值,但您始终可以在编辑器中打开它们并根据需要进行修改:
~/storm-linode/storm-image1/storm-image1.conf
在文本编辑器中打开映像配置文件(在此示例中)。根据需要输入或编辑配置属性的值。必须输入或更改其默认值的属性标记为REQUIRED:
DISTRIBUTION_FOR_IMAGE
指定Ubuntu 14.04或Debian 8以用于此映像。该指南还没有被任何其他版本或发行测试。
从此图像创建的所有群集的所有节点都将具有此分布。默认值124
对应于Ubuntu 14.04 LTS 64位。对于Debian 8 64位,将此值更改为140
。
注意本指南中表示的值是发布时的最新值,但将来可能会有所变化。您可以运行~/storm-linode/linode_api.py distributions
以查看API中所有可用分布及其值的列表。
LABEL_FOR_IMAGE
一个标签,可帮助您将此图像与其他图像区分开来。如果您在Linode管理器中编辑或查看图像,将显示此名称。
KERNEL_FOR_IMAGE
Linode提供的内核版本用于此映像。默认值138
对应于Linode提供的最新64位内核。建议您将其保留为默认设置。
DATACENTER_FOR_IMAGE
将创建此映像的Linode数据中心。这可以是任何Linode数据中心,但如果在创建集群的同一数据中心中创建映像,则集群创建会更快。还建议在与Cluster Manager Linode相同的数据中心中创建映像。选择地理位置靠近您的数据中心,以减少网络延迟。
此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表:
./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
IMAGE_ROOT_PASSWORD
- 需要
图像的默认root用户密码。从此映像创建的任何群集的所有节点都将此作为root密码,除非它在群集的配置文件中被覆盖。
IMAGE_ROOT_SSH_PUBLIC_KEY
和 IMAGE_ROOT_SSH_PRIVATE_KEY
以root用户身份进行SSH公钥认证的密钥对文件。使用此私钥登录的任何用户都可以作为root身份进行身份验证。
默认情况下,cluster_manager.sh
安装程序已经创建了一个名为密钥对clusterroot
和clusterroot.pub
下~/.ssh/
。如果您希望用自己的密钥对替换它们,您可以创建自己的密钥并在此处设置完整路径。
IMAGE_DISABLE_SSH_PASSWORD_AUTHENTICATION
这将禁用SSH密码身份验证,并且仅允许群集节点使用基于密钥的SSH身份验证。密码身份验证被认为不太安全,因此默认情况下禁用。要启用密码身份验证,您可以将此值更改为no
。
IMAGE_ADMIN_USER
管理员或开发人员可能必须登录到群集节点才能进行维护。而不是以root用户身份登录,最好以特权非root用户身份登录。该脚本在映像中创建具有此名称的特权用户(以及基于此映像的所有集群节点)。
IMAGE_ADMIN_PASSWORD
- 需要
设置密码IMAGE_ADMIN_USER
。
IMAGE_ADMIN_SSH_AUTHORIZED_KEYS
包含授权登录到群集节点的所有人员的公钥的文件IMAGE_ADMIN_USER
。此文件的格式应与标准SSH authorized_keys文件的格式相同。此文件中的所有条目都附加到图像的authorized_keys
文件中,并根据此图像继承到所有节点。
默认情况下,cluster_manager.sh
安装程序会创建一个新的clusteradmin
密钥对,并且此变量将设置为公钥的路径。您可以保留此生成的密钥对,并将生成的私钥文件分~/.ssh/clusteradmin
发给授权人员。或者,您可以收集授权人员的公钥并将其附加到~/.ssh/clusteradmin.pub
。
IMAGE_DISK_SIZE
图像磁盘的大小(MB)。默认值5000MB通常就足够了,因为安装只包含安装了Java和Storm软件的操作系统。
UPGRADE_OS
如果yes
在安装任何软件之前更新和升级了发行版的软件包。建议保留默认设置以避免任何安装或依赖性问题。
INSTALL_STORM_DISTRIBUTION
要安装的Storm版本。默认情况下,cluster_manager.sh
安装程序已下载0.9.5版。如果要安装其他版本,请手动下载并更改此变量。但是,建议保留默认值,因为此指南尚未针对其他版本进行测试。
STORM_INSTALL_DIRECTORY
Storm将安装在映像上的目录(以及从此映像创建的所有集群节点上)。
STORM_YAML_TEMPLATE
storm.yaml
要在映像中安装的模板配置文件的路径。默认情况下,它指向template-storm.yaml
图像目录下的文件。管理员可以在创建映像之前自定义此YAML文件,也可以将此变量设置为指向另一个storm.yaml
他们选择的。
STORM_USER
Storm守护程序运行的用户名。这是一项安全功能,可通过利用Storm守护程序中的某些漏洞来避免权限升级。
SUPERVISORD_TEMPLATE_CONF
要在映像中安装的模板管理程序配置文件的路径。默认情况下,它指向template-storm-supervisord.conf
Storm映像目录中文件。管理员可以在创建映像之前修改此文件,或将此变量设置为指向storm-supervisord.conf
其选择的任何其他文件。完成更改后,保存并关闭编辑器。
create-image
命令创建映像,指定新创建的映像的名称和API环境文件:
./storm-cluster-linode.sh create-image storm-image1 api_env_linode.conf
如果图像创建成功,输出将看起来像这样:
.... Deleting the temporary linode xxxxxx Finished creating Storm template image yyyyyy
如果进程失败,请确保您在Linode Manager中尚未拥有具有相同名称的现有Storm映像。如果这样做,请将其删除并再次运行该命令,或使用其他名称重新创建此图像。
注意在此过程中,将创建并删除短暂的2GB Linode。这将需要在月度发票中支付少量费用,并触发事件通知电子邮件发送到您在Linode注册的地址。这是预期的行为。在本节中,您将学习如何创建一个新的Storm集群,其中每个节点都是现有Storm映像的副本。如果尚未创建任何Storm图像,请首先按照创建风暴图像执行此操作。
注意创建群集时,您应该拥有
clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodenew-cluster-conf
命令创建配置目录。在这个例子中,我们将调用我们的新集群配置storm-cluster1
:
./storm-cluster-linode.sh new-cluster-conf storm-cluster1
这将创建一个名为storm-cluster1
包含主配置文件的目录,该目录storm-cluster1.conf
将在下一步中介绍。如果在运行上一个命令时选择了其他名称,则会相应地命名目录和配置文件。storm-cluster1.conf
文件并按如下所述进行更改。必须输入或更改其默认值的属性标记为REQUIRED:
DATACENTER_FOR_CLUSTER
Linode数据中心,将创建此群集的节点。集群的所有节点必须位于同一数据中心; 它们不能跨越多个数据中心,因为它们将使用专用网络流量进行通信。
这可以是任何Linode数据中心,但如果在创建映像和Cluster Manager Linode的同一数据中心中创建集群,则集群创建可能会更快。建议选择地理位置靠近您的场所的数据中心,以减少网络延迟。
此值可以是数据中心的ID或位置或缩写。要查看所有数据中心的列表:
./zookeeper-cluster-linode.sh datacenters api_env_linode.conf
NIMBUS_NODE
这指定了用于Nimbus节点的Linode计划,该节点负责向主管节点分发和协调Storm拓扑。
它应该是2GB | 4GB | ... | 120GB
(参见Linode所有计划的计划)之一。默认大小为2GB,但强烈建议Nimbus节点使用更大的计划。
SUPERVISOR_NODES
Supervisor节点是执行构成Storm拓扑的spout和bolt的主力。
应根据群集应同时运行的拓扑数量以及其spout和bolt的计算复杂性来确定Supervisor节点的大小和数量。语法是:
plan:count plan:count ...
A plan
是2GB | 4GB| ....| 120GB
(参见所有计划的Linode计划)之一,并且count
是该计划的监督节点数。虽然群集可以具有不同大小的管理程序节点,但建议对所有节点使用相同的计划。
稍后可以使用该add-nodes
命令增加超级用户节点的数量(请参阅扩展群集)。
例子:
CLIENT_NODE
群集的客户端节点用于向其提交拓扑并对其进行监视。这应该是2GB | 4GB | ... | 120GB
(参见Linode所有计划的计划)之一。对于大多数用例,默认值2GB就足够了。
STORM_IMAGE_CONF
- 需要
Storm映像目录或配置文件的路径,用作创建此集群节点的模板。每个节点的磁盘都是该映像的副本。
路径可以是绝对路径,也可以是相对于此群集配置目录的路径。使用我们的例子,绝对路径将是/home/clustermgr/storm-linode/storm-image1
和相对路径../storm-image1
。
NODE_DISK_SIZE
每个节点磁盘的大小(MB)。这必须至少与所选图像的磁盘一样大,否则图像将无法正确复制。
NODE_ROOT_PASSWORD
(可选)您可以为节点指定root密码。如果为空,则root密码将IMAGE_ROOT_PASSWORD
位于映像配置文件中。
NODE_ROOT_SSH_PUBLIC_KEY
和 NODE_ROOT_SSH_PRIVATE_KEY
(可选)您可以为root用户身份验证指定自定义SSH公钥文件和私钥文件。如果为空,则键将是映像配置文件中指定的键。
如果要指定自己的密钥对,请为此新密钥对选择一个描述性文件名(例如:zkcluster1root),使用它们生成它们ssh-keygen
,并在此处设置它们的完整路径。
NIMBUS_NODE_PUBLIC_HOSTNAME
,SUPERVISOR_NODES_PUBLIC_HOSTNAME_PREFIX
和CLIENT_NODES_PUBLIC_HOSTNAME_PREFIX
群集中的每个Linode都有一个公共IP地址,可以从Internet上的任何位置访问,以及一个专用IP地址,只能从同一数据中心内同一用户的其他节点访问。
因此,每个节点都有一个解析为其公共IP地址的公共主机名。每个节点的公共主机将使用该值,接着是多个(例如,public-host1
,public-host2
等)。如果群集管理器节点是在从群集节点不同的Linode的数据中心,它使用公共主机名和公共IP地址进行通信集群节点。
NIMBUS_NODE_PRIVATE_HOSTNAME
,SUPERVISOR_NODES_PRIVATE_HOSTNAME_PREFIX
和CLIENT_NODES_PRIVATE_HOSTNAME_PREFIX
群集中的每个Linode都被赋予一个私有主机名,该主机名解析为其私有IP地址。每个节点的私有主机名将使用此值后跟一个数字(例如,private-host1,private-host2等)。群集的所有节点都通过其私有主机名相互通信。这也是使用主机hostname
命令为节点设置的实际主机名并保存在/etc/hostname
。
CLUSTER_MANAGER_USES_PUBLIC_IP
false
如果集群管理器节点与集群节点位于同一 Linode数据中心,请将此值设置为。这是推荐值,也是默认值。true
仅当集群管理器节点位于与集群节点不同的 Linode数据中心时才更改为。
警告正确设置此选项以避免关键群集创建失败非常重要。
ZOOKEEPER_CLUSTER
- 需要
此Storm集群使用的Zookeeper集群目录的路径。
这可以是绝对路径,也可以是相对于此Storm群集配置目录的相对路径。使用我们的示例,绝对路径将是/home/clustermgr/storm-linode/zk-cluster1
,相对路径将是../zk-cluster1
。
IPTABLES_V4_RULES_TEMPLATE
应用于Nimbus和Supervisor节点的IPv4 iptables防火墙规则文件的绝对路径或相对路径。如果您计划自定义其防火墙配置,请修改此项。
IPTABLES_CLIENT_V4_RULES_TEMPLATE
应用于客户机节点的IPv4 iptables防火墙规则文件的绝对路径或相对路径。由于客户机节点托管群集监视Web服务器,并且管理员和开发人员应该可以访问它,因此其规则与其他节点的规则不同。如果您计划自定义其防火墙配置,请修改此项。
默认: ../template-storm-client-iptables-rules.v4
IPTABLES_V6_RULES_TEMPLATE
所有节点(包括客户机节点)遵循IPv6 iptables防火墙规则文件的绝对路径或相对路径。IPv6在所有节点上完全禁用,并且没有服务侦听IPv6地址。如果您计划自定义防火墙配置,请对此进行修改。完成更改后,保存并关闭编辑器。
create
命令创建集群:
./storm-cluster-linode.sh create storm-cluster1 api_env_linode.conf
如果成功创建群集,则会打印成功消息:
Storm cluster successfully created
可以使用以下describe
命令查看已创建集群的详细信息:
./storm-cluster-linode.sh describe storm-cluster1
群集节点在创建后很快关闭。本节将介绍如何启动Storm集群。这样做也将启动它所依赖的任何Zookeeper集群,因此不需要单独启动它们。
注意启动集群时,您应该拥有
clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodestart
命令启动Storm集群。此示例使用storm-cluster1
上面的命名约定,但如果您选择其他名称,则应在命令中替换它:
./storm-cluster-linode.sh start storm-cluster1 api_env_linode.conf每个Storm集群的客户端节点都运行一个Storm UI Web应用程序来监控该集群,但只能从列入白名单的工作站访问它。
接下来的两节将介绍如何将工作站列入白名单并从Web界面监控集群。
执行本节中的步骤时,您应该拥有clustermgr
Cluster Manager Linode的权限。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodeyour-cluster/your-cluster-client-user-whitelist.ipsets
文件(使用上面的示例storm-cluster1/storm-cluster1-client-user-whitelist.ipsets
)文件。
此文件是白名单IP地址的ipsets列表。它由一个主ipset和多个子ipsets组成,它们按IP地址或其他属性(如MAC ID)列出白名单机器。
主ipset命名为your-cluster-uwls。默认情况下,它是完全空的,这意味着没有人被授权。
以下重点介绍了这些新增内容:
注意文件中包含的任何IP地址都应该是面向公众的网络IP地址。例如,公司网络通常会将10.xxx或192.xxx地址等本地地址分配给员工工作站,然后在公司网络外发送请求时将其NAT设置为公共IP地址。由于群集客户端节点位于公司网络外部的Linode云中,因此它将看到来自此公共IP地址的监视请求。所以这是应该列入白名单的公共IP地址。
update-user-whitelist
命令激活新的ipsets :
./storm-cluster-linode.sh update-user-whitelist storm-cluster1
断开与客户机节点的连接并导航回storm-linode
集群管理器节点上的目录:
exit
describe
命令:
./storm-cluster-linode.sh describe storm-cluster1http://public-IP-of-client-node
在每个列入白名单的工作站上的Web浏览器中打开来验证是否可以访问Storm UI Web应用程序。您应该看到Storm UI Web应用程序,如下所示:
Storm UI显示拓扑列表和执行它们的主管列表:
如果群集正在执行任何拓扑,则它们将列在“ 拓扑摘要”部分下。单击拓扑以访问其统计信息,管理程序节点日志或诸如终止该拓扑之类的操作。
clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodeIMAGE_ADMIN_USER
用户(默认为clusteradmin
在Storm映像配置文件中配置)登录客户机节点:
ssh -i ~/.ssh/clusteradmin clusteradmin@192.168.42.13上述说明将使用示例“wordcount”拓扑,该拓扑不提供可见输出以显示其正在运行的操作的结果。但是,此拓扑只是对生成的句子中的单词进行计数,因此“发出”下的数字是实际的单词计数。
对于更实际的测试,请随意下载另一个拓扑,例如Reddit Comment Sentiment Analysis Topology,它输出给定subreddits中的基本线程列表,根据该拓扑,随着时间的推移,它具有最多的正面和负面评论。如果您确实选择下载第三方拓扑,请确保它来自可靠的来源,并将其下载到正确的目录。
如果您或开发人员已创建拓扑,请执行以下步骤以在其中一个Linode Storm集群上启动新拓扑:
注意开发人员应具有
clusteradmin
(或clusterroot
)授权登录目标Storm集群的客户端节点。 (可选)要获取客户端节点的IP地址,开发人员应具有clustermgrguest
(或clustermgrroot
)授权登录Cluster Manager Linode。如果其他方法知道IP地址,则不需要此授权。
private-key
Storm客户端的私钥,local-topology-path
JAR文件的本地文件路径,PUBLIC-IP-OF-CLIENT-NODE
Storm客户端的IP地址,以及topology-jar
您希望用于在客户端节点上存储拓扑的文件路径。clusteradmin
,替换为适当的值:
ssh -i ~/.ssh/private-key clusteradmin@PUBLIC-IP-OF-CLIENT-NODEtopology-jar.jar
为要提交的JAR文件的路径main-class
与主类的拓扑结构,并arguments-for-topology
通过拓扑结构的主类接受的参数。注意Storm UI将仅显示有关拓扑执行的信息,而不显示其正在处理的实际数据。数据(包括其输出目标)在拓扑的JAR文件中处理。
在本节中,我们将介绍管理Storm集群一旦启动并运行的其他操作。
应从storm-linode
集群管理器Linode上的目录执行本节中的所有命令。clustermgr
除非另有说明,否则您将需要特权。
如果Storm集群的管理程序节点因过多拓扑或其他CPU密集型作业而过载,则可能有助于添加更多管理程序节点以减轻部分负载。
使用该add-nodes
命令展开集群,指定新节点的计划和计数。例如,要将三个新的4GB管理程序节点添加到名为的集群storm-cluster1
:
./storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf "4GB:3"
或者,将2GB和两个4GB管理程序节点添加到storm-cluster1
:
./storm-cluster-linode.sh add-nodes storm-cluster1 api_env_linode.conf "2GB:1 4GB:2"
此语法可用于向现有群集添加任意数量的不同节点。
具有clustermgr
授权的用户可以使用describe
命令来描述Storm集群:
./storm-cluster-linode.sh describe storm-cluster1
仅具有clustermgrguest
授权的用户可以cluster_info.sh
用来描述Storm集群,list
以获取所有集群的名称列表,以及info
描述给定集群的命令。使用该info
命令时,还必须指定群集的名称:
./cluster_info.sh list
./cluster_info.sh info storm-cluster1
停止Storm集群会停止在该集群上执行的所有拓扑,停止所有节点上的Storm守护程序,并关闭所有节点。可以稍后重新启动群集。需要注意的是,节点将停止时仍收取每小时收费甚至。
要停止Storm集群,请使用以下stop
命令:
./storm-cluster-linode.sh stop storm-cluster1 api_env_linode.conf
销毁Storm集群会永久删除该集群的所有节点及其数据。他们将不再收取小时费用。
要销毁Storm集群,请使用以下destroy
命令:
./storm-cluster-linode.sh destroy storm-cluster1 api_env_linode.conf
您可以在Storm集群的所有节点上运行命令(例如,安装软件包或下载资源)。这在更新和升级软件或更改文件权限时也很有用。请注意,使用此方法时,命令将root
在每个节点上执行。
要在所有节点上执行命令,请使用该run
命令,指定群集名称和要运行的命令。例如,要在以下所有节点上更新软件包存储库storm-cluster1
:
./storm-cluster-linode.sh run storm-cluster1 "apt-get update"
您可以将一个或多个文件从集群管理器节点复制到Storm集群的所有节点。这些文件将作为root
用户复制到每个节点上,因此在复制需要特定权限的文件时请记住这一点。
local-file
本地计算机上文件的名称或路径,以及PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE
集群管理器节点的IP地址。您还可以指定其他文件路径并将其替换为~
:
scp -i ~/.ssh/clustermgr local-files clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE:~clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodecp
命令,指定每个节点上的目标目录以及要复制的本地文件列表:
./storm-cluster-linode.sh cp target-cluster-name "target-directory" "local-files"
请记住在源文件列表之前指定目标目录(这与常规cp
或scp
命令相反)。
例如,如果拓扑需要名为“* .data”的数据文件进行处理,则可以将它们复制到root
所有群集节点上的用户主目录,其中包括:
./storm-cluster-linode.sh cp storm-cluster1 "~" "~/*.data"要删除Storm映像,请使用以下delete-image
命令:
./storm-cluster-linode.sh delete-image storm-image1 api_env_linode.conf
请注意,此命令将删除图像,但不会删除从中创建的任何群集。
在本节中,我们将介绍在Zookeeper集群启动并运行后管理其他操作。
应从storm-linode
集群管理器Linode上的目录执行本节中的所有命令。clustermgr
除非另有说明,否则您将需要特权。
具有clustermgr
授权的用户可以使用该describe
命令来描述Zookeeper集群:
./zookeepercluster-linode.sh describe zk-cluster1
具有唯一clustermgrguest
授权的用户可以使用cluster_info.sh
来描述Zookeeper集群,list
以获取所有集群的名称列表,以及info
描述给定集群的命令。使用该info
命令时,必须指定群集的名称:
./cluster_info.sh list
./cluster_info.sh info zk-cluster1
停止Zookeeper群集会干净地停止所有节点上的Zookeeper守护程序,并关闭所有节点。可以稍后重新启动群集。请注意,节点将仍然招致的Linode的每小时收费停止时。
警告当依赖它的任何Storm集群正在运行时,不要停止Zookeeper集群。这可能会导致数据丢失。
要停止集群,请使用以下stop
命令:
./zookeeper-cluster-linode.sh stop zk-cluster1 api_env_linode.conf
销毁Zookeeper群集会永久删除该群集的所有节点及其数据。与仅关闭,销毁或删除的Linode不同,Linodes不再需要每小时收费。
警告在依赖它的任何Storm集群正在运行时,不要销毁Zookeeper集群。它可能会导致数据丢失。
要销毁群集,请使用以下destroy
命令:
./zookeeper-cluster-linode.sh destroy zk-cluster1 api_env_linode.conf
您可以立即在Zookeeper集群的所有节点上运行命令。在更新和升级软件,下载资源或更改新文件的权限时,这非常有用。请注意,使用此方法时,命令将root
在每个节点上执行。
要在所有节点上执行命令,请使用该run
命令,指定群集名称和要运行的命令。例如,要在所有节点上更新软件包存储库:
./zookeeper-cluster-linode.sh run zk-cluster1 "apt-get update"
您可以将一个或多个文件从集群管理器节点复制到Storm集群的所有节点。这些文件将作为root
用户复制到每个节点上,因此在复制需要特定权限的文件时请记住这一点。
local-file
本地计算机上文件的名称或路径,以及cluster-manager-IP
集群管理器节点的IP地址。您还可以指定其他文件路径并将其替换为~
:
scp -i ~/.ssh/clustermgr local-files clustermgr@cluster-manager-IP:~clustermgr
然后导航到storm-linode
目录:
ssh -i ~/.ssh/clustermgr clustermgr@PUBLIC-IP-OF-CLUSTER-MANAGER-LINODE cd storm-linodecp
命令,指定每个节点上的目标目录以及要复制的本地文件列表:
./zookeeper-cluster-linode.sh cp target-cluster-name "target-directory" "local-files"
请记住在源文件列表之前指定目标目录(这与常规cp
或scp
命令相反)。
例如,如果您的群集需要名为“* .data”的数据文件进行处理,则可以将它们复制到root
所有群集节点上的用户主目录,其中包括:
./zookeeper-cluster-linode.sh cp zk-cluster1 "~" "~/*.data"要删除Zookeeper映像,请执行以下delete-image
命令:
./zookeeper-cluster-linode.sh delete-image zk-image1 api_env_linode.conf
请注意,此命令将删除图像,但不会删除从中创建的任何群集。
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。