openstack 上的 MySQL 伺服器
我想建立一個易於擴展的 MySQL 數據庫。傳統的雲外擴展意味著(1)升級硬體,(2)分片,或(3)複製。
選項 1 很簡單,但也很有限。選項2(我聽說)非常複雜,我不想在維護/管理上浪費有限的人力。選項 3 似乎只適用於高讀取、低寫入的情況,這不適合我的案例,並且也存在一致性問題。
我正在考慮建立一個私有 OpenStack 雲並部署一個託管數據庫的 VM。垂直擴展很容易(只需分配更多的 vCPU、vRAM、HDD),我可以根據需要向雲中添加更多的物理節點。然後,我將在雲上擁有一個巨大的 MySQL 實例。
我的問題:
1)這有實際意義嗎?我不介意小的成本影響(我寧願在硬體上花費更多而不是在維護/管理上),但如果成本太大,它可能沒有意義。
- 該解決方案的可擴展性如何?我可以繼續向雲中添加物理節點並將 vCPU、vRAM 擴展到任意高的數量嗎?
該應用程序對延遲的要求不是很高。我只需要一個易於擴展的解決方案。
不,“雲”不能神奇地將更多物理節點添加到單個 VM。
虛擬化是一種將單個真實硬體機器劃分為多個虛擬機的技術。“雲”設置只是一種管理架構,可讓您在一堆真實機器上管理多個虛擬機,而無需太多工作。但最終,每個虛擬機都執行在一台真機上。
一個完全不同的設置,它(稍微)更接近你想要的是一個cluster。那是一組執行一些軟體的機器,這些軟體旨在在整組機器上執行,使用所有機器的資源(CPU、RAM、儲存)。從某種意義上說,集群變成了一台機器。但這台“大機器”與普通伺服器不同,只是更大;這是完全不同的,任何應用程序都必須從一開始就設計為在集群上執行。
有一個“MySQL Cluster”設置,但這不是你想像的那樣,因為它將所有內容都儲存在 RAM 中。它非常快速且可擴展,但管理起來非常昂貴且複雜。
既然您說“應用程序對延遲的要求不是很高”,我想當您說“易於擴展”時,您的意思是大量儲存。如今,向一台機器添加幾百 TB 的數據並不難,因此擴大規模實際上是一種簡單且(相對)便宜的方式。
真正的挑戰不是將所有硬體連接在一起,而是真正使用它。MySQL 當然可以配置為執行此操作,但 MyISAM 表上的全表鎖定將是一場災難。甚至 InnoDB 也會遇到真正的麻煩和漫長的處理時間。在那個領域,PostgreSQL 的案例越來越多,所以如果你不喜歡 MySQL,那麼它是一個值得考慮的真正選擇。
更重要的是,還有一個完全不同的場景,要麼使用單元架構(可以看作是分片的極端案例),要麼使用一些 NoSQL 解決方案,如 Hadoop 或 Riak