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