9 快照服务器
本章结合使用特权(root)用户和非特权(incusadmin)用户,具体取决于您正在执行的任务。
如开头所述,Incus 快照服务器必须在各方面都镜像生产服务器。如果主服务器的硬件发生故障,您可能需要将其投入生产,并且拥有备份以及快速重启生产容器的方法可以将系统管理员的恐慌电话和短信降至最低。这总是好的!
构建快照服务器的过程与生产服务器的过程完全相同。为了完全模拟您的生产服务器设置,请在快照服务器上重复第 1-4 章,完成后再返回此处。
如果您在这里,说明您已完成了快照服务器的基本安装。
设置主服务器和快照服务器之间的关系¶
在继续之前,您需要做一些整理工作。首先,如果您在生产环境中运行,您可能可以访问 DNS 服务器以设置 IP 到名称解析。
在您的实验室中,您没有这种便利。您可能在运行相同的场景。为此,您将在主服务器和快照服务器上的 /etc/hosts
文件中添加两个服务器的 IP 地址和名称。您必须以 root(或 sudo)用户的身份执行此操作。
在您的实验室中,主 Incus 服务器在 192.168.1.106 上运行,快照 Incus 服务器在 192.168.1.141 上运行。SSH 登录到每台服务器,并将以下内容添加到 /etc/hosts
文件中
192.168.1.106 incus-primary
192.168.1.141 incus-snapshot
接下来,您需要允许两台服务器之间的所有流量。为此,您将更改 firewalld
规则。首先,在 incus-primary 服务器上,添加以下行
firewall-cmd zone=trusted add-source=192.168.1.141 --permanent
在快照服务器上,添加以下规则
firewall-cmd zone=trusted add-source=192.168.1.106 --permanent
然后重新加载
firewall-cmd reload
接下来,以非特权(incusadmin)用户身份,您必须在两台机器之间建立信任关系。这可以通过在 incus-primary 上运行以下命令来完成
incus remote add incus-snapshot
这将显示要接受的证书。接受它,它将提示您输入密码。这是您在 Incus 初始化步骤中设置的“信任密码”。我希望您一直在跟踪所有这些密码。输入密码后,您将收到以下信息
Client certificate stored at server: incus-snapshot
反过来也不会有害。例如,信任关系也可以在 incus-snapshot 服务器上设置。如果需要,incus-snapshot 服务器可以将快照发送回 incus-primary 服务器。重复这些步骤,将“incus-primary”替换为“incus-snapshot”。
迁移第一个快照¶
在迁移第一个快照之前,您必须在 incus-snapshot 上创建您在 incus-primary 上创建的任何配置文件。在这种情况下,它是“macvlan”配置文件。
您将需要为 incus-snapshot 创建它。返回 第 6 章,如果需要,在 incus-snapshot 上创建“macvlan”配置文件。如果您的两台服务器具有相同的父接口名称(例如“enp3s0”),那么您可以将“macvlan”配置文件复制到 incus-snapshot,而无需重新创建它
incus profile copy macvlan incus-snapshot
在设置了所有关系和配置文件后,下一步是从 incus-primary 发送快照到 incus-snapshot。如果您一直完全按照说明进行操作,那么您可能已删除了所有快照。创建另一个快照
incus snapshot rockylinux-test-9 rockylinux-test-9-snap1
如果您为 incus
运行“info”命令,您可以在列表底部看到快照
incus info rockylinux-test-9
它将在底部显示类似以下内容
rockylinux-test-9-snap1 at 2021/05/13 16:34 UTC) (stateless)
尝试迁移您的快照
incus copy rockylinux-test-9/rockylinux-test-9-snap1 incus-snapshot:rockylinux-test-9
此命令表示,在容器 rockylinux-test-9 中,您要将快照 rockylinux-test-9-snap1 发送到 incus-snapshot,并将其命名为 rockylinux-test-9。
过了一会儿,复制将完成。想知道是否真的完成了?在 incus-snapshot 服务器上执行 incus list
。它应该返回以下内容
+-------------------+---------+------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------------+---------+------+------+-----------+-----------+
| rockylinux-test-9 | STOPPED | | | CONTAINER | 0 |
+-------------------+---------+------+------+-----------+-----------+
成功!尝试启动它。因为您是在 incus-snapshot 服务器上启动它,所以您需要先在 incus-primary 服务器上停止它,以避免 IP 地址冲突
incus stop rockylinux-test-9
在 incus-snapshot 服务器上
incus start rockylinux-test-9
假设所有这些都按预期顺利完成,请在 incus-snapshot 上停止容器,并在 incus-primary 上重新启动它。
将容器的 boot.autostart
设置为 off¶
复制到 incus-snapshot 的快照在迁移时将处于关闭状态,但如果您遇到电源事件或需要重新引导快照服务器(由于更新或其他原因),您将遇到问题。这些容器将尝试在快照服务器上启动,从而可能导致 IP 地址冲突。
为了消除这种情况,您需要设置迁移的容器,以便它们不会在服务器重新启动时启动。对于新复制的 rockylinux-test-9 容器,您将使用以下命令执行此操作
incus config set rockylinux-test-9 boot.autostart 0
对 incus-snapshot 服务器上的每个快照执行此操作。“0”将确保 boot.autostart
为 off。
自动执行快照过程¶
能够在需要时创建快照非常棒,有时你确实需要手动创建快照。你甚至可能想要手动将它复制到 incus-snapshot。但对于其他所有情况,特别是对于运行在 incus-primary 服务器上的许多容器,你最不希望做的事情就是花一个下午在快照服务器上删除快照、创建新的快照并将它们发送到快照服务器。对于大部分操作,你将希望自动执行此过程。
你需要在 incus-primary 上安排一个自动创建快照的进程。你将在 incus-primary 服务器上的每个容器上执行此操作。完成后,它将负责以后的快照创建。你可以使用以下语法来执行此操作。请注意,时间戳与 crontab 条目的相似性
incus config set [container_name] snapshots.schedule "50 20 * * *"
这段代码表示:每天晚上 8:50 对容器名称进行快照。
要将此应用于你的 rockylinux-test-9 容器
incus config set rockylinux-test-9 snapshots.schedule "50 20 * * *"
你还可以通过日期设置快照名称。Incus 在所有地方都使用 UTC,因此你最好使用日期和时间戳来设置快照名称,以使时间戳格式更易于理解
incus config set rockylinux-test-9 snapshots.pattern "rockylinux-test-9{{ creation_date|date:'2006-01-02_15-04-05' }}"
很棒!但你肯定不希望每天都创建新的快照而没有删除旧的快照,否则你会用快照填满磁盘。要解决这个问题,请运行以下命令
incus config set rockylinux-test-9 snapshots.expiry 1d
作者:Steven Spencer
贡献者:Ezequiel Bruni, Ganna Zhyrnova