sql >> データベース >  >> RDS >> PostgreSQL

ClusterControlを使用してPostgreSQLをDockerコンテナにデプロイする方法

    Dockerは、コンテナーを使用してアプリケーションを作成、デプロイ、実行するための最も一般的なツールになりました。これにより、ライブラリやその他の依存関係など、必要なすべての部分を含むアプリケーションをパッケージ化し、すべてを1つのパッケージとして出荷できます。 Dockerは仮想マシンと見なすことができますが、Dockerを使用すると、仮想オペレーティングシステム全体を作成する代わりに、アプリケーションで実行しているシステムと同じLinuxカーネルを使用でき、アプリケーションには、まだ実行されていないものを同梱するだけで済みます。ホストコンピューター。これにより、パフォーマンスが大幅に向上し、アプリケーションのサイズが小さくなります。

    このブログでは、Dockerを介してPostgreSQLセットアップを簡単にデプロイする方法と、ClusterControlを使用してプライマリ/スタンバイレプリケーションセットアップでセットアップを有効にする方法を説明します。

    Dockerを使用してPostgreSQLをデプロイする方法

    まず、PostgreSQL Dockerイメージを使用して、Dockerを使用してPostgreSQLを手動でデプロイする方法を見てみましょう。

    イメージはDockerHubで入手でき、コマンドラインから見つけることができます:

    $ docker search postgres
    NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    postgres                                     The PostgreSQL object-relational database sy…   6519                [OK]

    最初の結果を取得します。公式のもの。したがって、画像をプルする必要があります:

    $ docker pull postgres

    そして、ローカルポートをデータベースポートからコンテナにマッピングするノードコンテナを実行します。

    $ docker run -d --name node1 -p 6551:5432 postgres
    $ docker run -d --name node2 -p 6552:5432 postgres
    $ docker run -d --name node3 -p 6553:5432 postgres

    これらのコマンドを実行した後、次のDocker環境を作成する必要があります:

    $ docker ps
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                 PORTS                                                                                     NAMES
    51038dbe21f8        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6553->5432/tcp                                                                    node3
    b7a4211744e3        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6552->5432/tcp                                                                    node2
    229c6bd23ff4        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6551->5432/tcp                                                                    node1

    これで、次のコマンドを使用して各ノードにアクセスできます。

    $ docker exec -ti [db-container] bash
    $ su postgres
    $ psql
    psql (11.2 (Debian 11.2-1.pgdg90+1))
    Type "help" for help.
    postgres=#

    次に、データベースユーザーを作成したり、要件に応じて構成を変更したり、ノード間のレプリケーションを手動で構成したりできます。

    PostgreSQLコンテナをClusterControlにインポートする方法

    関連リソースClusterControlforPostgreSQLDockerコンテナにPostgreSQLをデプロイするKubernetesを使用してPostgreSQLをデプロイする

    PostgreSQLクラスターをセットアップしたので、それを監視し、パフォーマンスの問題が発生した場合にアラートを出し、バックアップを管理し、障害を検出し、正常なサーバーに自動的にフェイルオーバーする必要があります。

    Docker上でPostgreSQLクラスターを既に実行していて、ClusterControlでそれを管理したい場合は、データベースコンテナーと同じDockerネットワークでClusterControlコンテナーを実行するだけです。唯一の要件は、ターゲットコンテナにSSH関連のパッケージ(openssh-server、openssh-clients)がインストールされていることを確認することです。次に、ClusterControlからデータベースコンテナへのパスワードなしのSSHを許可します。完了したら、「既存のサーバー/クラスターのインポート」機能を使用すると、クラスターがClusterControlにインポートされます。

    まず、OpenSSH関連のパッケージをデータベースコンテナにインストールし、rootログインを許可して起動し、rootパスワードを設定しましょう:

    $ docker exec -ti [db-container] apt-get update
    $ docker exec -ti [db-container] apt-get install -y openssh-server openssh-client
    $ docker exec -it [db-container] sed -i 's|^PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
    $ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
    $ docker exec -ti [db-container] service ssh start
    $ docker exec -it [db-container] passwd

    ClusterControlコンテナを起動し(起動されていない場合)、コンテナのポート80をホストのポート5000に転送します。

    $ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

    ClusterControlコンテナーが稼働していることを確認します:

    $ docker ps | grep clustercontrol
    7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"         4 hours ago         Up 4 hours (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

    Webブラウザーを開き、 http:// [Docker_Host]:5000 / clustercontrolに移動します デフォルトの管理者ユーザーとパスワードを作成します。これで、ClusterControlのメインページが表示されます。

    最後のステップは、すべてのデータベースコンテナにパスワードなしのSSHを設定することです。このためには、各データベースノードのIPアドレスを知る必要があります。それを知るために、ノードごとに次のコマンドを実行できます。

    $ docker inspect [db-container] |grep IPAddress
                "IPAddress": "172.17.0.6",

    次に、ClusterControlコンテナのインタラクティブコンソールに接続します。

    $ docker exec -it clustercontrol bash

    SSHキーをすべてのデータベースコンテナにコピーします:

    $ ssh-copy-id 172.17.0.6
    $ ssh-copy-id 172.17.0.7
    $ ssh-copy-id 172.17.0.8

    これで、クラスターのClusterControlへのインポートを開始できます。 Webブラウザを開き、マップされたポートを使用してDockerの物理ホストIPアドレスに移動します(例: http://192.168.100.150:5000/clustercontrol ) 、[既存のサーバー/クラスターのインポート]をクリックして、次の情報を追加します。

    SSHでサーバーに接続するには、ユーザー、キー、またはパスワードとポートを指定する必要があります。新しいクラスターの名前も必要です。

    SSHアクセス情報を設定した後、データベースユーザー、バージョン、basedir、および各データベースノードのIPアドレスまたはホスト名を定義する必要があります。

    ホスト名またはIPアドレスを入力するときに緑色のチェックマークが表示されていることを確認してください。これは、ClusterControlがノードと通信できることを示します。次に、[インポート]ボタンをクリックし、ClusterControlがジョブを終了するまで待ちます。 ClusterControlアクティビティセクションでプロセスを監視できます。

    インポートすると、データベースクラスターがClusterControlダッシュボードの下に一覧表示されます。

    PostgreSQLマスターノードしかない場合は、ClusterControlに追加できることに注意してください。次に、ClusterControl UIからスタンバイノードを追加して、ClusterControlがスタンバイノードを構成できるようにします。

    データベースインフラストラクチャ全体のClusterControlSingleコンソールClusterControlのその他の新機能を確認するClusterControlを無料でインストール

    ClusterControlを使用してPostgreSQLコンテナをデプロイする方法

    それでは、CentOS Dockerイメージ(severalnines / centos-ssh)とClusterControl Dockerイメージ(severalnines / clustercontrol)を使用してDockerでPostgreSQLをデプロイする方法を見てみましょう。

    まず、最新バージョンを使用してClusterControl Dockerコンテナをデプロイするため、severenines /clustercontrolDockerイメージをプルする必要があります。

    $ docker pull severalnines/clustercontrol

    次に、ClusterControlコンテナを実行し、ポート5000を公開してアクセスします。

    $ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

    これで、 http:// [Docker_Host]:5000 / clustercontrolでClusterControlUIを開くことができます。 デフォルトの管理者ユーザーとパスワードを作成します。

    somenines / centos-sshには、SSHサービスが有効になっていることに加えて、自動展開機能が付属していますが、これはGaleraClusterでのみ有効です。 PostgreSQLはまだサポートされていません。そのため、docker runコマンドでAUTO_DEPLOYMENT変数を0に設定して、データベースノードを作成します。

    $ docker run -d --name postgres1 -p 5551:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
    $ docker run -d --name postgres2 -p 5552:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
    $ docker run -d --name postgres3 -p 5553:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh

    これらのコマンドを実行すると、次のDocker環境が作成されます。

    $ docker ps
    CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                    PORTS                                                                                     NAMES
    0df916b918a9        severalnines/centos-ssh       "/entrypoint.sh"    4 seconds ago       Up 3 seconds              22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5553->5432/tcp                             postgres3
    4c1829371b5e        severalnines/centos-ssh       "/entrypoint.sh"    11 seconds ago      Up 10 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5552->5432/tcp                             postgres2
    79d4263dd7a1        severalnines/centos-ssh       "/entrypoint.sh"    32 seconds ago      Up 31 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5551->5432/tcp                             postgres1
    7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    38 minutes ago      Up 38 minutes (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

    各データベースノードのIPアドレスを知る必要があります。それを知るために、ノードごとに次のコマンドを実行できます。

    $ docker inspect [db-container] |grep IPAddress
                "IPAddress": "172.17.0.3",

    これでサーバーノードが稼働しているので、データベースクラスターをデプロイする必要があります。簡単に作成するために、ClusterControlを使用します。

    ClusterControlからデプロイを実行するには、 http:// [Docker_Host]:5000 / clustercontrolでClusterControlUIを開きます。 、次に[展開]オプションを選択し、表示される指示に従います。

    PostgreSQLを選択するときは、SSHでサーバーに接続するためのユーザー、キー、またはパスワードとポートを指定する必要があります。また、新しいクラスターの名前と、ClusterControlに対応するソフトウェアと構成をインストールさせる場合も必要です。

    SSHアクセス情報を設定した後、データベースユーザー、バージョン、およびdatadir(オプション)を定義する必要があります。使用するリポジトリを指定することもできます。

    次のステップでは、作成するクラスターにサーバーを追加する必要があります。

    サーバーを追加するときに、IPまたはホスト名を入力できます。ここでは、以前に各コンテナから取得したIPアドレスを使用する必要があります。

    最後のステップで、レプリケーションを同期にするか非同期にするかを選択できます。

    ClusterControlアクティビティモニターから新しいクラスターの作成ステータスを監視できます。

    タスクが完了すると、ClusterControlのメイン画面にクラスターが表示されます。

    結論

    ご覧のとおり、Dockerを使用したPostgreSQLのデプロイは最初は簡単ですが、レプリケーションを構成するにはもう少し作業が必要になります。最後に、クラスターを監視して、何が起こっているかを確認する必要があります。 ClusterControlを使用すると、Dockerを使用してPostgreSQLクラスターをインポートまたはデプロイできるだけでなく、バ​​ックアップや自動フェイルオーバー/リカバリなどの監視および管理タスクを自動化できます。試してみてください。


    1. select from構文を使用せずにMySQLテーブルが存在するかどうかを確認しますか?

    2. SQLiteで数値にパーセント記号を追加する2つの方法

    3. 20代のVLDB:もっと大きなものが必要になる…

    4. SQLiteにデータを挿入する際の主キーの競合への対処