# 命令行部署 ## 前提 1. 提前已经部署完成HDFS集群以及Zookeeper集群 Zookeeper安装部署请参考:[Zookeeper 部署](../zookeeper/installation-zookeeper.rst),假定Zookeeper服务部署在`zookeeper1,zookeeper2,zookeeper3`上。 HDFS安装部署请参考:[HDFS 部署](../hdfs/installation-hdfs.rst)。HDFS nameservice地址假定为`hdfs://oushu` 2. 若需要配置kerberos认证,那么需要提前部署好KDF服务:[kerberos 部署](../kerberos/installation-kerberos.rst)。假定配置的默认域为`OUSHU.COM` 3. oushu1, oushu2, oushu3机器上需要配置hbase的yum源,具体步骤如下: 使用root用户登陆oushu1,从yum源所在机器获取repo文件 ``` scp oushu@192.168.1.10:/etc/yum.repos.d/oushu.repo /etc/yum.repos.d/oushu.repo ``` 追加yum源所在机器信息到/etc/hosts文件 安装lava命令行管理工具: ``` yum clean all yum makecache yum install -y lava ``` 创建一个hostfile文件,包含cluster中的所有机器: ``` touch ~/hostfile ``` 编辑hostfile文件内容如下(集群各机器的hostname): ``` oushu1 oushu2 oushu3 ``` 和集群内其他机器交换公钥: ``` lava ssh-exkeys -f ~/hostfile -p ******** ``` 将repo文件分发给集群内其他机器: ``` lava scp -f ~/hostfile /etc/yum.repos.d/oushu.repo =:/etc/yum.repos.d ``` 4. 如果Zookeeper和HDFS部署在其它节点,那么需要在`/etc/hosts`中添加机器映射 ``` 192.168.1.14 zookeeper1 192.168.1.15 zookeeper2 192.168.1.16 zookeeper3 192.168.1.17 hdfs1 192.168.1.18 hdfs2 192.168.1.19 hdfs3 ``` ## 部署HBase 所有节点执行yum install安装hbase ```sh lava ssh -f ~/hostfile -e "sudo yum install -y hbase" ``` 安装完成之后,会自动生成以下路径: 名称 | 路径 ---------------------|--------- HBase安装目录 | /usr/local/oushu/hbase HBase配置目录 | /usr/local/oushu/conf/hbase HBase日志目录 | /usr/local/oushu/log/hbase Phoenix安装目录 | /usr/local/oushu/phoenix ## 配置 ### 创建数据目录 - 登录HDFS所在集群,若HDFS开启了kerberos配置,那么需要进行认证操作 ```shell sudo su - hdfs kinit -kt /etc/security/keytabs/hdfs.keytab hdfs ``` - 登录HDFS所在集群,创建HBase集群存放数据的根目录`/hbase`,并赋予权限 ```shell sudo su - hdfs hdfs dfs -mkdir /hbase hdfs dfs -chown -R hbase:hbase /hbase ``` ### 配置依赖集群 - 若需要配置kerberos认证,所有安装hbase的机器需要安装`kerberos`的客户端 ```shell lava ssh -f ~/hostfile "sudo yum install -y krb5-libs krb5-workstation" ``` - 登录oushu1机器,从`kerberosserver`上获取`/etc/krb5.conf`文件,然后分发到所有要安装`hbase`的机器 ```shell scp root@kerberosserver:/etc/krb5.conf /etc/krb5.conf lava scp -f ~/hostfile /etc/krb5.conf =:/etc/krb5.conf ``` :::{note} Kerberos中hostname不支持大写,如果hostname带大写字母,请将hostname改为小写字母 ::: - 创建principal并分发keytab ```shell su - root kadmin.local addprinc -randkey hbase/oushu1@OUSHU.COM addprinc -randkey hbase/oushu2@OUSHU.COM addprinc -randkey hbase/oushu3@OUSHU.COM xst -k /etc/hbase.keytab hbase/oushu1@OUSHU.COM xst -k /etc/hbase.keytab hbase/oushu2@OUSHU.COM xst -k /etc/hbase.keytab hbase/oushu3@OUSHU.COM ``` - 登录oushu1机器,从`kerberosserver`上获取`keytab`文件,然后分发到所有要安装`hbase`的机器 ```shell scp root@kerberosserver:/etc/hbase.keytab /usr/local/oushu/hbase/conf/hbase.keytab lava scp -f ~/hostfile /usr/local/oushu/hbase/conf/hbase.keytab =:/usr/local/oushu/hbase/conf/hbase.keytab lava ssh -f ~/hostfile -e "chown hbase:hbase /usr/local/oushu/hbase/conf/hbase.keytab" ``` ### 修改配置文件 配置文件的路径都在`/usr/local/oushu/conf/hbase`,文件描述如下: 文件名 | 作用描述 --------------------|--------- hbase-env.sh | 程序启动环境变量 hbase-site.xml | HBase配置参数 - 登录oushu1机器,配置hbase-env.sh文件 ```shell export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true" export JAVA_HOME="/usr/lib/jvm/java" export HBASE_MANAGES_ZK="false" export HBASE_LOG_DIR="/usr/local/oushu/log/hbase" ``` - 将hbase-env.sh分发到所有机器 ```shell lava scp -f ~/hostfile /usr/local/oushu/conf/hbase/hbase-env.sh =:/usr/local/oushu/conf/hbase/hbase-env.sh ``` - 登录oushu1机器,配置hbase-site.xml文件 ```xml hbase.cluster.distributed true hbase.rootdir hdfs://oushu/hbase hbase.zookeeper.quorum zookeeper1,zookeeper2,zookeeper3 ``` - 为hbase-site.xml文件增加kerberos的相关配置 ```xml hbase.security.authentication kerberos hbase.rpc.engine org.apache.hadoop.hbase.ipc.SecureRpcEngine hbase.coprocessor.region.classes org.apache.hadoop.hbase.security.token.TokenProvider hbase.master.kerberos.principal hbase/_HOST@OUSHU.COM hbase.master.keytab.file /usr/local/oushu/hbase/conf/hbase.keytab hbase.regionserver.kerberos.principal hbase/_HOST@OUSHU.COM hbase.regionserver.keytab.file /usr/local/oushu/hbase/conf/hbase.keytab ``` - 将hbase-site.xml分发到所有机器 ```shell lava scp -f ~/hostfile /usr/local/oushu/conf/hbase/hbase-site.xml =:/usr/local/oushu/conf/hbase/hbase-site.xml ``` - 若HDFS是HA模式,那么需要将HDFS集群的core-site.xml和hdfs-site.xml文件分发到hbase的conf目录 ```shell lava scp -f ~/hostfile /usr/local/oushu/conf/hdfs/core-site.xml =:/usr/local/oushu/conf/hbase/core-site.xml lava scp -f ~/hostfile /usr/local/oushu/conf/hdfs/hdfs-site.xml =:/usr/local/oushu/conf/hbase/hdfs-site.xml ``` ## 启动 登陆oushu1机器,使用root用户创建`~/hbasemaster`和`~/regionserver`文件 ```shell touch ~/hbasemaster touch ~/regionserver ``` `hbasemaster`文件包含 ``` oushu1 oushu2 ``` `regionserver`文件包含 ``` oushu1 oushu2 oushu3 ``` 启动HMaster ```shell lava ssh -f ~/hbasemaster -e "sudo -u hbase /usr/local/oushu/hbase/bin/hbase-daemon.sh start master" ``` 启动HRegionserver ```shell lava ssh -f ~/regionserver -e "sudo -u hbase /usr/local/oushu/hbase/bin/hbase-daemon.sh start regionserver" ``` ## 检查状态 登录oushu1,oushu2,oushu3节点,使用`jps`查询进程是否存活。 oushu1,oushu2节点应该有`HMaster`和`HRegionserver`进程存在。oushu3节点应该有`HRegionserver`进程存在 ```shell su - hbase jps ``` ## 简单测试 登录oushu1节点,进入hbase shell客户端 ```shell ssh oushu1 su - hbase hbase shell ``` 若配置了kerberos认证,则需要执行kinit获取认证信息,然后进入客户端 ```shell su - hbase kinit -k -t /xx.keytab xx/hostname@OUSHU.COM hbase shell ``` 创建一张test表,并简单操作,看是否可用 ```shell hbase:008:0> create 'p_test', 'f1'; Created table p_test Took 0.6230 seconds => Hbase::Table - p_test hbase:009:0> put 'p_test', '1001', 'f1:name', 'wang'; Took 0.1461 seconds hbase:010:0> scan 'p_test'; ROW COLUMN+CELL 1001 column=f1:name, timestamp=2022-11-03T16:17:01.050, value=wang 1 row(s) Took 0.0296 seconds hbase:011:0> describe 'p_test'; Table p_test is ENABLED p_test COLUMN FAMILIES DESCRIPTION {NAME => 'f1', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP_DELETED_CELLS => 'FA LSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', BL OCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) Quota is disabled Took 0.0257 seconds ``` 使用`sqlline.py`命令在phoenix端创建一张p_test表,查看是否可用 ```shell 0: jdbc:phoenix:> create table p_test(id bigint primary key, name varchar); No rows affected (0.713 seconds) 0: jdbc:phoenix:> upsert into p_test values (1, 'p1'); 1 row affected (0.04 seconds) 0: jdbc:phoenix:> select * from p_test; +----+------+ | ID | NAME | +----+------+ | 1 | p1 | +----+------+ 1 row selected (0.053 seconds) 0: jdbc:phoenix:> !quit Closing: org.apache.phoenix.jdbc.PhoenixConnection ``` ## 注册到skylab(可选) HBase将要安装的机器需要通过机器管理添加到skylab中,如果您尚未添加,请参考:[注册机器](../start/install-lava.md)。 在oushu1节点修改/usr/local/oushu/lava/conf配置`server.json`,替换localhost为skylab的服务器ip,具体skylab的基础服务lava安装步骤请参考:[lava安装](../start/start-installation.rst)。 ``` { "server": "localhost:1612", "admin": "localhost:1652" } ``` 创建一个request文件,包含HBase cluster信息: ``` touch ~/hbase-register.json ``` 编辑json文件内容如下: ```json { "data": { "name": "hbaseserver", "group_roles": [ { "role": "hbase.master", "cluster_name": "hbase", "group_name": "hbasemaster", "machines": [ { "id": 1, "name": "oushu1", "subnet": "lava", "data_ip": "192.168.1.11", "manage_ip": "192.168.1.11", "assist_port": 1622, "ssh_port": 22 },{ "id": 2, "name": "oushu2", "subnet": "lava", "data_ip": "192.168.1.12", "manage_ip": "192.168.1.12", "assist_port": 1622, "ssh_port": 22 } ] }, { "role": "hbase.regionserver", "cluster_name": "hbase", "group_name": "hbaseregionserver", "machines": [ { "id": 1, "name": "oushu1", "subnet": "lava", "data_ip": "192.168.1.11", "manage_ip": "192.168.1.11", "assist_port": 1622, "ssh_port": 22 },{ "id": 2, "name": "oushu2", "subnet": "lava", "data_ip": "192.168.1.12", "manage_ip": "192.168.1.12", "assist_port": 1622, "ssh_port": 22 },{ "id": 3, "name": "oushu3", "subnet": "lava", "data_ip": "192.168.1.13", "manage_ip": "192.168.1.13", "assist_port": 1622, "ssh_port": 22 } ] } ] } } ``` 配置文件说明,整个json分为3部分: - 第一部分name,为集群名称,个性化填写。 - 第二部分为group_roles,对于HBase来说,是2个角色,hbase.master和hbase.regionserver,不可修改。 - 第三部分,为每个角色添加机器,需要添加的机器信息可以通过下面的方式获得。 在平台基础组件lava所安装的机器执行(端口和用户名按照lava配置修改): ``` psql lavaadmin -p 4432 -U oushu -c "select m.id,m.name,s.name as subnet,m.private_ip as data_ip,m.public_ip as manage_ip,m.assist_port,m.ssh_port from machine as m,subnet as s where m.subnet_id=s.id;" ``` 获取到所需的机器信息,根据服务角色对应的节点,将机器信息添加到machines数组中。 在oushu1节点调用lava命令注册集群: ``` lava login -u oushu -p Oushu6@China -T {租户id} lava onprem-register service -s HBase -f ~/hbase-register.json ``` 如果返回值为: ``` Add service by self success ``` 则表示注册成功,如果有错误信息,请根据错误信息处理。 例如skylab部署在192.168.1.10,访问 ``` http://192.168.1.10:3000/main/Deploy/hbase ``` 从页面登录后,在自动部署模块对应服务中可以查看到新添加的集群,同时列表中会实时监控HBase进程在机器上的状态。 ![](images/hbase-register.png)