PostgreSQLは、MySQL、MariaDB、MongoDBとともに、ClusterControlを介してデプロイできるデータベースの1つです。 ClusterControlは、データベースクラスターの展開を簡素化するだけでなく、アプリケーションが成長してその機能が必要になった場合のスケーラビリティのための機能を備えています。
データベースをスケールアップすることにより、アプリケーションの負荷やトラフィックが増加した場合でも、アプリケーションはよりスムーズかつ適切に実行されます。このブログ投稿では、ClusterControl1.8.2を使用したPostgreSQLv13の展開とスケールアップを行う方法の手順を確認します。
ユーザーインターフェイス(UI)の展開
ClusterControlでの展開には、Webユーザーインターフェイス(UI)とコマンドラインインターフェイス(CLI)の2つの方法があります。ユーザーは、好みやニーズに応じて、任意の展開オプションを自由に選択できます。どちらのオプションも簡単に実行でき、ドキュメントに詳しく記載されています。このセクションでは、最初のオプションであるWebUIを使用して展開プロセスを実行します。
最初のステップは、ClusterControlにログインし、[デプロイ]をクリックすることです。
展開の次のステップのために、以下のスクリーンショットが表示されます、続行するには[PostgreSQL]タブを選択してください:
先に進む前に、 ClusterControlノードとデータベースノードはパスワードなしである必要があります。デプロイする前に、ClusterControlノードからssh-keygenを生成し、それをすべてのノードにコピーするだけです。要件に応じて、SSHユーザー、Sudoパスワード、およびクラスター名の入力を入力し、[続行]をクリックします。
上のスクリーンショットでは、サーバーポートを定義する必要があります(他のユーザーを使用する場合)、使用するユーザーとパスワードを入力し、インストールするバージョン13を必ず選択してください。
写真の作成者写真の説明[展開]をクリックすると、展開プロセスが開始され、監視できます。 [アクティビティ]タブで進行状況。
展開には通常数分かかりますが、パフォーマンスは主にネットワークとサーバーの仕様。
これで、ClusterControlGUIを使用してPostgreSQLv13がインストールされました。これは非常に簡単です。 。
コマンドラインインターフェイス(CLI)PostgreSQLの展開
上記から、WebUIを使用したデプロイメントは非常に簡単であることがわかります。重要な注意点は、展開前にすべてのノードにパスワードなしのSSH接続が必要であるということです。このセクションでは、ClusterControlCLIまたは「s9s」ツールのコマンドラインを使用してデプロイする方法を説明します。
これより前にClusterControlがインストールされていると想定しているので、ssh-keygenの生成から始めましょう。 ClusterControlノードで、次のコマンドを実行します。
$ whoami
root
$ ssh-keygen -t rsa # generate the SSH key for the user
$ ssh-copy-id 10.10.40.11 # pg node1
$ ssh-copy-id 10.10.40.12 # pg node2
$ ssh-copy-id 10.10.40.13 # pg node3
上記のすべてのコマンドが正常に実行されたら、次のコマンドを使用してパスワードなしの接続を確認できます。
$ ssh 10.10.40.11 "whoami" # make sure can ssh without password
上記のコマンドが正常に実行された場合、次のコマンド行を使用してClusterControlサーバーからクラスターの展開を開始できます。
$ s9s cluster --create --cluster-type=postgresql --nodes="10.10.40.11?master;10.10.40.12?slave;10.10.40.13?slave" --provider-version='13' --db-admin="postgres" --db-admin-passwd="[email protected]$$W0rd" --cluster-name=PGCluster --os-user=root --os-key-file=/root/.ssh/id_rsa --log
上記のコマンドを実行した直後に、次のようなメッセージが表示されます。これは、タスクの実行が開始されたことを意味します。
10.10.40.11: Checking ssh/sudo with credentials ssh_cred_job_6656.
10.10.40.12: Checking ssh/sudo with credentials ssh_cred_job_6656.
10.10.40.13: Checking ssh/sudo with credentials ssh_cred_job_6656.
…
…
This will take a few moments and the following message will be displayed once the cluster is deployed:
…
…
Directory is '/etc/cmon.d'.
Filename is 'cmon_1.cnf'.
Configuration written to 'cmon_1.cnf'.
Sending SIGHUP to the controller process.
Waiting until the initial cluster starts up.
Cluster 1 is running.
Registering the cluster on the web UI.
Waiting until the initial cluster starts up.
Cluster 1 is running.
Generated & set RPC authentication token.
作成したユーザー名を使用して、Webコンソールにログインして確認することもできます。これで、3つのノードを使用してPostgreSQLクラスターがデプロイされました。上記のデプロイメントコマンドについて詳しく知りたい場合は、こちらが最適なリファレンスです。
ClusterControlUIを使用したPostgreSQLのスケールアップ
PostgreSQLはリレーショナルデータベースであり、このタイプのデータベースのスケールアウトは、非リレーショナルデータベースと比較して簡単ではないことを私たちは知っています。最近では、ほとんどのアプリケーションは、パフォーマンスと速度を向上させるためにスケーラビリティを必要としています。インフラストラクチャと環境に応じて、これを実装する方法はたくさんあります。
スケーラビリティは、ClusterControlによって促進できる機能の1つであり、UIとCLIの両方を使用して実現できます。このセクションでは、ClusterControlUIを使用してPostgreSQLをスケールアウトする方法を説明します。最初のステップは、UIにログインしてクラスターを選択することです。クラスターを選択したら、下のスクリーンショットのようにオプションをクリックできます。
[レプリケーションスレーブの追加]をクリックすると、次のページが表示されます。 。状況に応じて、「新規追加…」または「インポート…」のいずれかを選択できます。この例では、最初のオプションを選択します:
クリックすると、次の画面が表示されます。
> 写真の作成者写真の説明スレーブホスト名:新しいスレーブまたはノードのホスト名/IPアドレス
スレーブポート:スレーブのPostgreSQLポート、デフォルトは5432
クラスター名:クラスターの名前。追加することも空白のままにすることもできます
Datadirにパッケージのデフォルトを使用:別の場所にしたい場合は、このオプションをオフにすると、このオプションをオンにできます。 Datadirの場合
PostgreSQLソフトウェアをインストールします。このオプションをオンのままにしておくことができます
同期レプリケーション:これで必要なレプリケーションのタイプを選択できます
LoadBalancerセットに含める(存在する場合):このオプションは、クラスターにLoadBalancerが構成されている場合にチェックされます
ここで重要な注意点は、このセットアップを実行する前に、新しいスレーブホストをパスワードなしに構成する必要があるということです。すべてが確認できたら、「完了」ボタンをクリックしてセットアップを完了します。この例では、IP「10.10.40.140」を追加しました。
これで、ジョブアクティビティを監視し、セットアップを完了することができます。セットアップを確認するには、[トポロジ]タブに移動して、新しいスレーブを確認します。
ClusterControlCLIを使用したPostgreSQLのスケールアウト
新しいノードを既存のクラスターに追加するには、CLIを使用すると非常に簡単です。コントローラノードから、次のコマンドを実行します。最初のコマンドは、新しいノードを追加するクラスターを特定することです。
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single admin admins PGCluster All nodes are operational.
この例では、クラスター名「PGCluster」のノードIDが「1」であることがわかります。既存のPostgreSQLクラスターに新しいノードを追加する方法に関する最初のコマンドオプションを見てみましょう。
$ s9s cluster --add-node --cluster-id=1 --nodes="postgresql://10.10.40.141?slave" --log
行末の省略形の「--log」を使用すると、以下のようにコマンドを実行した後に実行されている現在のタスクを確認できます。
Using SSH credentials from cluster.
Cluster ID is 1.
The username is 'root'.
Verifying job parameters.
Found a master candidate: 10.10.40.11:5432, adding 10.10.40.141:5432 as a slave.
Verifying job parameters.
10.10.40.11: Checking ssh/sudo with credentials ssh_cred_cluster_1_6245.
10.10.40.11:5432: Loading configuration file '/var/lib/pgsql/13/data/postgresql.conf'.
10.10.40.11:5432: wal_keep_segments is set to 0, increase this for safer replication.
…
…
$ s9s cluster --add-node --cluster-id=1 --nodes="postgresql://10.10.40.142?slave" --wait
\ Job 9 RUNNING [▋ ] 5% Installing packages
行に「--wait」の省略形があり、表示される出力は上記のように表示されることに注意してください。プロセスが完了すると、UIからクラスターの[概要]タブで新しいノードを確認できます。
このブログ投稿では、ClusterControlでPostgreSQLをスケールアウトする2つのオプションを確認しました。お気づきかもしれませんが、ClusterControlを使用するとPostgreSQLのスケールアウトが簡単になります。 ClusterControlは、スケーラビリティーを実行できるだけでなく、データベースクラスターの高可用性セットアップを実現することもできます。 HAProxy、PgBouncer、Keepalivedなどの機能が利用可能であり、これらのオプションの必要性を感じたときはいつでもクラスターに実装する準備ができています。 ClusterControlを使用すると、データベースクラスターの管理と監視を同時に簡単に行うことができます。
このブログ投稿が、PostgreSQLセットアップのスケールアウトに役立つことを願っています。