RHEL 8.2下Zookeeper systemctl服务无法访问数据目录求助
咱们先从错误日志里抓关键信息:日志清晰提示Cannot write to data directory /var/zookeeper/version-2。你之前只给了/opt/zookeeper设置777权限,但ZooKeeper实际要读写的是配置里的dataDir=/var/zookeeper/路径,而且它会自动创建version-2子目录存储快照和事务日志,所以必须确保user2对这个目录有完整的读写权限。
第一步:修复/var/zookeeper的权限
先检查当前/var/zookeeper的权限归属:
ls -ld /var/zookeeper
如果这个目录是root用户所有,user2没有读写权限,执行下面的命令修改所有权(递归修改子目录和文件):
sudo chown -R user2:user2 /var/zookeeper
如果/var/zookeeper还没创建,先创建再设置权限:
sudo mkdir -p /var/zookeeper sudo chown -R user2:user2 /var/zookeeper
第二步:清理配置文件的重复项
你的ZooKeeper配置里重复定义了dataDir:
dataDir=/opt/zookeeper
...
dataDir=/var/zookeeper/
虽然最后一行会覆盖前面的配置,但为了避免混淆,建议删掉重复的dataDir=/opt/zookeeper行,只保留dataDir=/var/zookeeper/。
第三步:确认systemd服务的配置路径
你的systemd服务文件里,ExecStart指向的是/home/user2/kafka/config/zookeeper.properties,要确认这个配置文件确实是你修改过的版本(也就是包含正确dataDir的那个),避免systemd加载了旧的、错误的配置文件。
第四步:重启服务验证
完成上面的操作后,重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart zookeeper
然后查看服务状态确认是否正常运行:
systemctl status zookeeper
补充说明一下:你用sudo能正常启动,是因为sudo是以root身份执行,root对/var/zookeeper有完全权限;但systemd服务指定了User=user2,所以必须确保user2拥有该目录的读写权限,服务才能正常启动。
内容的提问来源于stack exchange,提问作者small_lebowski

