擴展 Percona 數據中心:設置和複製
由於我們的初創公司發展順利,我們現在遇到了一些你一直認為永遠不會影響到你的問題。
我們已經擴展了很多應用程序堆棧:我們將用於臨時資訊的高讀/寫表解除安裝到單獨的 Percona 伺服器,在該伺服器上,表使用“Engine=MEMORY”執行,並將其他部分遷移到 cassandra 集群。
現在我們剩下一個“精益”數據庫,我們的讀/寫負載為 88%/12%。在這一點上,我有幾個問題想得到一些回饋:
1.讀奴隸
通過我們的讀/寫設置,一些(例如 2-3 個)讀從機應該將我們的寫主機上的讀負載降至最低。read-slave 解決方案的可擴展性如何:如果我們將負載增加一倍/三倍,是否會添加額外的 read slave 以繼續為讀取提供足夠的容量?我讀了這篇文章:每個主人的奴隸數量有什麼限制?但是,不是出於可擴展性背景,這可能看起來很愚蠢,但這是一個可凍結的解決方案嗎?有很多人在推動分片而不是讀從解決方案,但是,我真的認為目前我們的讀/寫負載不需要重寫我們應用程序的大部分……有什麼想法嗎?
2. 多數據中心和複製
此外,我們正在考慮通過附近的數據中心為不同的地理位置提供服務,以減少網路延遲(我們處理不喜歡延遲的移動應用程序)。計劃是使用經常提到的半同步。複製(請參閱:將 MySQL DB 拆分為兩台伺服器是個好主意嗎?以及MySQL 複製是否受高延遲互連影響?)用於主-主複製,其中每個數據中心都有一個主伺服器和多個讀取從伺服器。同樣,在我的天真中,我很想知道在擴展時這是否在“最佳實踐”的範圍內。
3. 硬體和配置
過去幾週我一直忙於對我們的實時系統進行基準測試,我得出的結論是,無論我們為第 1 點和第 2 點選擇哪種解決方案,我們目前使用的伺服器都不會讓它執行很長時間,可能我對我們的設置有一些想法:
CPU: Intel(R) Xeon(R) CPU E31275 @ 3.40GHz mit 8 cores (hyperthreading) RAM: 16GB Raid 10 with a strip size of 64 KB and controller cache enabled Software: Percona 5.5 Database size: 83.7GB Top 5 Tables: 21302MB table1 7656MB table2 5477MB table3 4352MB table4 3663MB table5
my.cnf 設置:
max_heap_table_size=64M tmp_table_size=64M default_storage_engine = InnoDB innodb_buffer_pool_size = 10G innodb_file_per_table = 1 innodb_old_blocks_time=1000 innodb_buffer_pool_instances=10 innodb_log_file_size=256M innodb_flush_method=O_DIRECT innodb_read_io_threads=10 innodb_write_io_threads=10 join_buffer_size = 67108864 #64M expand_fast_index_creation=ON
遷移到 Percona XtraDB Cluster 解決方案能否解決我們的一些問題,例如複製穩定性?
我知道這些都是非常理論性的問題,我感謝任何花時間閱讀和評論我的想法的人。作為歐洲的一家小型創業公司,我們真的沒有“上雲”的風險投資,我們更喜歡自己擁有更多的控制權。當我們正在尋找顧問等時,我認為 stackexchange 是提出一些想法的正確場所。
在這種情況下,您實際上有兩個選擇
選擇 #1:Percona XtraDB 集群
我目前正在評估它,我認為它非常適合 MultiMaster 寫入。它可以使用 mysqldump(預設)、rsync 和 xtrabackup(首選)來初始化新的集群節點。你擁有完全的自由和權力。這可能是有史以來最偉大的陳詞濫調,但擁有強大的力量,他們也必須始終承擔巨大的責任(影片的 19:16 - 19:25)。
您最終將負責
- 調整 InnoDB 的記憶體要求和磁碟配置
- 記住 MyISAM 上的 DDL/DML 不會在 Galera Write Set Replicator Libraries 中複製。由於 GRANT 命令是儲存引擎中立的,因此可以毫無問題地處理 mysql 模式中的 MyISAM 表。
mysql.user
不會複製任何針對的 DML 。- 為讀/寫添加配置新集群節點
選擇 #2:亞馬遜 RDS
Amazon RDS 讓 MySQL 數據庫雲服務變得輕而易舉。您必須花一些時間來部署具有 7 種伺服器模型之一的伺服器。預設情況下,所有 InnoDB 日誌文件都是 128M。以下是每個伺服器型號獨有的唯一選項:
MODEL max_connections innodb_buffer_pool_size --------- --------------- ----------------------- t1.micro 34 326107136 ( 311M) m1-small 125 1179648000 ( 1125M, 1.097G) m1-large 623 5882511360 ( 5610M, 5.479G) m1-xlarge 1263 11922309120 (11370M, 11.103G) m2-xlarge 1441 13605273600 (12975M, 12.671G) m2-2xlarge 2900 27367833600 (26100M, 25.488G) m2-4xlarge 5816 54892953600 (52350M, 51.123G)
您沒有獲得SUPER 特權,也無法直接訪問 my.cnf。鑑於此,為了更改 my.cnf 啟動選項,您必須首先創建一個基於 MySQL 的 DB 參數選項列表並使用RDS CLI(命令行界面)更改所需的選項。然後,您必須這樣做才能導入新選項:
- 創建自定義數據庫參數組(呼叫它
MySettings
)- 下載 RDS CLI 並使用您的 AWS 憑證設置配置文件
- 執行以下操作:
./rds-modify-db-parameter-group MySettings --parameters "name=whateveroption,value=whatevervalue,method=immediate"
- 使用數據庫參數選項列表修改
MySettings
- 重啟 MySQL RDS 實例
至於向外擴展至數據中心,您可以選擇創建只讀副本。由於預設儲存引擎是 InnoDB,因此製作只讀副本變得無縫,因為數據可以同步到 Slave 而不會中斷 Master。
更高的伺服器模型意味著您可以擁有更多的記憶體和更多的 IOP。不要忘記我提到的陳詞濫調,因為談到 Amazon RDS,強大的力量就會帶來豐厚的收益。