gpt4 book ai didi

bash - 如何检查docker Cassandra实例是否准备好进行连接

转载 作者:行者123 更新时间:2023-12-02 19:27:01 25 4
gpt4 key购买 nike

我有两个使用docker-compose启动的docker实例。
一个拥有一个Cassandra实例
一个拥有一个Spring Boot应用程序,它试图连接到该应用程序。

但是,Spring Boot应用程序将始终失败,因为它试图连接到尚未准备好进行连接的Cassandra实例。

我努力了:

  • 在Docker-compose中始终使用restart:
  • 这仍然不能总是起作用,因为Cassandra可能已经足够“足够”以不再使Spring Boot应用程序崩溃,但是还不能足够“足够”成功地创建了Table / Column系列。最重要的是,这是一个非常棘手的解决方案。
  • 使用运行状况检查
  • 似乎compose中的healthcheck没有重新启动功能
  • 使用bash脚本作为入口点
  • 希望我可以使用netstat,ping,...确定Cassandra的准备状态

  • 现在,唯一有效的方法是使用相同的bash脚本,将进程休眠x秒,然后启动jar。这更加骇人听闻...

    有谁知道如何解决这个问题?

    谢谢!

    最佳答案

    docker-compose.yml 中定义的spring boot服务是否取决于cassandara服务的?如果是,则仅在cassandra服务就绪时才启动该服务。

    https://docs.docker.com/compose/compose-file/#depends_on

    看看这个github仓库,找到cassandra服务的运行状况检查。

    https://github.com/docker-library/healthcheck

    结论

    经过一番讨论,我们发现docker-compose似乎没有提供等待服务正常运行的功能,例如Kubernetes和Openshift提供(请参阅下面的评论)。他们建议使用包装脚本(docker-entrypoint.sh),该脚本等待依赖服务出现,这使二进制文件成为必需,但不应使用实际服务,例如cassandra客户端二进制文件。另外,如果cassandra不这样做,则取决于cassandra的服务将永远无法启动,这不应该发生。

    微服务的主要优点是,它们必须具有故障恢复能力,并且如果当前尚不存在依赖服务或者意外地消失,则它们不应该死亡或不恢复正常运行。因此,微服务的实现方式应使其在启动或意外消失后重试以建立连接。 意外的是在此上下文中实际错误使用的单词,因为您应该始终在分布式环境中期待此类问题,即使使用docker-compose,您也将面临本主题中讨论的此类问题。

    以下链接指向一个教程,该教程有助于将cassandra正确集成到spring boot应用程序中。它提供了一种实现具有重试行为的cassandra连接的检索的方法,因此该服务对不存在的cassandra数据库具有 flex ,并且不会再失败。希望这对其他人也有帮助。

    https://dzone.com/articles/containerising-a-spring-data-cassandra-application

    关于bash - 如何检查docker Cassandra实例是否准备好进行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55424619/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com