Linux上编写shell管理集群

分布式系统方案中,集群主机数量到达一定程度后,如果还是单独的一个一个远程登陆配置会变得十分棘手。推荐两种方案:1.使用clusterShell软件配置分组,只需要在一台主机上统一的发送指令,其他主机都会执行,十分便捷。2.有时候启动的命令行一大堆,可以自己写shell去管理所有集群机子上。

自定义shell脚本

1.首先创建自定义的脚本script.sh文件

vim /home/script.sh

2.编写脚本内容

#!/bin/bash
echo "hello shell!"

wq!保存后,赋予可执行权限:输入 chmod +x /home/script.sh
再次查看script.sh 就会变成深色,代表这是可执行的
示例编写zookeeper启动shell

#!/bin/bash
#在 /etc/hosts加入对于集群的host IP,shell中小挂号包裹代表数组,数组元素之间用空格分开
host=(storm1 storm2 storm3 storm4 storm5)
#echo 输出执行的信息
echo "start zookeeper" 
#for 循环遍历执行所有的集群主机
for i in ${!host[@]}
do
#需要配置ssh免密登录
ssh ${host[$i]} "source /etc/profile;cd /tmp/zookeeper/datalog/&&nohup zkServer.sh start >/dev/null 2>&1 &"
#如果某一台需要单独启动点东西,可以通过if then 去处理
if (($i==0));then
        echo "第一个与众不同"
fi
#if的end标准为 fi
#echo "i=$i host[$i]=${host[$i]}"
#for循环的结束标志为done
done

解释:

  • 如果需要用到环境变量(/etc/profile)中配置的$PATH的路径,比如jdk和这里的zkServer.sh脚本,需要在使用前执行source /etc/profile 以让环境变量可用,否则会报路径找不到的错误。
  • 由于zk默认配置下启动会在当前路径下生成一个zk.out的文件,所以进入专门存放zk日志的目录下。
  • nohup启动可以保证即使关闭shell命令窗口,也能在后台执行,但无法ctrl +c会中止运行。而末尾的& 也是在后台执行,并且是立即在后台开启一个专门的线程启动,不会受到ctrl+c的影响,但是关闭shell命令窗口,也就是当前登录用户推出后,后台线程会中止。因此需要将两者配合启动即: nohup +指令 +>/输出日志路径 2>&1 +& ,值得注意的是nohup指令必须要指定输出日志,这个日志是启动shell脚本本身会打印输出的内容。比如jar启动的话,就是控制台输出的那些日志。如果日志本身不值得关注,使用 路径/dev/null,把日志丢到不可回收的黑洞中。

示例编写kafka启动shell

#!/bin/bash
host=(storm1 storm2 storm3 storm4 storm5)#在 /etc/hosts加入对于集群的host IP
echo "start kafka"
for i in ${!host[@]}
do
#这里没有用到环境变量,应为kafka默认配置下需要指定server.properties的路径path=/home/storm$[$i+1]/distribute/kafka
echo "nohup $path/bin/kafka-server-start.sh -daemon $path/config/server.properties >/dev/null 2>&1 &"

ssh ${host[$i]} "nohup $path/bin/kafka-server-start.sh -daemon $path/config/server.properties >/dev/null 2>&1 &"

#echo "i=$i host[$i]=${host[$i]}"
done

示例编写storm启动shell

#!/bin/bash
host=(storm1 storm2 storm3 storm4 storm5)
echo "start storm"
for i in ${!host[@]}
do
ssh ${host[$i]} "source /etc/profile;nohup storm supervisor >/tmp/storm/storm.log 2>&1 &"
ssh ${host[$i]} "source /etc/profile;nohup storm logviewer >/tmp/storm/storm.log 2>&1 &"
if (($i==0));then
        echo "start nimbus……"
        ssh ${host[$i]} "source /etc/profile;nohup storm nimbus >/tmp/storm/storm.log 2>&1 &"
        echo "start storm UI"
        ssh ${host[$i]} "source /etc/profile;nohup storm ui >/tmp/storm/storm.log 2>&1 &"
fi
#echo "i=$i host[$i]=${host[$i]}"
done

这里需要第一个主机为nimbus并且启动UI则只需要加个判断即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值