-
Notifications
You must be signed in to change notification settings - Fork 53
5. 部署方法
ADFS系统中涉及的模块较多,手动部署起来比较繁琐,为了方便用户初次体验,我们提供了典型集群场景的自动化部署工具ezdeploy。用户在使用该工具之前,只需要部署准备好若干台服务器,并保证它们之间的SSH通道可以无密码登录。本节首先会介绍如何快速部署ADFS集群,然后再详细介绍ADFS集群的推荐配置和参数说明。
下面我们用一个例子来介绍一下采用ezdeploy快速部署ADFS的流程:
一、准备好空闲的7台服务器(dw1-dw7)的集群环境,如图表 13所示,并且确保它们之间可以通过SSH无密码登录。在这7台服务器中,选定一个作为控制节点,控制节点必须运行Stateless Namenode和State Manager,图中我们选定了dw1.foo.com作为控制节点。
二、将ADFS的部署包手动拷贝到dw1.foo.com的指定目录下并解压:
tar xf adfs-.tar.gz
三、进入ADFS的conf目录,配置slaves和masters文件,在本例中,dw2的主机名写入masters文件(由于dw1是控制节点,无需显式写入masters文件中),dw3, dw4和dw7的主机名写入slaves文件中,每行写一个主机名:
cd adfs-/conf
vim masters
vim slaves
四、执行bin目录中的ezdeploy.sh脚本,如(各个zookeeper之间用逗号隔开):
bin/ezdeploy.sh “dw5.foo.com:2181,dw6.foo.com:2181,dw7.foo.com:2181”
执行完上述命令后,剩下的工作就由ezdeploy脚本自动完成,它会根据设置的信息进行自动生成配置文件,自动拷贝部署包到各个服务器上,自动搭建Zookeeper集群并启动Zookeeper和ADFS集群。脚本完成以后ADFS集群就处于可用状态。
处于性能方面的考虑,用于部署ADFS Namenode和State Manager的服务器推荐配置SSD和较大的内存,用于部署Zookeeper集群的服务器上尽量不要运行其他IO密集型应用并且推荐配置RAID卡。在上面的例子中,服务器dw7上既运行了Zookeeper,又运行了Datanode,这在生产环境下是不推荐的。至于Zookeeper其他方面的性能调优,可以访问Apache社区获取更多的资料。
图表 13 采用ezdeploy部署示意图
通过ezdeploy工具,用户几乎接触不到ADFS的任何配置文件就可以完成。用户在熟悉ADFS以后,可能需要对ADFS集群做自定义配置,下面我们对ADFS中一些常用的配置做进一步说明。
State Manager的配置信息保存在conf目录下的distributed-server-site.xml文件中,其格式与Hadoop的保持一致,它包括如下配置项:
distributed.data.class.name 指定分布式框架中运行的应用。缺省为com.taobao.adfs.state.internal.StateManagerInternal,即在该分布式框架上运行的是State Manager。
distributed.metrics.address 指定Ganglia监控的服务端地址。缺省为127.0.0.1:8649,需要修改为部署环境下的Ganglia服务端地址。
distributed.manager.address 指定zookeeper的地址。缺省为127.0.0.1:2181,需要修改为部署环境下zookeeper集群的地址。
distributed.manager.election.delay.time 主从选举等待时间(毫秒为单位)。缺省为-1,即主从相互永远等待,如果需要启动单机版State Manger,可设为1000
distributed.data.path 存放持久化存储innodb的路径,缺省为空,会在启动State Manager的当前目录下创建该路径。
distributed.logger.conf.log4j.appender.DistributedServer.File 可指定State Manager日志的路径和名称,缺省为空,即默认的distributed-server.log。
distributed.logger.levels 设定日志级别,缺省为空。
file.cache.capacity 文件缓冲区的有关参数,缺省为空。
database.executor.client.number 与innodb连接的客户端数量,缺省为1。
mysql.server.conf.mysqld.innodb_flush_log_at_trx_commit innodb相关的配置,缺省为1,即每次事务需要将日志刷入磁盘做持久化。
mysql.server.conf.mysqld.innodb_buffer_pool_size innodb的缓冲区大小,缺省为8M。
对于Namenode和Datanode的配置,基本可以参照HDFS原来的配置,在conf目录下的core-site.xml和hdfs-site.xml中定义配置参数。这里介绍一下新引入的配置项:
dfs.namenode.selector 选择Stateless Namenode的策略。缺省为org.apache.hadoop.hdfs.server.common.ConfNameNodeSelector,也可以指定ZKNamenodeSelector。
dfs.namenode.rpcaddr.list Stateless Namenode列表,单个Stateless Namenode的格式是: hdfs://:,Stateless Namenode之间由逗号分割
zookeeper.server.list Zookeeper集群的列表。
dfs.client.reselectnamenode 是否允许client重选Stateless Namenode,缺省为true。
dfs.client.refreshnamenode 是否允许client重新加载Stateless Namenode,缺省为true。
dfs.namenode.selector.timeout 选择Stateless Namenode异常的超时时间(单位毫秒),缺省为20000。
dfs.namenode.selector.maxretrycount 重试当前Stateless Namenode最大次数,缺省为3次。
distributed.manager.address 指定State Manager的地址,该值与zookeeper.server.list保持一致。
最后,简单介绍一下启动和停止集群的脚本。在ADFS的bin目录下,通过dsserver.sh对当前State Manager执行格式化、启动和停止等操作,通过zkServer.sh对当前zookeeper实例执行启停等操作,通过start-dfs.sh和stop-dfs.sh对所有ADFS Stateless Namenode和Datanode进行启动和停止。值得注意的是,集群正确的启动顺序为Zookeeper,State Manager,Stateless Namenode和Datanode,停止顺序与之相反。