赞
踩
yum -y install wget
zookeeper单机版使用shell脚本自动安装教程:zookeeper安装教程:使用shell脚本在centos上进行zookeeper自动化下载安装配置(单机版)
(1) 把此shell脚本复制保存为zk_cluster.sh文件,上传到/tmp目录下
注意:把node1、node2、node3修改为自己集群节点的主机名或ip地址
使用此shell脚本需要三个节点已经设置SSH免密登录
#!/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
(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
(3) 给zk_cluster.sh和zk_cluster_scp.sh增加执行权限
chmod a+x /tmp/zk_cluster.sh
chmod a+x /tmp/zk_cluster_scp.sh
(4) 执行zk_cluster_scp.sh
执行zk_cluster_scp.sh会分发zk_cluster.sh到每个节点的/tmp目录下,并增加执行权限,自动执行zk_cluster.sh下载安装配置Zookeeper
/tmp/zk_cluster_scp.sh
如果出现如下情况,说明zk_cluster.sh已经分发到每个节点的/tmp目录下,并增加了执行权限,只是执行失败,需要手动执行。
如果出现这个情况,就分别切换到每个节点,然后执行zk_cluster.sh
/tmp/zk_cluster.sh
成功如下图所示:
分别切换到每个节点,加载用户环境变量
source ~/.bashrc
(5) 启动、停止Zookeeper
编写一个shell脚本,用于启动、停止和重启Zookeeper集群,查看Zookeeper集群状态
注意:把node1、node2、node3修改为自己集群节点的主机名或ip地址
把此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
给zookeeper.sh增加执行权限
chmod a+x ~/bin/zookeeper.sh
启动Zookeeper集群
zookeeper.sh start
成功如下图所示:
查看Zookeeper集群状态
zookeeper.sh status
如下图所示,一个leader,两个follower
停止Zookeeper集群
zookeeper.sh stop
如下图所示:
(6) 进入zookeeper集群客户端
hadoop102修改为自己要进入的主机名或ip地址,从那个节点进入都一样可以操作zookeeper
zkCli.sh -server hadoop102:2181
如下图所示:
列出指定路径下的子节点。
ls /
获取指定节点的详细信息,包括版本号、创建时间等。
stat /zookeeper
创建一个新的路径节点,并设置数据内容和访问控制列表(ACL)。可以选择顺序创建(-s)和临时节点(-e)。
create /mynode "Hello Zookeeper!"
或
create /mynode "Hello Zookeeper!" world:anyone:cdrwa
设置指定节点的数据,会覆盖原有的数据。
set /mynode "Hello Zookeeper! new"
获取指定节点的数据。
get /mynode
删除指定节点。
delete /mynode
获取指定节点的访问控制列表(ACL)信息。
getAcl /mynode
设置指定节点的访问控制列表(ACL)信息。
setAcl /mynode world:anyone:r
"world" 表示权限的范围或域。
"anyone" 表示被授权的主体。在这里指所有用户都具有这些权限。
"cdrwa" 是一种权限控制表示方式,它代表了不同的权限。
c:表示具有读取(get)节点数据的权限。
d:表示具有删除(delete)节点的权限。
r:表示具有获取子节点(ls)的权限。
w:表示具有写入(set)节点数据的权限。
a:表示具有创建(create)子节点的权限。
设置指定路径节点的配额限制。可以设置节点数量限制(-n)或节点字节大小限制(-b)。
删除指定路径节点的配额限制。可以选择删除节点数量限制(-n)或节点字节大小限制(-b)。
更详细地列出指定路径节点的子节点,包括每个子节点的详细信息。
递归删除指定路径节点及其所有子节点。
显示最近执行的命令历史记录。
重新执行指定序号的历史命令。
打开或关闭监视模式,用于显示与会话相关的观察器。
等待指定路径节点的同步完成。
显示指定路径节点的配额限制信息。
使用指定的身份验证方案和凭据进行身份验证。
连接到指定的ZooKeeper服务器。
关闭与ZooKeeper服务器的连接。
退出ZooKeeper CLI。
获取帮助信息,列出可用的命令。
本期到此结束,下一期出如何使用JavaAPI来操作zookeeper。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。