我正在运行一个安全的NiFi集群,其中每个NiFi节点都在Docker容器中运行 . 我需要外部化用户和策略的状态,所以基本上这两个文件:
authorizations.xml
users.xml
做这个的最好方式是什么?
在非集群环境中对我来说很好的一种天真的方法是在Docker容器中安装外部卷并将authorizations.xml,users.xml文件放在那里 . 通过这种方法,我可以移除NiFi Docker容器并在以后再次运行它,而不必担心会丢失任何更改 . 最初我的第一个想法是在集群环境中做同样的事情,并将所有节点指向相同的物理文件 . 但据我所知,如果我这样做,进行初始更改的NiFi节点将更新文件,随后群集中的所有其他节点最终也会尝试更新所有这些文件 . 但是,它们已经由初始节点更新,因此如果它们没有遇到已经存在的更改的问题,它们可能会遇到获取写文件句柄的问题 .
另一种方法可以是定期将文件从NiFi docker容器写入外部位置 . 这有点乱,但它引出了如何将文件开始进入NiFi Docker的问题 . 我可以在启动期间从外部卷复制它们 . 但是当我在某个时刻添加一个额外的节点时,它也会复制文件,并冒着与生活在现有节点中的文件不同步的风险 . 如果新节点可以某种方式确定其他节点正在运行并具有配置,它可以工作,在这种情况下它根本不会引入文件,并且一旦节点加入集群,它们将由NiFi动态创建(根据NiFi文档) . 但这可能不那么容易 . 但也许仅仅确定当前是否还有其他节点正在运行?
我们可以让集群中的每个节点外化这些文件 . 也许这可能导致一些竞争条件,但似乎不太可能 . 更大的问题是我们在大多数情况下会有很多版本的文件完全相同,这可能会激怒我们的客户,他们希望最多只能拥有一份文件副本来处理 .