TiDB 環境とシステムConfiguration / コンフィグレーションのチェック
このドキュメントでは、TiDB をデプロイする前の環境チェック操作について説明します。次の手順は、優先度順に並べられています。
TiKV を展開するターゲット マシンに、オプションを使用してデータ ディスク ext4 ファイルシステムをマウントします。
実稼働環境では、EXT4 ファイルシステムの NVMe SSD を使用して TiKV データを保存することをお勧めします。この構成はベスト プラクティスであり、その信頼性、セキュリティ、および安定性は多数のオンライン シナリオで証明されています。
root
ユーザー アカウントを使用してターゲット マシンにログインします。
データ ディスクを ext4 ファイル システムにフォーマットし、 nodelalloc
とnoatime
のマウント オプションをファイル システムに追加します。 nodelalloc
オプションを追加する必要があります。追加しないと、TiUP の展開が事前チェックに合格できません。 noatime
オプションはオプションです。
ノート:
データ ディスクが ext4 にフォーマットされ、マウント オプションが追加されている場合は、
umount /dev/nvme0n1p1
コマンドを実行してアンインストールし、以下の 5 番目の手順に直接スキップして/etc/fstab
ファイルを編集し、オプションをファイル システムに再度追加します。
例として/dev/nvme0n1
のデータ ディスクを取り上げます。
データ ディスクをビューします。
fdisk -lDisk /dev/nvme0n1: 1000 GBパーティションを作成します。
parted -s -a optimal /dev/nvme0n1 mklabel gpt -- mkpart primary ext4 1 -1ノート:
lsblk
コマンドを使用して、パーティションのデバイス番号を表示します。NVMe ディスクの場合、生成されるデバイス番号は通常nvme0n1p1
です。通常のディスク (たとえば/dev/sdb
) の場合、生成されるデバイス番号は通常sdb1
です。データ ディスクを ext4 ファイル システムにフォーマットします。
mkfs.ext4 /dev/nvme0n1p1データ ディスクのパーティション UUID をビューします。
この例では、nvme0n1p1 の UUID は
c51eb23b-195c-4061-92a9-3fad812cc12f
です。lsblk -fNAME 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/etc/fstab
のファイルを編集し、nodelalloc
のマウント オプションを追加します。vi /etc/fstabUUID=c51eb23b-195c-4061-92a9-3fad812cc12f /data1 ext4 defaults,nodelalloc,noatime 0 2データ ディスクをマウントします。
mkdir /data1 && \ mount -a以下のコマンドで確認してください。
mount -t ext4/dev/nvme0n1p1 on /data1 type ext4 (rw,noatime,nodelalloc,data=ordered)ファイルシステムが ext4 で、マウント オプションに
nodelalloc
が含まれている場合、データ ディスク ext4 ファイルシステムをオプション付きでターゲット マシンに正常にマウントできます。
システムスワップを確認して無効にする
TiDB は、操作のために十分なメモリ空間を必要とします。メモリが不足している場合、スワップをバッファとして使用すると、パフォーマンスが低下する可能性があります。したがって、次のコマンドを実行して、システム スワップを永続的に無効にすることをお勧めします。
echo "vm.swappiness = 0">> /etc/sysctl.conf
swapoff -a && swapon -a
sysctl -p
ノート:
swapoff -a
を実行してからswapon -a
を実行すると、データがメモリにダンプされ、スワップがクリーンアップされてスワップが更新されます。 swappiness の変更を削除してswapoff -a
のみを実行すると、システムの再起動後にスワップが再び有効になります。
sysctl -p
は、システムを再起動せずに構成を有効にします。
ターゲット マシンのファイアウォール サービスを確認して停止する
TiDB クラスターでは、ノード間のアクセス ポートを開いて、読み取り要求や書き込み要求、データ ハートビートなどの情報を確実に送信できるようにする必要があります。一般的なオンライン シナリオでは、データベースとアプリケーション サービスの間、およびデータベース ノード間のデータのやり取りはすべて、安全なネットワーク内で行われます。したがって、特別なセキュリティ要件がない場合は、ターゲット マシンのファイアウォールを停止することをお勧めします。それ以外の場合は、 ポートの使用を参照して、必要なポート情報をファイアウォール サービスの許可リストに追加します。
このセクションの残りの部分では、ターゲット マシンのファイアウォール サービスを停止する方法について説明します。
ファイアウォールの状態を確認してください。例として、CentOS Linux リリース 7.7.1908 (コア) を取り上げます。
sudo firewall-cmd --state sudo systemctl status firewalld.serviceファイアウォール サービスを停止します。
sudo systemctl stop firewalld.serviceファイアウォール サービスの自動開始を無効にします。
sudo systemctl disable firewalld.serviceファイアウォールの状態を確認してください。
sudo systemctl status firewalld.service
NTP サービスの確認とインストール
TiDB は、 ACIDモデルでトランザクションの線形一貫性を保証するためにノード間のクロック同期を必要とする分散データベース システムです。
現在、クロック同期の一般的な解決策は、ネットワーク タイム プロトコル (NTP) サービスを使用することです。インターネット上のpool.ntp.org
のタイミング サービスを使用するか、オフライン環境で独自の NTP サービスを構築できます。
NTP サービスがインストールされているかどうか、および NTPサーバーと正常に同期しているかどうかを確認するには、次の手順を実行します。
次のコマンドを実行します。
running
が返された場合、NTP サービスは実行中です。sudo systemctl status ntpd.servicentpd.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 agoUnit ntpd.service could not be found.
が返された場合は、次のコマンドを試して、システムがntpd
ではなくchronyd
を使用して NTP とのクロック同期を実行するように構成されているかどうかを確認してください。sudo systemctl status chronyd.servicechronyd.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 agochronyd
もntpd
も構成されていないという結果が表示された場合は、どちらもシステムにインストールされていないことを意味します。最初にchronyd
またはntpd
をインストールし、自動的に起動できることを確認してください。デフォルトでは、ntpd
が使用されます。システムが
chronyd
を使用するように構成されている場合は、ステップ 3 に進みます。
ntpstat
コマンドを実行して、NTP サービスが NTPサーバーと同期しているかどうかを確認します。ノート:
Ubuntu システムの場合、
ntpstat
のパッケージをインストールする必要があります。ntpstatsynchronised 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?
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
NTP サービスができるだけ早く同期を開始できるようにするには、次のコマンドを実行します。 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 では、次の方法でオペレーティング システムの構成を最適化することをお勧めします。
- THP (Transparent Huge Pages) を無効にします。データベースのメモリ アクセス パターンは、連続的ではなく疎になる傾向があります。高レベルのメモリ断片化が深刻な場合、THP ページが割り当てられると、より高いレイテンシーが発生します。
- ストレージ メディアの I/O スケジューラを
noop
に設定します。高速 SSD ストレージ メディアの場合、カーネルの I/O スケジューリング操作によってパフォーマンスが低下する可能性があります。 Scheduler をnoop
に設定すると、カーネルが I/O 要求を他の操作なしでハードウェアに直接送信するため、パフォーマンスが向上します。また、noop スケジューラの方が適しています。 - CPU 周波数を制御する cpufrequ モジュールには
performance
モードを選択します。動的な調整を行わずに、サポートされている最高の動作周波数に CPU 周波数を固定すると、パフォーマンスが最大化されます。
次の手順を実行して、現在のオペレーティング システムの構成を確認し、最適なパラメーターを構成します。
次のコマンドを実行して、THP が有効か無効かを確認します。
cat /sys/kernel/mm/transparent_hugepage/enabled[always] madvise neverノート:
[always] madvise never
が出力された場合、THP は有効です。無効にする必要があります。次のコマンドを実行して、データ ディレクトリが配置されているディスクの I/O スケジューラを確認します。 sdb ディスクと sdc ディスクの両方にデータ ディレクトリを作成するとします。
cat /sys/block/sd[bc]/queue/schedulernoop [deadline] cfq noop [deadline] cfqノート:
noop [deadline] cfq
が出力された場合、そのディスクの I/O スケジューラはdeadline
モードです。noop
に変更する必要があります。次のコマンドを実行して、ディスクの
ID_SERIAL
を確認します。udevadm info --name=/dev/sdb | grep ID_SERIALE: ID_SERIAL=36d0946606d79f90025f3e09a0c1f9e81 E: ID_SERIAL_SHORT=6d0946606d79f90025f3e09a0c1f9e81ノート:
複数のディスクにデータ ディレクトリが割り当てられている場合は、上記のコマンドを数回実行して、各ディスクの
ID_SERIAL
を記録する必要があります。次のコマンドを実行して、cpufreq モジュールの電源ポリシーを確認します。
cpupower frequency-info --policyanalyzing 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
であり、何も変更する必要はありません。オペレーティング システムの最適なパラメーターを構成します。
方法 1: 調整済みを使用する (推奨)
tuned-adm list
コマンドを実行して、現在のオペレーティング システムの調整されたプロファイルを表示します。tuned-adm listAvailable 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
であることを意味します。現在のプロファイルに基づいてオペレーティング システムの構成を最適化することをお勧めします。新しい調整されたプロファイルを作成します。
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
プロファイルに追加することを意味します。新しい調整されたプロファイルを適用します。
tuned-adm profile balanced-tidb-optimal
方法 2: スクリプトを使用して構成します。方法 1 を既に使用している場合は、この方法をスキップしてください。
grubby
コマンドを実行して、デフォルトのカーネル バージョンを確認します。ノート:
grubby
を実行する前に、まずgrubby
パッケージをインストールします。grubby --default-kernel/boot/vmlinuz-3.10.0-957.el7.x86_64grubby --update-kernel
を実行して、カーネル構成を変更します。grubby --args="transparent_hugepage=never" --update-kernel /boot/vmlinuz-3.10.0-957.el7.x86_64ノート:
--update-kernel
の後には、実際のデフォルトのカーネル バージョンが続きます。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)現在のカーネル構成を変更して、THP をすぐに無効にします。
echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defragudev スクリプトで I/O スケジューラを構成します。
vi /etc/udev/rules.d/60-tidb-schedulers.rulesACTION=="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"udev スクリプトを適用します。
udevadm control --reload-rules udevadm trigger --type=devices --action=changeCPU 電源ポリシーを構成するサービスを作成します。
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 EOFCPU 電源ポリシー構成サービスを適用します。
systemctl daemon-reload systemctl enable cpupower.service systemctl start cpupower.service
次のコマンドを実行して、THP ステータスを確認します。
cat /sys/kernel/mm/transparent_hugepage/enabledalways madvise [never]次のコマンドを実行して、データ ディレクトリがあるディスクの I/O スケジューラを確認します。
cat /sys/block/sd[bc]/queue/scheduler[noop] deadline cfq [noop] deadline cfq次のコマンドを実行して、cpufreq モジュールの電源ポリシーを確認します。
cpupower frequency-info --policyanalyzing 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.次のコマンドを実行して、
sysctl
つのパラメーターを変更します。echo "fs.file-max = 1000000">> /etc/sysctl.conf echo "net.core.somaxconn = 32768">> /etc/sysctl.conf echo "net.ipv4.tcp_tw_recycle = 0">> /etc/sysctl.conf echo "net.ipv4.tcp_syncookies = 0">> /etc/sysctl.conf echo "vm.overcommit_memory = 1">> /etc/sysctl.conf sysctl -p次のコマンドを実行して、ユーザーの
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 を使用することをお勧めします。これにより、SSH 相互信頼が自動的に構成され、パスワードなしでログインできます。 TiUP を使用して TiDB クラスターをデプロイする場合は、このセクションを無視してください。
root
のユーザー アカウントを使用してターゲット マシンにそれぞれログインし、tidb
のユーザーを作成してログイン パスワードを設定します。useradd tidb && \ passwd tidbパスワードなしで sudo を構成するには、次のコマンドを実行し、ファイルの末尾に
tidb ALL=(ALL) NOPASSWD: ALL
を追加します。visudotidb ALL=(ALL) NOPASSWD: ALLtidb
ユーザーを使用して制御マシンにログインし、次のコマンドを実行します。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.1tidb
のユーザー アカウントを使用して制御マシンにログインし、ssh
を使用してターゲット マシンの IP にログインします。パスワードを入力する必要がなく、正常にログインできる場合は、SSH 相互信頼が正常に構成されています。ssh 10.0.1.1[tidb@10.0.1.1 ~]$tidb
ユーザーを使用してターゲット マシンにログインした後、次のコマンドを実行します。パスワードを入力する必要がなく、ユーザーroot
に切り替えることができる場合は、ユーザーtidb
のパスワードなしの sudo が正常に構成されています。sudo -su root[root@10.0.1.1 tidb]#
numactl
ツールをインストールする
このセクションでは、NUMA ツールのインストール方法について説明します。オンライン環境では、通常、ハードウェア構成が必要以上に高いため、ハードウェア リソースをより適切に計画するために、TiDB または TiKV の複数のインスタンスを 1 台のマシンにデプロイできます。このようなシナリオでは、NUMA ツールを使用して、パフォーマンスの低下を引き起こす可能性のある CPU リソースの競合を防ぐことができます。
ノート:
- NUMA を使用したコアのバインドは、CPU リソースを分離する方法であり、高度に構成された物理マシンに複数のインスタンスをデプロイするのに適しています。
tiup cluster deploy
を使用してデプロイを完了したら、exec
コマンドを使用してクラスター レベルの管理操作を実行できます。
NUMA ツールをインストールするには、次の 2 つの方法のいずれかを実行します。
方法 1 : ターゲット ノードにログインして NUMA をインストールします。例として、CentOS Linux リリース 7.7.1908 (コア) を取り上げます。
sudo yum -y install numactl
方法 2 : tiup cluster exec
コマンドを実行して、バッチで既存のクラスターに NUMA をインストールします。
TiUP を使用して TiDBクラスタをデプロイするに従ってクラスターをデプロイし
tidb-test
。 TiDB クラスターをインストールしている場合は、この手順を省略できます。tiup cluster deploy tidb-test v6.1.0 ./topology.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]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
コマンドを実行します。