我正在创建自托管 DNS 服务,任何用户都可以在其服务器上运行该服务。目的是通过公开列表对可用网站进行家长控制并阻止广告和钓鱼网站。服务包含:
- DNS 服务器
- DoH 桥接器使 DNS 服务器在 Android 上运行(作为私有 DNS)
- Web 界面用于控制应阻止哪些域名以及加载黑名单。
问题是:为了使我的 DNS 服务更具容错能力,用户应该能够将其安装在多台服务器、vps-es 等上。
我希望每个节点都能自给自足,并且当用户配置其域名(例如,dns.johndoe.me)以使用多个 A 记录(用于多个服务器)时,他不需要任何其他操作,只需打开https://dns.johndoe.me并进入Web界面配置DNS黑名单等。
所以我需要数据库以多主模式同步。
要求:
- 安装过程中尽可能少的配置,比如指定 IP 地址和交换授权令牌(或者甚至通过主机之间的 ssh 隧道传递端口,并指定它们)
- 键值或 SQL - 任何一种都可以,因为要存储的数据结构非常简单(用户帐户、DNS 规则、黑名单)
- 无需快速同步。由于我几乎没有任何实时变化的数据,因此同步延迟可能长达几秒钟,这已经足够了
- 无需交易或锁定
- 可能的冲突应该以一种简单的方式解决:使用较旧的更改,其他冲突,如更改已删除的记录,应该被忽略
对于这个要求,我没有找到好的东西,因为互联网上的所有说明都是关于对功能强大、快速、耐用等的要求。我知道如何在 postgresql 上配置 patroni 集群,但这对我的任务来说太过分了。
最好有某种具有多主同步功能的 Redis,因为它简单且足以完成我的任务(但不幸的是,没有使用 redis 的多主同步功能)
另外,我研究过 mariadb 多主复制,但到目前为止我还不能深入了解这一点,它看起来相当复杂。