zookeeper怎么配置步骤

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zookeeper怎么配置步骤相关的知识,希望对你有一定的参考价值。

参考技术A (1)配置管理集中式的配置管理在应用集群中是非常常见的,一般商业公司内部都会实现一套集中的配置管理中心,应对不同的应用集群对于共享各自配置的需求,并且在配置变更时能够通知到集群中的每一个机器。Zookeeper很容易实现这种集中式的配置管理,比如将APP1的所有配置配置到/APP1znode下,APP1所有机器一启动就对/APP1这个节点进行监控(zk.exist("/APP1",true)),并且实现回调方法Watcher,那么在zookeeper上/APP1znode节点下数据发生变化的时候,每个机器都会收到通知,Watcher方法将会被执行,那么应用再取下数据即可(zk.getData("/APP1",false,null));以上这个例子只是简单的粗颗粒度配置监控,细颗粒度的数据可以进行分层级监控,这一切都是可以设计和控制的。(2)集群管理应用集群中,我们常常需要让每一个机器知道集群中(或依赖的其他某一个集群)哪些机器是活着的,并且在集群机器因为宕机,网络断链等原因能够不在人工介入的情况下迅速通知到每一个机器。Zookeeper同样很容易实现这个功能,比如我在zookeeper服务器端有一个znode叫/APP1SERVERS,那么集群中每一个机器启动的时候都去这个节点下创建一个EPHEMERAL类型的节点,比如server1创建/APP1SERVERS/SERVER1(可以使用ip,保证不重复),server2创建/APP1SERVERS/SERVER2,然后SERVER1和SERVER2都watch/APP1SERVERS这个父节点,那么也就是这个父节点下数据或者子节点变化都会通知对该节点进行watch的客户端。因为EPHEMERAL类型节点有一个很重要的特性,就是客户端和服务器端连接断掉或者session过期就会使节点消失,那么在某一个机器挂掉或者断链的时候,其对应的节点就会消失,然后集群中所有对/APP1SERVERS进行watch的客户端都会收到通知,然后取得最新列表即可。另外有一个应用场景就是集群选master,一旦master挂掉能够马上能从slave中选出一个master,实现步骤和前者一样,只是机器在启动的时候在APP1SERVERS创建的节点类型变为EPHEMERAL_SEQUENTIAL类型,这样每个节点会自动被编号,例如zk.create("/testRootPath/testChildPath1","1".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);zk.create("/testRootPath/testChildPath2","2".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);zk.create("/testRootPath/testChildPath3","3".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);//创建一个子目录节点zk.create("/testRootPath/testChildPath4","4".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);System.out.println(zk.getChildren("/testRootPath",false));打印结果:[testChildPath10000000000,testChildPath20000000001,testChildPath40000000003,testChildPath30000000002]zk.create("/testRootPath","testRootData".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);//创建一个子目录节点zk.create("/testRootPath/testChildPath1","1".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);zk.create("/testRootPath/testChildPath2","2".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);zk.create("/testRootPath/testChildPath3","3".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);//创建一个子目录节点zk.create("/testRootPath/testChildPath4","4".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);System.out.println(zk.getChildren("/testRootPath",false));打印结果:[testChildPath2,testChildPath1,testChildPath4,testChildPath3]我们默认规定编号最小的为master,所以当我们对/APP1SERVERS节点做监控的时候,得到服务器列表,只要所有集群机器逻辑认为最小编号节点为master,那么master就被选出,而这个master宕机的时候,相应的znode会消失,然后新的服务器列表就被推送到客户端,然后每个节点逻辑认为最小编号节点为master,这样就做到动态master选举。

对于三节点集群zookeeper配置步骤:

步骤一;
干净的集群,全新的hdfs
在第一台主机上配置配置文件
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://bcqm1711</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.6.1/hadoopdata/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
</configuration>

hdfs-site.xml:
<configuration>
<!-- 指定hdfs的nameservice为beicai,就是那个代理程序,询问zk集群哪个namenode还活着 -->
<property>
<name>dfs.nameservices</name>
<value>bcqm1711</value>
</property>

<!—指定hdfs的两个NameNode都是什么名字(等会儿下面会配置他们所对应的机器的信息)-->
<property>
<name>dfs.ha.namenodes.bcqm1711</name>
<value>nn1,nn2</value>
</property>

<!—NameNode1的rpc通讯地址-->
<property>
<name>dfs.namenode.rpc-address.bcqm1711.nn1</name>
<value>hdp-qm-01:8020</value>
</property>

<!—NameNode2的rpc通讯地址-->
<property>
<name>dfs.namenode.rpc-address.bcqm1711.nn2</name>
<value>hdp-qm-02:8020</value>
</property>

<!—NameNode1的web界面地址-->
<property>
<name>dfs.namenode.http-address.bcqm1711.nn1</name>
<value>hdp-qm-01:50070</value>
</property>
<!—NameNode2的web界面地址-->
<property>
<name>dfs.namenode.http-address.bcqm1711.nn2</name>
<value>hdp-qm-02:50070</value>
</property>

######如果给一个有数据的HDFS添加HA,此处无需更改,保持原有地址即可#####
<!---namenode存放元数据信息的Linux本地地址,这个目录不需要我们自己创建->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/hadoop/hadoop-2.6.1/hadoopdata/dfs/name</value>
</property>

<!—datanode存放用户提交的大文件的本地Linux地址,这个目录不需要我们自己创建-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/hadoop/hadoop-2.6.1/hadoopdata/dfs/data</value>
</property>

<!—QJM存放共享数据的方式-->
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>
qjournal://hdp-qm-01:8485;hdp-qm-02:8485;hdp-qm-03:8485/bcqm1711</value>
</property>

<!—单个QJM进程(角色)存放本地edits文件的Linux地址-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop-2.6.1/hadoopdata/journal</value>
</property>

<!—开启hdfs的namenode死亡后自动切换-->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

<!-- 指定zookeeper集群地址,辅助两个namenode进行失败切换 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hdp-qm-01:2181,hdp-qm-02:2181,hdp-qm-03:2181</value>
</property>

<!—zkfc程序的主类-->
<property>
<name>dfs.client.failover.proxy.provider.bcqm1711</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!—防止多个namenode同时active(脑裂)的方式-->
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<!—指定本机的私钥所在目录,
注意:如果是普通用户hadoop则修改为root为”/home/hadoop/.ssh/id_rsa”-->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>

<!—指定ssh通讯超时时间-->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>

yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>bcqm1711yarn</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>hdp-qm-01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>hdp-qm-02</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>hdp-qm-01:2181,hdp-qm-02:2181,hdp-qm-03:2181</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!--RM1-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hdp-qm-01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hdp-qm-01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdp-qm-01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdp-qm-01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-01:8088</value>
</property>

<!--RM2-->
<property>
<name>yarn.resourcemanager.address</name>
<value>hdp-qm-02:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hdp-qm-02:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hdp-qm-02:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hdp-qm-02:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-02:8088</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hdp-qm-02:8088</value>
</property>
</configuration>

步骤二;
在配置hdfs-site.xml配置文件之前,要先删掉之前的记录
删掉hadoopdata目录下的所有文件

删掉/home/hadoop/.ssh/*下的内容
rm -rf /home/hadoop/.ssh/*
步骤三:
配置免密
在/home/hadoop/hadoop-2.6.1/etc/hadoop/目录下
cd /home/hadoop/hadoop-2.6.1/etc/hadoop/
$ ssh-keygen -t rsa 一直回车

在根目录下
发送免密
ssh-copy-id [email protected]
ssh-copy-id [email protected]
ssh-copy-id [email protected]

步骤四:
发送配置好的hadoop文件夹到其他节点
scp -r hadoop-2.6.1 [email protected]:/home/hadoop/
scp -r hadoop-2.6.1 [email protected]:/home/hadoop/

步骤五;
启动zk集群
sh zkServer.sh start

查看各节点启动状态

步骤六:
启动journanode,在各个节点都启动
# hadoop-daemon.sh start journalnode
运行jps命令检验,多了journalNode进程

步骤七;
在第一台格式化
格式化hdfs(在master上执行命令: 格式化HA必须先启动zk服务、journalnode)
# hadoop namenode -format

步骤八:
在hadoopdata目录下
开启namenode
$ hadoop-da.sh start namenode

步骤九;
同步元数据信息,在第二台进行
$ hdfs namenode -bootstrapStandby

步骤十:
在hadoopdata目录下,
$ hdfs zkfc -formatZK

步骤十一:
在hadoopdata目录下,开启集群
$ start-all.sh

步骤十二:
开启第二台的namenode
yarn-daemon.sh start resourcemanager

步骤十三:
jps验证是否功能全部开启
网页登录hdp-qm-01:50070
网页登录hdp-qm-02:50070

网页登录hdp-qm-01:8088
网页登录hdp-qm-02:8088

查看到第一台处于active,第二台处于standby
表示配置成功

 

以上是关于zookeeper怎么配置步骤的主要内容,如果未能解决你的问题,请参考以下文章

搭建三节点高可用集群配置步骤,zookeeper

centos7虚拟机在集群zookeeper上面配置hbase的具体操作步骤

Hadoop集群HDFSYARN高可用HA详细配置步骤说明,附Zookeeper搭建详细步骤建议收藏!!!

Zookeeper 安装步骤

windows下安装zookeeper步骤(图文教程)

windows下安装zookeeper 步骤