Mysql

創建一個穩定的、自動擴展的應用伺服器集群

  • September 7, 2014

我有兩台伺服器,每台執行 50 到 100 個不同的傳統 web 應用程序,使用從 PHP 到 Python 到 Ruby-on-rails 到 NodeJS 的語言編寫。

我們想要殺死這些機器,因為它們很舊、不安全且組織不善,沒有一致的配置邏輯,並且mysqld每個機器都執行兩個實例(不要問)。

為此,我想做以下事情:

  • 刪除任何現已折舊的遺留項目
  • 以某種方式將每個應用程序沙箱化,可能放入其自己的 Docker 或乘客容器中
  • 將新伺服器創建為自動擴展的無狀態集群,將每個 MySQL 數據庫移動到其自己的 RDS 實例
  • 甚至可能以類似於 Heroku 的方式自動擴展非活動應用程序

最終,我想做一些類似於DeisFlynn所做的事情,儘管目前它們都沒有準備好生產。

老實說,我對這一切有點不知所措,真的不知道從哪裡開始。有什麼建議麼?乘客是我應該考慮的嗎?碼頭工人?

謝謝!

我不太確定你的實際問題是什麼。你的整體問題相當模糊。從我可以收集到的資訊中,您在這裡有三個主要問題:

  1. 我應該從哪裡開始獲得自己的可擴展 PaaS 基礎架構?
  2. 乘客是我應該考慮的嗎?
  3. Docker是我應該考慮的嗎?

我將首先回答第 3 個問題,因為這是最簡單的。答案是肯定的。如果你要建構新的東西,Docker 將幫助你進入一個更便攜的世界,這反過來又會幫助你達到一個更具可擴展性的點。您的舊 Web 應用程序將作為自己的容器執行,具有自己的依賴項集,因此變得更加可移植。

第 2 點的答案聽起來更依賴於 Ruby 和一般的 Ruby 應用程序。你可以執行乘客嗎?也許……這似乎更多地取決於應用程序的編寫方式以及它可能與哪些伺服器兼容。然而,Phusion 似乎在對 Docker 非常友好方面取得了長足的進步。至少有專門圍繞執行 Ruby、Python 和 Node.js 應用程序的 Docker 映像 - https://github.com/phusion/passenger-docker

我對第 1 點的回答是從容器化遺留應用程序開始。使應用程序更符合十二因子(http://12factor.net/)(如果它們還沒有的話)。讓他們更注重服務。與其在一個容器中執行 MySQL、Redis、Apache、PHP-FPM 等東西,不如將它們分成不同的服務,這些服務通過 TCP 和 HTTP 相互連接(Docker 連結將是一個很好的起點——https: //docs.docker.com/userguide/dockerlinks/)。

通過使您的應用程序達到在自己的容器中執行的程度,使用可以在任何地方執行的外部服務,並且可以使用預設工作配置(發布)進行版本控制,那麼您就離可以開始的世界越來越近了編寫調度、服務發現和部署腳本。

如果您還沒有,請查看比成熟的 Docker PaaS 早一點的東西,例如https://coreos.com/>或<http://www.projectatomic.io/>。像這樣的東西可以讓您圍繞自己的容器/單元進行調度,而不是實際為您建構應用程序容器。對於開發中的學習,您可以使用<http://www.fig.sh/http://decking.io/ 之類的東西。非常適合在本地測試新的面向服務的容器。

有關 Docker 的更多工具,請關注https://stackoverflow.com/questions/18285212/how-to-scale-docker-containers-in-production。最佳答案很好地概述了他們目前的情況,並且作者保持更新得相當好。

引用自:https://serverfault.com/questions/626451