Linuxスクリプトクラスタ内の他のロールノードサービスを統合的に開始するスクリプト

7721 ワード

需要:サービスを開始するとき、各ノードが起動する必要がある場合があるので、面倒です.スクリプトの構成により、1つのノードで他のノードのサービスを開始するか、ロールノードでのサービスを同時に開始します.
各ノードに遭遇すると、同じサービスが開始されるため、学習中です.繰り返し操作は煩雑なので、効率を節約するために、操作を容易にするためのスクリプトを見つけました.ここでは簡単に話します.△シナリオは自分で書いたものではありません.ネットで探したリソースでもあります.ここでは考えの分析をします.アイデア:各ノードと対応するロールをファイルにホスト名に対応するように構成し、ファイルを読み取ることでサービスを取得するロールです.ここでは、各ノードのソフトウェアインストールディレクトリ、環境変数、ファイルとデータディレクトリが同じであることに注意する必要があります.
スクリプトの場所が変更されたときに相対的に位置が変わらないように、構成ファイル、読み出し構成のスクリプトファイルを同じディレクトリの下に置く必要があります.ここではtoolsディレクトリの下にファイルディレクトリを置きます.tools->deploy.conf//ホストとロールの対応関係->runRemoteCmd.sh//異なるロールサービスを起動するスクリプト->deploy.sh//異なるロールのノードにファイルを配布するスクリプト
ステップ1:ホストとロールに対応するファイルの構成:deploy.conf
   txynebo1,all,namenode,zookeeper,resourcemanager,
   txynebo2,all,slave,namenode,zookeeper,resourcemanager,
   txynebo3,all,slave,datanode,zookeeper,

上の構成は私の3つのノードのクラスタロール構成です.主にメインノードで実行するので、このような構成も自分のニーズに応じて異なる構成を行うことができます.
ステップ2:ファイル(クリップ)コピースクリプトdeploy.sh
#!/bin/bash
#set -x

if [ $# -lt 3 ]
then 
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag"
  echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile"
  exit 
fi

src=$1
dest=$2
tag=$3
if [ 'a'$4'a' == 'aa' ]
then
  confFile=/home/hadoop/tools/deploy.conf
else 
  confFile=$4
fi

if [ -f $confFile ]
then
  if [ -f $src ]
  then
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
    do
       scp $src $server":"${dest}
    done 
  elif [ -d $src ]
  then
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
    do
       scp -r $src $server":"${dest}
    done 
  else
      echo "Error: No source file exist"
  fi

else
  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi

3つのパラメータ、元のファイル(クリップ)、ターゲットファイル(クリップ)、渡されるロールノードが表示されます.(4番目はロールプロファイルで、渡さない場合はデフォルトの場所です.このプロファイルはスクリプトと同じディレクトリの下にあるため、相対的な配置を使用することもできます.ここでは絶対パスを直接使用します).
ステップ3:サービス起動スクリプトrunRemoteCmd.sh
#!/bin/bash
#set -x

if [ $# -lt 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 $confFile ]
then
    for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` 
    do
       echo "*******************$server***************************"
       ssh $server "source /etc/profile; $cmd"
    done 
else
  echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory"
fi

上のスクリプトは、スクリプトを実行するパス+パラメータと、実行の開始ロールの2つのパラメータを渡す必要があります.
/home/hadoop/tools/runRemoteCmd.sh  "/home/hadoop/app/zookeeper/bin/zkServer.sh start"  all

まとめ:これらのスクリプトも学習中に発見された使いやすいスクリプトなので、共有してみましょう.ここでは具体的な命令について詳しく説明しません.注意すべきは、ssh秘密免除通信起動サービスを使用しているため、ssh秘密免除を構成する必要がある.次に、各ロールのサービスは一緒に開始されるので、同じロールノードのファイルディレクトリは必ず同じであることを保証します.