zookeeper自动化部署

线上环境中并不能一台一台机器的部署,因此简单的写了一版zookeeper的自动化部署脚本,在实验室的各个项目中都运行良好,为实验室带来了诸多方便。

功能简介

1. 初始化ip数组,

2. 第一台ip服务器上运行main.sh

3. 运行过程输入ssh连接其它ip的密码

4. 即可以完成整个zookeeper部署

文件说明

1) Main.sh为主执行文件

2) Need.shgz为复制到第一台服务器上的附属文件

具体步骤

(一)main.sh  34 ip_array数组是所有需要搭建zookeeperip,请填入初始化,第一个ip是你将执行第二步,请先确定,然后初始化

(二)复制文件Need.sh和压缩包gz到第一个ip服务器上的root目录下

(三)在任意目录,执行main.sh 文件

备注

为了防止端口冲突,

修改了zk服务器进程的端口(见main.sh  第50行,)因此当调用API,连接zookeeper的时候,注意修改端口,如:./zkCli.sh -server 10.0.6.201:56557

修改了followleader通信的端口,选取leader的端口(见main.sh  第57行

这个对API无影响

l Netstat -anlp | grep java

l //根据对应的端口找到对应的进程号

l Kill -9 进程号

l Killall  java

l Jps

l //找到zookeeper对应的服务的进程号(16807 QuorumPeerMain),然后kill,免得有进程的端口冲突。

附录

main.sh

#!/bin/bash

#判断jdk是否安装,默认安装,1.6以上版本
java -version

#在本机上建立必要的文件夹,如果存在相同的文件夹,将删除
zk_root=/home/duizhun/zookeeper
if [ -d $zk_root ];then 
  echo "$zk_root is exist!";rm -r $zk_root
 fi

 mkdir -p $zk_root
 chmod -R 755 $zk_root

zk_data_path=/tmp/zookeeper
if [ -d $zk_data_path ];then 
  echo "$zk_data_path is exist!";rm -r $zk_data_path
 fi

mkdir -p $zk_data_path
chmod -R 755 $zk_data_path
echo 1 > $zk_data_path/myid

zk_log_path=/tmp/zookeeper/log
if [ -d $zk_log_path ];then 
  echo "$zk_log_path is exist!";rm -r $zk_log_path
 fi
 
mkdir -p $zk_log_path
chmod -R 755 $zk_log_path


#变量定义,第一个为本机ip,后面为集群其它ip
ip_array=("10.0.6.80"  "10.0.6.81" "10.0.6.83")
ip_num=${#ip_array[@]}
# zookeeper-3.3.6.tar.gz  need.sh上传到root目录下
zk_new_root=$zk_root/zookeeper-3.3.6
echo $zk_new_root
conf_file=$zk_new_root/conf/zoo.cfg
echo $conf_file
cd /home/duizhun/

#解压zookeeper-3.3.6包,如果有,覆盖
tar -xvf /home/duizhun/zookeeper-3.3.6.tar.gz -C $zk_root
 
#写配置文件信息
echo "tickTime=2000" > $conf_file
echo "dataDir=$zk_data_path" >> $conf_file
echo "dataLogDir=$zk_log_path" >> $conf_file
echo "clientPort=56557" >> $conf_file
echo "initLimit=5" >> $conf_file
echo "syncLimit=2" >> $conf_file

for((index=0;index<$ip_num;index++))
{  
    tmp=$[$index+1]
 echo "server.$tmp=${ip_array[index]}:37423:54423" >> "$conf_file"

}

#创建ssh无密码登陆的文件
user="root"  
id_res_pub=~/.ssh/id_rsa.pub 
    if [ ! -f "$id_res_pub" ];then 
        ssh-keygen -t rsa 
 else 
     echo "id_rsa.pub is exist!" 
 fi


#本地通过ssh远程命令,在远程服务器上执行脚本,以及命令(need.sh 先上传到其它服务器)
remote_cmd_run_need="chmod a+x /home/duizhun/need.sh;cd /home/duizhun/;./need.sh;service iptables stop"
for((index=1;index<$ip_num;index++))
{
 cat ~/.ssh/id_rsa.pub | ssh $user@${ip_array[index]} 'cat >> .ssh/authorized_keys'
 #rsync -avz --progress /root/need.sh $user@${ip_array[index]}:/root
 #-progress 查看复制进程  -avzu 增量备份
 echo "copy zookeeper file for remote zookeeper ,please wait"
 scp -r /home/duizhun/need.sh $user@${ip_array[index]}:/home/duizhun/
 #-r 覆盖
 tmp=$[$index+1]
 remote_cmd_add_myid="echo $tmp > $zk_data_path/myid"
 #远程执行多条命令时,一定要加“” 不然不会执行 例如 "$remote_cmd_run_need"
 ssh $user@${ip_array[index]} "$remote_cmd_run_need"
 ssh $user@${ip_array[index]} $remote_cmd_add_myid
 echo "copy shell for remote running ,please wait"
 scp -r $zk_new_root $user@${ip_array[index]}:$zk_root
}


#启动zookeeper
remote_cmd_run_zk="cd $zk_new_root/bin;./zkServer.sh;./zkServer.sh start"
remote_cmd_status="cd $zk_new_root/bin;./zkServer.sh restart;./zkServer.sh status"

for((index=0;index<$ip_num;index++))
{
 echo "*********************************************************"
 echo "${ip_array[index]} test to run zookeeper";
 if [ $index -eq 0 ];then
  cd $zk_new_root/bin;./zkServer.sh;./zkServer.sh start
  #$remote_cmd_run_zk  #error,不会执行
 else
  ssh $user@${ip_array[index]} "$remote_cmd_run_zk"
   echo "*********************************************************"
 fi
}


#测试zookeeper安装是否成功,成功则返回状态(leader或者follower),不成功则报错
for((index=0;index<$ip_num;index++))
{
 echo "*******************************************************"
 echo "${ip_array[index]} test zookeeper status";
 if [ $index -eq 0 ];then
  cd $zk_new_root/bin;./zkServer.sh restart;./zkServer.sh status
 else
  ssh $user@${ip_array[index]} "$remote_cmd_status"
 fi
    echo "******************************************************"
}

 

need.sh

#!/bin/bash
#java -version
zk_root=/home/duizhun/zookeeper
# no space
if [ -d $zk_root ];then 
  echo "$zk_root is exist!";rm -r $zk_root
 fi

 mkdir -p $zk_root
 chmod -R 755 $zk_root

zk_data_path=/tmp/zookeeper
if [ -d $zk_data_path ];then 
  echo "$zk_data_path is exist!";rm -r $zk_data_path
 fi

mkdir -p $zk_data_path
chmod -R 755 $zk_data_path

zk_log_path=/tmp/zookeeper/log
if [ -d $zk_log_path ];then 
  echo "$zk_log_path is exist!";rm -r $zk_log_path
 fi
 
mkdir -p $zk_log_path
chmod -R 755 $zk_log_path

 

 


 

 

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值