![使用 chef,如何确保在依赖于服务器的客户端之前配置服务器?](https://linux22.com/image/699188/%E4%BD%BF%E7%94%A8%20chef%EF%BC%8C%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%9C%A8%E4%BE%9D%E8%B5%96%E4%BA%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%B9%8B%E5%89%8D%E9%85%8D%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我正在部署一个分布式服务,该服务在多个节点上使用 NFS 共享。在此场景中,有一个主节点导出 NFS 共享,还有多个从属节点必须挂载此导出。
使用 chef,我能够配置主节点。主节点完成后,我可以并行配置从节点。但是,如果 chef-client 在所有节点上(大致)同时启动,则从节点会失败,因为服务器上的 NFS 共享尚不存在。
使用 chef,我如何确保在从属服务器启动之前完成主服务器的配置?我认为从属服务器暂停(并可能在几分钟后超时)等待 NFS 导出可用是可以接受的,但如果我能保证在允许从属服务器上的 chef-client 继续之前主服务器已完全配置(所有配方/角色),那将是最好的。
答案1
一般来说,最好的方法是不要确保一切顺利。以在依赖项不可用时优雅地失败的方式编写配方代码,然后使用 chef-client 的守护进程模式(或从 cron 运行),这样它就会在需要时不断尝试,直到成功。