zookeeper伪分布式错误解决:无法创建目录"/opt/beh/logs": 权限不够

本文记录了在启动伪分布式ZooKeeper时遇到的错误,并详细解释了解决方案。问题在于ZooKeeper的日志目录未能正确配置,通过修改zkServer.sh脚本来指向正确的日志目录解决了该问题。

伪分布式的zookeeper启动报错如下:

[text@minion19 bin]$ sh zkServer.sh start ../conf/zk1.cfg

JMX enabled by default

Using config: ../conf/zk1.cfg
/home/text/clusters/zookeeper/zk1
mkdir: 无法创建目录"/opt/beh/logs": 权限不够
Starting zookeeper ... zkServer.sh:行108: /opt/beh/logs/zookeeper/zookeeper.out: 没有那个文件或目录

STARTED


查看zkServer.sh脚本发现:


if [ -z "$ZOOPiIDFILE" ]; then
    ZOO_DATADIR="$(grep "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
    if [ ! -d "$ZOO_DATADIR" ]; then
        mkdir -p "$ZOO_DATADIR"
    fi
    ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
else
    # ensure it Iexists, otw stop will fail
    mkdir -p "$(dirname "$ZOOPIDFILE")"
fi
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"

蓝色处获取到了制定配置文件的正确路径但是从灰色出的ZOO_LOG_DIR确是默认的/opt/beh/logs,而并不是配置文件里dataLogDir指定的配置文件路径.

可以这样解决:

if [ -z "$ZOOPiIDFILE" ]; then
    ZOO_DATADIR="$(grep "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
    ZOO_LOG_DIR=$ZOO_DATADIR"/logs"

    if [ ! -d "$ZOO_DATADIR" ]; then
        mkdir -p "$ZOO_DATADIR"
    fi
    ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
else
    # ensure it Iexists, otw stop will fail
    mkdir -p "$(dirname "$ZOOPIDFILE")"
fi
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"

紫色处根据ZOO_DATADIR的路径来相对设置LOG_DIR就行了,我的logs是在每个zookeeper实例data路径下所以这么设置.

比如:dataDir =/opt/zk1

     dataLogDir=/opt/zk1/logs


### 解决ZooKeeper启动错误权限不够 zookeeper_server.pid 在启动ZooKeeper时,如果遇到“权限不够”或“zookeeper_server.pid: Permission denied”的错误,通常是因为文件夹或文件的权限设置不正确。以下是可能的原因和解决方法: #### 1. 检查并修改持久化路径的权限 ZooKeeper在运行过程中会生成一个`zookeeper_server.pid`文件,用于存储进程ID。如果该文件所在的目录权限不足,则会导致启动失败。可以通过以下命令检查并修改权限: ```bash ll /opt/module/zookeeper-3.4.10/zkData/ ``` 如果目录或文件的权限信息不是当前用户所有,则需要更改权限。例如,假设当前用户为`username`,可以使用以下命令赋予用户权限: ```bash sudo chown -R username:username /opt/module/zookeeper-3.4.10/zkData/ [^4] ``` #### 2. 配置`dataDir`路径 确保`zoo.cfg`文件中配置的`dataDir`路径是正确的,并且该路径对当前用户可写。例如: ```properties dataDir=/home/lee/zookeeper/zookeeper-3.4.13/data3 [^3] ``` 如果路径不存在或不可写,请创建该路径并调整权限: ```bash mkdir -p /home/lee/zookeeper/zookeeper-3.4.13/data3 chown -R username:username /home/lee/zookeeper/zookeeper-3.4.13/data3 ``` #### 3. 检查`zoo.cfg`文件是否存在 默认情况下,ZooKeeper解压后提供的配置文件名为`zoo_sample.cfg`。如果未将其重命名为`zoo.cfg`,则可能导致启动失败。请确认`zoo.cfg`文件存在,并包含正确的配置项: ```bash cp conf/zoo_sample.cfg conf/zoo.cfg ``` #### 4. 确保ZooKeeper服务未被其他进程占用 如果`zookeeper_server.pid`文件已被其他进程占用,也可能导致启动失败。可以尝试删除旧的`pid`文件(前提是确保没有正在运行的ZooKeeper进程): ```bash rm -f /opt/module/zookeeper-3.4.10/zkData/zookeeper_server.pid ``` #### 5. 使用绝对路径 在某些情况下,使用相对路径可能会导致权限问题。建议始终使用绝对路径指定`dataDir`和其他相关配置。 #### 6. 检查系统日志 如果以上方法仍无法解决问题,可以查看系统日志以获取更多信息: ```bash tail -f /var/log/syslog ``` 通过上述步骤,应该能够解决ZooKeeper启动时因权限不足导致的问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值