HBase生产环境部署指南

最近集群要迁移,本来想在网上找到个相对完整的HBase生产环境部署教程来参考一下,无奈,网上基本上都是教你搭建测试环境的,一些常识性的问题都不曾提及。对于搭建生产环境的文章没找到一个让人满意和省心的。算了,刚好最近在做HBase集群的跨IDC迁移,那就自己写一个吧,里面也许不会将详细的命令列出来,但是会将对应的大致步骤,需要做的事情列出来。依照这个指南,只要你稍微有点学习能力,搭建出一个生产环境的HBase一点都不是问题。因为就是google一把的事情。

一、节点分布列表

备注:如果集群规模不大的,以上的节点都可以混部署。

先申明一下:本文主要是用来部署生产环境,一般是几十到几百个节点不等,部署步骤非常多,建议做成自动化脚本或者工具,推荐Asinble,我们现在使用Asinble来进行自动化部署和扩容,非常方便。

二、初始化

设备初始化主要包括如下几项:

(一)、基础初始化

1、通用初始化

针对各个节点都做的初始化有哪些:

a、文件描述符数量

修改/etc/security/limits.conf文件,将限制调整为65535,如下图:

b、设置swappiness、dirty_background_ratio、dirty_ratio

echo "vm.swappiness=0" >> /etc/sysctl.conf

echo "vm.dirty_background_ratio=1" >> /etc/sysctl.conf

echo "vm.dirty_ratio=4" >>  /etc/sysctl.conf

 sysctl -p

c、设置ntp

添加ntp自动同步时间,一面各个节点时间不一致;

d、配置DNS

后面的ZK等建议配置成DNS的形式,因此DNS也最好提前配置好,统一修改/etc/resolv.conf 即可。

e、配置主机名

主机名称根据个人喜好配置即可;

f、部署java环境

从官网下载jdk的安装包,以 jdk-8u102-linux-x64.tar.gz为例

tar xzvf jdk-8u102-linux-x64.tar.gz -C /data/hbaseadmin/hbaseenv/  

将如下内容添加到/etc/profile      

export JAVA_HOME=/data/hbaseadmin/hbaseenv/jdk1.8.0_102/

export JRE_HOME=${JAVA_HOME}/jre

export HADOOP_HOME=/data/hdfsadmin/hbaseenv/hadoop

export HBASE_HOME=/data/hbaseadmin/hbaseenv/hbase

export CLASSPATH=.:${JAVA_HOME}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/jre/lib:${JRE_HOME}/lib:${HBASE_HOME}/lib:${HADOOP_HOME}/lib                             

export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HBASE_HOME}/bin:${PATH}

export LANGUAGE=en_US

2、datanode节点的初始化

    一般datanode都会有多个数据盘,如果有SSD盘的话更好,我们使用SSD盘来专门存储WAL日志;

a、开启硬盘缓存【datanode节点专属】

/sbin/hdparm -W 1  diskname

b、datanode的分区、格式化

    将本地SSD单独分一个区出来,专门用来存储WAL日志【如果有的话】

    将数据盘进行分区和格式化,并进行挂载

c、将修改固化到/etc/fstab文件中   

(二)、帐号初始化

帐号的初始化主要的操作有两个,一个是创建帐号,一个是打通ssh免密登录。实现如下几个功能:

1、使用hbaseadmin来管理hbase程序

a、在中控节点上创建hbaseadmin账户,并设置好对应的密码

b、使用 ssh-keygen生成对应的密钥对

 c、通过 id_rsa.pub创建对应的 authorized_keys

2、通过hdfsadmin来管理hdfsadmin程序

a、在中控节点上创建hdfsadmin账户,并设置好对应的密码

b、使用 ssh-keygen生成对应的密钥对

c、通过 id_rsa.pub创建对应的 authorized_keys

3、打通中控节点和2个master节点到其他各个节点的信任关系,实现免密登录

a、在其他节点上创建hbaseadmin和hdfsadmin帐号

b、将hbaseadmin和hdfsadmin帐号对应的authorized_keys传输到各个机器的对应用户的.ssh目录下,并设置属主为对应用户

c、将hbaseadmin和hdfsadmin帐号对应的私钥id_dsa传输到对应的.ssh目录下,修改好属主,并设置权限为600

4、测试免密登录是否正常

备注:刚开始的时候第一次访问对应主机,会显示该主机的公钥摘要,提示用户是否信任该主机,可以在.ssh/config添加StrictHostKeyChecking no来规避。

5、设置好数据目录的hdfsadmin属主,不然,写入会有问题。

三、ZK部署

1、ZK部署说明

ZK是用来做master的高可用、RegionServer的监控、元数据入口以及集群的配置维护等,而ZK的操作需要通过选举产生,至少需要超过一半的节点意见一致才有效,因此我们部署ZK的时候需要部署奇数个节点,比如3个、5个、7个。对于大的集群一般建议5个或者5个以上,而且这些ZK要跨交换机跨机架容灾。

2、ZK安装

a、从apache官网上下载ZK

wgethttps://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

tar xzvfzookeeper-3.4.9.tar.gz

ln -s zookeeper zookeeper-3.4.9

b、配置ZK

ZK的配置项比较少,大致如下:

cat java.env

#配置java环境即可

export JAVA_HOME=/data/hbaseadmin/hbaseenv/jdk1.8.0_102

export PATH=$PATH:$JAVA_HOME/bin

export JVMFLAGS=-Xmx2048m

cat zoo.cfg

tickTime=15000

# The number of ticks that the initial

# synchronization phase can take

initLimit=20

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=20

maxClientCnxns=200

# the directory where the snapshot is stored.

dataDir=/data/hbase/zookeeper/zookeeper-data/

dataLogDir=/data/hbase/zookeeper/zookeeper-log/

# the port at which the clients will connect

clientPort=2181

server.1=normal-db-lj-hbase-zk-1:2888:3888

server.2=normal-db-lj-hbase-zk-2:2888:3888

server.3=normal-db-lj-hbase-zk-3:2888:3888

server.4=normal-db-lj-hbase-zk-4:2888:3888

server.5=normal-db-lj-hbase-zk-5:2888:3888

备注:这里推荐用域名的方式,后面如果有机器变动直接修改域名对应关系即可

c、创建对应的目录和配置muid

mkdir -p /data/hbase/zookeeper/zookeeper-data/ && mkdir -p /data/hbase/zookeeper/zookeeper-log/

echo "1" > /data/hbase/zookeeper/zookeeper-data/myid

备注:如果是server1就配置myid为1,如果是server2就配置myid为2,以此类推。

d、ZK的启动

在配置好ZK后,就可以开始启动ZK了,启动命令如下:

zookeeper/bin/zkServer.sh start

启动后使用jps查看QuorumPeerMain进程是否存在,如下图:

可以通过

zookeeper/bin/zkServer.sh  status

查看对应ZK的状态,如下图:

四、HDFS部署

1、namenode安装和datanode安装

namenode和datanode的安装很假单,是同一个安装包,下载好后,解压到对应的路径就OK

2、安装snappy

由于压缩使用的snappy,因此需要安装snappy,安装snappy的网上有很多教程,这里不再详细介绍。

3、namenode和datanode的配置

namenode的配置属于比较重要的部分,主要是内存的配置。namenode和datanode共享配置

hadoop-env.sh的主要配置如下:

export HADOOP_OPTS="$HADOOP_OPTS -Dsun.net.inetaddr.ttl=3-Dsun.net.inetaddr.negative.ttl=1-Djava.net.preferIPv4Stack=true"

#这里之所以加上-Dsun.net.inetaddr.ttl=3-Dsun.net.inetaddr.negative.ttl=1,是为了解决DNS缓存的问题

export HADOOP_NAMENODE_OPTS="-Dcom.sun.management.jmxremote -server -Xmx90g -Xms90g -Xmn4g -XX:SurvivorRatio=2 -XX:+UseMembar -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:ParallelCMSThreads=4 -XX:+UseCMSCompactAtFullCollection -verbose:gc -Xloggc:/data/hdfsadmin/hbaseenv/hadoop/logs/gc.log.`date +%Y-%m-%d-%H-%M-%S` -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=85 -XX:CMSFullGCsBeforeCompaction=1 $HADOOP_NAMENODE_OPTS"

export HADOOP_DATANODE_OPTS="-Dcom.sun.management.jmxremote -server -Xmx3g -Xmn1g -XX:SurvivorRatio=2 -XX:+UseMembar -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSScavengeBeforeRemark -XX:ParallelCMSThreads=4 -XX:+UseCMSCompactAtFullCollection -verbose:gc -Xloggc:/data/hdfsadmin/hbaseenv/hadoop/logs/gc.log.`date +%Y-%m-%d-%H-%M-%S` -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=85 -XX:CMSFullGCsBeforeCompaction=1 $HADOOP_DATANODE_OPTS"

hdfs-site.xml的主要配置如下:    

#由于我们的设备有12块数据盘,因此配置了12个挂载点,另外本地有一个SSD的分区专门用来存储WAL日志用的

#这里设置hdfs保留空间为200G,关于这个参数的坑已有文章介绍,链接为:https://www.jianshu.com/p/508449d8f12c

由于配置太多,这里不一一给出,稍后把模版分享出来。

4、HDFS启动

a、在namenode节点上执行如下命令格式化ZK

./hdfs zkfc -formatZK

b、启动JournalNode

./hadoop-daemon.sh start journalnode

c、格式化namenode

./hdfs namenode -format

d、初始化JournalNode

./hdfs namenode -initializeSharedEdits

e、停止journalmode

./hadoop-daemon.sh stop journalnode

f、初始化备NN

将主节点的dfsnamespace目录直接拷贝到备节点的对应目录

g、启动JournalNode

./hadoop-daemon.sh start journalnode

h、启动namenode节点

./hadoop-daemon.sh start namenode

i、在namenode上启动zkfc

./hadoop-daemon.sh start zkfc

j、启动datanode

在master上配置好slaves文件(将全部的datanode填写到slaves文件中)

在master是那个执行

./hadoop-daemons.sh start datanode

k、检查启动是否正常

使用jps命令查看进程是否正常

检查端口是否监听

打开hadoop dfsadmin -report查看各个节点的容量是否正常

使用http://namenodeip:8081/dfshealth.html#tab-overview 查看各个节点的状态和相关信息是否正常

使用hadoop相关的命令测试集群是否正常

测试namenode容灾是否正常

五、HBase

1、master安装和RegionServer安装

 HBsae的安装非常简单,在官网下载包后解压到对应的位置即可。

2、master和RegionServer的配置

hbase-env.sh 的配置:

export HBASE_OPTS="-server -d64 -Dsun.net.inetaddr.ttl=3-Dsun.net.inetaddr.negative.ttl=1-Djava.net.preferIPv4Stack=true"

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xms10g -Xmx10g -Xmn4g"

export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xms48g -Xmx48g -Xmn4g"

export HBASE_SHELL_OPTS="$HBASE_SHELL_OPTS -Xms1g -Xmx1g -Xmn256m"

# Garbage collection options

CMS_OPTS="-XX:+UseConcMarkSweepGC

    -XX:+UseParNewGC

    -XX:+CMSParallelRemarkEnabled

    -XX:+UseCMSCompactAtFullCollection

    -XX:+UseCMSInitiatingOccupancyOnly

    -XX:SurvivorRatio=2

    -XX:CMSInitiatingOccupancyFraction=65"

     export SERVER_GC_OPTS="-verbose:gc

                -XX:+PrintGCDetails

                 -XX:+PrintGCDateStamps

                 -XX:+HeapDumpOnOutOfMemoryError

                  -XX:HeapDumpPath=${HBASE_LOG_DIR}

                  -XX:ErrorFile=${HBASE_LOG_DIR}/hs_err_%p.log

                  -XX:+PrintTenuringDistribution

                  -Xloggc:${HBASE_LOG_DIR}/gc-hbase.log.`date +%Y-%m-%d-%H-%M-%S`

                   -XX:+UseGCLogFileRotation

                   -XX:NumberOfGCLogFiles=10

                   -XX:GCLogFileSize=128M

                    $CMS_OPTS"

hbase-site.xml,由于升级到的配置单数太多,这里不再列出,将文件直接上传到附件。

3、HBase启动

a、启动hbase master

/hbase-daemon.sh start master

b、启动RegionServer

在master上配置好regionservers文件(将regionserver的IP列表写入regionservers文件)

在master上执行

./hbase-daemons.sh start regionserver

c、检查启动是否正常

使用jps查看进程是否正常

查看端口是否监听

通过http://masterip:8080/master-status 查看各个regionserver的状态和相关信息是否正常

通过hbase shell测试hbase各项功能是否正常

测试master的容灾是否正常

七、自动化

整个安装过程步骤机器繁多,建议在测试环境部署好后,写成自动化脚本或者工具,后续再做扩容或者安装的时候,可以直接使用脚本工具来进行。我们部署采用Ansible做自动化安装和扩容,非常方便。

八、监控部署

在安装完成整个集群并测试无异常后,就需要添加对应的监控,对于hbase的监控相关,以后再写问详细阐述需要监控的相关监控项。

推荐阅读更多精彩内容

  • hadoop2集群搭建详解------------------------天津九安医疗电子--吴伟 一、需要软件 ...
    hogface阅读 1,337评论 1 4
  • 我们总是相互亏欠 你总愧于缺席我的童年 我总愧于没有留在你身边 你有你的枣园、葡萄藤、苹果树 春天,你用塔里木河的...
    天生好果阅读 77评论 0 1
  • perry: 晚安,美梦。见字如谋面~非常感谢缘分让我们相识,人潮人海中 有你有我相遇相识,想想这是一件多么美好的...
    approach余阅读 49评论 0 0
  • 昨天儿子在家还是按时做完了作业,晚上见到我回家很是兴奋,到外婆家吃饭还是问外婆要了考试的奖金,还想问我要,我说考试...
    辉_0495阅读 48评论 0 0
  • 如来藏如针,光明闪佛心。 轮回施铁锈,不见针真身。 学法净妄念,磨锈斑精勤。 恶道世人魔,时时扰发心。 佛祖心中坐...
    芸陌么么哒阅读 91评论 0 1