在某些 Debian 12 安装中,我在 Celery/Redis 设置中遇到了 DNS 解析方面的一个特殊问题。看来这个问题也可能与 VPS 网络设置有关。我不知所措,非常感谢任何专家的指导。
我们使用 Celery 每 40 秒执行一次任务,使用本地 Redis 作为队列。每个任务将当前时间戳写入中央远程 Redis:
def create_redis_connection_sync():
return redis.Redis(
host=settings.REDIS_URL,
password=settings.REDIS_PASSWORD,
port=settings.REDIS_PORT,
db=settings.REDIS_DB,
decode_responses=True,
)
info = {"timestamp": datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S")}
redis_instance = create_redis_connection_sync()
redis_instance.hset(settings.REDIS_VPN_SUBDOMAIN, mapping=info)
redis_instance.close()
此配置在我们公司的 60 多个 Debian 12 VPS 上无缝运行。但是,最近来自其他提供商的 VPS 行为异常。如果 systemd-resolved.service 停止,任务执行时间会从 1.38 秒大幅增加到 131 秒。
[2023-12-20 08:23:18,879: INFO/ForkPoolWorker-1] Task notify.tasks.push[7e2d2856-a472-4b49-8859-2729b5bc0b0b] succeeded in 1.3803006149973953s: None
[2023-12-20 08:25:58,725: INFO/ForkPoolWorker-1] Task notify.tasks.push[c116f662-e506-4076-9b42-32f4acd8df78] succeeded in 131.22602167900186s: None
所有系统统一使用以下 /etc/resolv.conf:
nameserver 1.1.1.1
nameserver 1.0.0.1
Redis 和 Celery 的配置在所有 VPS 服务器上都是一致的。
我试图理解:
- 为什么这个特定的 VPS 如此依赖 systemd-resolved.service,与其他 VPS 不同?
- 此 VPS 没有 /etc/network/interfaces,并且 /etc/systemd/network/ 为空。我还应该在哪里查找?
- 我想禁用 systemd-resolved.service,因为它与使用相同端口的 AdGuard 冲突。以下是 sudo netstat -ltnp | grep -w '53' 的输出:
tcp 0 0 172.16.96.0:53 0.0.0.0:* LISTEN 496/AdGuardHome
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 12115/systemd-resol
tcp 0 0 127.0.0.54:53 0.0.0.0:* LISTEN 12115/systemd-resol
- 当 /etc/resolv.conf 已经存在时,是否可以将系统配置为不依赖 systemd-resolved.service 进行 DNS 解析?
- 如果其他方法都失败了,那么考虑到 AdGuard 主要绑定到 Wireguard VPN 使用的 172.16.96.0 子网,systemd-resolved.service 和 AdGuard 都在监听端口 53 是否有问题?因为目前 Wireguard 客户端尽管端口是共享的,但仍然可以连接到 Adguard。
任何见解或建议都将不胜感激。谢谢。