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的监控相关,以后再写问详细阐述需要监控的相关监控项。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 终极算法 关注微信号每天收听我们的消息终极算法为您推送精品阅读 前言 Hadoop 在大数据技术体系中的地位至关...
    Yespon阅读 129,610评论 12 168
  • hadoop2集群搭建详解------------------------天津九安医疗电子--吴伟 一、需要软件 ...
    hogface阅读 1,788评论 1 4
  • 我们总是相互亏欠 你总愧于缺席我的童年 我总愧于没有留在你身边 你有你的枣园、葡萄藤、苹果树 春天,你用塔里木河的...
    天生好果阅读 190评论 0 1
  • perry: 晚安,美梦。见字如谋面~非常感谢缘分让我们相识,人潮人海中 有你有我相遇相识,想想这是一件多么美好的...
    approach余阅读 171评论 0 0
  • 昨天儿子在家还是按时做完了作业,晚上见到我回家很是兴奋,到外婆家吃饭还是问外婆要了考试的奖金,还想问我要,我说考试...
    辉_0495阅读 159评论 0 0