【问题标题】:Losing connection to Redis Service失去与 Redis 服务的连接
【发布时间】:2017-10-16 12:37:43
【问题描述】:

我们在 Swisscom 提供的 Cloudfoundry 实例上部署了一个 Symfony 应用程序。此外,我们使用 Swisscom 提供的 Redis 服务进行缓存。

现在发生了两次 Redis 连接超时,导致我们的应用程序失败:

Redis 连接失败(connect() failed: Connection timed out):redis://password@domain.service.consul:47133

一些技术资料:

  • symfony/symfony (v3.3.9)
  • predis/predis (v1.1.1)
  • cf 版本 6.32.0+0191c33d9.2017-09-26

config.yml看起来像缓存:

framework:
    cache:
        system: cache.adapter.apcu
        default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
        pools:
            redis_pool:
                adapter: cache.adapter.redis
                public: true
                default_lifetime: 0
                provider: cache.default_redis_provider

并用作此处定义的服务:

tag_aware_cache:
    class: Symfony\Component\Cache\Adapter\TagAwareAdapter
    arguments: [ '@redis_pool' ]

据我了解,我们没有使用任何与 Redis 的持久连接,而且它通常工作正常。

到目前为止,我发现让应用程序恢复稳定和运行状态的唯一解决方案是重新部署整个应用程序,这并不是一个很好的解决方案。

尤其是我不明白根本原因是什么。 我如何自行检查,Swisscom 是否确定 Redis 服务本身运行完全稳定?

【问题讨论】:

    标签: symfony redis cloud-foundry swisscomdev


    【解决方案1】:

    在您的应用中使用“cf ssh”时,您可以直接访问该服务。 Swisscoms 文档中描述了如何使用“cf ssh”访问您的服务的完整过程:https://docs.developer.swisscom.com/devguide/deploy-apps/ssh-apps.html

    您的应用应该能够自行处理连接问题。通常,简单的重试可以防止应用崩溃。

    【讨论】:

    • 否,例如我 cf ssh 进入我的应用程序并使用命令删除缓存(这应该只是按照您的要求重试恕我直言),但在我重新暂存应用程序之前什么都做不了。
    • 您是否有一个管道,可以推送应用程序并在之后绑定服务?服务绑定需要重新构建应用程序才能应用新的安全组。
    • 绑定在正常登台之前与清单一起发生。这有点奇怪,因为它有时只会发生。你的建议每次都会发生,不是吗?
    • 是的。如果在部署清单中指定了服务,它应该可以正常工作。您可能应该 ping Swisscoms 支持并要求他们检查您的服务实例。也许服务正在崩溃......
    • 您在尝试 ping 或 curl 服务时收到的确切错误消息是什么?
    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 2019-10-08
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多