Hbase-HA(高可用)搭建

本文详细介绍了在CentOS环境下搭建Hadoop与HBase高可用集群的过程,包括时间同步、主机名映射、防火墙配置、JDK安装、Zookeeper集群设置、HDFS-HA配置、HBase-HA配置等关键步骤。

在这里插入图片描述

基础配置

1.保证所有物理主机的时钟同步。

[root@CentOSX ~]# yum install -y ntp -y (下载时间同步服务器)
[root@CentOSX ~]# ntpdate time.apple.com(时间校对工具)
[root@CentOSA ~]# clock -w (调整RTC时间)
由于Hbase服务器之间需要通过心跳确定服务器是否在正常运行,所以这里在搭建的物理主机的时候一定要确保所有的物理主机的时钟是同步的。

2.为了保证服务器间能够正常通信,通常需要配置

  • 主机名和ip映射关系
[root@CentOSX ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.186.152 CentOSA
192.168.186.153 CentOSB
192.168.186.154 CentOSC
  • 关闭防火墙
[root@CentOSX ~]# systemctl stop firewalld
[root@CentOSX ~]# systemctl disable firewalld
[root@CentOSX ~]# firewall-cmd --state
not running
  • 所有的物理主机安装JDK
[root@CentOSX ~]# rpm -ivh jdk-8u171-linux-x64.rpm
[root@CentOSX ~]# vi .bashrc
JAVA_HOME=/usr/java/latest/
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH
[root@CentOSX ~]# source .bashrc

Zookeeper集群

1.上传zookeeper的安装包,并解压在/usr目录下

[root@CentOX ~]# tar -zxf zookeeper-3.4.12.tar.gz -C /usr/

2.配置Zookepeer的zoo.cfg

[root@CentOSX ~]# tar -zxf zookeeper-3.4.12.tar.gz -C /usr/
[root@CentOSX ~]# cd /usr/zookeeper-3.4.12/
[root@CentOSX zookeeper-3.4.12]# cp conf/zoo_sample.cfg conf/zoo.cfg
[root@CentOSX zookeeper-3.4.12]# vi conf/zoo.cfg 
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/root/zkdata
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=CentOSA:2888:3888
server.2=CentOSB:2888:3888
server.3=CentOSC:2888:3888

3.创建zookeeper的数据目录

[root@CentOSX ~]# mkdir /root/zkdata

4.在CentOSA/B/C的zookeeper的datadir分别创建myid文件

[root@CentOSA ~]# echo 1 > /root/zkdata/myid
[root@CentOSB ~]# echo 2 > /root/zkdata/myid
[root@CentOSC ~]# echo 3 > /root/zkdata/myid

5.启动zookeeper服务

[root@CentOSX ~]# cd /usr/zookeeper-3.4.12/
[root@CentOSX zookeeper-3.4.12]# ./bin/zkServer.sh start zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.4.12/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@CentOSX zookeeper-3.4.12]# ./bin/zkServer.sh status zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper-3.4.12/bin/../conf/zoo.cfg
Mode: leader|folower

HDFS-HA

1.解压Hadoop安装包到/usr目录下,并且需要配置HADOOP_HOME

[root@CentOSX ~]# tar -zxf hadoop-2.9.2.tar.gz -C /usr/
[root@CentOSX ~]# vi .bashrc
HADOOP_HOME=/usr/hadoop-2.9.2
JAVA_HOME=/usr/java/latest/
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME
export CLASSPATH
export PATH
export HADOOP_HOME
[root@CentOSX ~]# source .bashrc
[root@CentOSX ~]# hadoop classpath
/usr/hadoop-2.9.2/etc/hadoop:/usr/hadoop-2.9.2/share/hadoop/common/lib/*:/usr/hadoop-2.9.2/share/hadoop/common/*:/usr/hadoop-2.9.2/share/hadoop/hdfs:/usr/hadoop-2.9.2/share/hadoop/hdfs/lib/*:/usr/hadoop-2.9.2/share/hadoop/hdfs/*:/usr/hadoop-2.9.2/share/hadoop/yarn:/usr/hadoop-2.9.2/share/hadoop/yarn/lib/*:/usr/hadoop-2.9.2/share/hadoop/yarn/*:/usr/hadoop-2.9.2/share/hadoop/mapreduce/lib/*:/usr/hadoop-2.9.2/share/hadoop/mapreduce/*:/usr/hadoop-2.9.2/contrib/capacity-scheduler/*.jar

2.配置core-site.xml

<property>
  <name>fs.defaultFS</name>
  <value>hdfs://mycluster</value>
</property>

<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/hadoop-2.9.2/hadoop-${user.name}</value>
</property>

<property>
	<name>ha.zookeeper.quorum</name>
  <value>CentOSA:2181,CentOSB:2181,CentOSC:2181</value>
</property>

3.配置hdfs-site.xml

<!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 -->
<property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
</property>
<!-- ns下面有两个NameNode,分别是nn1,nn2 -->
<property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>CentOSA:9000</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>CentOSB:9000</value>
</property>

<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://CentOSA:8485;CentOSB:8485;CentOSC:8485/mycluster</value>
</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/usr/hadoop-2.9.2/hadoop-journaldata</value>
</property>
<!-- 开启NameNode故障时自动切换 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔离机制时需要ssh免登陆 -->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
</property>

4.配置三台主机ssh免密码登录

[root@CentOSX ~]# ssh-keygen -t rsa
[root@CentOSX ~]# ssh-copy-id CentOSA
[root@CentOSX ~]# ssh-copy-id CentOSB
[root@CentOSX ~]# ssh-copy-id CentOSC

5.初始化HDFS-HA

[root@CentOSX ~]# hadoop-daemon.sh start journalnode
[root@CentOSA ~]# hdfs namenode -format
[root@CentOSA ~]# hadoop-daemon.sh start namenode
[root@CentOSB ~]# hdfs namenode -bootstrapStandBy
[root@CentOSB ~]# hadoop-daemon.sh start namenode
[root@CentOSA|B ~]# hdfs zkfc -formatZK
[root@CentOSA ~]# hadoop-daemon.sh start zkfc
[root@CentOSB ~]# hadoop-daemon.sh start zkfc
[root@CentOSX ~]# hadoop-daemon.sh start datanode

HBase-HA

1.解压并配置HBase

[root@CentOSX ~]# tar -zxf hbase-1.2.4-bin.tar.gz -C /usr/

2.,配置Hbase环境变量HBASE_HOME

[root@CentOSX ~]# vi .bashrc 
HBASE_HOME=/usr/hbase-1.2.4
HADOOP_HOME=/usr/hadoop-2.9.2
JAVA_HOME=/usr/java/latest
CLASSPATH=.
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin
export JAVA_HOME
export CLASSPATH
export PATH
export HADOOP_HOME
export HBASE_HOME

[root@CentOSX ~]# source .bashrc 
[root@CentOSX ~]# hbase classpath # 测试Hbase是否识别Hadoop
/usr/hbase-1.2.4/conf:/usr/java/latest/lib/tools.jar:/usr/hbase-1.2.4:/usr/hbase-1.2.4/lib/activation-1.1.jar:/usr/hbase-1.2.4/lib/aopalliance-1.0.jar:/usr/hbase-1.2.4/lib/apacheds-i18n-2.0.0-M15.jar:/usr/hbase-1.2.4/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/usr/hbase-1.2.4/lib/api-asn1-api-1.0.0-M20.jar:/usr/hbase-1.2.4/lib/api-util-1.0.0-M20.jar:/usr/hbase-1.2.4/lib/asm-3.1.jar:/usr/hbase-1.2.4/lib/avro-
...
1.7.4.jar:/usr/hbase-1.2.4/lib/commons-beanutils-1.7.0.jar:/usr/hbase-1.2.4/lib/commons-
2.9.2/share/hadoop/yarn/*:/usr/hadoop-2.9.2/share/hadoop/mapreduce/lib/*:/usr/hadoop-2.9.2/share/hadoop/mapreduce/*:/usr/hadoop-2.9.2/contrib/capacity-scheduler/*.jar

3.,配置hbase-site.xml

[root@CentOSX ~]# cd /usr/hbase-1.2.4/
[root@CentOSX hbase-1.2.4]# vi conf/hbase-site.xml
<property>
    <name>hbase.rootdir</name>
    <value>hdfs://mycluster/hbase</value>
</property>
<property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
</property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>CentOSA,CentOSB,CentOSC</value>
</property>
<property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
</property>

4.修改hbase-env.sh,将HBASE_MANAGES_ZK修改为false

[root@CentOSX ~]# cd /usr/hbase-1.2.4/
[root@CentOSX hbase-1.2.4]# grep -i HBASE_MANAGES_ZK conf/hbase-env.sh 
# export HBASE_MANAGES_ZK=true
[root@CentOSX hbase-1.2.4]# vi conf/hbase-env.sh 
export HBASE_MANAGES_ZK=false
[root@CentOSX hbase-1.2.4]# grep -i HBASE_MANAGES_ZK conf/hbase-env.sh 
export HBASE_MANAGES_ZK=false

//export HBASE_MANAGES_ZK=false告知Hbase,使用外部Zookeeper

**5.修改RegionServers **

CentOSA
CentOSB
CentOSC

6.启动Hbase

[root@CentOSX hbase-1.2.4]# ./bin/hbase-daemon.sh start master
[root@CentOSX hbase-1.2.4]# ./bin/hbase-daemon.sh start regionserver

7.验证Hbase安装是否成功

[root@CentOSB hbase-1.2.4]# ./bin/hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hbase-1.2.4/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/hadoop-2.9.2/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.4, rUnknown, Wed Feb 15 18:58:00 CST 2017

hbase(main):001:0> status
1 active master, 2 backup masters, 3 servers, 0 dead, 0.6667 average load
<think>嗯,用户想了解如何搭建HBase高可用集群,也就是HBase HA。我需要先理清楚HBase HA的基本概念和实现方式。HBase高可用主要依赖于ZooKeeper和HDFS的HA机制,所以可能需要先确保这两部分已经配置好了。 首先,我应该回忆一下HBase的架构。HBase的HMaster存在单点故障问题,所以HA通常是通过配置多个HMaster来实现的,这些HMaster通过ZooKeeper进行协调,当活跃的Master宕机时,备用的会自动接管。同时,HBase的数据存储依赖于HDFS,所以HDFS本身的HA也需要配置,比如使用HDFS的NameNode HA。 那用户的提问可能需要分步骤讲解,包括前置条件、配置ZooKeeper、HDFS HAHBase多个Master以及RegionServer的配置。可能还需要考虑配置文件的具体修改,比如hbase-site.xml和regionservers文件。 接下来,我需要考虑用户的使用场景。可能用户是想要在生产环境中部署HBase集群,所以需要高可用性,避免单点故障。用户可能是系统管理员或者大数据工程师,有一定的Hadoop生态的基础知识,但可能对具体的HA配置步骤不太熟悉。 用户的真实需求可能不仅仅是步骤,还包括一些注意事项和验证方法。比如如何测试HA是否生效,或者在配置过程中可能遇到的常见问题,比如端口冲突、配置错误等。此外,用户可能还想知道如何管理和维护这样的集群,比如如何优雅地切换Master,或者如何监控集群状态。 另外,需要确认是否用户已经具备Hadoop和ZooKeeper的基础环境,或者是否需要从零开始指导。根据问题描述,用户可能已经了解一些,但需要详细的步骤说明。所以在回答中需要包括前置条件的检查,比如确保HDFS HA和ZooKeeper已经配置完成。 然后,具体的步骤可能包括: 1. 配置ZooKeeper集群,确保其高可用。 2. 配置HDFS HA,使用QJM或者共享存储。 3. 修改HBase的配置文件,设置多个HMaster节点,并指定ZooKeeper集群的信息。 4. 启动HBase集群,并验证各个组件的状态。 5. 测试故障转移,比如手动杀死活跃的HMaster,看备用的是否能接管。 在配置hbase-site.xml时,需要设置hbase.rootdir为HDFS的HA路径,比如使用hdfs://mycluster/hbase。同时,设置hbase.zookeeper.quorum为ZooKeeper的节点列表,以及启用分布式模式。 可能还需要配置备份HMaster的节点,在conf目录下创建backup-masters文件,添加备用Master的主机名。 另外,RegionServer的配置也需要考虑,确保每个节点上的RegionServer正确运行,并且HBase能够识别它们。 在验证部分,可能需要通过HBase的Web UI查看Master的状态,或者使用HBase Shell执行一些命令来确认集群正常运行。 最后,注意事项可能包括网络配置、时间同步、防火墙设置等,这些都是集群稳定运行的基础。 总结下来,回答的结构应该是先介绍HA的原理,然后分步骤详细说明配置过程,包括前置条件、具体配置、启动和验证,以及常见问题和注意事项。需要确保用户能够按照步骤操作,并理解每个步骤的作用。</think>搭建HBase高可用HA)集群的核心是解决单点故障问题,主要涉及**多HMaster配置**和**依赖组件(HDFS、ZooKeeper)的高可用**。以下是分步指南: --- ### **一、前置条件** 1. **基础环境** - 至少3台Linux服务器(建议奇数节点,避免ZooKeeper脑裂) - JDK 1.8+、SSH免密登录、时间同步(NTP) - 已部署Hadoop HDFS HA集群(如NameNode HA + JournalNode) - 已部署ZooKeeper集群(至少3节点) --- ### **二、HDFS HA配置(若未完成)** HBase依赖HDFS存储数据,需先确保HDFS HA: 1. **配置NameNode HA** - 使用QJM(Quorum Journal Manager)或共享存储(如NFS)。 - 示例配置(`hdfs-site.xml`): ```xml <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node2:8020</value> </property> <!-- 其他JournalNode、故障切换配置 --> ``` --- ### **三、ZooKeeper集群配置** 1. **安装ZooKeeper** - 在至少3台服务器部署ZooKeeper,配置`zoo.cfg`: ```properties dataDir=/data/zookeeper clientPort=2181 server.1=zk-node1:2888:3888 server.2=zk-node2:2888:3888 server.3=zk-node3:2888:3888 ``` - 在每个节点创建`myid`文件,内容为对应的服务器ID(如1、2、3)。 --- ### **四、HBase HA配置** #### 1. **HMaster高可用** - 在多个节点部署HMaster,配置`hbase-site.xml`: ```xml <!-- 指定HDFS HA地址 --> <property> <name>hbase.rootdir</name> <value>hdfs://mycluster/hbase</value> </property> <!-- 启用分布式模式 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 配置ZooKeeper集群 --> <property> <name>hbase.zookeeper.quorum</name> <value>zk-node1,zk-node2,zk-node3</value> </property> <!-- 设置ZooKeeper数据目录 --> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/data/zookeeper</value> </property> ``` #### 2. **指定备份HMaster节点** - 在`conf/backup-masters`文件中添加备用HMaster主机名: ```text node2 node3 ``` #### 3. **配置RegionServers** - 在`conf/regionservers`文件中添加所有RegionServer节点: ```text node1 node2 node3 ``` --- ### **五、启动与验证** 1. **启动顺序** - 启动ZooKeeper集群:`zkServer.sh start` - 启动HDFS HA集群:`start-dfs.sh` - 启动HBase集群:`start-hbase.sh` 2. **验证HA功能** - **HMaster状态**:访问`http://active-hmaster:16010`,查看备用HMaster是否存活。 - **手动故障转移**:杀死当前活跃HMaster,观察备用节点是否自动接管。 - **HBase Shell测试**:执行`create 'test', 'cf'`和`list`命令确认读写正常。 --- ### **六、注意事项** 1. **网络与防火墙** - 确保节点间端口开放(如HBase Master端口16000、16010,ZooKeeper 2181、2888、3888)。 2. **数据持久性** - HBase数据依赖HDFS,需确保HDFS副本数(默认3)和容错能力。 3. **监控与日志** - 使用HBase Web UI(16010端口)或集成Prometheus监控。 - 日志路径:`logs/hbase-<user>-master-<hostname>.log` --- 通过上述步骤,即可搭建一个具备高可用性的HBase集群,能够自动处理HMaster和HDFS的故障切换,保障服务连续性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值