TiDB環境とシステムコンフィグレーションのチェック

このドキュメントでは、TiDB をデプロイする前に行う環境チェック手順について説明します。以下の手順は優先度順に説明されています。

TiKVを展開するターゲットマシンにオプション付きでデータディスクのext4ファイルシステムをマウントします。

本番環境では、TiKVデータの保存にEXT4ファイルシステムのNVMe SSDを使用することをお勧めします。この構成はベストプラクティスであり、その信頼性、セキュリティ、安定性は多数のオンラインシナリオで実証されています。

rootユーザー アカウントを使用してターゲット マシンにログインします。

データディスクをext4ファイルシステムにフォーマットし、マウントオプションnodelallocnoatimeファイルシステムに追加してください。オプションnodelalloc追加しないと、 TiUPデプロイメントは事前チェックに合格できません。オプションnoatime任意です。

注記:

データ ディスクが ext4 にフォーマットされていて、マウント オプションが追加されている場合は、 umount /dev/nvme0n1p1コマンドを実行してアンインストールし、以下の 5 番目の手順に直接進んで/etc/fstabファイルを編集し、オプションをファイル システムに再度追加することができます。

/dev/nvme0n1データ ディスクを例に挙げます。

  1. データ ディスクをビュー。

    fdisk -l
    Disk /dev/nvme0n1: 1000 GB
  2. パーティションを作成します。

    parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1

    大規模な NVMe デバイスの場合は、複数のパーティションを作成できます。

    parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 2000GB parted -s -a optimal /dev/nvme0n1 -- mkpart primary ext4 2000GB -1

    注記:

    パーティションのデバイス番号を表示するには、 lsblkコマンドを使用します。NVMe ディスクの場合、生成されるデバイス番号は通常nvme0n1p1です。通常のディスク (たとえば、 /dev/sdb ) の場合、生成されるデバイス番号は通常sdb1

  3. データ ディスクを ext4 ファイルシステムにフォーマットします。

    mkfs.ext4 /dev/nvme0n1p1
  4. データ ディスクのパーティション UUIDをビュー。

    この例では、nvme0n1p1 の UUID はc51eb23b-195c-4061-92a9-3fad812cc12fです。

    lsblk -f
    NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 ext4 237b634b-a565-477b-8371-6dff0c41f5ab /boot ├─sda2 swap f414c5c0-f823-4bb1-8fdf-e531173a72ed └─sda3 ext4 547909c1-398d-4696-94c6-03e43e317b60 / sr0 nvme0n1 └─nvme0n1p1 ext4 c51eb23b-195c-4061-92a9-3fad812cc12f
  5. /etc/fstabファイルを編集し、 nodelallocマウント オプションを追加します。

    vi /etc/fstab
    UUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2
  6. データ ディスクをマウントします。

    mkdir /data1 && \ systemctl daemon-reload && \ mount -a
  7. 次のコマンドを使用して確認します。

    mount -t ext4
    /dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)

    ファイルシステムが ext4 であり、マウント オプションにnodelalloc含まれている場合、ターゲット マシンにオプションを使用してデータ ディスク ext4 ファイルシステムを正常にマウントしています。

システムスワップをチェックして無効にする

TiDBは動作に十分な量のメモリを必要とします。TiDBが使用するメモリがスワップアウトされ、その後スワップインされると、レイテンシーの急上昇を引き起こす可能性があります。安定したパフォーマンスを維持したい場合は、システムスワップを恒久的に無効化することをお勧めしますが、メモリ不足時にOOM(メモリ不足)問題が発生する可能性があります。このようなOOM問題を回避したい場合は、恒久的に無効化するのではなく、スワップ優先度を下げるだけで済みます。

  • スワップを有効化して使用すると、パフォーマンスのジッター問題が発生する可能性があります。低レイテンシで安定性が重要なデータベースサービスでは、オペレーティングシステム層のスワップを恒久的に無効化することをお勧めします。スワップを恒久的に無効化するには、以下の方法があります。

    • オペレーティング システムの初期化フェーズでは、スワップ パーティション ディスクを個別にパーティション分割しないでください。

    • オペレーティング システムの初期化フェーズ中に別のスワップ パーティション ディスクを既にパーティション分割し、スワップを有効にしている場合は、次のコマンドを実行して無効にします。

      echo "vm.swappiness = 0">> /etc/sysctl.conf sysctl -p swapoff -a && swapon -a
  • ホストメモリが不足している場合、システムスワップを無効にするとOOM問題が発生する可能性が高くなります。スワップを永続的に無効にする代わりに、次のコマンドを実行してスワップ優先度を下げることができます。

    echo "vm.swappiness = 0">> /etc/sysctl.conf sysctl -p

TiDBの一部の操作では、サーバーへの一時ファイルの書き込みが必要となるため、TiDBを実行するオペレーティングシステムユーザーに、対象ディレクトリへの読み書き権限が十分にあることを確認する必要があります。TiDBインスタンスをroot権限で起動していない場合は、ディレクトリの権限を確認し、正しく設定する必要があります。

  • TiDB作業領域

    ハッシュテーブルの構築やソートなど、大量のメモリを消費する操作では、メモリ消費量を削減し、安定性を向上させるために、一時データをディスクに書き込む場合があります。書き込み先のディスク上の場所は、設定項目tmp-storage-pathで定義されます。デフォルト設定では、TiDBを実行するユーザーに、オペレーティングシステムの一時フォルダ(通常は/tmp )への読み取りおよび書き込み権限があることを確認してください。

  • Fast Online DDL作業領域

    変数tidb_ddl_enable_fast_reorg ON (v6.5.0 以降のバージョンではデフォルト値) に設定されている場合、 Fast Online DDL有効になり、一部の DDL 操作ではファイルシステム内の一時ファイルの読み取りと書き込みが必要になります。この場所は設定項目temp-dirで定義されます。TiDB を実行するユーザーには、オペレーティングシステムのそのディレクトリに対する読み取りおよび書き込み権限があることを確認する必要があります。デフォルトのディレクトリ/tmp/tidb tmpfs (一時ファイルシステム) を使用します。ディスクディレクトリを明示的に指定することをお勧めします。以下は、例として/data/tidb-deploy/tempdir使用しています。

    注記:

    アプリケーション内に大きなオブジェクトに対する DDL 操作が存在する場合は、 temp-dir用に独立した大きなファイル システムを構成することを強くお勧めします。

    sudo mkdir -p /data/tidb-deploy/tempdir

    /data/tidb-deploy/tempdirディレクトリがすでに存在する場合は、書き込み権限が付与されていることを確認してください。

    sudo chmod -R 777 /data/tidb-deploy/tempdir

    注記:

    ディレクトリが存在しない場合は、TiDB は起動時に自動的に作成します。ディレクトリの作成に失敗した場合、または TiDB がそのディレクトリに対する読み取りおよび書き込み権限を持っていない場合、実行時にFast Online DDL無効化されます。

対象マシンのファイアウォールサービスを確認する

TiDBクラスターでは、読み取り/書き込みリクエストやデータハートビートなどの情報を確実に伝送するために、ノード間のアクセスポートが開いている必要があります。一般的なオンラインシナリオでは、データベースとアプリケーションサービス間、およびデータベースノード間のデータインタラクションはすべて、セキュアなネットワーク内で行われます。したがって、特別なセキュリティ要件がない場合は、対象マシンのファイアウォールを停止することをお勧めします。それ以外の場合は、 ポートの使用状況を参照し、必要なポート情報をファイアウォールサービスの許可リストに追加してください。

ファイアウォールを停止して無効にする

このセクションでは、ターゲット マシンのファイアウォール サービスを停止および無効にする方法について説明します。

  1. ファイアウォールの状態を確認してください。以下の例では、CentOS Linux リリース 7.7.1908 (Core) を使用しています。

    sudo firewall-cmd --state sudo systemctl status firewalld.service
  2. ファイアウォール サービスを停止します。

    sudo systemctl stop firewalld.service
  3. ファイアウォール サービスの自動起動を無効にします。

    sudo systemctl disable firewalld.service
  4. ファイアウォールのステータスを確認します。

    sudo systemctl status firewalld.service

ファイアウォールゾーンを変更する

ファイアウォールを完全に無効にする代わりに、制限の少ないゾーンを使用することもできます。デフォルトのゾーンpublicでは特定のサービスとポートのみが許可され、ゾーンtrustedではデフォルトですべてのトラフィックが許可されます。

デフォルトゾーンをtrustedに設定するには:

firewall-cmd --set-default-zone trusted

デフォルト ゾーンを確認するには:

firewall-cmd --get-default-zone # trusted

ゾーンのポリシーを一覧表示するには:

firewall-cmd --zone=trusted --list-all # trusted # target: ACCEPT # icmp-block-inversion: no # interfaces: # sources: # services: # ports: # protocols: # forward: yes # masquerade: no # forward-ports: # source-ports: # icmp-blocks: # rich rules:

ファイアウォールを設定する

TiDBクラスタコンポーネントのファイアウォールを設定するには、以下のコマンドを使用します。これらの例は参考用です。ゾーン名、ポート、サービスは、実際の環境に合わせて調整してください。

TiDBコンポーネントのファイアウォールを構成します。

firewall-cmd --permanent --new-service tidb firewall-cmd --permanent --service tidb --set-description="TiDB Server" firewall-cmd --permanent --service tidb --set-short="TiDB" firewall-cmd --permanent --service tidb --add-port=4000/tcp firewall-cmd --permanent --service tidb --add-port=10080/tcp firewall-cmd --permanent --zone=public --add-service=tidb

TiKVコンポーネントのファイアウォールを構成します。

firewall-cmd --permanent --new-service tikv firewall-cmd --permanent --service tikv --set-description="TiKV Server" firewall-cmd --permanent --service tikv --set-short="TiKV" firewall-cmd --permanent --service tikv --add-port=20160/tcp firewall-cmd --permanent --service tikv --add-port=20180/tcp firewall-cmd --permanent --zone=public --add-service=tikv

PDコンポーネントのファイアウォールを構成します。

firewall-cmd --permanent --new-service pd firewall-cmd --permanent --service pd --set-description="PD Server" firewall-cmd --permanent --service pd --set-short="PD" firewall-cmd --permanent --service pd --add-port=2379/tcp firewall-cmd --permanent --service pd --add-port=2380/tcp firewall-cmd --permanent --zone=public --add-service=pd

Prometheus のファイアウォールを設定します。

firewall-cmd --permanent --zone=public --add-service=prometheus firewall-cmd --permanent --service=prometheus --add-port=12020/tcp

Grafana のファイアウォールを設定します。

firewall-cmd --permanent --zone=public --add-service=grafana

NTPサービスを確認してインストールする

TiDB は、 ACIDモデルでのトランザクションの線形一貫性を保証するためにノード間のクロック同期を必要とする分散データベース システムです。

現在、クロック同期の一般的なソリューションは、ネットワークタイムプロトコル(NTP)サービスを使用することです。インターネット上のpool.ntp.orgタイミングサービスを使用することも、オフライン環境で独自のNTPサービスを構築することもできます。

NTP サービスがインストールされ、NTPサーバーと正常に同期しているかどうかを確認するには、次の手順を実行します。

  1. 次のコマンドを実行します。1 が返された場合、 runningサービスは実行中です。

    sudo systemctl status ntpd.service
    ntpd.service - Network Time Service Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled) Active: active (running) since 一 2017-12-18 13:13:19 CST; 3s ago
    • Unit ntpd.service could not be found.返された場合は、次のコマンドを試して、システムが NTP とのクロック同期を実行するためにntpdではなくchronyd使用するように設定されているかどうかを確認します。

      sudo systemctl status chronyd.service
      chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-04-05 09:55:29 EDT; 3 days ago

      結果にchronydntpdどちらも設定されていないと表示された場合は、どちらもシステムにインストールされていないことを意味します。まずchronydまたはntpdをインストールし、自動起動できることを確認してください。デフォルトではntpdが使用されます。

      システムがchronyd使用するように構成されている場合は、手順 3 に進みます。

  2. ntpstatコマンドを実行して、NTP サービスが NTPサーバーと同期しているかどうかを確認します。

    注記:

    Ubuntu システムの場合は、 ntpstatパッケージをインストールする必要があります。

    ntpstat
    • synchronised to NTP server (NTPサーバーと同期中) が返された場合、同期プロセスは正常です。

      synchronised to NTP server (85.199.214.101) at stratum 2 time correct to within 91 ms polling server every 1024 s
    • 次の状況は、NTP サービスが正常に同期していないことを示しています。

      unsynchronised
    • 次の状況は、NTP サービスが正常に実行されていないことを示しています。

      Unable to talk to NTP daemon. Is it running?
  3. chronyc trackingコマンドを実行して、Chrony サービスが NTPサーバーと同期しているかどうかを確認します。

    注記:

    これは、NTPd の代わりに Chrony を使用するシステムにのみ適用されます。

    chronyc tracking
    • コマンドがLeap status : Normal返す場合、同期プロセスは正常です。

      Reference ID : 5EC69F0A (ntp1.time.nl) Stratum : 2 Ref time (UTC) : Thu May 20 15:19:08 2021 System time : 0.000022151 seconds slow of NTP time Last offset : -0.000041040 seconds RMS offset : 0.000053422 seconds Frequency : 2.286 ppm slow Residual freq : -0.000 ppm Skew : 0.012 ppm Root delay : 0.012706812 seconds Root dispersion : 0.000430042 seconds Update interval : 1029.8 seconds Leap status : Normal
    • コマンドが次の結果を返す場合、同期でエラーが発生しています。

      Leap status : Not synchronised
    • コマンドが次の結果を返す場合、 chronydサービスは正常に実行されていません。

      506 Cannot talk to daemon
    • オフセットが大きすぎると思われる場合は、コマンドchronyc makestepを実行してすぐに時間オフセットを修正できます。それ以外の場合は、 chronyd実行して徐々に時間オフセットを修正します。

NTPサービスの同期をできるだけ早く開始するには、次のコマンドを実行してください。1 pool.ntp.org NTPサーバーに置き換えてください。

sudo systemctl stop ntpd.service && \ sudo ntpdate pool.ntp.org && \ sudo systemctl start ntpd.service

CentOS 7 システムに NTP サービスを手動でインストールするには、次のコマンドを実行します。

sudo yum install ntp ntpdate && \ sudo systemctl start ntpd.service && \ sudo systemctl enable ntpd.service

オペレーティングシステムの最適なパラメータを確認して構成する

本番環境の TiDB の場合、次の方法でオペレーティング システム構成を最適化することをお勧めします。

  1. THP(Transparent Huge Pages)を無効にします。データベースのメモリアクセスパターンは、連続的ではなくスパースになる傾向があります。高レベルのメモリ断片化が深刻な場合、THPページの割り当て時にレイテンシーが増大します。

  2. storageメディアの I/O スケジューラを設定します。

    • 高速SSDstorageの場合、カーネルのデフォルトのI/Oスケジューリング操作によってパフォーマンスが低下する可能性があります。I/Oスケジューラをnoopnoneなどの先入先出(FIFO)に設定することをお勧めします。この設定により、カーネルはI/O要求をスケジューリングなしで直接ハードウェアに渡すことができるため、パフォーマンスが向上します。
    • NVMestorageの場合、デフォルトの I/O スケジューラはnoneなので、調整は必要ありません。
  3. CPU周波数を制御するcpufrequモジュールには、モードperformance選択してください。CPU周波数が動的な調整なしにサポートされている最高動作周波数に固定されている場合、パフォーマンスは最大限に発揮されます。

現在のオペレーティング システムの構成を確認し、最適なパラメータを構成するには、次の手順を実行します。

  1. THP が有効か無効かを確認するには、次のコマンドを実行します。

    cat /sys/kernel/mm/transparent_hugepage/enabled
    [always] madvise never

    注記:

    [always] madvise never出力された場合、THP が有効になっています。無効にする必要があります。

  2. 次のコマンドを実行して、データ ディレクトリが配置されているディスクの I/O スケジューラを確認します。

    データ ディレクトリで SD または VD デバイスを使用している場合は、次のコマンドを実行して I/O スケジューラを確認します。

    cat /sys/block/sd[bc]/queue/scheduler
    noop [deadline] cfq noop [deadline] cfq

    注記:

    noop [deadline] cfqが出力された場合、ディスクのI/Oスケジューラはdeadlineモードです。これをnoopに変更する必要があります。

    データ ディレクトリで NVMe デバイスを使用している場合は、次のコマンドを実行して I/O スケジューラを確認します。

    cat /sys/block/nvme[01]*/queue/scheduler
    [none] mq-deadline kyber bfq [none] mq-deadline kyber bfq

    注記:

    [none] mq-deadline kyber bfq NVMe デバイスがnone I/O スケジューラを使用しており、変更の必要がないことを示します。

  3. ディスクのID_SERIAL表示するには、次のコマンドを実行します。

    udevadm info --name=/dev/sdb | grep ID_SERIAL
    E: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81 E: ID_SERIAL_SHORT=6d0946606d79f90025f3e09a0c1f9e81

    注記:

    • 複数のディスクにデータ ディレクトリが割り当てられている場合は、各ディスクのID_SERIAL記録するために、各ディスクに対して上記のコマンドを実行する必要があります。
    • デバイスがnoopまたはnoneスケジューラを使用している場合は、 ID_SERIAL記録したり、udev ルールや調整されたプロファイルを構成したりする必要はありません。
  4. cpufreq モジュールの電源ポリシーを確認するには、次のコマンドを実行します。

    cpupower frequency-info --policy
    analyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.10 GHz. The governor "powersave" may decide which speed to use within this range.

    注記:

    The governor "powersave"出力された場合、 cpufreq モジュールの電源ポリシーはpowersaveです。これをperformanceに変更する必要があります。仮想マシンまたはクラウドホストを使用している場合、通常は出力はUnable to determine current policyとなり、何も変更する必要はありません。

  5. オペレーティング システムの最適なパラメータを構成します。

    • 方法 1:tuned を使用する (推奨)

      1. 現在のオペレーティング システムの調整されたプロファイルを表示するには、 tuned-adm listコマンドを実行します。

        tuned-adm list
        Available profiles: - balanced - General non-specialized tuned profile - desktop - Optimize for the desktop use-case - hpc-compute - Optimize for HPC compute workloads - latency-performance - Optimize for deterministic performance at the cost of increased power consumption - network-latency - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance - network-throughput - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks - powersave - Optimize for low power consumption - throughput-performance - Broadly applicable tuning that provides excellent performance across a variety of common server workloads - virtual-guest - Optimize for running inside a virtual guest - virtual-host - Optimize for running KVM guests Current active profile: balanced

        出力Current active profile: balanced 、現在のオペレーティングシステムの調整済みプロファイルがbalancedあることを意味します。現在のプロファイルに基づいて、オペレーティングシステムの構成を最適化することをお勧めします。

      2. 新しい調整プロファイルを作成します。

        mkdir /etc/tuned/balanced-tidb-optimal/ vi /etc/tuned/balanced-tidb-optimal/tuned.conf
        [main] include=balanced [cpu] governor=performance [vm] transparent_hugepages=never [disk] devices_udev_regex=(ID_SERIAL=36d0946606d79f90025f3e09a0c1fc035)|(ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81) elevator=noop

        出力include=balanced 、オペレーティング システムの最適化構成を現在のbalancedプロファイルに追加することを意味します。

      3. 新しく調整されたプロファイルを適用します。

        注記:

        デバイスがnoopまたはnone I/Oスケジューラを使用している場合は、この手順をスキップしてください。調整済みプロファイルではスケジューラの設定は必要ありません。

        tuned-adm profile balanced-tidb-optimal
    • 方法2:スクリプトを使用して設定する。既に方法1を使用している場合は、この方法をスキップしてください。

      1. デフォルトのカーネル バージョンを確認するには、 grubbyコマンドを実行します。

        注記:

        grubby実行する前に、まずgrubbyパッケージをインストールします。

        grubby --default-kernel
        /boot/vmlinuz-3.10.0-957.el7.x86_64
      2. カーネル構成を変更するには、 grubby --update-kernel実行します。

        grubby --args="transparent_hugepage=never" --update-kernel `grubby --default-kernel`

        注記:

        --update-kernel後に実際のバージョン番号を指定することもできます (例: --update-kernel /boot/vmlinuz-3.10.0-957.el7.x86_64 )。

      3. 変更されたデフォルトのカーネル構成を確認するには、 grubby --info実行します。

        grubby --info /boot/vmlinuz-3.10.0-957.el7.x86_64

        注記:

        --info後には実際のデフォルトのカーネル バージョンが続きます。

        index=0 kernel=/boot/vmlinuz-3.10.0-957.el7.x86_64 args="ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8 transparent_hugepage=never" root=/dev/mapper/centos-root initrd=/boot/initramfs-3.10.0-957.el7.x86_64.img title=CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
      4. THP を直ちに無効にするには、現在のカーネル構成を変更します。

        echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag
      5. udev スクリプトで I/O スケジューラを構成します。

        vi /etc/udev/rules.d/60-tidb-schedulers.rules
        ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1fc035", ATTR{queue/scheduler}="noop" ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_SERIAL}=="36d0946606d79f90025f3e09a0c1f9e81", ATTR{queue/scheduler}="noop"
      6. udev スクリプトを適用します。

        注記:

        デバイスがnoopまたはnone I/Oスケジューラを使用している場合は、この手順をスキップしてください。udevルールの設定は必要ありません。

        udevadm control --reload-rules udevadm trigger --type=devices --action=change
      7. CPU 電力ポリシーを構成するサービスを作成します。

        cat >> /etc/systemd/system/cpupower.service << EOF [Unit] Description=CPU performance [Service] Type=oneshot ExecStart=/usr/bin/cpupower frequency-set --governor performance [Install] WantedBy=multi-user.target EOF
      8. CPU 電源ポリシー構成サービスを適用します。

        systemctl daemon-reload systemctl enable cpupower.service systemctl start cpupower.service
  6. THP ステータスを確認するには、次のコマンドを実行します。

    cat /sys/kernel/mm/transparent_hugepage/enabled
    always madvise [never]
  7. 次のコマンドを実行して、データ ディレクトリが配置されているディスクの I/O スケジューラを確認します。

    cat /sys/block/sd[bc]/queue/scheduler
    [noop] deadline cfq [noop] deadline cfq
  8. cpufreq モジュールの電源ポリシーを確認するには、次のコマンドを実行します。

    cpupower frequency-info --policy
    analyzing CPU 0: current policy: frequency should be within 1.20 GHz and 3.10 GHz. The governor "performance" may decide which speed to use within this range.
  9. sysctlパラメータを変更するには、次のコマンドを実行します。

    echo "fs.file-max = 1000000">> /etc/sysctl.conf echo "net.core.somaxconn = 32768">> /etc/sysctl.conf echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf echo "vm.overcommit_memory = 1">> /etc/sysctl.conf echo "vm.min_free_kbytes = 1048576">> /etc/sysctl.conf sysctl -p

    注記:

    • vm.min_free_kbytesは、システムによって予約される空きメモリの最小量 (KiB 単位) を制御する Linux カーネル パラメータです。
    • vm.min_free_kbytesに設定すると、メモリ回収メカニズムに影響します。設定値が大きすぎると利用可能なメモリが減少し、小さすぎるとメモリ要求速度がバックグラウンド回収速度を超え、メモリ回収が発生し、結果としてメモリ割り当てが遅延する可能性があります。
    • 少なくともvm.min_free_kbytes1048576 (1GiB)に設定することをお勧めします。5KiB NUMAがインストールされているの場合は、 number of NUMA nodes * 1048576に設定することをお勧めします。
    • Linux カーネル 4.11 以前を実行しているシステムの場合は、 net.ipv4.tcp_tw_recycle = 0設定することをお勧めします。
  10. ユーザーのlimits.confファイルを構成するには、次のコマンドを実行します。

    cat << EOF >>/etc/security/limits.conf tidb soft nofile 1000000 tidb hard nofile 1000000 tidb soft stack 32768 tidb hard stack 32768 EOF

SSH相互信頼とパスワードなしのsudoを手動で設定する

このセクションでは、SSH相互信頼とパスワードなしのsudoを手動で設定する方法について説明します。デプロイメントにはTiUPの使用をお勧めします。TiUPはSSH相互信頼とパスワードなしのログインを自動的に設定します。TiUPを使用してTiDBクラスターをデプロイする場合は、このセクションを無視してください。

  1. それぞれrootユーザー アカウントを使用してターゲット マシンにログインし、 tidbユーザーを作成してログイン パスワードを設定します。

    useradd tidb && \ passwd tidb
  2. パスワードなしで sudo を設定するには、次のコマンドを実行し、ファイルの末尾にtidb ALL=(ALL) NOPASSWD: ALL追加します。

    visudo
    tidb ALL=(ALL) NOPASSWD: ALL
  3. tidbユーザーでコントロールマシンにログインし、以下のコマンドを実行します。3 10.0.1.1ターゲットマシンの IP アドレスに置き換え、プロンプトが表示されたらターゲットマシンのtidbユーザーパスワードを入力します。コマンド実行後、SSH 相互信頼が既に作成されています。これは他のマシンにも適用されます。新しく作成されたtidbユーザーには.sshディレクトリがありません。このようなディレクトリを作成するには、RSA キーを生成するコマンドを実行します。コントロールマシンに TiDB コンポーネントを展開するには、コントロールマシンとコントロールマシン自体の相互信頼を設定します。

    ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.1.1
  4. tidbユーザーアカウントを使用してコントロールマシンにログインし、 ssh使用してターゲットマシンの IP アドレスにログインします。パスワードを入力する必要がなく、正常にログインできれば、SSH 相互信頼が正常に構成されています。

    ssh 10.0.1.1
    [tidb@10.0.1.1 ~]$
  5. tidbユーザーでターゲットマシンにログインした後、以下のコマンドを実行します。パスワードを入力する必要がなく、 rootユーザーに切り替えることができれば、 tidbユーザーでパスワードなしのsudoが正常に設定されています。

    sudo -su root
    [root@10.0.1.1 tidb]#

numactlツールをインストールする

このセクションでは、NUMAツールのインストール方法について説明します。オンライン環境では、ハードウェア構成が通常必要以上に高いため、ハードウェアリソースをより適切に計画するために、単一のマシンにTiDBまたはTiKVの複数のインスタンスをデプロイすることができます。このようなシナリオでは、NUMAツールを使用してCPUリソースの競合を防ぎ、パフォーマンスの低下を防ぐことができます。

注記:

  • NUMA を使用してコアをバインドすることは、CPU リソースを分離する方法であり、高度に構成された物理マシンに複数のインスタンスを展開するのに適しています。
  • tiup cluster deploy使用してデプロイメントを完了したら、 execコマンドを使用してクラスター レベルの管理操作を実行できます。

NUMA ツールをインストールするには、次の 2 つの方法のいずれかを実行します。

方法1 :NUMAをインストールするには、ターゲットノードにログインします。CentOS Linuxリリース7.7.1908(Core)を例に挙げます。

sudo yum -y install numactl

方法 2 : tiup cluster execコマンドを実行して、既存のクラスターに NUMA を一括インストールします。

  1. TiUPを使用して TiDBクラスタをデプロイに従ってクラスターtidb-testを展開します。TiDB クラスターをインストールしている場合は、この手順をスキップできます。

    tiup cluster deploy tidb-test v6.1.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]
  2. sudo権限を使用してtiup cluster execコマンドを実行し、 tidb-testクラスター内のすべてのターゲット マシンに NUMA をインストールします。

    tiup cluster exec tidb-test --sudo --command "yum -y install numactl"

    tiup cluster execコマンドのヘルプ情報を取得するには、 tiup cluster exec --helpコマンドを実行します。

SELinuxを無効にする

SELinuxを無効にするか、permissiveモードに設定する必要があります。現在のステータスを確認するには、 ゲットエンフォース(8)ユーティリティを使用してください。

SELinuxが無効になっていない場合は、 /etc/selinux/configファイルを開き、 SELINUX=で始まる行をSELINUX=disabledに変更します。この変更を行った後、システムを再起動する必要があります。7またはenforcing permissive disabledへの変更は、再起動しないと有効になりません。

一部のシステム(Ubuntuなど)では、 /etc/selinux/configファイルが存在せず、getenforceユーティリティがインストールされていない場合があります。その場合は、この手順をスキップしてください。

このページは役に立ちましたか?