设为首页 收藏本站
查看: 825|回复: 0

[经验分享] HBase集群新节点安装配置工具(Shell 脚本)

[复制链接]

尚未签到

发表于 2017-6-4 09:59:19 | 显示全部楼层 |阅读模式
  在之前两篇随笔中,主要介绍了在一个分布式集群下配置Hadoop,Zookeeper以及HBase 的流程。在实际情况中,配置HBase集群时,需要配置的节点太多,并且配置的内容基本相同。为了避免重复繁琐的配置工作,可以使用Shell脚本工具来自动完成这些流程化的工作,节省时间并且减少人工配置错误的情况。
  本文介绍的是在需要批量添加集群节点并配置HBase的情况下,可以使用到的自动化配置工具,主要是几个Shell脚本来完成新节点的加入以及集群启动和停止。当然其中不可避免的还是需要人工参与部分配置工作,但是脚本工具基本上可以让配置人员完全解放于重复而费时的配置工作了。
  所有软硬件平台均与《Hadoop平台搭建(VMware、CentOS)》相同,且所有操作以root用户执行
  =====================================================================================
  一、创建新的节点(虚拟主机)
  新的虚拟主机可以用iso文件自行安装,但是为了提高效率,我们使用VMware的克隆虚拟机功能,需要手动安装一台模板虚拟主机,然后不断克隆新的虚拟主机。
  下面以Slave8为例,从Slave8克隆出一台Slave9。
  需要说明的是,在模板主机的系统安装完成之后、被克隆之前我对其进行了以下操作以提高效率:
  ①修改个人使用习惯
  Ctrl+Alt+T to open a Terminal
  Terminal font --> Courier 10 Pitch Bold 13
  Terminal Text Color --> #000000
  Terminal Background Color --> #BBBBBB
  File Management Preferences Behavior --> Always open in browser windows
  ②安装VMTools工具
  ③永久关闭防火墙
  chkconfig iptables off
  ④安装配置JDK
  与之前相同
  ⑤关机
  下面开始克隆新的虚拟主机:
DSC0000.png

DSC0001.png

DSC0002.png

DSC0003.png

DSC0004.png

DSC0005.png

DSC0006.png

  克隆完成,开启Slave8,接下来将对Slave8进行配置,Slave9作为后续新节点的模板。
  二、配置新节点(于新节点)
  0、查看新节点IP信息
DSC0007.png

  新分配IP地址为192.168.222.142,目前的网络主机名仍是最初的模板Slave5的主机名,需要修改。
  1、修改主机网络名称
  由于Slave8是从之前的模板克隆而来,完整克隆操作会分配新的IP地址,但不会修改网络主机名,因此需要先修改主机名为Slave8.Hadoop
  vi /etc/sysconfig/network
DSC0008.png

  将第二行的HOSTNAME修改为Slave8.Hadoop,可以看到节点目前的主机名仍为Slave5,需要随后重启才会生效
  2、配置SSH无密码通信
  ①开启SSH登录
  vi /etc/ssh/sshd_config
  找到并去掉以下两行的注释
  #RSAAuthentication yes
  #PubkeyAuthentication yes
  ②生成公钥RSA key
  ssh-keygen -t rsa  //不输入密码,一直回车
  3、重启以使配置生效
  reboot
  三、配置新节点(于Master主机)
  在Master主机上我建立了一个clusters文件用于存储目前的集群节点信息
  需要注意的是,在下面的所有脚本中对clusters文件的引用都写成了绝对路径/home/myscript/clusters
  在加入Slave8之前clusters文件如下所示:
DSC0009.png

  建立自动配置脚本configure.sh



#!/bin/sh
int=0
if [ $# -ne 1 ]
then
echo "Wrong Parameter."
else
#0.Forework, get current cluster information
while read IP ID
do
array[$int]=$IP
let "int++"
done</home/myscript/clusters
#1.update hosts file
echo $1' Slave'$int'.Hadoop' >> /etc/hosts
for k in ${array[@]}
do
scp /etc/hosts root@$k:/etc
done
scp /etc/hosts root@$1:/etc
#2.Configure SSH
echo "adding RSA key from $1 to localhost."
ssh root@$1 'cat ~/.ssh/id_rsa.pub>>/root/.ssh/authorized_keys'
echo "copying to cluster members..."
for i in ${array[@]}
do
scp /root/.ssh/authorized_keys root@$i:/root/.ssh
scp /root/.ssh/known_hosts root@$i:/root/.ssh
done
scp /root/.ssh/authorized_keys root@$1:/root/.ssh
scp /root/.ssh/known_hosts root@$1:/root/.ssh
#3.update hadoop slaves
echo $1 >> ${HADOOP_HOME}/etc/hadoop/slaves
for j in ${array[@]}
do
scp ${HADOOP_HOME}/etc/hadoop/slaves root@$j:${HADOOP_HOME}/etc/hadoop
scp /home/hadoop/hadoop-2.7.3/etc/hadoop/slaves root@$j:/home/hadoop/hadoop-2.7.3/etc/hadoop
done
scp -r /home/hadoop root@$1:/home
#4.update zookeeper servers and myid info
echo "server."$int"="$1":2888:3888" >> ${ZOOKEEPER_HOME}/conf/zoo.cfg
for l in ${array[@]}
do
scp ${ZOOKEEPER_HOME}/conf/zoo.cfg root@$l:${ZOOKEEPER_HOME}/conf
done
scp -r /home/zookeeper root@$1:/home
ssh root@$1 "echo "$int" > /home/zookeeper/zookeeper-3.4.6/data/myid"
#5.update hbase
sed -i -r 's/<value'\>'(Master.*Hadoop.*)</<value'\>'\1,'"$1"'</g' /home/hbase/hbase-1.2.4/conf/hbase-site.xml
echo $1 >> /home/hbase/hbase-1.2.4/conf/regionservers
for m in ${array[@]}
do
scp -r /home/hbase/hbase-1.2.4/conf root@$m:/home/hbase/hbase-1.2.4/
done
scp -r /home/hbase root@$1:/home
#6.update environment variables on new member
scp /etc/profile root@$1:/etc/profile
ssh root@$1 'source /etc/profile'
#7.update cluster info
echo $1' Slave'$int'.Hadoop' >> /home/myscript/clusters
fi
  执行脚本,需要加上新节点的IP作为唯一参数(执行之前确认clusters文件路径正确):
  ./configure.sh 192.168.222.142
  执行过程中需要输入确认反馈'yes'以及新节点的root密码三次
  四、配置新节点(于新节点)
  之所以有这部分的操作,是因为有一些远程命令好像并不能实际生效,在脚本的第6部分我设置了新节点更新环境变量的远程指令
  ssh root@<new_member_ip> 'source /etc/profile'
  但是此时用'env'指令查看新节点的环境变量发现并没有更新,因此需要手动在新节点上执行更新操作
  source /etc/profile
  再次'env'查看,发现环境变量HADOOP_HOME、ZOOKEEPER_HOME等已更新
  五、启动集群(于Master主机)
  在执行之前需确认集群并没有在运行
  1、start_hadoop.sh



#!/bin/sh
${HADOOP_HOME}/sbin/start-all.sh
  2、start_zookeeper.sh



#!/bin/sh
int=0
#read current cluster members
while read IP ID
do
array[$int]=$IP
let "int++"
done</home/myscript/clusters
#start zookeeper server on cluster
for i in ${array[@]}
do
echo "starting zookeeper on "$i
ssh root@$i ${ZOOKEEPER_HOME}'/bin/zkServer.sh start'
done
  3、start_hbase.sh



#!/bin/sh
/home/hbase/hbase-1.2.4/bin/start-hbase.sh
  4、start_all.sh



#!/bin/sh
echo "===============Start All==============="
echo "1.Starting Hadoop"
./start_hadoop.sh
echo "------------------------------------------------------"
echo "2.Starting Zookeeper"
./start_zookeeper_new.sh
echo "------------------------------------------------------"
echo "3.Starting HBase"
./start_hbase.sh
echo "===============DONE==============="
  5、执行start_all.sh(执行之前确认脚本路径及clusters文件路径正确)
  ./start_all.sh
  6、启动成功
  http://192.168.222.134:50070/
DSC00010.png

  http://192.168.222.134:16010/
DSC00011.png

  六、关闭集群(于Master主机)
  建立脚本stop_all.sh



#!/bin/sh
int=0
echo "===============Stop All==============="
echo "1.stopping hbase"
/home/hbase/hbase-1.2.4/bin/stop-hbase.sh
echo "---------------------------------------"
echo "2.stopping zookeeper"
while read IP ID
do
array[$int]=$IP
let "int++"
done < /home/myscript/clusters
for i in ${array[@]}
do
echo "stop zookeeper on "$i
ssh root@$i ${ZOOKEEPER_HOME}'/bin/zkServer.sh stop'
done
echo "---------------------------------------"
echo "3.stopping hadoop"
${HADOOP_HOME}/sbin/stop-all.sh
echo "===============Done==============="
  执行脚本(注意clusters文件路径)
  ./stop_all.sh
  七、存在问题
  1、路径问题,可以将clusters的路径修改一下解决代码内部修改的问题
  2、IP和ID的问题,在一些配置文件如hbase-site.xml中集群原本是以网络主机名Slave.Hadoop来设置的,但是在脚本里面我增加新主机时直接用了IP地址,虽然并不影响,但是不够完善
  3、集群启动之前可以再写一个检查脚本,比如确认集群通信正常、防火墙关闭等。
  4、现在的方案是将Master上面的软件文件夹整体复制到新节点上,但是其实可以用官方压缩包的方式解压来安装软件,再把配置文件覆盖掉以完成配置。这样可以节省一些传输的代价,因为有一些运行后产生的日志文件等是不需要传到新节点上的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-383391-1-1.html 上篇帖子: 【CNMP系列】VIM编辑器详解 下篇帖子: 使用WinSCP进行简单代码文件同步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表