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

Dockerを使用してTimescaleDBをデプロイするためのガイド

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

    Dockerイメージの場合、事前定義されたOSバージョンが付属しており、パッケージはイメージの作成者が決定した方法でインストールされます。別のOSを使用したい場合や、別の方法でパッケージをインストールしたい場合があります。このような場合は、クリーンなOS Dockerイメージを使用して、ソフトウェアを最初からインストールする必要があります。

    レプリケーションはデータベース環境の一般的な機能であるため、TimescaleDB Dockerイメージをデプロイした後、レプリケーションセットアップを構成する場合は、Dockerファイルまたはスクリプトを使用して、コンテナーから手動で行う必要があります。 Dockerの知識がない場合、このタスクは複雑になる可能性があります。

    このブログでは、TimescaleDB Docker Imageを使用してDocker経由でTimescaleDBをデプロイする方法を説明し、次にCentOSDockerImageとClusterControlを使用して最初からインストールする方法を説明します。

    Dockerイメージを使用してTimescaleDBをデプロイする方法

    まず、DockerHubで利用可能なDockerイメージを使用してTimescaleDBをデプロイする方法を見てみましょう。

    $ docker search timescaledb
    NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    timescale/timescaledb                      An open-source time-series database optimize…   52

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

    $ docker pull timescale/timescaledb

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

    $ docker run -d --name timescaledb1 -p 7551:5432 timescale/timescaledb
    $ docker run -d --name timescaledb2 -p 7552:5432 timescale/timescaledb

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

    $ docker ps
    CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                    NAMES
    6d3bfc75fe39        timescale/timescaledb   "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       0.0.0.0:7552->5432/tcp   timescaledb2
    748d5167041f        timescale/timescaledb   "docker-entrypoint.s…"   16 minutes ago      Up 16 minutes       0.0.0.0:7551->5432/tcp   timescaledb1

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

    $ docker exec -ti [db-container] bash
    $ su postgres
    $ psql
    psql (9.6.13)
    Type "help" for help.
    postgres=#

    ご覧のとおり、このDockerイメージにはデフォルトでTimescaleDB 9.6バージョンが含まれており、AlpineLinuxv3.9にインストールされています。タグを変更することで、別のTimescaleDBバージョンを使用できます:

    $ docker pull timescale/timescaledb:latest-pg11

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

    ClusterControlを使用してTimescaleDBをデプロイする方法

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

    まず、最新バージョンを使用して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を開き、デフォルトの管理者ユーザーとパスワードを作成できます。

    CentOSオフィシャルDockerイメージにはSSHサービスが付属していないため、SSHサービスをインストールし、SSHキーを使用してパスワードなしでClusterControlノードからの接続を許可します。

    $ docker search centos
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    centos                             The official build of CentOS.                   5378                [OK]

    そこで、CentOSの公式Dockerイメージを取得します。

    $ docker pull centos

    次に、ClusterControlにリンクされた2つのノードコンテナtimescale1とtimescale2を実行し、ローカルポートをマップしてデータベースに接続します(オプション)。

    $ docker run -dt --privileged --name timescale1 -p 8551:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
    $ docker run -dt --privileged --name timescale2 -p 8552:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init

    SSHサービスをインストールして構成する必要があるため、コンテナー内のサービスを管理できるように、特権パラメーターと/ usr / sbin/initパラメーターを使用してコンテナーを実行する必要があります。

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

    $ docker ps
    CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                       PORTS                                                                                     NAMES
    230686d8126e        centos                        "/usr/sbin/init"    4 seconds ago       Up 3 seconds                 0.0.0.0:8552->5432/tcp                                                                    timescale2
    c0e7b245f7fe        centos                        "/usr/sbin/init"    23 seconds ago      Up 22 seconds                0.0.0.0:8551->5432/tcp                                                                    timescale1
    7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    2 weeks ago         Up About an hour (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

    次のコマンドで各ノードにアクセスできます:

    $ docker exec -ti [db-container] bash

    前述したように、SSHサービスをインストールする必要があるので、SSHサービスをインストールし、ルートアクセスを許可し、各データベースコンテナのルートパスワードを設定します。

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

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

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

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

    $ docker exec -it clustercontrol bash

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

    $ ssh-copy-id 172.17.0.5

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

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

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

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

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

    ここでは、以前に各コンテナから取得したIPアドレスを使用する必要があります。

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

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

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

    スタンバイノードをさらに追加する場合は、[クラスターアクション]メニューのClusterControlUIから追加できることに注意してください。

    同様に、TimescaleDBクラスターをDockerで実行していて、ClusterControlでクラスターを管理して、監視、バックアップ、自動フェイルオーバーなど、このシステムのすべての機能を使用できるようにする場合は、データベースコンテナと同じDockerネットワーク内のClusterControlコンテナ。唯一の要件は、ターゲットコンテナにSSH関連のパッケージ(openssh-server、openssh-clients)がインストールされていることを確認することです。次に、ClusterControlからデータベースコンテナへのパスワードなしのSSHを許可します。完了したら、「既存のサーバー/クラスターのインポート」機能を使用すると、クラスターがClusterControlにインポートされます。

    コンテナの実行で発生する可能性のある問題の1つは、IPアドレスまたはホスト名の割り当てです。 Kubernetesのようなオーケストレーションツールがない場合、ノードを停止して新しいコンテナを作成してから再開すると、IPアドレスまたはホスト名が異なる可能性があります。古いノードには異なるIPアドレスがあり、ClusterControlは、すべてのノードが専用のIPアドレスまたはホスト名を持つ環境で実行されていると想定しているため、IPアドレスを変更した後、クラスターをClusterControlに再インポートする必要があります。この問題には多くの回避策があります。このリンクを確認して、StatefulSetでKubernetesを使用するか、オーケストレーションツールなしでコンテナを実行するためにこのリンクを確認してください。

    結論

    ご覧のとおり、レプリケーションまたはフェイルオーバー環境を構成したくない場合や、OSバージョンまたはデータベースパッケージのインストールに変更を加えたくない場合は、Dockerを使用したTimescaleDBのデプロイは簡単です。

    >

    ClusterControlを使用すると、好みのOSイメージを使用してDockerでTimescaleDBクラスターをインポートまたはデプロイできるだけでなく、バ​​ックアップや自動フェイルオーバー/リカバリなどの監視および管理タスクを自動化できます。


    1. ガレラクラスターを保護する方法-8つのヒント

    2. ORA-01219:データベースが開かれていません:固定テーブル/ビューでのみクエリが許可されています

    3. MySQLは外部キー制約を追加できません

    4. oci_connect接続に失敗しました