TiUP を使用して TiDBクラスタをスケーリングする

TiDB クラスターの容量は、オンライン サービスを中断することなく増減できます。

このドキュメントでは、TiUP を使用して TiDB、TiKV、PD、TiCDC、または TiFlash クラスターをスケーリングする方法について説明します。 TiUP をインストールしていない場合は、 ステップ 2. 制御マシンに TiUP をデプロイの手順を参照してください。

現在のクラスター名のリストを表示するには、 tiup cluster listを実行します。

たとえば、クラスタの元のトポロジが次の場合:

ホスト IPサービス
10.0.1.3TiDB + TiFlash
10.0.1.4TiDB + PD
10.0.1.5TiKV + モニター
10.0.1.1TiKV
10.0.1.2TiKV

TiDB/PD/TiKV クラスターをスケールアウトする

このセクションでは、TiDB ノードを10.0.1.5のホストに追加する方法を例示します。

ノート:

同様の手順で PD ノードを追加できます。 TiKV ノードを追加する前に、クラスターの負荷に応じて事前に PD スケジューリング パラメーターを調整することをお勧めします。

  1. スケールアウト トポロジを構成します。

    ノート:

    • デフォルトでは、ポートとディレクトリの情報は必要ありません。
    • 複数のインスタンスが単一のマシンにデプロイされている場合は、それらに異なるポートとディレクトリを割り当てる必要があります。ポートまたはディレクトリに競合がある場合は、デプロイまたはスケーリング中に通知を受け取ります。
    • TiUP v1.0.0 以降、スケールアウト構成は元のクラスターのグローバル構成を継承します。

    scale-out.yamlのファイルにスケールアウト トポロジ構成を追加します。

    vi scale-out.yaml
    
    tidb_servers:
    - host: 10.0.1.5
      ssh_port: 22
      port: 4000
      status_port: 10080
      deploy_dir: /data/deploy/install/deploy/tidb-4000
      log_dir: /data/deploy/install/log/tidb-4000
    

    TiKV 構成ファイルのテンプレートは次のとおりです。

    tikv_servers:
    - host: 10.0.1.5
      ssh_port: 22
      port: 20160
      status_port: 20180
      deploy_dir: /data/deploy/install/deploy/tikv-20160
      data_dir: /data/deploy/install/data/tikv-20160
      log_dir: /data/deploy/install/log/tikv-20160
    

    PD 構成ファイルのテンプレートは次のとおりです。

    pd_servers:
    - host: 10.0.1.5
      ssh_port: 22
      name: pd-1
      client_port: 2379
      peer_port: 2380
      deploy_dir: /data/deploy/install/deploy/pd-2379
      data_dir: /data/deploy/install/data/pd-2379
      log_dir: /data/deploy/install/log/pd-2379
    

    現在のクラスターの構成を表示するには、 tiup cluster edit-config <cluster-name>を実行します。 globalserver_configsのパラメーター構成はscale-out.yamlによって継承され、したがってscale-out.yamlでも有効になるためです。

  2. スケールアウト コマンドを実行します。

    scale-outコマンドを実行する前に、 checkおよびcheck --applyコマンドを使用して、クラスター内の潜在的なリスクを検出し、自動的に修復します。

    1. 潜在的なリスクを確認します。

      tiup cluster check <cluster-name> scale-out.yaml --cluster --user root [-p] [-i /home/root/.ssh/gcp_rsa]
      
    2. 自動修復を有効にします。

      tiup cluster check <cluster-name> scale-out.yaml --cluster --apply --user root [-p] [-i /home/root/.ssh/gcp_rsa]
      
    3. scale-outコマンドを実行します。

      tiup cluster scale-out <cluster-name> scale-out.yaml [-p] [-i /home/root/.ssh/gcp_rsa]
      

    前述のコマンドでは:

    • scale-out.yamlはスケールアウト構成ファイルです。
    • --user rootは、ターゲット マシンにrootユーザーとしてログインして、クラスターのスケールアウトを完了することを示します。 root人のユーザーは、ターゲット マシンに対してsshsudoの権限を持つことが期待されます。または、 sshおよびsudoの権限を持つ他のユーザーを使用して展開を完了することもできます。
    • [-i][-p]はオプションです。パスワードなしでターゲット マシンへのログインを設定した場合、これらのパラメータは必要ありません。そうでない場合は、2 つのパラメーターのいずれかを選択します。 [-i]は、ターゲット マシンにアクセスできる root ユーザー (または--userで指定された他のユーザー) の秘密鍵です。 [-p]は、対話的にユーザーパスワードを入力するために使用されます。

    Scaled cluster <cluster-name> out successfullyが表示された場合、スケールアウト操作は成功しています。

  3. クラスターのステータスを確認します。

    tiup cluster display <cluster-name>
    

    ブラウザを使用してhttp://10.0.1.5:3000の監視プラットフォームにアクセスし、クラスタと新しいノードのステータスを監視します。

スケールアウト後のクラスター トポロジは次のようになります。

ホスト IPサービス
10.0.1.3TiDB + TiFlash
10.0.1.4TiDB + PD
10.0.1.5TiDB + TiKV + モニター
10.0.1.1TiKV
10.0.1.2TiKV

TiFlash クラスターをスケールアウトする

このセクションでは、TiFlash ノードを10.0.1.4ホストに追加する方法を例示します。

ノート:

TiFlash ノードを既存の TiDB クラスターに追加する場合は、次の点に注意してください。

  • 現在の TiDB バージョンが TiFlash の使用をサポートしていることを確認します。それ以外の場合は、TiDB クラスターを v5.0 以降のバージョンにアップグレードしてください。
  • tiup ctl:<cluster-version> pd -u http://<pd_ip>:<pd_port> config set enable-placement-rules trueコマンドを実行して、配置ルール機能を有効にします。または、対応するコマンドをpd-ctlで実行します。
  1. ノード情報をscale-out.yamlファイルに追加します。

    TiFlash ノード情報を追加するファイルをscale-out.yamlつ作成します。

    tiflash_servers:
    - host: 10.0.1.4
    

    現在、追加できるのは IP アドレスのみで、ドメイン名は追加できません。

  2. スケールアウト コマンドを実行します。

    tiup cluster scale-out <cluster-name> scale-out.yaml
    

    ノート:

    上記のコマンドは、ユーザーがコマンドと新しいマシンを実行できるように相互信頼が構成されているという前提に基づいています。相互信頼を構成できない場合は、オプション-pを使用して新しいマシンのパスワードを入力するか、オプション-iを使用して秘密鍵ファイルを指定します。

  3. クラスターのステータスをビューします。

    tiup cluster display <cluster-name>
    

    ブラウザを使用してhttp://10.0.1.5:3000のモニタリング プラットフォームにアクセスし、クラスタと新しいノードのステータスを表示します。

スケールアウト後のクラスター トポロジは次のようになります。

ホスト IPサービス
10.0.1.3TiDB + TiFlash
10.0.1.4TiDB + PD + TiFlash
10.0.1.5TiDB+ TiKV + モニター
10.0.1.1TiKV
10.0.1.2TiKV

TiCDC クラスターをスケールアウトする

このセクションでは、2 つの TiCDC ノードを10.0.1.310.0.1.4のホストに追加する方法を例示します。

  1. ノード情報をscale-out.yamlファイルに追加します。

    TiCDC ノード情報を追加するファイルをscale-out.yamlつ作成します。

    cdc_servers:
      - host: 10.0.1.3
        gc-ttl: 86400
        data_dir: /data/deploy/install/data/cdc-8300
      - host: 10.0.1.4
        gc-ttl: 86400
        data_dir: /data/deploy/install/data/cdc-8300
    
  2. スケールアウト コマンドを実行します。

    tiup cluster scale-out <cluster-name> scale-out.yaml
    

    ノート:

    上記のコマンドは、ユーザーがコマンドと新しいマシンを実行できるように相互信頼が構成されているという前提に基づいています。相互信頼を構成できない場合は、オプション-pを使用して新しいマシンのパスワードを入力するか、オプション-iを使用して秘密鍵ファイルを指定します。

  3. クラスターのステータスをビューします。

    tiup cluster display <cluster-name>
    

    ブラウザを使用してhttp://10.0.1.5:3000のモニタリング プラットフォームにアクセスし、クラスタと新しいノードのステータスを表示します。

スケールアウト後のクラスター トポロジは次のようになります。

ホスト IPサービス
10.0.1.3TiDB + TiFlash + TiCDC
10.0.1.4TiDB + PD + TiFlash + TiCDC
10.0.1.5TiDB+ TiKV + モニター
10.0.1.1TiKV
10.0.1.2TiKV

スケールイン /PD/TiKV クラスターのスケーリング

このセクションでは、 10.0.1.5のホストから TiKV ノードを削除する方法を例示します。

ノート:

  • 同様の手順を実行して、TiDB または PD ノードを削除できます。
  • TiKV、TiFlash、および TiDB Binlogコンポーネントは非同期でオフラインになり、停止プロセスに時間がかかるため、TiUP はさまざまな方法でそれらをオフラインにします。詳細については、 コンポーネントのオフライン プロセスの特定の処理を参照してください。
  • TiKV の PD クライアントは、PD ノードのリストをキャッシュします。 TiKV の現在のバージョンには、PD ノードを自動的かつ定期的に更新するメカニズムがあり、TiKV によってキャッシュされた PD ノードのリストが期限切れになる問題を軽減するのに役立ちます。ただし、PD をスケールアウトした後は、スケーリング前に存在するすべての PD ノードを一度に直接削除しないようにする必要があります。必要に応じて、既存のすべての PD ノードをオフラインにする前に、PD リーダーを新しく追加された PD ノードに切り替えてください。
  1. ノード ID 情報をビューします。

    tiup cluster display <cluster-name>
    
    Starting /root/.tiup/components/cluster/v1.10.3/cluster display <cluster-name>
    TiDB Cluster: <cluster-name>
    TiDB Version: v6.2.0
    ID              Role         Host        Ports                            Status  Data Dir                Deploy Dir
    --              ----         ----        -----                            ------  --------                ----------
    10.0.1.3:8300   cdc          10.0.1.3    8300                             Up      data/cdc-8300           deploy/cdc-8300
    10.0.1.4:8300   cdc          10.0.1.4    8300                             Up      data/cdc-8300           deploy/cdc-8300
    10.0.1.4:2379   pd           10.0.1.4    2379/2380                        Healthy data/pd-2379            deploy/pd-2379
    10.0.1.1:20160  tikv         10.0.1.1    20160/20180                      Up      data/tikv-20160         deploy/tikv-20160
    10.0.1.2:20160  tikv         10.0.1.2    20160/20180                      Up      data/tikv-20160         deploy/tikv-20160
    10.0.1.5:20160  tikv         10.0.1.5    20160/20180                      Up      data/tikv-20160         deploy/tikv-20160
    10.0.1.3:4000   tidb         10.0.1.3    4000/10080                       Up      -                       deploy/tidb-4000
    10.0.1.4:4000   tidb         10.0.1.4    4000/10080                       Up      -                       deploy/tidb-4000
    10.0.1.5:4000   tidb         10.0.1.5    4000/10080                       Up      -                       deploy/tidb-4000
    10.0.1.3:9000   tiflash      10.0.1.3    9000/8123/3930/20170/20292/8234  Up      data/tiflash-9000       deploy/tiflash-9000
    10.0.1.4:9000   tiflash      10.0.1.4    9000/8123/3930/20170/20292/8234  Up      data/tiflash-9000       deploy/tiflash-9000
    10.0.1.5:9090   prometheus   10.0.1.5    9090                             Up      data/prometheus-9090    deploy/prometheus-9090
    10.0.1.5:3000   grafana      10.0.1.5    3000                             Up      -                       deploy/grafana-3000
    10.0.1.5:9093   alertmanager 10.0.1.5    9093/9294                        Up      data/alertmanager-9093  deploy/alertmanager-9093
    
  2. スケールイン コマンドを実行します。

    tiup cluster scale-in <cluster-name> --node 10.0.1.5:20160
    

    --nodeパラメーターは、オフラインにするノードの ID です。

    Scaled cluster <cluster-name> in successfullyが表示された場合、スケールイン操作は成功しています。

  3. クラスターのステータスを確認します。

    スケールイン プロセスには時間がかかります。次のコマンドを実行して、スケールインのステータスを確認できます。

    tiup cluster display <cluster-name>
    

    スケールインするノードがTombstoneになると、スケールイン操作は成功します。

    ブラウザを使用してhttp://10.0.1.5:3000のモニタリング プラットフォームにアクセスし、クラスタのステータスを表示します。

現在のトポロジは次のとおりです。

ホスト IPサービス
10.0.1.3TiDB + TiFlash + TiCDC
10.0.1.4TiDB + PD + TiFlash + TiCDC
10.0.1.5TiDB + Monitor (TiKV は削除)
10.0.1.1TiKV
10.0.1.2TiKV

スケールインクラスターのスケーリング

このセクションでは、 10.0.1.4のホストから TiFlash ノードを削除する方法を例示します。

1. 残りの TiFlash ノードの数に応じて、テーブルのレプリカの数を調整します。

ノードがダウンする前に、TiFlash クラスター内の残りのノードの数が、すべてのテーブルのレプリカの最大数以上であることを確認してください。それ以外の場合は、関連するテーブルの TiFlash レプリカの数を変更します。

  1. レプリカがクラスター内の残りの TiFlash ノードの数よりも多いすべてのテーブルに対して、TiDB クライアントで次のコマンドを実行します。

    ALTER TABLE <db-name>.<table-name> SET tiflash replica 0;
    
  2. 関連するテーブルの TiFlash レプリカが削除されるまで待ちます。 テーブル レプリケーションの進行状況を確認するであり、関連するテーブルのレプリケーション情報が見つからない場合、レプリカは削除されます。

2. スケールイン操作を実行する

次のいずれかのソリューションでスケールイン操作を実行します。

解決策 1. TiUP を使用して TiFlash ノードを削除する

  1. 停止するノードの名前を確認します。

    tiup cluster display <cluster-name>
    
  2. TiFlash ノードを削除します (ノード名がステップ10.0.1.4:9000の 1 であると仮定します)。

    tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000
    

解決策 2. TiFlash ノードを手動で削除する

特別な場合 (ノードを強制的に停止する必要がある場合など)、または TiUP スケールイン操作が失敗した場合は、次の手順で TiFlash ノードを手動で削除できます。

  1. pd-ctl の store コマンドを使用して、この TiFlash ノードに対応するストア ID を表示します。

    • pd-ctlに store コマンドを入力します (バイナリ ファイルは tidb-ansible ディレクトリのresources/binの下にあります)。

    • TiUP デプロイメントを使用する場合は、 pd-ctltiup ctl pdに置き換えます。

    tiup ctl:<cluster-version> pd -u http://<pd_ip>:<pd_port> store
    

    ノート:

    クラスター内に複数の PD インスタンスが存在する場合、上記のコマンドでアクティブな PD インスタンスの IP アドレス:ポートのみを指定する必要があります。

  2. pd-ctl で TiFlash ノードを削除します。

    • pd-ctl にstore delete <store_id>を入力します ( <store_id>は、前の手順で見つかった TiFlash ノードのストア ID です。

    • TiUP デプロイメントを使用する場合は、 pd-ctltiup ctl pdに置き換えます。

      tiup ctl:<cluster-version> pd -u http://<pd_ip>:<pd_port> store delete <store_id>
      

    ノート:

    クラスター内に複数の PD インスタンスが存在する場合、上記のコマンドでアクティブな PD インスタンスの IP アドレス:ポートのみを指定する必要があります。

  3. TiFlash プロセスを停止する前に、TiFlash ノードのストアが消えるか、 state_nameTombstoneになるのを待ちます。

  4. TiFlash データ ファイルを手動で削除します (場所は、クラスター トポロジ ファイルの TiFlash 構成の下のdata_dirディレクトリにあります)。

  5. 次のコマンドを使用して、ダウンした TiFlash ノードに関する情報をクラスター トポロジから削除します。

    tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force
    

ノート:

クラスター内のすべての TiFlash ノードが実行を停止する前に、TiFlash に複製されたすべてのテーブルが取り消されていない場合は、PD の複製ルールを手動でクリーンアップする必要があります。そうしないと、TiFlash ノードを正常に停止できません。

PD でレプリケーション ルールを手動でクリーンアップする手順は次のとおりです。

  1. 現在の PD インスタンスの TiFlash に関連するすべてのデータ レプリケーション ルールをビューします。

    curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash
    
    [
      {
        "group_id": "tiflash",
        "id": "table-45-r",
        "override": true,
        "start_key": "7480000000000000FF2D5F720000000000FA",
        "end_key": "7480000000000000FF2E00000000000000F8",
        "role": "learner",
        "count": 1,
        "label_constraints": [
          {
            "key": "engine",
            "op": "in",
            "values": [
              "tiflash"
            ]
          }
        ]
      }
    ]
    
  2. TiFlash に関連するすべてのデータ レプリケーション ルールを削除します。例として、 idtable-45-rであるルールを取り上げます。次のコマンドで削除します。

    curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r
    
  3. クラスターのステータスをビューします。

    tiup cluster display <cluster-name>
    

    ブラウザを使用してhttp://10.0.1.5:3000のモニタリング プラットフォームにアクセスし、クラスタと新しいノードのステータスを表示します。

スケールアウト後のクラスター トポロジは次のようになります。

ホスト IPサービス
10.0.1.3TiDB + TiFlash + TiCDC
10.0.1.4TiDB + PD + TiCDC (TiFlash は削除)
10.0.1.5TiDB+ モニター
10.0.1.1TiKV
10.0.1.2TiKV

スケールインクラスターでスケーリングする

このセクションでは、 10.0.1.4のホストから TiCDC ノードを削除する方法を例示します。

  1. ノードをオフラインにします。

    tiup cluster scale-in <cluster-name> --node 10.0.1.4:8300
    
  2. クラスターのステータスをビューします。

    tiup cluster display <cluster-name>
    

    ブラウザを使用してhttp://10.0.1.5:3000のモニタリング プラットフォームにアクセスし、クラスタのステータスを表示します。

現在のトポロジは次のとおりです。

ホスト IPサービス
10.0.1.3TiDB + TiFlash + TiCDC
10.0.1.4TiDB + PD + (TiCDCは削除)
10.0.1.5TiDB + モニター
10.0.1.1TiKV
10.0.1.2TiKV
エコシステム
TiDB
TiKV
TiFlash
TiSpark
Chaos Mesh
© 2023 PingCAP. All Rights Reserved.