关于Zookeeper不得不说的事

在说完全分布式模式之前,必须重点提一下Zookeeper。虽然Zookeeper不是HBase的组成部分,但它却是其不可或缺的依赖组建。你必须完全理解Zookeeper在HBase中的作用和地位,才能避免在接下来的操作中带来的问题。

首先你需要知道:HBase自带了一个Zookeeper,而且会默认启动自已的Zookeeper。

Zookeeper进程的名字:

如果HBase用的是自已的Zookeeper,那你在jps中看到的Zookeeper名字是HQuorumPeer。如果使用的是外部的Zookeeper集群,那么他的名字叫QuorumPeer或者是QuorumPeerMain。

是否开启HBase自带的Zookeeper开关:

是否开启自带的Zookeeper由conf/hbase-env.sh中定义的HBASE_MANAGES_ZK变量定义。这个变量默认为ture,也就是开启自带的Zookeeper。如果你不希望让HBase开启自带的Zookeeper(一般生产环境都不会用HBase自带的Zookeeper),那么则需要将此行代码注释或者将true修改为false即可。

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=true

修改后为:

# Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false

Zookeeper的配置在哪里

如果你用的是独立部署的Zookeeper的配置,它是在zoo.cfg文件里。如果你用的是自带的Zookeeper,那么它就在hbase-site.xml里面配置。它们的区别是在hbase-site.xml中的Zookeeper相关配置项就是在zoo.cfg中对应的属性名前面加上hbase.zookeeper.property.前缀。比如在zoo.cfg中的配置项dataDir,在hbase-site.xml中就叫hbase.zookeeper.property.dataDir。

多少个节点最好:

节点越多容灾能力就越强。不过节点数一定要是奇数个,虽然偶数个也不是不能启动,但是不建议使用偶数个节点,有以下两个原因:
① Zookeeper采用的是仲裁制度来决定大多数的操作是否成功。比如,当过半的节点认为该写入操作是成功的,那么该写入操作就是成功的。
②Zookeeper的容灾机制定义了:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。如果你有5个节点,那么2个节点宕掉,你的集群依然可用运行,这时我们称为该集群的容灾能力是2。就算你多部署了一个节点,目前的节点数为6,那么只要3个节点宕掉整个集群就宕掉了,所以你的集群的容灾能力还是只有2。

机器的配置

最好分配1GB的内存给Zookeeper,并且Zookeeper的存储位置是在一个独立的磁盘上的(包括程序文件夹和数据文件夹)。Zookeeper是管理集群的,到底什么节点宕掉了,只有它知道,所以它应该是系统中最后关闭、最稳定的部分。把Zookeeper存储在一个独立的磁盘上,可用避免当磁盘出现IO问题的时候,Zookeeper被涉及。

猜你喜欢

转载自blog.csdn.net/Victory_Lei/article/details/108189139