在CentOS上实现HBase的高可用性(HA)涉及多个步骤,包括配置HBase集群、设置ZooKeeper、配置HBase的HA特性等。以下是一个基本的指南:
HBase依赖ZooKeeper来管理集群的状态和协调。
下载并解压ZooKeeper:
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzf apache-zookeeper-3.7.0-bin.tar.gz
cd apache-zookeeper-3.7.0-bin
配置ZooKeeper:
cp conf/zoo_sample.cfg conf/zoo.cfg
conf/zoo.cfg
文件,添加以下内容:tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
dataDir
目录下创建myid
文件,并写入服务器ID:echo "1" > /var/lib/zookeeper/myid # 在zoo1服务器上
echo "2" > /var/lib/zookeeper/myid # 在zoo2服务器上
echo "3" > /var/lib/zookeeper/myid # 在zoo3服务器上
启动ZooKeeper:
bin/zkServer.sh start
下载并解压HBase:
wget https://downloads.apache.org/hbase/2.4.9/hbase-2.4.9-bin.tar.gz
tar -xzf hbase-2.4.9-bin.tar.gz
cd hbase-2.4.9
配置HBase:
conf/hbase-site.xml
文件,添加以下内容:<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://namenode:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>zoo1,zoo2,zoo3</value>
</property>
<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>
<property>
<name>hbase.master.info.port</name>
<value>16000</value>
</property>
<property>
<name>hbase.regionserver.info.port</name>
<value>16020</value>
</property>
<property>
<name>hbase.ipc.server.port</name>
<value>16030</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
<property>
<name>hbase.hregion.max.filesize</name>
<value>2147483648</value>
</property>
<property>
<name>hbase.regionserver.hlog.blocksize</name>
<value>67108864</value>
</property>
<property>
<name>hbase.regionserver.hlog.writer.impl</name>
<value>org.apache.hadoop.hbase.regionserver.wal.HLog</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.count</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.checkpoint</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.max</name>
<value>1000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.min</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.timeout</name>
<value>60000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlush</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushTimeout</name>
<value>30000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushSize</name>
<value>10485760</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitter</name>
<value>10000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterPercent</name>
<value>0.1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterMin</name>
<value>1000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterMax</name>
<value>5000</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStep</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMax</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandom</name>
<value>true</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeed</name>
<value>12345</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedSize</name>
<value>10</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMax</name>
<value>100</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedMin</name>
<value>1</value>
</property>
<property>
<name>hbase.regionserver.hlog.syncer.periodicFlushJitterRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStepRandomSeedStep</name>
<value>