服务的多个实例
Alpine 使安装和运行服务变得非常容易,但是如果您需要在同一台机器上运行同一服务的多个实例,该怎么办? 例如,如果您想运行 split-DNS,以便为内部和外部网络不同地响应 DNS 请求,该怎么办。 简单的回答是运行两个 tinyDNS 实例,监听两个不同的以太网接口。 现在,您如何做到这一点? 一旦运行了两个实例,您如何管理它们?
以下示例专门针对 TinyDNS,但也适用于其他服务。 TinyDNS 可以工作,因为 init.d 脚本的编写方式允许使用多个实例。 该过程是为 alpine 1.9 编写的,但也应适用于其他版本。
安装服务
首先,我们将安装 TinyDNS 和 ACF
# apk add acf-tinydns
这将安装 TinyDNS 服务,以及用于管理服务的 ACF Web 界面。 如果只有一个 TinyDNS 实例,您可以从控制台使用 /etc/init.d/tinydns、/etc/conf.d/tinydns 和 /etc/tinydns/ 或使用 ACF 的 网络 > DNS 页面进行管理。
创建服务的第二个实例
现在,我们为要运行的每个新实例创建一个指向 TinyDNS init.d 脚本的符号链接。(对于 alpine 1.8,您不应使用普通的 tinydns init.d 脚本,以便 ACF 可以正确确定哪个实例正在运行,而是创建两个新实例)我们将创建一个将处理内部网络的第二个实例。
# ln -s tinydns /etc/init.d/tinydns.internal
为每个新脚本创建 conf.d 和域文件。 您可以复制 tinydns 文件以开始。
# cp /etc/conf.d/tinydns /etc/conf.d/tinydns.internal # cp -r /etc/tinydns /etc/tinydns.internal
现在,您有了 TinyDNS 服务的第二个实例,您可以使用 /etc/init.d/tinydns.internal、/etc/conf.d/tinydns.internal 和 /etc/tinydns.internal/ 从控制台进行管理。 但是,您如何使用 ACF 管理它?
创建 ACF 的第二个实例
为新脚本设置 ACF 控制器。 控制器名称只能包含字母、数字和 '_'。
# mkdir /usr/share/acf/app/tinydns_internal
为每个新脚本设置修改后的 ACF 代码。 只需要修改三个文件,其他文件可以复制或符号链接。 必须更改控制器的名称,以允许单独管理两个 TinyDNS 实例的 ACF 权限。
# cd /usr/share/acf/app/tinydns # for a in tinydns*; do cp $a /usr/share/acf/app/tinydns_internal/$(echo $a {{!}} sed "s/tinydns/tinydns_internal/"); done
# vim /usr/share/acf/app/tinydns_internal/tinydns_internal-model.lua
更改 'local processname = "tinydns.internal"'
# vim /usr/share/acf/app/tinydns_internal/tinydns_internal.roles
将每个 'tinydns' 实例替换为 'tinydns_internal'
# vim /usr/share/acf/app/tinydns_internal/tinydns_internal.menu
修改主菜单项,例如,将每个 '30DNS' 实例替换为 '31DNS_Internal'
一旦您注销并重新登录 ACF,您应该会看到新的 ACF 页面和菜单选项可用。 可以为新实例单独处理用户和角色管理。(在 alpine 1.8 中,不应向用户授予对普通 TinyDNS ACF 的访问权限)
保存您的更改
/usr/share 目录 未自动包含在 lbu 提交中,因此必须手动添加新的 ACF 实例。
# lbu add /usr/share/acf/app/tinydns_internal
然后,提交更改。
# lbu commit