我是 Scylla DB 的新手,我只是使用文档中给出的命令创建节点。
发生的情况是,当我创建两个节点时,无论它们被称为什么,它们都会连接到 Scylla DB 服务器,但是当涉及到第三个节点时,我会遇到此错误。
例如
使用
成功创建Node_X后
docker run --name Node_X -d scylladb/scylla:5.2.0 --overprovisioned 1 --smp 1
我使用检查了 Node_X 的节点工具状态
docker exec -it Node_X nodetool status
并且得到了
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 172.17.0.3 1.03 MB 256 ? 57765ee9-bb4b-4287-a7c1-b47878e22926 rack1
UN 172.17.0.2 256 KB 256 ? bce9e5b7-e5ab-47aa-88d3-3413fd6e4980 rack1
Node_Y 也是如此,它是使用命令
docker run --name Node_Y -d scylladb/scylla:5.2.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' Node_X)" --overprovisioned 1 --smp 1
创建的,运行得非常好。成功给出其节点工具状态。
但是当涉及到 Node_Z(第三个节点)时,它会给出错误。 为了创建我使用了这个命令
docker run --name Node_Z -d scylladb/scylla:5.2.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' Node_X)" --overprovisioned 1 --smp 1
对于状态检查使用此命令
docker exec -it Node_Z nodetool status
并有幸遇到错误:
nodetool: Unable to connect to Scylla API server: java.net.ConnectException: Connection refused (Connection refused)
See 'nodetool help' or 'nodetool help <command>'.
像往常一样,我记录了未连接的 Node_Z 并发现了
FATAL: Exception during startup, aborting: std::runtime_error (Could not setup Async I/O: Resource temporarily unavailable. The most common cause is not enough request capacity in /proc/sys/fs/aio-max-nr. Try increasing that number or reducing the amount of logical CPUs available for your application)
很公平,我查阅了他们的文档,发现我们可以使用
echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
增加 aio-max-nr 的值,但在此之前我们需要找到这个文件,从这里开始,真正的问题开始了我使用这个命令来定位文件,但是幸运地又犯了一个错误
cat /proc/sys/fs/aio-max-nr
cat: /proc/sys/fs/aio-max-nr: No such file or directory
为了保存更改,我们使用它,它给出:
sysctl -p /etc/sysctl.conf
sysctl: illegal option -- p
usage: sysctl [-bdehiNnoqx] name[=value] ...
sysctl [-bdehNnoqx] -a
使用了其他技术,例如
sudo sysctl -w fs.aio-max-nr=1048576
sysctl: unknown oid 'fs.aio-max-nr'
然后另一种技术
sudo nano /etc/sysctl.conf
fs.aio-max-nr = 1048576
之后使用了另一种技术:
docker exec -it Node_Z bash
然后进入bash后,使用以下命令更改aio-max-nr:
sudo sysctl fs.aio-max-nr=1048576
sysctl: setting key "fs.aio-max-nr", ignoring: Read-only file system
它将更改该号码,您可以使用以下方式检查:
cat /proc/sys/fs/aio-max-nr
但就我而言,值没有改变,它仍然存在:
65536
然后我发现有只读限制,所以我尝试使用以下方法将文件方法更改为读取和写入:
sudo mount -o remount,rw /
mount: /: permission denied.
这是我所得到的,花了几天时间后不知道如何处理。有人说 MAC OS 使用不同的值作为
kern.aiomax
而不是 fs.aio-max-nr
但 kern.aiomax
无法采用与 fs.aio-max-nr=1048576
一样大的值,这是解决此错误所必需的。
专家帮助我。
设备:
MacBook Pro
Intel Chip
MAC OS VENTURA Version 13.6.4
只需将 ScyllaDb 降级到 4.5.0。
不要使用 5.2.0 创建 所有节点(在您的情况下为 Node_X、Node_Y、Node_Z),而是使用 4.5.0
docker run --name Node_Z -d scylladb/scylla:4.5.0 --seeds="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' Node_X)" --overprovisioned 1 --smp 1