企业级HBase架构与高可用与高可用测试
一、集群规模划分
在生产环境中,我们根据集群机器数量的不同可以将集群划分为三种类型:
(1)20台以下称为:小型集群
小型集群中无需搞HA(高可用),这时候通常只需要一个ZooKeeper。并且HBase需要和其他的组件安装在同一台机器上。比如HBase和Hadoop安装在同一台机器,那么HRegionServer与NodeManager就会共享内存资源,所以在分配yarn内存时,要合理分配,一般是各占1/2。
(2)20-50台称之为:中型集群
需要搞HadoopHA、HBaseHA 3个ZooKeeper 3个HMaster
(3)50台以上称为:大型集群
5/7个ZooKeeper,而且每个HBase都要有自己单独的服务器。
版本选择
选择Cloudera的CDH版本,不选择apache的原因是因为,版本适配比较麻烦,而且对安全认证支持比较简陋。
二、HBase的高可用架构
image.png
架构1的部署方式是无法保证724小时对外服务的,因为如果一旦HMaster出现故障,我们的元数据操作将无法进行,不过对HBase服务在短时间内做数据查询和插入是可以的。如果在HMaster还没有被修复的情况下,某一台RegionServer出现了宕机,那么这台RegionServer种的Region将无法分配到其他机器上去,是因为HMaster已经宕机不能查到元数据了,就无法获取集群机器信息与可用资源。那我们如何解决这种情况呐?其实我们需要再加入一个HMaster节点,与第一个HMaster互为主备。详情看架构2
我们需要让新增的HMaster处于待机状态,即不对外服务,但一直处于待命状态,一旦主HMaster宕机了,他就会被主动激活,变为主节点对外服务,接管宕机机器未完成的任务和工作。他们俩的服务都会注册的Zookeeper上面,宕机的机器会有预警系统通知工作人员,把宕机的机器修好,然后处于Standy状态,随时待命。这样我们就可以保证整个HBase集群724小时对外服务了。
HBase的高可用分部署集群搭建部署步骤
1、首先把HBase的安装包进行上传并解压缩操作。
tar -zxvf hbase-1.2.0-cdh5.7.0.tar.gz
2、配置hbase-site.xml文件
配置详情如下:
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>slave2、slave3、slave4</value>
</property>
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
-----当我们的协处理器出现错误,就会导致所在的regionserver宕机,那么就会把此server上的所有region分配到其他机器的RegionServer上去,如果其他机器一次宕机,那么就会不停的主动分配到剩余机器上去,这样最终所有集群的机器就会全部宕机造成灾难性后果,所以加上这个配置就是为了防止协处理器
对我们的RegionServer带来影响-----
<property>
<name>hbase.coprocessor.abortonerror</name>
<value>false</value>
</property>
</configuration>
3、配置regionservers,就是master机器控制几台regionserver
在hbase的conf文件夹中创建regionservers文件
vi regionservers
slave1
slave2
slave3
slave4
添加的内容就是regionserver所在的节点机器别名
4、发送hbase的安装包到其他机器上去。
scp -r hbase slave1:/opt/software
scp -r hbase slave2:/opt/software
scp -r hbase slave3:/opt/software
scp -r hbase slave4:/opt/software
image.png
5、为了实现高可用,我们需要配置backup-masters
切换到master机器的hbase的conf目录,然后
vi backup-masters
内容是部署备用master的机器别名,这里是slave3,直接写在文件里面,保存即可。
6、配置Hbase的环境变量
image.png
然后是配置生效。同理其他机器的环境变量也得改动。
source一下该文件即可。
7、启动hbase集群start-hbase.sh
在master机器的hbase的bin目录,直接执行start-hbase.sh即可。
8、检查服务是否都启动成功
jps一下
master上应该会有HMaster进程
slave1
slave2
slave3
slave4机器上分别都会有HRegionServer
由于我们在slave3上还对master做了备用服务,那么slave3上面还应该有一个HMaster进程。
三、HBase高可用测试
1、首先访问http://master:60010
看到此图,则代表部署正常。下面我们要验证,待命状态的slave3的HMaster是否能在主master节点的HMaster进程故障的情况下,自动启动接管他的所有工作任务尼?
下面我们模拟下把主节点master机器的HMaster进程杀死。
jps查到HMaster的进程号
kill -9 进程号
接下来再去访问http://master:60010地址,此时已经访问不到刚才的页面了。
那么我们看下slave3节点上面的该端口能否正常访问。
http://slave3:60010,如下图,可以正常访问,我们看下有什么变化。
这时候可能有人会有疑问,如果我们在使用客户端和代码在进行与HBase链接通讯的时候,如果一台机器挂掉了,我们是不是需要手动切换到备用机地址才能正常访问?
答案:其实是不需要的,因为我们在做链接的时候,写的地址是ZooKeeper的地址,在hbase服务启动的时候,已经把两个master的链接地址都存放在了ZooKeeper集群上了,只要有一个地址不可用,ZooKeeper会主动切换到另一个地址供客户端访问的。