Featured image of post 使用平衡負載來提升 WordPress 數據庫的可用性

使用平衡負載來提升 WordPress 數據庫的可用性

HyperDB 是一個進階的數據庫類,支援數據庫的複製、故障切換、負載平衡和分區。HyperDB 支援多個數據庫服務器,可以根據不同的條件對數據庫進行分流,提高數據庫的可用性和性能。

最後更新
約 963 字

前言

通常大流量的 WordPress 最先遇到的問題就是數據庫的壓力過大,導致網站無法正常運作。這時候就需要對數據庫進行分流,例如讓主數據庫專注於寫入,而從數據庫專注於讀取。 平衡負載有很多不同的方法,例如使用 SQL Proxy,使用數據庫的主從式架構,使用數據庫的叢集等。這裡介紹一個 WordPress 外掛 HyperDB,可以幫助我們實現數據庫的平衡負載。

HyperDB 是一個進階的數據庫類,支援數據庫的複製、故障切換、負載平衡和分區。HyperDB 支援多個數據庫服務器,可以根據不同的條件對數據庫進行分流,提高數據庫的可用性和性能。

例如,可以將所有的讀取操作分流到從數據庫,寫入操作分流到主數據庫,這樣可以有效降低主數據庫的讀取壓力,提升用戶體驗。 也可以檢測數據庫的可用性,當主數據庫發生故障時,可以自動切換到從數據庫,保證數據庫的可用性。

不過該外掛已經有一段時間沒有更新了,所以在使用時需要注意。

安裝方式

下載 HyperDB 並解壓縮外掛。

設定好數據庫的連接資訊,然後將 db.php 檔案複製到 WordPress 的 wp-content 檔案夾下,將 db-config.php 檔案複製到 WordPress 的根目錄下就可以了。

1
2
wget https://downloads.wordpress.org/plugin/hyperdb.zip
unzip hyperdb.zip

複製 db.php 檔案

解壓縮後會得到一個 hyperdb 檔案夾,裡面有一個 db.php 檔案,將這個檔案複製到 WordPress 的 wp-content 檔案夾下。

1
cp hyperdb/db.php /var/www/html/wp-content/

複製 db-config.php 檔案

在跟 wp-config.php 同級的目錄下創建一個 db-config.php 檔案,用來組態數據庫的連接資訊。

1
cp hyperdb/db-config.php /var/www/html/db-config.php

組態 db-config.php 檔案

主要需要設定的是數據庫的連接資訊,例如主數據庫的連接資訊,從數據庫的連接資訊,數據庫的分流策略等。

使用 $wpdb->add_database() 方法來新增數據庫服務器,可以新增多個數據庫服務器,根據不同的條件進行分流。 可以用 writeread 來設置主從數據庫,write 為 1 表示允許寫入,read 為 1 表示允許讀取。

可以新增多個數據庫服務器,來進行負載平衡。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$wpdb->add_database(array(
    'host'     => DB_HOST,     // If port is other than 3306, use host:port.
    'user'     => DB_USER,
    'password' => DB_PASSWORD,
    'name'     => DB_NAME,
    'write'    => 0,
    'read'     => 1,
    'dataset'  => 'global',
    'timeout'  => 0.2,
));

參考資料

如果只是單純想要實現數據庫的主從式架構,可以參考這篇文章:透過 MySQL 主從式架構,進行平衡負載,提高數據庫的可用性和性能

使用主從式架構的話,可以使用 MySQL 的內建功能來實現,不需要使用 HyperDB 這個外掛,在不同的伺服器中設定 WordPress 讀取的數據庫,可以做到簡單的平衡負載。

但由於單純使用主從架構,而沒有讀寫分離的功能,所以 HyperDB 這個外掛還是有它的用武之地。

另外也不建議為瞭解決讀寫分離問題而使用 MySQL 的 Master Master Replication,因為這樣有可會導致數據庫的同步問題,可能會導致數據庫的數據不一致。


使用 Hugo 建立
主題 StackJimmy 設計