zookeeper使用之-简单命令

ZooKeeper 基础操作指南
已经安装好了zookeeper我们开始使用zk的命令
假设我们已经启动了zk

//我使用启动一个客户端
./zkCli.sh -server 139.129.201.48:2181 start
//退出客户端的连接
quit

zk上的简单操作
ls /   //列出root下所有的znode节点
create /workers "" //创建一个workers节点
delete /workers //删除一个workers节点

create -e /master "hotel.jd.com:2233" //创建一个临时的master节点
get /master //获得临时节点的信息
stat /master true

临时节点master的信息
[img]http://dl2.iteye.com/upload/attachment/0122/5097/8056fb68-8625-3e2e-84c9-bd66facf3936.jpg[/img]

znode可能由主进程子啊分配任务前创建,也可能由一个引导程序开始创建,不管这些是如何创建的,一旦这些节点存在了,主节点就需要见识这些子节点的变化
ls /master true //在主节点上调用stat命令前,通过参数true调用ls命令


创建一个从节点
create /worker ""
create /worker/worker.jd.com "worker1.jd.com:2244"

从节点现在已经准备就绪接收任务的分配

客户端角色
//客户端向系统中添加任务,假设就是请求从系统来运行cmd命令
create -s /tasks/task- "cmd"
ls /tasks/task-0000000000 true //执行完成后会创建一个从节点来确定执行完成任务因此客户需要监视状态znode的创建事件
create /assign ""
[zk: 139.129.201.48:2181(CONNECTED) 23] create /assign/worker1.jd.com ""
[zk: 139.129.201.48:2181(CONNECTED) 24] create /assign/worker1.jd.com/task-0000000000 ""
//从节点便开始检查新任务,并确认是否分配给自己
[zk: 139.129.201.48:2181(CONNECTED) 25] ls /assign/worker1.jd.com
//一旦从节点完成任务的执行,就会在tasks中添加一个状态znode,客户端接收到通知并检查执行
[zk: 139.129.201.48:2181(CONNECTED) 26] create /tasks/task-0000000000/status "done"
[zk: 139.129.201.48:2181(CONNECTED) 28] get /tasks/task-0000000000/status

客户端检查状态znode的信息,并确认任务的执行结果
[zk: 139.129.201.48:2181(CONNECTED) 29] get /tasks/task-0000000000
"cmd"
cZxid = 0x11
ctime = Tue Jan 10 14:55:46 CST 2017
mZxid = 0x11
mtime = Tue Jan 10 14:55:46 CST 2017
pZxid = 0x16
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1
[zk: 139.129.201.48:2181(CONNECTED) 30] get /tasks/task-0000000000/status
"done"
cZxid = 0x16
ctime = Tue Jan 10 15:29:59 CST 2017
mZxid = 0x16
mtime = Tue Jan 10 15:29:59 CST 2017
pZxid = 0x16
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0
<think>好的,我现在要解决用户的问题:他在执行zkServer.sh start时遇到了“command not found”的错误。首先,我需要分析可能的原因。用户给出的目录列表显示确实有zkServer.sh文件存在,所以文件存在性问题可能不是主要原因。 接下来,常见的原因可能有三个:权限问题、执行路径问题或者脚本依赖的环境变量问题。权限方面,用户可能没有执行权限,所以需要检查文件的权限设置。执行路径的问题可能是指用户虽然进入了bin目录,但可能没有使用正确的路径来执行脚本,比如需要使用./zkServer.sh来指定当前目录下的文件。环境变量方面,可能缺少必要的配置,比如JAVA_HOME没有设置,或者脚本依赖的其他变量没有正确配置。 另外,用户使用的是相对路径还是绝对路径?如果当前已经在bin目录下,直接输入zkServer.sh可能会被系统认为是命令,但系统可能没有将当前目录加入PATH环境变量中,所以需要加上./来执行。这时候需要提醒用户正确的执行方式。 然后,我需要考虑用户的操作系统环境。用户提示符显示的是bigdata@master,可能是在Linux环境下,特别是可能使用bash或类似的shell。这时候,执行权限的问题比较常见,所以需要建议用户使用chmod +x来添加执行权限。 另外,检查脚本本身是否有问题,比如文件格式是否是Unix格式(LF)而不是Windows格式(CRLF),这可能导致解释器无法正确识别。可以使用dos2unix工具转换格式。 还有,用户是否已经安装了Java环境?ZooKeeper依赖Java,如果JAVA_HOME没有正确设置,脚本可能无法找到Java路径,从而报错。需要让用户检查Java的安装和配置情况。 总结可能的解决步骤:首先确认执行方式是否正确,即使用./zkServer.sh start;其次检查文件权限,赋予执行权限;然后检查脚本的格式是否正确;最后验证Java环境是否配置正确。此外,还可以建议用户检查脚本的依赖项,比如是否所有的依赖库都存在,或者是否有错误日志可以查看。 用户可能对Linux命令不太熟悉,所以需要用简单明了的步骤引导他们逐一排查问题,并解释每个步骤的作用,帮助他们理解问题的根源,避免未来再次出现类似错误。同时,可能需要提醒用户关于环境变量配置和脚本执行的基本知识,以增强他们的操作能力。</think>--- ### **问题分析** 用户在 `apache-zookeeper-3.7.1-bin/bin` 目录下执行 `zkServer.sh start` 时提示 `command not found`,常见原因如下: | 原因分类 | 具体表现 | 优先级 | |------------------|--------------------------------------------------------------------------|--------| | **权限问题** | 脚本文件未赋予可执行权限 | 高 | | **路径问题** | 未正确指定脚本路径(需用 `./` 表示当前目录) | 高 | | **环境依赖** | 缺少 Java 环境(依赖 `JAVA_HOME`)或脚本格式错误(如 Windows 换行符残留) | 中 | --- ### **分步解决方案** --- #### **1. 检查脚本权限** ```bash # 查看文件权限(需包含 x 标记) ls -l zkServer.sh # 若无执行权限,添加权限 chmod +x zkServer.sh ``` **示例输出**: ``` -rwxr-xr-x 1 bigdata bigdata 1234 Jun 1 10:00 zkServer.sh ``` --- #### **2. 正确执行脚本** ```bash # 必须显式指定当前目录(避免 PATH 环境变量未包含当前路径) ./zkServer.sh start ``` **语法解析**: - `./`:表示当前目录 - `zkServer.sh`:目标脚本文件 - `start`:启动服务的参数 --- #### **3. 验证 Java 环境** ```bash # 检查 Java 是否安装 java -version # 确认 JAVA_HOME 已配置(ZooKeeper 依赖 Java) echo $JAVA_HOME ``` **预期输出**: ``` openjdk version "11.0.15" 2022-04-19 JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 ``` --- #### **4. 修复脚本格式问题(CRLF → LF)** ```bash # 安装转换工具(若未安装) sudo apt-get install dos2unix # 转换脚本格式 dos2unix zkServer.sh ``` --- ### **故障排查表** | 错误现象 | 检查点 | 修复命令 | |------------------------------|---------------------------------|------------------------------------------| | `Permission denied` | 文件权限不足 | `chmod +x zkServer.sh` | | `No such file or directory` | 文件路径错误或格式问题 | `dos2unix zkServer.sh` | | `JAVA_HOME not set` | Java 环境未配置 | `export JAVA_HOME=/path/to/java` | | `Address already in use` | 端口冲突(默认 2181) | 修改 `conf/zoo.cfg` 中的 `clientPort` | --- ### **操作验证** ```bash # 查看服务进程 ps -ef | grep zookeeper # 检查服务日志(默认路径) tail -f ../logs/zookeeper.log ``` --- ### **扩展说明** #### **ZooKeeper 脚本核心功能** | 脚本名称 | 功能说明 | |------------------------|-----------------------------------| | `zkServer.sh` | 服务启停控制(启动/停止/状态查询)| | `zkCli.sh` | 客户端命令行工具 | | `zkEnv.sh` | 环境变量配置文件 | | `zkCleanup.sh` | 清理历史事务日志工具 | --- ### **生产环境建议** 1. **标准化部署路径** 建议将 ZooKeeper 安装到统一路径(如 `/opt/zookeeper`),避免用户主目录权限问题: ```bash sudo mv ~/software/zookeeper /opt/ ``` 2. **配置系统服务** 创建 systemd 服务文件以实现开机自启: ```bash sudo nano /etc/systemd/system/zookeeper.service ``` **配置内容**: ```ini [Unit] Description=ZooKeeper Service After=network.target [Service] User=bigdata ExecStart=/opt/zookeeper/bin/zkServer.sh start-foreground Restart=on-failure [Install] WantedBy=multi-user.target ``` --- 通过以上步骤,可系统性解决脚本执行问题。若仍存在异常,建议检查防火墙设置或查看完整日志输出。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值