1

我们的云平台由 opennebula 提供支持。所以我们在“冷交换”中有两个前端实例。我们使用 lsyncd 守护进程试图保持数据存储中的实例同步,但有几点:我们不想同步 VM 的镜像,.bak 因为其他脚本会.bak 按计划将所有镜像移动到其他存储。find all the .bak in /var/lib/one/datastores/ then create exclude.lst and then start lsyncd.在我们查看数据存储之前,同步脚本逻辑看起来还不错:

oneadmin@nola:~/cluster$ dir /var/lib/one/datastores/1/
006e099c57061d87d4b8f78ec7199221
008a10fa0764c9ac8d6fb9206c9b69bd
069299977f2fea243a837efed271182f
0a73a9adf74d92b4f175abcb578cabac
0b1cc002e370e1acd880cf781df0a6fb
0b470b182ac6d554774a3615ce87e292
0c0d98d1e0aabc23ef548ddb564c578d
0c3fad9c92a8efc7e13a73d8ae85caa3

..等等。

我们用这个可怕的函数解决了它:

function create_exclude {
  oneimage list -x | \
    xmlstarlet sel -t -m "IMAGE_POOL/IMAGE" -v "ID" -o ";" -v "NAME" -o ";" -v "SOURCE" -o ":" | \
    sed s/:/'\n'/g | \
    awk -F";" '/.bak;\/var\/lib/  {print $3}' | \
    cut -d / -f8 > /var/lib/one/cluster/exclude.lst
}

结果是包含 VM ID 和.bak 内部图像的列表,因此我们可以将整个 VM 文件夹排除在同步之外。这不是我们想要的,因为原始图像保持不同步。但是可以通过在其他脚本将所有内容移动.bak 到其他存储时重新启动 lsyncd 脚本来解决。

现在我们进入问题的主题。

它一直有效,直到.bak 创建新的遗嘱。没有办法在 exclude.lst “on the go”中添加新字符串,而是停止 lsync 并重新启动重新创建 exclude.lst 的脚本。但是也没有可能检查创建新 .bak 的时刻,除非另一个脚本会在一段时间内对其进行监控。

我相信存在不太复杂的解决方案。当然,这取决于 opennebula,尤其是 /datastores/ 文件夹存储 VM 的方式。

4

1 回答 1

0

很高兴知道您正在使用 OpenNebula 来运行您的云 :) 您是否尝试使用我们的社区论坛寻求支持?我相信社区的其他人会很乐意伸出援手!

干杯!

于 2020-07-31T15:16:52.957 回答