Mysql

擴展 Percona 數據中心:設置和複製

  • October 22, 2012

由於我們的初創公司發展順利,我們現在遇到了一些你一直認為永遠不會影響到你的問題。

我們已經擴展了很多應用程序堆棧:我們將用於臨時資訊的高讀/寫表解除安裝到單獨的 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,強大的力量就會帶來豐厚的收益。

引用自:https://dba.stackexchange.com/questions/21491