上一章节博主介绍了zookeeper的命令行客户端的基本使用、数据结构以及监听等等功能,本节博主将继续为大家分享zookeeper的启动、关闭、重启。在我们现在的大型项目里面,除了zookeeper外,还有很多的中间件都是集群式部署工作的(如:kafka,storm等等)。如果我们此时一台一台服务器的去启动相应的机器上安装的集群服务,那相当的耗时。那有没有一种简单的方式来实现一次操作就将整个集群启动呢?答案当然是可以的,我们可通过编写shell脚本来远程执行集群上每个节点对于的机器上的服务,从而实现整个集群的一键启动。

    可能用到的命令:

关闭防火墙和selinux:

Redhat使用了SELinux来增强安全,关闭的办法为:
1. 永久有效
修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启。
2. 即时生效
setenforce 0

关闭防火墙的方法为:
1. 永久性生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
2. 即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
需要说明的是对于 Linux 下的其它服务都可以用以上命令执行开启和关闭操作
 

补充:
a. 防火墙还需要关闭ipv6的防火墙:
chkconfig ip6tables off
并且可以通过如下命令查看状态:
chkconfig --list iptables
b. selinux状态可以通过以下命令查看:
sestatuss

(一)在列出脚本之前先介绍些基础知识:

(1)b1=2 定义的变量,只对自己所在的shell进程生效 
(2)export b=2 这个命令定义的变量只在当前这个进程和它的子进程中有效 
(3)source s1.sh 会将定义在脚本文件中的变量放在当前登录的shell里面 
(4)ssh远程登录集群,可执行命令操作远程主机

(二)zookeeper集群启动脚本配置全过程:

        (1)首先配置启动脚本所在机器对其它集群节点的免密登录(此处的操作,博主在之前的文章已经介绍过,此处就不赘述了)

        (2)编写脚本zk_start_ssh.sh

#/bin/bash
ZKSERVERS=(192.168.29.135 192.168.29.136 192.168.29.143)
echo ==========总共${#ZKSERVERS[@]}台服务器==========
for SERVER in ${ZKSERVERS[@]}
do
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo  ========start zookeeper  $SERVER $dat ===========
ssh root@$SERVER "source /etc/profile;/opt/apps/zookeeper-3.4.13/bin/zkServer.sh start;exit;"
echo  ========start zookeeper  $SERVER success $dat===========
done
echo ==========自动化脚本任务执行完成==========
~

        (3)编写脚本zk_kill_ssh.sh

#/bin/bash
ZKSERVERS=(192.168.29.135 192.168.29.136 192.168.29.143)
echo ==========总共${#ZKSERVERS[@]}台服务器==========
for SERVER in ${ZKSERVERS[@]}
do
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo  ========kill zookeeper  $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep 'zookeeper' | grep -v grep | awk '{print \$2}'| xargs kill;exit;"
echo  ========kill zookeeper  $SERVER success $dat===========
done
echo ==========自动化脚本任务执行完成==========

        (4)编写脚本zk_restart_delay_ssh.sh

#/bin/bash
ZKSERVERS=(192.168.29.135 192.168.29.136 192.168.29.143)
interval_time=10s
if [ "$1" ]; then
   echo ===========成功设置延迟启动时间设置为:$1s===================
   interval_time=$1
else
   echo ===========默认设置延迟启动时间设置为:${interval_time}s===================
fi
i=1
echo ==========总共${#ZKSERVERS[@]}台服务器==========
for SERVER in ${ZKSERVERS[@]}
do
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo  ========kill zookeeper  $SERVER $dat ===========
ssh root@$SERVER "ps -ef | grep 'zookeeper' | grep -v grep | awk '{print \$2}'| xargs kill;exit;"
echo  ========kill zookeeper  $SERVER success $dat===========
dat=`date '+%Y-%m-%d %H:%M:%S'`
echo  ========start zookeeper  $SERVER $dat ===========
ssh root@$SERVER "source /etc/profile;/opt/apps/zookeeper-3.4.13/bin/zkServer.sh start;exit;"
echo  ========start zookeeper  $SERVER success $dat===========
if [[ "$i" -lt ${#SERVERS[@]} ]]; then
     echo  ========sleep ${interval_time}=======
     sleep ${interval_time}
fi
let "i++"
done
echo ==========自动化脚本任务执行完成==========

 

(三)总结(远程登录时执行zookeeper启动时,为何souce /etc/profile)

        a.终端登录时,用户会默认执行一遍以下三个文件
            /etc/profile
            /root/bash_profle 用户主目录下
            /root/bashrc  用户主目录下

        b.ssh登录时,不会执行默认的source文件脚本

        c.jps 可以查看java进程     QuorumPeerMain为zookeeper进程