TiDBクラスタ構築

Last-modified: Mon, 04 Nov 2024 23:39:45 JST (36d)
Top > TiDBクラスタ構築

TiDBのクラスタ構築メモです。
クラスタ構築に際し、公式ドキュメントも合わせて参照してください。

今回の構成

今回構築するクラスタの内容は以下のとおりです。流石に個人環境でこれだけの台数PCを用意するわけにはいかないので、Proxmox上にUbuntuコンテナを作成しました。
ホスト名はTiDBクラスタ構築については直接関係はありませんが、SSHで接続する際など識別する為につけています。

ホスト名IPアドレス
pd01.example.com192.168.24.100
pd02.example.com192.168.24.110
pd03.example.com192.168.24.120
tidb01.example.com192.168.24.130
tidb02.example.com192.168.24.140
tikv01.example.com192.168.24.150
tikv02.example.com192.168.24.160
tikv03.example.com192.168.24.170
monitor.example.com192.168.24.180
alert.example.com192.168.24.190
proxy.example.com192.168.24.200

前提条件

今回クラスタ構築手順の把握が目的なので、クラスタ構築に際し直接的に影響をしない部分について簡略化をしています。

  • 全てのマシンはUbuntu Server 22.04.4 LTS の最小インストール環境(Proxmoxのコンテナイメージを使用)
    • ちなみに、UbuntuはTiDBでは正式サポートOS ではありません
  • メモリはとりあえず全部4GB。(TiDB Proxyのみ2GB)不足するようであれば割り当てを増やす
  • SSHのポート番号は22番
  • 全てのマシンのファイヤーウォールは未設定
  • 全てのマシンは同一サブネットに所属する
  • 全てのマシンのRootアカウントはPassword認証
  • RootでSSH接続を可能とする(手順内で作業実施)
  • TiDBクラスタではパフォーマンスのためSWAPの無効化やカーネルパラメタの変更などが推奨されるが、実施しない
  • アラートや監視設定はデフォルトのまま(PrometheusやGraphanaの設定が必要だが筆者が触ったことがないので設定方法がわからない)

構築内容

以下のクラスタを構築します。

  • PDサーバは3台の冗長構成
  • TiDBサーバは2台の冗長構成
  • TiKVサーバは3台の冗長構成
  • 監視、アラートマシンは1台
  • TiDBクラスタに接続するためのTiDB Proxyサーバ1台
    • ポート番号はMySQLクライアントと接続したいので3306とする。

TiUPコマンドのインストールとクラスタ定義ファイル作成

クラスタの作成に必要な定義ファイルを作成します。
以降デプロイ作業に作業用PCが必要になりますが、ここではアラート用PC(alert.example.com)にて作業をします。
また全ての作業はRootユーザで実施しました。

  1. TiUPコマンドのインストール
    以下のコマンドを実行し、TiUPコマンドをインストールします。
    #curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  2. インストールが完了をすると、以下のようなメッセージが出ます。
    Successfully set mirror to https://tiup-mirrors.pingcap.com
    Detected shell: bash
    Shell profile:  /root/.bashrc
    /root/.bashrc has been modified to add tiup to PATH
    open a new terminal or source /root/.bashrc to use it
    Installed path: /root/.tiup/bin/tiup
    ===============================================
    Have a try:     tiup playground
    ===============================================
  3. メッセージに従い、以下のコマンドを実行します。
    source .bashrc
  4. クラスタ定義設定ファイル topology.yaml を以下の内容で作成をします。作成場所はRootユーザのホームディレクトリ直下にしました。
    なお設定ファイルにあるように、全てのマシンについて必ずしも別IPを割り当てないといけないわけではありません。
    # # Global variables are applied to all deployments and used as the default value of
    # # the deployments if a specific deployment value is missing.
    global:
      user: "tidb"
      ssh_port: 22
      deploy_dir: "/tidb-deploy"
      data_dir: "/tidb-data"
    
    pd_servers:
      - host: 192.168.24.100
      - host: 192.168.24.110
      - host: 192.168.24.120
    
    tidb_servers:
      - host: 192.168.24.130
      - host: 192.168.24.140
    
    tikv_servers:
      - host: 192.168.24.150
      - host: 192.168.24.160
      - host: 192.168.24.170
    
    monitoring_servers:
      - host: 192.168.24.180
    
    grafana_servers:
     - host: 192.168.24.180
    
    alertmanager_servers:
     - host: 192.168.24.190
    
    tiproxy_servers:
      - host: 192.168.24.200
        port: 3306

RootでのSSH接続許可設定

全てのマシンに対しRootユーザでのSSH接続接続を許可します。

  1. /etc/ssh/sshd_config について以下の設定に変更をします。
    PermitRootLogin  yes

TiDBクラスタ構築

ここまで準備が完了しましたらTiDBクラスタを構築します。
クラスタを構築するために以下のコマンドを実行します。
前述の通り今回はお試し環境なのでRootユーザでログインし、公開鍵認証ではなくパスワード認証でログインします。
ここではTiDBクラスタ名をtidb-testとし、TiDBのバージョンをv8.1.0とします。

tiup cluster deploy tidb-test v8.1.0 ./topology.yaml --user root -p

ザザッとチェックが走り、構築可能であれば以下のメッセージが表示されます。

Attention:
    1. If the topology is not what you expected, check your yaml file.
    2. Please confirm there is no port/directory conflicts in same host.

クラスタ設定ファイルに誤り(IPアドレスの間違いとか)がなければ、y を入力しクラスタのデプロイをします。

tidb-01.png

TiDBクラスタの初期化

無事TiDBクラスタがの構築が完了しましたら以下のメッセージが表示されます。

Cluster `tidb-test` deployed successfully, you can start it with command: `tiup cluster start tidb-test --init`

指示に従い、以下のコマンドを実行します。

tiup cluster start tidb-test --init

TiDBクラスタの初期化が完了しましたら、以下のメッセージが表示されます。
TiDBコンパネにログインするためのRootアカウント用パスワードが表示されますので必ず控えておきます。

Started cluster `tidb-test` successfully
The root password of TiDB database has been changed.
The new password is: '<TiDBのrootユーザ初期パスワード>'.
Copy and record it to somewhere safe, it is only displayed once, and will not be stored.
The generated password can NOT be get and shown again.

TiDBクラスタのシャットダウン、起動

前述の段階でTiDBクラスタが起動していますので、シャットダウンをしてみます。
以下のコマンドを実行することでTiDBクラスタ全体をシャットダウンできます。

tiup cluster stop tidb-test

Stopped cluster `tidb-test` successfully と出ればシャットダウン成功です。
ではTiDBクラスタを起動してみます。以下のコマンドを実行します。

tiup cluster start tidb-test

Started cluster `tidb-test` successfully と出れば起動成功です。
なお、TiDBクラスタ自体はマシン起動時に自動で起動します。

TiDBコンパネへ接続をする。

TiDBクラスタが起動しましたら、TiDB管理用コンパネにログインしてみます。
以下のコマンドを実行することで、コンパネのログインURLが表示されます。
また現在のTiDBクラスタのステータスを確認することもできます。

tiup cluster display tidb-test

コンパネにログインをするとこのようにクラスタの状態をコンパネ上からも確認ができます。

tidb-03.png

TiDBクラスタ冗長性確認

今回構築したTiDBクラスタは冗長構成をとっていますので、動作を確認します。
まずTiDBのProxyサーバ(この例ではproxy.example.com IP:192.168.24.200)のPort3306についてrootユーザで適当なMySQLクライアントから接続します。
今回はお試しなのでデフォルトで作成される初期データベース test に適当なテーブルを作成しました。以下テーブルを作成するサンプルSQLです。

USE test;
-- drop table KEN_ALL;  -- 必要に応じ
create table if not EXISTS KEN_ALL (
  yubinid_old VARCHAR(5) NOT NULL comment '(旧)郵便番号',
  yubinid VARCHAR(7) NOT NULL comment '郵便番号',
  todouhuken_kana VARCHAR(128) NOT NULL comment '都道府県',
  sikugun_kana VARCHAR(128) NOT NULL comment '市区郡',
  cho_name_kana  VARCHAR(128) NOT NULL comment '町名',
  todouhuken VARCHAR(128) NOT NULL comment '都道府県',
  sikugun VARCHAR(128) NOT NULL comment '市区郡',
  cho_name VARCHAR(128) NOT NULL comment '町名'
) comment='郵便番号テーブル'

テーブルが作成できましたら、冗長が取れている適当なサーバ(ここではpd02.example.com IP:192.168.24.110)をシャットダウンしました。
TiDBコンパネからもステータスが確認できず警告が出ています。

tidb-04.png

この状態でもMySQLクライアントからの接続やデータの登録、検索など動作に支障がないことを確認します。
その後、シャットダウンしたサーバを起動し、TiDBクラスタが自動復旧することを確認します。

TiDBクラスタのバージョンアップ

TiDBクラスタのバージョンアップを実施してみます。最新の手順やアップグレード時の注意事項などは公式ドキュメントを参照してください。

  1. まずTiUPコマンドを最新化します。
    tiup update --self
  2. 次にクラスタをアップデートします。
    tiup update cluster
  3. 現在のクラスタが正常に動作しているかを念のためチェックします。
    tiup cluster check tidb-test --cluster
    自分の環境ではカーネルパラメタ周りなどいくつかでFail判定をされましたが、今回はお試し環境なので無視します。
  4. 現時点でバージョンアップ可能なバージョンを調べます。
    tiup list tidb
  5. 指定したバージョン(ここでは v8.1.0からv8.2.0へ)にバージョンアップします。
    tiup cluster upgrade tidb-test v8.2.0
    ザザッとチェックが入ってい以下のようなメッセージが表示されます。
    Before the upgrade, it is recommended to read the upgrade guide at https://docs.pingcap.com/tidb/stable/upgrade-tidb-using-tiup and finish the preparation steps.
    This operation will upgrade tidb v8.1.0 cluster tidb-test to v8.2.0:
    will upgrade and restart component "                 pd" to "v8.2.0",
    will upgrade and restart component "               tikv" to "v8.2.0",
    will upgrade and restart component "               tidb" to "v8.2.0",
    will upgrade and restart component "         prometheus" to "v8.2.0",
    will upgrade and restart component "            grafana" to "v8.2.0",
    will upgrade and restart component "       alertmanager" to "",
    will upgrade component     "node-exporter" to "",
    will upgrade component "blackbox-exporter" to "".
    Do you want to continue? [y/N]:(default=N) 
  6. 問題なければ y でアップグレードをします。
    Upgraded cluster `tidb-test` successfully
    と出ればOKです。

Counter: 65, today: 2, yesterday: 0

このページの参照回数は、65です。