在应用程序节点集群中,将应用程序二进制文件放在共享挂载点上并让每个节点都挂载该挂载点,而不是在每个节点上都有单独的二进制文件副本,这样做有哪些优点/缺点?
有什么因素导致一种方法或另一种方法特别糟糕吗?
谢谢
答案1
当我刚开始从事金融行业时,我运行的系统由网关系统组成,网关系统使用/处理数据,计算节点做出交易决策,NFS 服务器为应用程序提供服务/集中日志记录,以及大量网络将它们绑定在一起。我们还集中了 crontab 调度和应用程序监控配置并将其放在 NFS 挂载点上。
这是基于 NFSv3 的,其好处是,嗯......
- 轻松分发应用程序:一次安装。 一个位置即可进行更改。
- 简单管理与这些应用程序相关的数据。
缺点:
- 容易出错:一次安装。一个地方搞砸变化。
- 可扩展性:除非您还将存储集群化,否则中央安装对于其可有效服务的客户端数量将有一个上限。
- 单点故障 (SPOF):集群存储可以缓解这种情况,但这是一个需要考虑的问题。假设使用 NFS,如果您需要重新启动服务器,会发生什么情况?如果 NFS 服务器丢失或不可用,集群节点是否会在启动时挂起?
- 权限:您将如何管理跨集群节点的权限。本地服务帐户?匹配 UID/GID?就我而言,我使用了 NIS,后来又使用了 LDAP。目录服务在这里会很有帮助。
- 性能:您依赖网络和交换基础设施。应用程序加载、日志记录等操作的性能在本地磁盘上会比通过网络更快。
- 调整 NFS 很难,而且大多数人都做不好:)
现在,您可以通过配置管理系统 (木偶,厨师,Ansible,ETC.)或者更好的是,使用操作系统原生的打包方式(RPM,.deb)并用配置管理进行部署:
- 这消除了 SPOF。
- 本地化应用程序应该具有性能优势。
- 简化网络:例如,如果扩展到多个位置会怎样?
- 可以提供更精细的控制:例如,将二进制文件分发给系统子集,而不是整个集群。
- 自我记录。
鉴于此,我可能会建议使用应用程序的单独副本,而不是使用共享挂载。