データベース クラスターは、負荷分散とデータ冗長性を実現するために、最新の大規模 Web サイトやエンタープライズ レベルのアプリケーションで一般的に使用される高可用性ソリューションです。ビジネス規模が拡大し続ける中、クラスタ管理においてはキャパシティの拡張または削減が重要な課題となっています。この記事では、PHP 言語を使用してデータベース クラスターを拡張する方法を紹介します。
データベース クラスターは、連携して大規模なデータ セットを処理する複数のデータベース サーバーの分散システムです。各サーバーはデータの一部を保存するため、データ セット全体をすべてのノードに分散できます。クラスタリングにより、ノードに障害が発生した場合でも、システムが正常に動作し続けることが保証されます。
データベース クラスターには、マスター/スレーブ レプリケーション クラスターと共有ストレージ クラスターの 2 種類があります。マスター/スレーブ レプリケーション クラスターとは、1 つのマスター ノードと複数のスレーブ ノードで構成されるクラスターを指します。マスター ノードはすべてのデータと書き込みリクエストを受信し、そのデータをスレーブ ノードにコピーします。スレーブ ノードは読み取りリクエストのみを受け取ります。共有ストレージ クラスターとは、複数のノードが同じデータを持ち、ノードがストレージを共有してデータの読み取りおよび書き込み操作を完了することを意味します。どのようなクラスタであっても、容量拡張はシステムを水平展開するための重要な手段です。
PHP は、人気のあるオープン ソースのサーバー側スクリプト言語であり、特に Web 開発での使用に適しています。 PHP は、MySQL、PostgreSQL、Oracle などのデータベースにアクセスするための多くのライブラリと関数を提供します。
PHP では、PDO (PHP Data Objects) 拡張機能を使用してデータベース接続と操作を処理できます。 PDO は、MySQL、PostgreSQL、SQLite などのさまざまなデータベースにアクセスするための統合インターフェイスを提供します。 PDO を使用すると、SQL ステートメントを使用して、クエリ、挿入、更新、削除などの操作を実行できます。
容量拡張はシステム規模を拡張するために必要な手段であり、クラスタのスループットと耐障害性を向上させます。データベースクラスタでは、拡張は垂直拡張と水平拡張の 2 つの状況に分類できます。
垂直拡張とは、メモリや CPU などの単一ノードのリソースを増やして、ノードのパフォーマンスを向上させることです。垂直方向の拡張の欠点は、コストが高く、水平方向の拡張のニーズを満たすことができないこと、つまり、多数の同時リクエストを処理できないことです。したがって、実際のアプリケーションでは、通常は水平方向の拡張が使用されます。
水平拡張とは、ノードを追加してクラスターの処理能力を高めることです。ノードを追加すると、クラスターのスループットが向上し、ノードの負荷が軽減されます。実際のアプリケーションでは、ノードを追加することで容量を拡張できます。つまり、データベース クラスターを 1 つのノードから複数のノードに拡張し、負荷を分散して高可用性と高パフォーマンスを実現します。
PHP では、PDO 拡張機能を使用してデータベースにアクセスし、データベース クラスターを拡張できます。以下では、PDO 拡張機能を使用して SQL ステートメントを実行し、複数のノードの 1 つを選択して SQL クエリを実行する方法について説明します。
まず、PDO 拡張機能をインストールする必要があります。 Ubuntu システムでは、次のコマンドを使用してインストールできます:
sudo apt-get install php7.4-pdo php7.4-mysql
次に、次のコードを使用してデータベースに接続できます:
$dsn = "mysql:host=node1;port=3306;dbname=mydatabase"; $username = "username"; $password = "password"; $pdo = new PDO($dsn, $username, $password);
このうち、$dsn はデータですソース名。接続のホスト名とポート番号を指定します。この例では、ノード 1 をマスター ノードとして使用します。 $username と $password は、データベースに接続するためのユーザー名とパスワードです。
次に、SQL クエリを実行します。
$query = "SELECT * FROM mytable"; $stmt = $pdo->query($query); $results = $stmt->fetchAll();
上記のコードでは、$query はクエリ ステートメントであり、$stmt はクエリ結果の情報を含む PDOStatement オブジェクトです。 $results は、すべてのクエリ結果を含む配列です。
クエリ リクエストを複数のノードに分散したい場合は、次のコードを使用してそれを実現できます。
$nodes = array("node1", "node2", "node3"); $dsn_template = "mysql:host=%s;port=3306;dbname=mydatabase"; foreach ($nodes as $node) { $dsn = sprintf($dsn_template, $node); try { $pdo = new PDO($dsn, $username, $password); $stmt = $pdo->query($query); $results = $stmt->fetchAll(); break; } catch (PDOException $e) { // handle exception continue; } }
上記のコードでは、$nodes はノード名の配列です。ループを使用してノードを 1 つずつ訪問し、クエリを実行します。接続に失敗した場合は、接続が成功するまで次のノードにアクセスし続けます。
このようにして、データベース クラスターを拡張できます。ノードを追加すると、クラスターのスループットが向上し、ノードの負荷が軽減されます。水平拡張により、クラスターの効率と信頼性が向上し、システムの高可用性とパフォーマンスが保証されます。
以上がデータベースクラスター拡張を実装するための PHP メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。