Zookeeper环境准备(三台虚拟机)

集群脚本的准备

最近在学zookeeper,发现scp这东西真好用,可以给其他节点传输文件,非常的方便。但是拷贝文件到各个节点,节点数量少还是挺方便的,但是节点一多起来,就会发现重复的工作增加了好多,相同的命令需要输入好多次,而且接受的用户名如果改错了还会浪费时间。所以每次都用scp远程命令去拷贝不现实,所以现在编写一个分发脚本,单命令可以分发到各个节点。(以下是三台已经互相ssh免密登录的虚拟机centos7)

1.创建/home/hadoop/tools 脚本存放目录(以下所有需要在hadoop用户下执行)

mkdir ~/tools

tools文件夹

多用户的坑:

Linux系统的坑(root与普通系统的区别)_cxy好好先生的博客-CSDN博客参考:sudo命令和root直接执行的区别(转)_a932432866的专栏-CSDN博客_sudo和root的区别sudo可以用用户的环境,也就是获得root权限时仍然使用用户自己的环境变量例如,假如我在用户pansz环境中为vim配好了一套很习惯的配置,直接用root的话,那么vim就使用root用户的环境了,我为pansz用户定制的屌炸天的插件都没有了,vim成了原始配置。而用sudo则可以保持用户的环境同理,当一个主机有多个管理员时,每个人可能都不喜欢别人给root环境中指定的配置,可能导致rohttps://blog.csdn.net/weixin_52105111/article/details/123206380

2.编写脚本配置文件   deploy.conf    and     deploy.sh

进入刚创建好的文件夹,编写deploy.conf

cd ~/tools

vim deploy.conf

 #规划各个节点的角色(用于后面你想分发到哪个角色的节点

ESC   +   :wq  (退出)

编写deploy.sh(ssh的脚本)

vim deploy.sh

 下面的shell传递参数(可以去菜鸟教程学习)

#!/bin/bash    #默认写法脚本识别

if [ $# -lt 3 ]    #如果参数个数小于三
then
  echo "Usage: ./deploy.sh srcFile(or Dir) destFile(or Dir) MachineTag"      #提示脚本如何运行(三个参数用法 文件名  目的地  节点角色)
  echo "Usage: ./deploy.sh srcFile(or Dir) destFile(or Dir) MachineTag confFile"  #提示脚本如何运行(四个参数用法 文件名 目的地 节点角色 )
  exit
fi

src=$1  #文件名是第一个参数
dest=$2  #目的地是第二个参数
tag=$3  #角色是第三个参数

if [ 'a'$4'a' == 'aa' ]  #第四个参数是否为空
then
  confFile=/home/hadoop/tools/deploy.conf  #第四个参数为空confFile 为默认配置文件
else
  confFile=$4  #配置文件是第四个参数
fi  #结束if语句

if [ -f $confFile ]  #配置文件是否存在且为普通文件
then
  if [ -f $src ]   #是文件,存在且为普通文件
  then
    for server in `cat $confFile | grep -v  '^#' | grep ','$tag','|awk -F ',' '{print $1}'`    #for 集群节点 in ‘获取整个confFile | 取反 把井号开头的注释去掉 | 取两个‘,’包含的角色 | 利用解析‘,’ print 第一个参数(即节点名称)’  (最终效果是获取到有tag$3角色的节点名称)
    do
      scp $src $server":"${dest}   #将文件 通过scp分发到每个节点的具体地址上去
    done
  elif [ -d $src ]   #是文档,存在且为普通文档
  then
    for server in `cat $confFile | grep -v  '^#' | grep ','$tag','|awk -F ',' '{print $1}'`#for 集群节点 in ‘获取整个confFile | 取反 把井号开头的注释去掉 | 取两个‘,’包含的角色 | 利用解析‘,’ print 第一个参数(即节点名称)’  (最终效果是获取到有tag$3角色的节点名称)
    do
      scp -r $src $server":"${dest}  #将文档 通过scp分发到每个节点的具体地址上去
    done
  else
    echo "Error: No source directory or file exists" #提示该文件或文档不存在
  fi  #结束if语句
else
  echo "Error: Plesase assign config file or run deploy.sh command with deploy.conf in same directory"  #出错了提示配置文件不存在或不为普通文件,需要指定配置文件

fi   #结束if语句

 3.给脚本添加执行权限

chmod u+x ~/tools/deploy.sh

ll

你会发现文件颜色变成了绿色

 4.配置脚本环境变量

配置环境变量是个坑

Linux系统的坑(root与普通系统的区别)_cxy好好先生的博客-CSDN博客参考:sudo命令和root直接执行的区别(转)_a932432866的专栏-CSDN博客_sudo和root的区别sudo可以用用户的环境,也就是获得root权限时仍然使用用户自己的环境变量例如,假如我在用户pansz环境中为vim配好了一套很习惯的配置,直接用root的话,那么vim就使用root用户的环境了,我为pansz用户定制的屌炸天的插件都没有了,vim成了原始配置。而用sudo则可以保持用户的环境同理,当一个主机有多个管理员时,每个人可能都不喜欢别人给root环境中指定的配置,可能导致rohttps://blog.csdn.net/weixin_52105111/article/details/123206380首先配置环境变量有两个地方可以配置:

1./etc/profile文件为系统的每个用户设置环境变量信息,此文件的修改会影响到所有用户。想了解更多细节内容可以用:vim /etc/profile 命令进行查看。

vim /etc/profile

 2.~/.bashrc文件是针对当前用户,其他用户不会受影响(我们选择这个在hadoop用户下进行

vim ~/.bashrc

 把最后两行加进去

[hadoop@hadoop01 tools]$ vim ~/.bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions


PATH=/home/hadoop/tools:$PATH
export PATH

ESC + :wq(退出)

然后source环境文件

source ~/.bashrc

你的deploy.sh就可以使用了

带着你试试。

 

先随便创建一个文件1.txt

然后再把1.txt分发到角色为slave各个节点中

vim 1.txt

#随便写点东西


deploy.sh 1.txt /home/hadoop/ slave
#deploy.sh  文件名    目的地     节点角色    

 然后去hadoop02 ,hadoop03 节点看或者你自己填的slave角色节点看。

 你会发现已经传过来了。

5.编写集群远程执行脚本

runRemoteCmd.sh

这个脚本有了上面得基础,写的就会如鱼得水,而且这个更为简单。

#!/bin/bash    #默认写法脚本识别

if [ $# -t 2 ]    #如果参数小于2个
then
  echo "Usage: ./runRemoteCmd.sh Command MachineTag"
  echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile"
  exit
fi


cmd=$1    #命令是第一个参数
tag=$2    #节点角色是第二个参数
if [ 'a'$3'a' == 'aa' ]   #判断第三个参数是否为为空
then 
  confFile=/home/hadoop/tools/deploy.conf   #环境配置为默认文件
else
  confFile=$3  #环境配置是第三个参数
fi

if [ -f $conFile ]   #判断环境参数文件是否存在且为普通文件
then
  for server in `cat $confFile | grep -v  '^#' | grep ','$tag','|awk -F ',' '{print $1}'` 
   #for 集群节点 in ‘获取整个confFile | 取反 把井号开头的注释去掉 | 取两个‘,’包含的角色 | 利用解析‘,’ print 第一个参数(即节点名称)’  (最终效果是获取到有tag$3角色的节点名称)#
    do
      echo "*****************$server*****************************"
      ssh $server "source ~/.bashrc; $cmd"   #远程source环境变量,并且执行命令
    done
else
  echo "Error: Plesase assign config file or run deploy.sh command with deploy.conf in same directory"   #环境参数文件不存在或不为普通文件
fi

然后保存

接下来使用一下这个远程脚本给各个节点创建文档。

"mkdir ~/apps" all

 

 

 十分成功,这就是两个脚本的编写。

不要再用scp 命令一个节点一个节点去传文件,每个节点输入同样的命令浪费时间了

一起来编写脚本吧!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cxy好好先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值