上一章节博主介绍了zookeeper的命令行客户端的基本使用、数据结构以及监听等等功能,本节博主将继续为你们分享zookeeper的启动、关闭、重启。在咱们如今的大型项目里面,除了zookeeper外,还有不少的中间件都是集群式部署工做的(如:kafka,storm等等)。若是咱们此时一台一台服务器的去启动相应的机器上安装的集群服务,那至关的耗时。那有没有一种简单的方式来实现一次操做就将整个集群启动呢?答案固然是能够的,咱们可经过编写shell脚原本远程执行集群上每一个节点对于的机器上的服务,从而实现整个集群的一键启动。java
可能用到的命令:linux
关闭防火墙和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
(一)在列出脚本以前先介绍些基础知识:shell
(1)b1=2 定义的变量,只对本身所在的shell进程生效 (2)export b=2 这个命令定义的变量只在当前这个进程和它的子进程中有效 (3)source s1.sh 会将定义在脚本文件中的变量放在当前登陆的shell里面 (4)ssh远程登陆集群,可执行命令操做远程主机
(二)zookeeper集群启动脚本配置全过程:安全
(1)首先配置启动脚本所在机器对其它集群节点的免密登陆(此处的操做,博主在以前的文章已经介绍过,此处就不赘述了)bash
(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.shapp
#/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)ssh
a.终端登陆时,用户会默认执行一遍如下三个文件
/etc/profile
/root/bash_profle 用户主目录下
/root/bashrc 用户主目录下命令行
b.ssh登陆时,不会执行默认的source文件脚本
c.jps 能够查看java进程 QuorumPeerMain为zookeeper进程
最后寄语,以上是博主本次文章的所有内容,若是你们以为博主的文章还不错,请点赞;若是您对博主其它服务器技术或者博主本人感兴趣,请关注博主博客,而且欢迎随时跟博主沟通交流。