私人码头注册和高可用性

问题描述 投票:2回答:3

我们目前正在一台托管所有图像的服务器上运行私有注册表。如果服务器崩溃,我们基本上会丢失所有图像。我们希望找到一种方法来在我们的图像上实现高可用性。我看到一个简单的解决方案是每个服务器都有一个注册表实例。负载均衡器会将流量重定向(循环)到可用的注册表实例之一。注册表实例将共享相同的网络数据驱动器(NFS)来存储映像。

你觉得这个解决方案有什么问题吗?即:如果用户在实例上推送图像,而另一个推送另一个(负载平衡器循环决策),它会在NFS上创建任何锁定文件吗?

感谢您的反馈意见

registry docker mirroring
3个回答
1
投票

有一些information on this on the docker-registry website。简而言之,它似乎旨在支持多个注册管理机构与同一个数据存储区通信,因此您不应该看到任何问题。

如果可靠性对您来说是一个真正的问题,那么查看其中一个商业产品可能是明智的。 enterprise HubCoreOS Enterprise Registry。 (虽然这些似乎强调安全性和访问控制而不是HA)。


1
投票

here所述,可以使用S3支持注册表。值得在容器中运行注册表,以便在发生灾难性主机/数据中心故障时立即启动另一个注册表。注册表也支持GCloud和OpenStack。

如果您担心数据丢失,请为持久性添加冗余并确保定期备份。您还应确保构建是幂等的,以便在绝对必要时重建图像。


0
投票

注册表需要缓存一些元数据,默认情况下使用inmemory。您可以更改缓存配置以使用redis。

https://docs.docker.com/registry/configuration/#cache

示例配置:

storage:
  filesystem:
    rootdirectory: /var/lib/registry
  cache:
    blobdescriptor: redis
redis:
  addr: redis-server-host:6379
  db: 1
  dialtimeout: 1s
  readtimeout: 1s
  writetimeout: 1s
  pool:
    maxidle: 16
    maxactive: 64
    idletimeout: 300s

您应该更改s3或任何其他全局存储的存储方法。我运行两个注册表以获得高可用性。

© www.soinside.com 2019 - 2024. All rights reserved.