从0开始搭建Hadoop2.x高可用集群(HDFS篇)
演示目标
搭建双NameNode节点的高可用集群,其中一台节点的状态为Active,另一台是standby。当Active节点发生故障时,standby节点能自动接管并切换到Active状态。
演示环境
软件 | 备注 |
---|---|
VMware Workstation | 15.5 |
CentOS | CentOS-7-x86_64-DVD-1804.iso |
JDK | jdk-8u211-linux-x64.tar.gz |
Hadoop | hadoop-2.6.5.tar.gz |
Zookeeper | zookeeper-3.4.14.tar.gz |
下载地址 | 若有需要请按需下载上述软件 |
注意事项
- 文章中所有shell命令都是以root用户进行操作,所以请优先使用
su root
命令切换用户; - 在输入shell命令前先阅读命令注释,以避免遗漏和错误。
- 可以使用虚拟机快照功能帮助自己在执行了错误的操作后进行回滚。
准备虚拟机
- 安装WMware Workstation,并使用CentOS7镜像创建三台虚拟机;
- 配置好三台虚拟机的网络环境使其之间能够相互Ping通(如何设置?),演示中所用的虚拟机网络信息如下:
HOSTNAME | IP |
---|---|
vm1 | 192.168.0.51 |
vm2 | 192.168.0.52 |
vm3 | 192.168.0.53 |
关闭防火墙
依次使用所有虚拟机执行下列命令
# 关闭防火墙
systemctl stop firewalld
# 禁用开机启动
systemctl disable firewalld
# 编辑selinux文件
# 设置SELINUX值等于disabled
# SELINUX=disabled
vim /etc/sysconfig/selinux
检查系统时间
依次使用所有虚拟机执行下列命令
# 查看时区
timedatectl | grep Time
# 设置时区为上海
timedatectl set-timezone Asia/Shanghai
# 打印出当前系统时间
date
# 如果显示出的时间比当前时间快8小时,则执行下列命令
date -s '-8hour'
hwclock -w
修改host
使用虚拟机vm1执行下列命令
# 修改hostname
hostnamectl set-hostname vm1
使用虚拟机vm2执行下列命令
# 修改hostname
hostnamectl set-hostname vm2
使用虚拟机vm3执行下列命令
# 修改hostname
hostnamectl set-hostname vm3
使用虚拟机vm1执行下列命令
# 追加内容到hosts文件
cat >> /etc/hosts << EOF # 回车
> 192.168.0.51 vm1 # 回车
> 192.168.0.52 vm2 # 回车
> 192.168.0.53 vm3 # 回车
> EOF # 回车
# 将hosts文件拷贝到vm2和vm3
# 拷贝完毕后分别使用所有虚拟机执行ping vm1、ping vm2、ping vm3检查网络是否通畅
scp /etc/hosts root@vm2:/etc/hosts
scp /etc/hosts root@vm3:/etc/hosts
设置免密登录
依次使用所有虚拟机执行下列命令
# 登录本机,该操作用于初始化ssh目录
# 如果出现Are you sure you want to continue connecting (yes/no)?请输入:yes
ssh localhost
# 退出登录
exit
# 进入ssh目录
cd ~/.ssh/
# 生成密钥
# 执行后系统会出现多次提示,依次回车即可
ssh-keygen
# 编辑ssh_config文件
# 将StrictHostKeyChecking的值设置为no
# StrictHostKeyChecking no
vim /etc/ssh/ssh_config
使用虚拟机vm1执行下列命令
# 进入ssh目录
cd ~/.ssh/
# 将vm1公钥文件中的内容追加到到authorized_keys文件
cat id_rsa.pub >> authorized_keys
# 分别将vm2和vm3的id_rsa.pub中的内容也追加到vm1的authorized_keys文件中
# 最终vm1的authorized_keys文件拥有所有虚拟机的公钥,文件类容类似如下所示:
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDK4UGWdR1BfeB55eN/5j4f5vG1qzARyZ0IzVbmujdVqeBC3jMJDBU4DiGNH1DlL7M9ga7ocmzIR+/B9u/7f7jQNAejsPNVTo4TUt5f8+f4csH7CSXUVbB8oQrWrpH7hwNIf5RMzCAoEGoDSxm7/AZUM632IRz4ns4GKiJVES871VNDbrtal82mmdVPf84V2YpdgP8FmSbGe3C2UdsS8PzZ3QMb+gMi+jNTKi4UN7dAZxh5v58fBKqyX9sFkvwWCibr2t3MUnHOdAP789i1KTAubWjlthiHhF+CnUn0S0BFTiWfec/hJwYlOo8rOReVdS4ymB/q5kR/5uNFHJUEQrsX root@vm1
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCVBoca02VsaihYD52FnkEEP/f/do/iO6ao/l12EFbnHWivYKbja4CMty/c4Uwowo33ylFVahhlEMornJ76tLtxsOMOPcJby6SJdbmx7Aqy1CVccMU7NrMYnRosnnazIq+tUCrGWhXGAmZ3TUSAC7RNrIAtFkzeYpsylWenexPx+/mbARon8gc0Y3KamcYJjAyK1hVQN3VixxjeNw8i4VfEvxEY74JRjYR63QQUGqptKuDQCBn06BgACIJxaLLNcxCyB5Fb72gOgjIWyG/+azItimxRDAEIqdax47HoKjrE+tpKrq0CIswm1q+NfafO5m06NtAydUzfedtLrAmVLUEX root@vm2
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDp1yt3cYWY3n8oMCGykr8oX1bGEbHWqNMxe2gOsJoBZCMKkqVyM98iajoG5KsZdNZM91+jqH6nbuse6lcDPOMKZ+rY+DqUSW/2tg3VqByAywNL3SW44gPQyKwdgNucAJtfgZdRaYiIglkEm9GT09zGCbUkd7YReNULeuTVx92CXH5jRBNCSHze9kg3s9eHOvKZ2rfNhIf/xqR2wxGlioBD0Ql3/jEAvGwgl2QTIC4BBrYgya8SIEpmaf0t6dIsDbnnzfcHgaZe/VdiQtT7km7Odx/65E/ECl7xYLZetrJS/cvebc5I+t/IP0OBSOeVHtHLux+o/aWBIN44uFcdwTMX root@vm3
# 将authorized_keys文件拷贝到vm2和vm3
scp ~/.ssh/authorized_keys root@vm2:~/.ssh/
scp ~/.ssh/authorized_keys root@vm3:~/.ssh/
# 使用任意虚拟机检查是否能免密登录
ssh vm1 #[vm2、vm3]
# 登录其他虚拟机后切记退出
exit
卸载OpenJDK
依次使用所有虚拟机执行下列命令