跳至主要內容

部署HDFS 高可用集群作为Klustron备份存储

Klustron大约 7 分钟

部署HDFS 高可用集群作为Klustron备份存储

注意:

如无特别说明,文中的版本号可以使用任何已发布版本的版本号代替。所有已发布版本详见:Release Notes

本文目标:

主要内容是 KunlunBase HDFS 高可用(High Availability, HA)集群做备份存储配置,安装配置 java 软件和配置 kunlun 用户环境变量,安装配置 Hadoop,配置 Hadoop 参数文件和环境变量,配置 HDFS HA 模式,测试 HDFS HA 存储。最后通过 XPanel 控制台配置 HDFS 备份存储目标。

配置 HDFS HA 的机器 IP 分别为 192.168.56.118 和 192.168.56.119,端口都为 9000。

1 HDFS 高可用(HA)模式部署环境

1.1 HDFS HA 部署规划

HDFS HA部署规划HDFS HA部署规划
hdfs1:192.168.56.118hdfs2:192.168.56.119
NameNodeNameNode
JournalNodeJournalNode
DataNodeDataNode

1.2 [hdfs1,hdfs2]服务器上都配置/etc/hosts文件,配置主机名和IP地址的对应关系。使用root执行下面的命令。

vi /etc/hosts

 

192.168.56.118 hdfs1

192.168.56.119 hdfs2

备注:这里的 hdfs1 和 hdfs2 分别是两台服务器的主机名,如果环境主机名不是 hdfs1 和 hdfs2,需要将 hdfs1 和 hdfs2 调整为对应的主机名。

2 下载部署 java 和 hadoop 软件

2.1 [hdfs1,hdfs2] 服务器上创建 kunlun 组和 kunlun 用户。使用 root 执行命令并设置用户密码。

useradd --create-home --shell /bin/bash kunlun

passwd kunlun

2.2 [hdfs1,hdfs2] 服务器上安装 wget 工具。使用 root 执行下面的命令。

yum -y install wget

2.3 [hdfs1,hdfs2]服务器上下载hadoop软件和java软件,使用root执行下面的命令。

cd /home/kunlun

wget http://zettatech.tpddns.cn:14000/thirdparty/hadoop-3.3.1.tar.gz

wget http://zettatech.tpddns.cn:14000/thirdparty/jdk-8u131-linux-x64.tar.gz

2.4 [hdfs1,hdfs2] 服务器上安装配置 java,将 java 软件解压到/usr/java目录下,使用 root 执行下面的命令。

tar -zxvf jdk-8u131-linux-x64.tar.gz -C /usr/java

cd /usr/java/jdk1.8.0_131/bin

./java -version

2.5 [hdfs1] 服务器上安装 hadoop 软件,将 hadoop 软件解压到/home/kunlun目录下,并将解压的文件夹 hadoop-3.3.1 重命名为 hadoop,然后将 hadoop 的所属用户和组修改为 kunlun:kunlun。使用 root 执行下面的命令。

tar -zxvf hadoop-3.3.1.tar.gz

mv hadoop-3.3.1 hadoop

chown -R kunlun:kunlun /home/kunlun/hadoop

2.6 [hdfs1,hdfs2] 服务器上关闭每台服务器的防火墙。在 root 用户下执行命令。

systemctl stop firewalld

systemctl disable firewalld

2.7 [hdfs1,hdfs2] 服务器上对 kunlun 用户配置免密登录。使用 kunlun 用户执行以下命令。

a)在两个节点生成密钥(分别在两个个节点执行)

[kunlun@hdfs1 ]$ ssh-keygen   #按三次回车

[kunlun@hdfs2 ]$ ssh-keygen

b)将两个节点的密钥都拷贝到 hdfs1 节点中(分别在两个节点执行)

[kunlun@hdfs1 ]$ ssh-copy-id hdfs1

[kunlun@hdfs2 ]$ ssh-copy-id hdfs1

c) 将节点一的密钥拷贝到节点二 (在节点一上执行)

[kunlun@hdfs1 ]$ scp -r ~/.ssh/authorized_keys hdfs2:~/.ssh/

d)测试两个节点间的ssh互相设置成功

[kunlun@hdfs1 ]$ ssh hdfs1 date

[kunlun@hdfs1 ]$ ssh hdfs2 date

[kunlun@hdfs2 ]$ ssh hdfs2 date

[kunlun@hdfs2]$ ssh hdfs1 date

3 配置 HDFS

3.1 [hdfs1,hdfs2] 服务器上配置 kunlun 用户的环境变量。使用 kunlun 用户执行以下命令。

vi ~/.bash_profile

 

export HADOOP_HOME=/home/kunlun/hadoop

export HADOOP_CONF_DIR=/home/kunlun/hadoop/etc/hadoop

export JAVA_HOME=/usr/java/jdk1.8.0_131

export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

source ~/.bash_profile

3.2 [hdfs1] 服务器上修改 hadoop 配置文件,配置文件在/home/kunlun/hadoop/etc/hadoop目录下。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ cd /home/kunlun/hadoop/etc/hadoop

ls

3.3 [hdfs1] 服务器上修改 core-site.xml 配置文件。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ vi core-site.xml

 

<configuration>

    <!-- 把两个NameNode)的地址组装成一个集群mycluster -->

    <property>

     <name>fs.defaultFS</name>

     <value>hdfs://mycluster</value>

    </property>

 

    <!-- 指定Hadoop运行时产生文件的存储目录 -->

    <property>

      <name>hadoop.tmp.dir</name>

      <value>/home/kunlun/hadoop/data/tmp</value>

    </property>

    

    <!-- 声明journalnode服务器存储目录-->

    <property>

     <name>dfs.journalnode.edits.dir</name>

     <value>//home/kunlun/hadoop/data/tmp/jn</value>

    </property>  

</configuration>

3.4 [hdfs1] 服务器上修改 hdfs-site.xml 配置文件。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ vi hdfs-site.xml

 

<configuration>

    <!-- 指定HDFS副本的数量 -->

    <property>

      <name>dfs.replication</name>

      <value>2</value>

    </property>

  

    <!-- 完全分布式集群名称 -->

    <property>

       <name>dfs.nameservices</name>

       <value>mycluster</value>

    </property>

    <!-- 集群中NameNode节点都有哪些 -->

    <property>

       <name>dfs.ha.namenodes.mycluster</name>

       <value>nn1,nn2</value>

    </property>

    

    <!-- nn1的RPC通信地址 -->

    <property>

     <name>dfs.namenode.rpc-address.mycluster.nn1</name>

     <value>hdfs1:9000</value>

    </property>

    <!-- nn2的RPC通信地址 -->

    <property>

     <name>dfs.namenode.rpc-address.mycluster.nn2</name>

     <value>hdfs2:9000</value>

    </property>

    <!-- nn1的http通信地址 -->

    <property>

     <name>dfs.namenode.http-address.mycluster.nn1</name>

     <value>hdfs1:50090</value>

    </property>

    <!-- nn2的http通信地址 -->

    <property>

     <name>dfs.namenode.http-address.mycluster.nn2</name>

     <value>hdfs2:50090</value>

    </property>

    <!-- 指定NameNode元数据在JournalNode上的存放位置 -->

    <property>

     <name>dfs.namenode.shared.edits.dir</name>

     <value>qjournal://hdfs1:8485;hdfs2:8485/mycluster</value>

    </property>

 

    <!-- 关闭权限检查-->

    <property>

       <name>dfs.permissions.enable</name>

       <value>false</value>

    </property>

 

 

    <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->

    <property>

     <name>dfs.client.failover.proxy.provider.mycluster</name>

     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

    </property>

    

    <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->

    <property>

   <name>dfs.ha.fencing.methods</name>

   <value>sshfence</value>

  </property>

 

    <!-- 使用隔离机制时需要ssh无秘钥登录-->

  <property>

   <name>dfs.ha.fencing.ssh.private-key-files</name>

   <value>/home/kunlun/.ssh/id_rsa</value>

  </property>

</configuration>

3.5 [hdfs1] 服务器上修改 hadoop 环境变量配置文件hadoop-env.sh,设置JAVA_HOME环境变量。使用kunlun用户执行以下命令。

[kunlun@hdfs1 hadoop]$ vi hadoop-env.sh

export JAVA_HOME=/usr/java/jdk1.8.0_131

export HADOOP_HOME=/home/kunlun/hadoop

3.6 [hdfs1]服务器上修改workers配置文件。使用kunlun用户执行以下命令。

[kunlun@hdfs1 hadoop]$ more workers

hdfs1

hdfs2

3.7 [hdfs1] 服务器上将配置好的 Hadoop 程序目录拷贝到集群中其他节点 [hdfs2] 服务器上。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ scp -rq /home/kunlun/hadoop 192.168.56.119:/home/kunlun/

3.8 [hdfs1,hdfs2] 服务器上分别输入以下命令启动 JournalNode 服务。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ hdfs --daemon start journalnode

[kunlun@hdfs2 hadoop]$ hdfs --daemon start journalnode

3.9 [hdfs1] 服务器上对 NameNode 进行格式化,并启动 NameNode。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ hdfs namenode -format

[kunlun@hdfs1 hadoop]$ hdfs --daemon start namenode

3.10 在 [hdfs2] 服务器上同步 NameNode 元数据信息,然后启动 NameNode。使用kunlun用户执行以下命令。

[kunlun@hdfs2 ~]$ hdfs namenode -bootstrapStandby

[kunlun@hdfs2 ~]$ hdfs --daemon start namenode

3.11 [hdfs1,hdfs2] 服务器上分别启动 DataNode。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ hdfs --daemon start datanode

[kunlun@hdfs2 ~]$ hdfs --daemon start datanode

3.12 将 [hdfs1] 服务器上 nn1 切换为 Active。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ hdfs haadmin -transitionToActive nn1

3.13 [hdfs1,hdfs2] 服务器上查看 hdfs 进程启动状态。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ jps

[kunlun@hdfs2 ~]$ jps

3.14 在 [hdfs1] 服务器上创建 hdfs 文件系统,并查看创建的 hdfs 文件系统。使用 kunlun 用户执行以下命令。

[kunlun@hdfs1 hadoop]$ hdfs dfs -mkdir /kunlun

[kunlun@hdfs1 hadoop]$ hdfs dfs -ls /

3.15 在 [hdfs2] 服务器上查看 [hdfs1] 上创建 hdfs 文件系统已同步。使用 kunlun 用户执行以下命令。

[kunlun@hdfs2 ~]$ hdfs dfs -ls /

3.16 通过 start-dfs.shstop-dfs.sh 命令启动或停止 hdfs。

[kunlun@hdfs1 hadoop]$ stop-dfs.sh

[kunlun@hdfs1 hadoop]$ jps

[kunlun@hdfs1 hadoop]$ start-dfs.sh

[kunlun@hdfs1 hadoop]$ jps

[kunlun@hdfs1 hadoop]$ hdfs haadmin -transitionToActive nn1

完成HDFS HA存储配置。

4 配置 HDFS 备份存储配置

4.1 通过登录 XPanel 控制台配置 HDFS 备份存储目标。

XPanel 服务安装的服务器 IP 是 192.168.56.112。

在能访问 192.168.56.112 的机器上打开浏览器,输入地址:http://192.168.56.112:18080/KunlunXPanel/#/login?redirect=%2Fdashboard

初次登录用户名和密码是:super_dba/super_dba,初次登陆需要修改 super_dba 密码。

登录后首页显示如下。

4.2 在 “集群设置” 中点击 “备份存储目标管理”,然后点击 “+新增” 按钮。

4.3 输入目标名称,目标类型,HDFS 服务器的 IP 地址和端口号,然后点击 “确认” 按钮。

4.4 新增备份存储目标成功。

完成 HDFS HA 备份存储目标配置。

END