当前位置:   article > 正文

zookeeper安装与配置:使用shell脚本在centos上进行zookeeper自动化下载安装配置(集群搭建版)_zk-cluster.sh

zk-cluster.sh

一、zookeeper集群自动化下载安装配置教程

1. 安装wget

yum -y install wget
  • 1

zookeeper单机版使用shell脚本自动安装教程:zookeeper安装教程:使用shell脚本在centos上进行zookeeper自动化下载安装配置(单机版)

2. 使用shell自动安装配置Zookeeper集群

(1) 把此shell脚本复制保存为zk_cluster.sh文件,上传到/tmp目录下

注意:把node1、node2、node3修改为自己集群节点的主机名或ip地址
使用此shell脚本需要三个节点已经设置SSH免密登录
  • 1
  • 2
#!/bin/bash

# 使用前提:1. wget已经安装 2. 3个centos的SSH免密登录已经配置好
# 使用shell脚本在centos上进行zookeeper自动化安装(集群搭建版)
# 设置3个节点的主机名或ip,修改为自己的
node1=192.168.198.101
node2=192.168.198.102
node3=192.168.198.103
# 安装版本
zk_version="3.4.14"
# 安装目录
zk_installDir="/opt/module"

install_zookeeper() {
  local version=$1
  local installDir=$2
  local id=$3
  # 下载地址
  local downloadUrl="https://archive.apache.org/dist/zookeeper/zookeeper-$version/zookeeper-$version.tar.gz"
  # 检查安装目录是否存在,不存在则创建
  if [ ! -d "${installDir}" ]; then
    echo "创建安装目录..."
    sudo mkdir -p "${installDir}"
  fi

  if test -f /tmp/zookeeper-"$version".tar.gz; then
    echo "/tmp/zookeeper-$version.tar.gz文件已存在"
  else
    # 下载并解压 ZooKeeper
    echo "开始下载ZooKeeper..."
    wget "$downloadUrl" -P /tmp
  fi
  echo "开始解压ZooKeeper..."
  tar -zxvf "/tmp/zookeeper-$version.tar.gz" -C "${installDir}"

  # 更改安装目录权限为当前用户
  # sudo chown -R "$(whoami)" "${installDir}"

  if [ -n "$(grep '#ZOOKEEPER_HOME' ~/.bashrc)" ]; then
    echo "ZOOKEEPER_HOME已存在"
  else
    # 设置zookeeper用户环境变量
    echo >> ~/.bashrc
    echo '#ZOOKEEPER_HOME' >> ~/.bashrc
    echo "export ZOOKEEPER_HOME=${installDir}/zookeeper-${version}" >> ~/.bashrc
    echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> ~/.bashrc
  fi

  # 配置 ZooKeeper
  echo "配置 ZooKeeper..."
  cp "${installDir}/zookeeper-${version}/conf/zoo_sample.cfg" "${installDir}/zookeeper-${version}/conf/zoo.cfg"
  # 修改快照所在目录
  # sed: 是一个流式文本编辑器。-i: 表示直接在原始文件上进行修改。s: 表示替换操作。
  # |^dataDir=.*|: 是一个正则表达式模式,用于匹配以dataDir=开头的行。其中,^表示行的开头,.*表示任意字符的重复。
  sed -i "s|^dataDir=.*|dataDir=${installDir}/zookeeper-${version}/zk_snapshot|" "${installDir}/zookeeper-${version}/conf/zoo.cfg"
  echo "修改快照所在目录为:${installDir}/zookeeper-${version}/zk_snapshot"
  # 添加集群配置
  echo "server.1=$node1:2888:3888" >> "${installDir}/zookeeper-${version}/conf/zoo.cfg"
  echo "server.2=$node2:2888:3888" >> "${installDir}/zookeeper-${version}/conf/zoo.cfg"
  echo "server.3=$node3:2888:3888" >> "${installDir}/zookeeper-${version}/conf/zoo.cfg"
  # 启动zookeeper,用于生成快照目录,保存myid
  "${installDir}"/zookeeper-"${version}"/bin/zkServer.sh start
  if [ $? -eq 0 ]; then
    echo "$id" > "${installDir}/zookeeper-${version}/zk_snapshot/myid"
    "${installDir}"/zookeeper-"${version}"/bin/zkServer.sh stop
  else
    echo "zookeeper启动失败,保存myid失败"
  fi
  rm -rf /tmp/zookeeper-"$version".tar.gz
  echo "zookeeper安装包删除完成"
  echo "ZooKeeper 安装完成!"
}

# -o选项表示只输出匹配到的部分,而不是整行内容。
# -P选项表示使用Perl兼容的正则表达式语法。
ip_addr=$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')
hostname=$(hostname)
if [[ "$node1" == "$ip_addr" || "$node1" == "$hostname" ]]; then
  install_zookeeper "$zk_version" "$zk_installDir" 1
elif [[ "$node2" == "$ip_addr" || "$node2" == "$hostname" ]]; then
  install_zookeeper "$zk_version" "$zk_installDir" 2
elif [[ "$node3" == "$ip_addr" || "$node3" == "$hostname" ]]; then
  install_zookeeper "$zk_version" "$zk_installDir" 3
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84

(2) 把此shell脚本复制保存为zk_cluster_scp.sh文件,上传到/tmp目录下

#!/bin/bash

# 三个节点的ip或主机名
node1=192.168.198.101
node2=192.168.198.102
node3=192.168.198.103

# 文件路径
filepath=/tmp
# 文件名
filename="zk_cluster.sh"
# 定义要分发目标节点列表
target_nodes=("$node1" "$node2" "$node3")

# 循环遍历目标节点列表
for node in "${target_nodes[@]}"; do
  # 将文件分发到目标节点
  scp "$filepath/$filename" "$node:$filepath/"
  # 设置文件的可执行权限
  ssh "$node" "chmod +x $filepath/$filename"
  # 在目标节点上执行文件
  ssh "$node" "$filepath/$filename"
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

(3) 给zk_cluster.sh和zk_cluster_scp.sh增加执行权限

chmod a+x /tmp/zk_cluster.sh
chmod a+x /tmp/zk_cluster_scp.sh
  • 1
  • 2

(4) 执行zk_cluster_scp.sh
执行zk_cluster_scp.sh会分发zk_cluster.sh到每个节点的/tmp目录下,并增加执行权限,自动执行zk_cluster.sh下载安装配置Zookeeper

/tmp/zk_cluster_scp.sh
  • 1

如果出现如下情况,说明zk_cluster.sh已经分发到每个节点的/tmp目录下,并增加了执行权限,只是执行失败,需要手动执行。

在这里插入图片描述
如果出现这个情况,就分别切换到每个节点,然后执行zk_cluster.sh

/tmp/zk_cluster.sh
  • 1

成功如下图所示:
在这里插入图片描述
分别切换到每个节点,加载用户环境变量

source ~/.bashrc
  • 1

(5) 启动、停止Zookeeper
编写一个shell脚本,用于启动、停止和重启Zookeeper集群,查看Zookeeper集群状态

注意:把node1、node2、node3修改为自己集群节点的主机名或ip地址
  • 1

把此shell脚本复制保存为zk_cluster_scp.sh文件,上传到~/bin目录下, ~/bin目录下的文件相当于设置了环境变量,可以在任何目录下执行。

#!/bin/bash

# 设置Zookeeper安装目录
ZOOKEEPER_HOME="/opt/module/zookeeper-3.4.14"
# 集群节点
node1=192.168.198.101
node2=192.168.198.102
node3=192.168.198.103

# 启动Zookeeper
start_zookeeper() {
  ssh $node1 "$ZOOKEEPER_HOME"/bin/zkServer.sh start
  ssh $node2 "$ZOOKEEPER_HOME"/bin/zkServer.sh start
  ssh $node3 "$ZOOKEEPER_HOME"/bin/zkServer.sh start
}

# 停止Zookeeper
stop_zookeeper() {
  ssh $node1 "$ZOOKEEPER_HOME"/bin/zkServer.sh stop
  ssh $node2 "$ZOOKEEPER_HOME"/bin/zkServer.sh stop
  ssh $node3 "$ZOOKEEPER_HOME"/bin/zkServer.sh stop
}

# 重启Zookeeper
restart_zookeeper() {
  ssh $node1 "$ZOOKEEPER_HOME"/bin/zkServer.sh restart
  ssh $node2 "$ZOOKEEPER_HOME"/bin/zkServer.sh restart
  ssh $node3 "$ZOOKEEPER_HOME"/bin/zkServer.sh restart
}

# 检查Zookeeper状态
check_zookeeper_status() {
  ssh $node1 "$ZOOKEEPER_HOME"/bin/zkServer.sh status
  ssh $node2 "$ZOOKEEPER_HOME"/bin/zkServer.sh status
  ssh $node3 "$ZOOKEEPER_HOME"/bin/zkServer.sh status
}

# 根据命令行参数执行相应操作
case "$1" in
start)
  start_zookeeper
  ;;
stop)
  stop_zookeeper
  ;;
restart)
  restart_zookeeper
  ;;
status)
  check_zookeeper_status
  ;;
*)
  echo "Usage: $0 {start|stop|restart|status}"
  exit 1
  ;;
esac

exit 0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59

给zookeeper.sh增加执行权限

chmod a+x ~/bin/zookeeper.sh
  • 1

启动Zookeeper集群

zookeeper.sh start
  • 1

成功如下图所示:
在这里插入图片描述
查看Zookeeper集群状态

zookeeper.sh status
  • 1

如下图所示,一个leader,两个follower
在这里插入图片描述
停止Zookeeper集群

zookeeper.sh stop
  • 1

如下图所示:
在这里插入图片描述
(6) 进入zookeeper集群客户端
hadoop102修改为自己要进入的主机名或ip地址,从那个节点进入都一样可以操作zookeeper

 zkCli.sh -server hadoop102:2181
  • 1

如下图所示:
在这里插入图片描述

二、zookeeper客户端命令

1. ls path

列出指定路径下的子节点。

ls /
  • 1

在这里插入图片描述

2. stat path

获取指定节点的详细信息,包括版本号、创建时间等。

stat /zookeeper
  • 1

在这里插入图片描述

3. create [-s] [-e] path data acl

创建一个新的路径节点,并设置数据内容和访问控制列表(ACL)。可以选择顺序创建(-s)和临时节点(-e)。

create /mynode "Hello Zookeeper!"
  • 1

create /mynode "Hello Zookeeper!" world:anyone:cdrwa
  • 1

在这里插入图片描述

4. set path data

设置指定节点的数据,会覆盖原有的数据。

set /mynode "Hello Zookeeper! new"
  • 1

在这里插入图片描述

5. get path

获取指定节点的数据。

get /mynode
  • 1

在这里插入图片描述

6. delete path

删除指定节点。

delete /mynode
  • 1

在这里插入图片描述

7. getAcl path

获取指定节点的访问控制列表(ACL)信息。

getAcl /mynode
  • 1

在这里插入图片描述

8. setAcl path acl

设置指定节点的访问控制列表(ACL)信息。

setAcl /mynode world:anyone:r
  • 1

在这里插入图片描述

ACL说明

"world" 表示权限的范围或域。
"anyone" 表示被授权的主体。在这里指所有用户都具有这些权限。
"cdrwa" 是一种权限控制表示方式,它代表了不同的权限。
c:表示具有读取(get)节点数据的权限。
d:表示具有删除(delete)节点的权限。
r:表示具有获取子节点(ls)的权限。
w:表示具有写入(set)节点数据的权限。
a:表示具有创建(create)子节点的权限。

9. 其他命令

(1) setquota -n|-b val path

设置指定路径节点的配额限制。可以设置节点数量限制(-n)或节点字节大小限制(-b)。

(2) delquota [-n|-b] path

删除指定路径节点的配额限制。可以选择删除节点数量限制(-n)或节点字节大小限制(-b)。

(3) ls2 path [watch]

更详细地列出指定路径节点的子节点,包括每个子节点的详细信息。

(4) rmr path

递归删除指定路径节点及其所有子节点。

(5) history

显示最近执行的命令历史记录。

(6) redo cmdno

重新执行指定序号的历史命令。

(7) printwatches on|off

打开或关闭监视模式,用于显示与会话相关的观察器。

(8)sync path

等待指定路径节点的同步完成。

(9) listquota path

显示指定路径节点的配额限制信息。

(10) addauth scheme auth

使用指定的身份验证方案和凭据进行身份验证。

(11) connect host:port

连接到指定的ZooKeeper服务器。

(12) close

关闭与ZooKeeper服务器的连接。

(13) quit

退出ZooKeeper CLI。

(14) help

获取帮助信息,列出可用的命令。

本期到此结束,下一期出如何使用JavaAPI来操作zookeeper。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/896856
推荐阅读
相关标签
  

闽ICP备14008679号