HBase分布式高可用模式(HMaster HA):
1)不同的HBase进程分别独立运行在多台硬件配置较高的服务器主机构成的集群中,适用于可靠性高的HBase运维和生产环境
2)依赖于HDFS存储数据,因此部署Hbase分布高可用之前必须有一个正常运行的HDFS集群
3)依赖于独立的外部ZooKeeper集群,不能使用内置ZooKeeper
4)依赖于Hadoop HA高可用集群,必须先部署完成并成功运行Hadoop HA高可用集群
关于HMaster高可用(HMaster HA)重要解释:
HMaster HA实现了对HMaster的容错性,一旦HMaster宕机,Zookeeper可以重新选择一个新的HMaster;但是,HBase集群即使没有了HMaster,仍然可以读取、删除、插入数据(事实上由RegionServer负责完成),只是不能再执行创建表,删除表,修改表,region的拆分、合并、移动,以及负载均衡等功能;也就是说,HBase集群中HMaster的重要性没有HDFS中的NameNode那么大,HBase的HMaser单点故障没有HDFS中的NameNode单点故障那么严重,HMaster宕机不会导致整个HBase集群的彻底失能,只是部分功能失能,仍然可以读取、插入和删除数据;
总而言之,HMaster HA没有NameNode HA和ResourceManager HA的重要性那么高!!!
实验前提:HBase分布式高可用(HMaster HA)部署方式依赖于Hadoop HA和外部独立ZooKeeper集群,本实验紧接Hadoop 分布式高可用集群和ZooKeeper集群部署实验,在Hadoop HA和Zookeeper实验完成并运行成功的基础上继续进行Hbase分布式高可用(HMaster HA)的部署演示
实验目标:在4台主机组成的小型集群上部署分布式高可用数据库HBase ,用于教学演示
环境要求:虚拟机VirtualBox 操作系统 Centos7 Hadoop版本 hadoop-2.6.0-cdh5.7.0 ZooKeeper版本 zookeeper-3.4.5-cdh5.7.0.tar.gz Hbase版本hbase-1.2.0-cdh5.7.0.tar.gz
集群规划:无需复制虚拟机,直接利用Hadoop 分布式高可用集群的4台主机standby,master,slave1,slave2完成Hbase完全分布式(非HA)部署
主机IP | 主机名 | 集群角色 |
---|---|---|
192.168.56.9 | standby | NameNode(Standby) DFSZKFailoverController HMaster(Standby) |
192.168.56.10 | master | NameNode(Active) DataNode JournalNode QuorumPeerMain DFSZKFailoverController NameNode DataNode HMaster(Active) HRegionServer |
192.168.56.11 | slave1 | DataNode JournalNode QuorumPeerMain HRegionServer |
192.168.56.12 | slave2 | DataNode JournalNode QuorumPeerMain HRegionServer |
〇 首先要部署完成并运行成功ZooKeeper集群和Hadoop HA 分布式高可用集群
一 搭建HBase完全分布式(HMaster HA)集群的实验步骤
1)启动Hadoop分布式高可用集群中的4台主机standby,master,slave1和slave2
2)在win7用XSHELL远程登录,注意VirtualBox主机网络管理器的虚拟网卡IP(192.168.56.1)地址必须和虚拟机Linux处于一个网段
3)解压缩hbase-1.2.0-cdh5.7.0.tar.gz安装包到指定目录/usr/local
在standby,master, slave1,slave2这4台主机上都要依次(不要同时)解压缩安装包:
tar -zxvf hbase-1.2.0-cdh5.7.0.tar.gz -C /usr/local/ 解压缩到/usr/local目录
特别提醒:千万不同时在多台虚拟机执行解压缩命令,很有可能造成死机!!!
4)设置HBase环境变量并使之生效
依次在standby,master, slave1,slave2三台主机上设置HBase环境变量
vi /etc/profile 在配置文件profile的末尾增加蓝色字体的内容:
# hbase
export HBASE_HOME=/usr/local/hbase-1.2.0-cdh5.7.0
export PATH=$PATH:$HBASE_HOME/bin
记得要执行source /etc/profile命令使得HBase的环境变量生效
5)关闭防火墙firewall和SeLinux
在每台主机都执行关闭防火墙命令 systemctl disable firewalld 执行关闭SeLinux命令 setenforce 0
6)检查standby, master, slave1,slave2互相之间的SSH免密登录(特别重要)
在每台主机上都要依次执行ssh standby, ssh master, ssh slave2, ssh slave2命令,检查免密登录,免密登录成功后,必须输入exit退出并返回原会话,以免搞混
7)修改配置文件(关键步骤)
cd /usr/local/hbase-1.2.0-cdh5.7.0/conf 切换到hbase-env.sh配置文件所在目录
a)先在master主机上修改hbase-env.sh
vi hbase-env.sh 修改以下参数:
export JAVA_HOME=/usr/local/java/jdk1.8
export HBASE_MANAGES_ZK=false # 不使用HBase内置的ZooKeeper!!!
执行source hbase-env.sh命令使得HBase配置参数生效
b)在master主机上修改hbase-site.xml
vi hbase-site.xml修改以下参数:
在
参数说明:
hbase.rootdir:用于指定HBase数据在HDFS的存储路径
hbase.zookeeper.quorum:对于HBase的完全分布式模式(使用外部的独立ZooKeeper集群),应将该参数的值设为外部的独立ZooKeeper集群的完整主机列表,此时在配置文件hbase-env.sh中的HBASE_MANAGES_ZK参数必须为false
hbase.cluster.distributed:设置为true,告诉HBase按照完全分布式模式启动
c)修改regionservers文件
vi regionservers
删除原有行,新添加三行:
master
slave1
slave2
8)拷贝Hadoop的两个配置文件core-site.xml和hdfs-site.xml到HBase的配置文件目录(HBase对HDFS有依赖关系)
先在master主机依次执行命令 cp /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/core-site.xml /usr/local/hbase-1.2.0-cdh5.7.0/conf
cp /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop/hdfs-site.xml /usr/local/hbase-1.2.0-cdh5.7.0/conf
再在master主机依次执行远程拷贝命令
scp hbase-env.sh hbase-site.xml core-site.xml hdfs-site.xml regionservers root@standby:/usr/local/hbase-1.2.0-cdh5.7.0/conf/
scp hbase-env.sh hbase-site.xml core-site.xml hdfs-site.xml regionservers root@slave1:/usr/local/hbase-1.2.0-cdh5.7.0/conf/
scp hbase-env.sh hbase-site.xml core-site.xml hdfs-site.xml regionservers root@slave2:/usr/local/hbase-1.2.0-cdh5.7.0/conf/
别忘了要在standby,slave1,slave2依次执行source hbase-env.sh命令,使得HBase的配置参数生效
11)在master主机的conf目录下创建配置文件backup-masters
cd /usr/local/hbase-1.2.0-cdh5.7.0/conf/ 切换到conf目录
vi backup-masters 在文件backup-masters里添加作为backup HMaster的节点主机名称,比如将standby主机设为备用HMaster
standby
10)在master,slave1,slave2三台主机依次执行zkServer.sh start命令来启动ZooKeeper(如果ZooKeeper已经启动可跳过本步骤)
11)在master主机执行start-dfs.sh命令启动HDFS HA高可用集群,确保HDFS HA启动成功
12)启动HBase集群
在master主机执行HBase启动脚本start-hbase.sh,该脚本的作用是启动HBase的所有相关进程(HMaster,HRegionServer)
14)执行java进程查看命令jps,在4台主机分别出现以下进程,说明HDFS,外部独立ZooKeeper集群和HBase全部都启动成功:
[root@standby conf]# jps
2132 DFSZKFailoverController
2294 HMaster
2427 Jps
2077 NameNode
[root@master conf]# jps
2641 DFSZKFailoverController
2898 HMaster
2085 QuorumPeerMain
2327 DataNode
3033 HRegionServer
3129 Jps
2234 NameNode
2508 JournalNode
[root@slave1 local]# jps
2451 Jps
2183 JournalNode
2327 HRegionServer
2042 QuorumPeerMain
2127 DataNode
[root@slave2 local]# jps
2390 Jps
2120 DataNode
2042 QuorumPeerMain
2175 JournalNode
2319 HRegionServer
13)在win7下,用chrome浏览器访问HBase自带的web配置网站 http://192.168.56.10:60010和 http://192.168.56.9:60010,能出现如下两个页面说明HMaster HA运行成功:
此时页面中,Master显示为master主机,而Backup Masters显示standby主机
14)执行主备切换测试,执行命令hbase-daemon.sh stop master 或者 直接使用kill -9 进程号杀死master主机的Hmaster进程,查看Backup Masters显示的状态,stanby主机从Backup Masters变成了Master;master主机的HMaster执行命令hbase-daemon.sh start master重启后成为Backup Masters,而不会再次成为Master