greenplum配置高可用_高可用hadoop集群配置就收藏这一篇,动手搭建Hadoop(5)

01 ssh免密安装

02 jdk安装

03 hadoop伪分布式安装

04 hadoop全分布式

完成了前面四步,现在做hadoop的高可用。其实和之前的lvs的高可用差不多的。如果我们有两个namenode节点,分别是node01和node02。假设node01是主节点,node02是从节点,当node01挂掉了以后,node02自动成为主节点。这里通过zookeeper的方式来实现,node01,node02都会注册到zookeeper当中,由zookeeper来实现高可用。文章有点长先收藏再阅读,开始。

准备

node01(192.168.146.101):namenode01 ,ZKFC,JNN(journalnode)

node02(192.168.146.102):namenode02,datanode,zookeeper,ZKFC,JNN

node03(192.168.146.103): datanode, zookeeper, JNN

node04(192.168.146.104): datanode,zookeeper,

hadoop配置修改

修改hadoop_env.sh 文件

在原来的基础上指定ZKFC 和journalnode 两个进程的角色,这里注意我们之前用到的从节点sencondarynamenode现在用不着了,可以remark起来。

cd /usr/hadoop-3.1.2/etc/hadoop

export JAVA_HOME=/usr/java/jdk-12.0.1

export HDFS_NAMENODE_USER=root

export HDFS_DATANODE_USER=root

#export HDFS_SECONDARYNAMENODE_USER=root

export HDFS_ZKFC_USER=root

export HDFS_JOURNALNODE_USER=root

修改core-site.xml 文件

只用修改临时文件的目录即可,原来指向full现在建立一个新目录指向ha

vi core-site.xml

fs.defaultFS

hdfs://node01:9820

hadoop.tmp.dir

/var/hadoop/ha

修改hdfs-site.xml 文件

由于原先所有的datanode都需要和一个namenode做关联,现在做高可用需要让datanode和多个namenode做关联。因此,需要给namenode起一个logic name。同时需要配置两个namenode服务器(node01,node02)对应的rpc和httpaddress的信息。两个namenode进行同步的配置,这里需要指定journalnode服务器的地址。以及故障转移的代理类。

vi hdfs-site.xml

dfs.replication

3

#逻辑namenode 名字

dfs.nameservices

mycluster

#配置两个namenode服务器

dfs.ha.namenodes.mycluster

nn1,nn2

#配置rpc的调用

dfs.namenode.rpc-address.mycluster.nn1

node01:8020

dfs.namenode.rpc-address.mycluster.nn2

node02:8020

#配置http address

dfs.namenode.http-address.mycluster.nn1

node01:9870

dfs.namenode.http-address.mycluster.nn2

node02:9870

#配置journalnode节点

dfs.namenode.shared.edits.dir

qjournal://node01:8485;node02:8485;node03:8485/mycluster

#配置故障转移的调用

dfs.client.failover.proxy.provider.mycluster

org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

#故障隔离 当一个从节点即将要成为主节点的时候,会通知原来的主节点使之成为从节点。

dfs.ha.fencing.methods

sshfence

#故障隔离需要的私钥的地址

dfs.ha.fencing.ssh.private-key-files

/root/.ssh/id_rsa

#配置journalnode的存储地址

dfs.journalnode.edits.dir

/var/hadoop/ha/journalnode

dfs.ha.automatic-failover.enabled

true

再回到core-site.xml文件的配置

原来配置的是一个固定的主节点的名字,现在需要使用逻辑的namenode的服务名称,也就是我们在上面hdfs-site.xml中定义的 mycluster 这个名字。以及对zookeeper集群的配置。

fs.defaultFS

hdfs://mycluster

ha.zookeeper.quorum

node02:2181,node03:2181,node04:2181

分发core-site.xml hdfs-site.xml 和 hadoop-env.sh 三个文件到其他三个服务器(node02,node03,node04)

scp core-site.xml hdfs-site.xml hadoop-env.sh node02:`pwd`

scp core-site.xml hdfs-site.xml hadoop-env.sh node03:`pwd`

scp core-site.xml hdfs-site.xml hadoop-env.sh node04:`pwd`

安装配置zookeeper

由于我们之前定义的zookeeper的安装是在node02,node03,node04三个服务器。所以copy下载zookeeper的安装包。对其进行解压。这里我把zk放到/usr 这个目录下面了。

tar xf zookeeper-3.4.6.tar.gz -C /usr/

配置环境变量

export ZOOKEEPER_HOME=/usr/zookeeper-3.4.6

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

再将这个配置分发到其余的两个服务器node03,node04

scp /etc/profile node03:/etc/profile

scp /etc/profile node04:/etc/profile

source /etc/profile

修改zoo.cfg,指定文件存放地址;并且告之参与zk集群的端口的具体信息

cd /usr/zookeeper-3.4.6/conf

mv zoo_sample.cfg zoo.cfg

vi zoo.cfg

dataDir=/var/zookeeper

server.1=node02:2888:3888

server.2=node03:2888:3888

server.3=node04:2888:3888

分发zk到node02,node03

scp -r zookeeper-3.4.6/ node03:`pwd`

scp -r zookeeper-3.4.6/ node04:`pwd`

在三个节点创建zk的存储文件

mkdir /var/zookeeper

指定每个节点对应的服务器的名称根据zoo.cfg中的定义

server.1=node02

server.2=node03

server.3=node04

所以在node02中执行

echo 1 > /var/zookeeper/myid

所以在node03中执行

echo 2 > /var/zookeeper/myid

所以在node04中执行

echo 3 > /var/zookeeper/myid

启动zookeeper

分别在node02,node03,node04上运行zookeeper,并且查看启动后的状态。

zkServer.sh start

zkServer.sh status

74cf8a0fc40d68dc407e539750858224.png
14477b4d304a55bb7a4b5629bbfe08f7.png
3642487cfd03a53e7ee6b5856e6aa9ce.png

可以看到node04作为leader,node02和node03都是follower。

启动journalnode 节点

我配置了三个journalnode节点,分别是node01,node02,node03.所以在这三个节点分别执行以下指令。

hdfs --daemon start journalnode

启动以后会在对应的目录下面生成存储edits持久化文件的目录。这个目录我配置到了/var/hadoop/ha,在前面的cord-site.xml 中有说明。

针对主节点,node01,node02 进行namenode的格式化。这里我们选择node01进行格式化,然后启动namenode做为主节点。再到node02上面去同步node01上面的数据,这样node01是active node02是standby,node02上面同步了node01的namenode的数据,一旦node01无法使用了,node02会变成active状态接替node01的工作。

node01操作

hdfs namenode -format

hdfs --daemon start namenode

node02操作

hdfs namenode -bootstrapStandby

这样node02就把node01的namenode数据同步过来了。

可以到 /var/hadoop/ha/dfs/name 下面的VERSION文件中检查两个节点的clusterID是否相同。

初始化zookeeper

zookeeper需要注册两个主从节点,node01,node02.注册以后当一个节点服务down机或者和zookeeper失去联系了,那么另外一个节点就会接替主节点的位置成为active状态。

ps:可以通过 zkCli.sh 命令打开zookeeper客户端查看zookeeper情况。

node01上运行

hdfs zkfc -formatZK

启动hadoop集群

到node01节点上启动集群

start-dfs.sh

fcebdd650abba58f780b8703bcd0b7ab.png
a88fda78156be5019211860ef533b22c.png
3cca30937216726e7fae35d8bee41b6c.png
0bac8358e717f53e00da82853cf5fbea.png

运行完命令以后打开zookeeper客户端,查看

zkCli.sh

ls /hadoop-ha/mycluster

e0d0e171f5ececaff78137c017154ac3.png

我们看到在myclusert这个集群下面多了两个节点,这两个节点就是zookeeper注册的主从节点,node01,node02。可以通过以下命令查看两个节点的状态。

get /hadoop-ha/mycluster/ActiveBreadCrumb

get /hadoop-ha/mycluster/ActiveStandbyElectorLock

测试高可用效果

去网站看看结果。在浏览器输入192.168.146.101:9870 和 192.168.146.102:9870

node01是active,node02是standby

f4b21de49d571c150e64b5f85dbf602c.png
0d6858199110bc18755ccfa43d0e9e63.png

然后把node01的namenode关掉。

到node01节点上运行

hdfs --daemon stop namenode

3b1ab59c1624c1e0397b866a2075aa96.png
0fed403cd27dc57ba52a7fd7ae612f79.png

可以看到node01无法访问了,这个时候node02成为active状态,依旧可以提供访问。

到此hadoop高可用的配置和启动过程就完毕了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值