Upgrade to Pro — share decks privately, control downloads, hide ads and more …

tiupによるTiDBの構築 @ TiUG Meetup #3 Osaka / Buildin...

chibiegg
October 25, 2024

tiupによるTiDBの構築 @ TiUG Meetup #3 Osaka / Building TiDB with TiUP

chibiegg

October 25, 2024
Tweet

More Decks by chibiegg

Other Decks in Technology

Transcript

  1. © SAKURA internet Inc. tiupによるTiDBの構築 2024-10-25 @ TiUG Meetup #3

    さくらインターネット 技術推進統括担当 執行役員 / CIO / CISO 江草 陽太
  2. 2 自己紹介 @chibiegg 江草 陽太 【所属】 • さくらインターネット (株) 2014年新卒入社

    執行役員 技術推進統括担当 兼 CISO 兼 CIO • BBSakura Networks (株) 取締役 【経歴】 • ヴィアトール学園 洛星中学・高等学校 • 大阪大学工学部電子情報工学科情報通信工学専攻 • 個人事業主 (大学生時代に開業) • 大阪大学大学院工学研究科中退 【外部】 • U-22プログラミングコンテスト実行委員長 • HomeNOC (AS59105) など 【趣味】 旅行/温泉/写真/電子工作/プログラミング/かわいい服
  3. © SAKURA internet Inc. 4 TiDBの運用経歴 2021年 4月 石狩リージョンに構築 (v5.0.0)

    6月 v5.1.0 にアップデート 7月 v5.1.1 にアップデート (EDB提供開始) 2022年 1月 v5.3.0 にアップデート 5月 v5.4.1 にアップデート 10月 v6.1.1 にアップデート 2023年 3月 v6.5.1 にアップデート 4月 東京リージョンでの提供開始 6月 v7.1.0 にアップデート 7月 TiFlashノードを構築 (自社利用目的) 10月 v7.1.1 にアップデート 10月 v7.1.2 にアップデート 2024年 1月 v7.5.0 にアップデート 9月 v8.1.1 にアップデート LTSでのアップデートを実施
  4. © SAKURA internet Inc. 6 TiKV/TIDB の さくらインターネットでの導入 • sakura.io

    (LTEによるIoTプラットフォーム) 2020年より「データストア(V2)」でTiKVを採用 端末 (モジュール) からのデータを蓄積し検索に利用 NewSQL TiDBを支える分散KVS "TiKV"入門 / @kamijin_fanta https://blog.kamijin-fanta.info/2022/09/tikv-get-started/ • さくらのクラウド 2021年より「エンハンスドデータベース(TiDB)」を提供開始 各種機能やSaaSサービス、社内システムでも利用 これまでならMariaDBやPostgreSQLを利用していた場面に導入
  5. © SAKURA internet Inc. エンハンスドDB のメリット • すぐに使える • 5秒で作れる

    • 容量を気にせず利用できる • 使っている容量に応じて課金される • 最初から大きなディスクを用意しなくて良い • スペックを意識せずに利用できる • 同時接続数を後から増減できる • アップグレードやノード障害を意識しなくて良い • コネクションが切れてもすぐに再接続ができる
  6. © SAKURA internet Inc. 14 EDBの構築と運用の流れ • Terraform + SacloudProvider

    でサーバ等のリソース作成 • Ansibleで基本的なOSのセットアップ • tiup でクラスタの構築やメンテナンス • 日常的には tiup のみを利用すればよい • tiproxyをtidbの前に挟むことで、 tidbのアップデート時の既存の接続は維持される • 新しいTLS証明書はDB内にINSERT (現時点では手動)
  7. © SAKURA internet Inc. Slack BotのDBとして (Golang + ent) •

    Golang + go-sql-driver/mysql + ent で実装 • Slack/Discord内のユーザー間で立て替えの管理を支援するBot
  8. © SAKURA internet Inc. ウェブアプリケーションのDBとして (Python + Django) • Python

    + Django で実装 • ウェブフレームワークのORMをそのまま利用できる • ひなたん写真館 「フィルムデジタル化サービス」 https://service.hinatan.net/
  9. © SAKURA internet Inc. 必要なノード https://docs.pingcap.com/tidb/stable/hardware-and-software-requirements Component CPU Memory Local

    Storage Network Number of Instances TiDB 8 core+ 16 GB+ Disk space requirements (脚注 30GB) Gigabit network card 1 (can be deployed on the same machine with PD) PD 4 core+ 8 GB+ SAS, 200 GB+ Gigabit network card 1 (can be deployed on the same machine with TiDB) TiKV 8 core+ 32 GB+ SAS, 200 GB+ Gigabit network card 3 TiFlash 32 core+ 64 GB+ SSD, 200 GB+ Gigabit network card 1 TiCDC 8 core+ 16 GB+ SAS, 200 GB+ Gigabit network card 1
  10. © SAKURA internet Inc. サーバの作成 • Terraform + SakuraCloud-Provider によりサーバ作成をする

    • Ansibleにより、OSの設定を行う • Ubuntu 24.04 LTS をセットアップ • adminユーザーで公開鍵認証によりSSH接続できる状態にしておく • sudoがパスワードなしで実行できる状態にしておく
  11. © SAKURA internet Inc. TiUPによる新規構築 • SSHでサーバに入れる環境において • YAMLファイルに設定を書いて tiup

    を実行 • セットアップが終わったらクラスタを開始 • PrometheusやTiDB Dashboardも入る pd_servers: - host: 192.168.100.11 name: pd-01 tidb_servers: - host: 192.168.100.11 tikv_servers: - host: 192.168.100.21 - host: 192.168.100.22 - host: 192.168.100.23 grafana_servers: [] monitoring_servers: [] $ tiup cluster start prod-cluster --init $ export TIUP_COMPONENT_DATA_DIR=./cluster-state/ (※) $ tiup cluster check topology.yaml $ tiup cluster deploy -p prod-cluster v8.1.1 topology.yaml \ --ssh=system --user admin SystemのSSHを利用すると 1Password のSSH Agentなども使える ProxyJumpでの多段SSHも動くはず ※) この環境変数により、git でのリポジトリ管理ができるようになる ProxyJumpは使えるが、 --init が動作しない
  12. © SAKURA internet Inc. tiup cluster check Node Check Result

    Message ---- ----- ------ ------- 192.168.100.21 memory Pass memory size is 16384MB 192.168.100.21 sysctl Fail net.ipv4.tcp_syncookies = 1, should be 0 192.168.100.21 thp Pass THP is disabled 192.168.100.21 permission Pass /home/tidb/deploy/tikv-20160 is writable 192.168.100.21 permission Pass /home/tidb/deploy/tikv-20160/data is writable 192.168.100.21 os-version Warn OS is Ubuntu 20.04.6 LTS 20.04.6 (ubuntu support is not fully tested, be careful) 192.168.100.21 cpu-governor Warn Unable to determine current CPU frequency governor policy 192.168.100.21 selinux Pass SELinux is disabled 192.168.100.21 service Pass service firewalld not found, ignore 192.168.100.21 command Pass numactl: policy: default 192.168.100.21 timezone Pass time zone is the same as the first PD machine: Asia/Tokyo 192.168.100.21 cpu-cores Pass number of CPU cores / threads: 4 192.168.100.21 limits Fail soft limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.21 limits Fail hard limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.21 limits Fail soft limit of 'stack' for user 'tidb' is not set or too low 192.168.100.22 memory Pass memory size is 16384MB 192.168.100.22 limits Fail soft limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.22 limits Fail hard limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.22 limits Fail soft limit of 'stack' for user 'tidb' is not set or too low 192.168.100.22 command Pass numactl: policy: default 192.168.100.22 timezone Pass time zone is the same as the first PD machine: Asia/Tokyo 192.168.100.22 os-version Warn OS is Ubuntu 20.04.6 LTS 20.04.6 (ubuntu support is not fully tested, be careful) 192.168.100.22 cpu-governor Warn Unable to determine current CPU frequency governor policy 192.168.100.22 sysctl Fail net.ipv4.tcp_syncookies = 1, should be 0 192.168.100.22 selinux Pass SELinux is disabled 192.168.100.22 thp Pass THP is disabled 192.168.100.22 service Pass service firewalld not found, ignore 192.168.100.22 permission Pass /home/tidb/deploy/tikv-20160 is writable 192.168.100.22 permission Pass /home/tidb/deploy/tikv-20160/data is writable 192.168.100.22 cpu-cores Pass number of CPU cores / threads: 4 192.168.100.23 sysctl Fail net.ipv4.tcp_syncookies = 1, should be 0 192.168.100.23 selinux Pass SELinux is disabled 192.168.100.23 thp Pass THP is disabled 192.168.100.23 service Pass service firewalld not found, ignore 192.168.100.23 timezone Pass time zone is the same as the first PD machine: Asia/Tokyo 192.168.100.23 permission Pass /home/tidb/deploy/tikv-20160 is writable 192.168.100.23 permission Pass /home/tidb/deploy/tikv-20160/data is writable 192.168.100.23 cpu-governor Warn Unable to determine current CPU frequency governor policy 192.168.100.23 memory Pass memory size is 16384MB 192.168.100.23 os-version Warn OS is Ubuntu 20.04.6 LTS 20.04.6 (ubuntu support is not fully tested, be careful) 192.168.100.23 cpu-cores Pass number of CPU cores / threads: 4 192.168.100.23 limits Fail hard limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.23 limits Fail soft limit of 'stack' for user 'tidb' is not set or too low 192.168.100.23 limits Fail soft limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.23 command Pass numactl: policy: default 192.168.100.11 limits Fail soft limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.11 limits Fail hard limit of 'nofile' for user 'tidb' is not set or too low 192.168.100.11 limits Fail soft limit of 'stack' for user 'tidb' is not set or too low 192.168.100.11 sysctl Fail net.ipv4.tcp_syncookies = 1, should be 0 192.168.100.11 thp Pass THP is disabled 192.168.100.11 cpu-cores Pass number of CPU cores / threads: 4 192.168.100.11 memory Pass memory size is 8192MB 192.168.100.11 cpu-governor Warn Unable to determine current CPU frequency governor policy 192.168.100.11 selinux Pass SELinux is disabled 192.168.100.11 service Pass service firewalld not found, ignore 192.168.100.11 command Pass numactl: policy: default 192.168.100.11 permission Pass /home/tidb/deploy/pd-2379 is writable 192.168.100.11 permission Pass /home/tidb/deploy/pd-2379/data is writable 192.168.100.11 permission Pass /home/tidb/deploy/tidb-4000 is writable 192.168.100.11 os-version Warn OS is Ubuntu 20.04.6 LTS 20.04.6 (ubuntu support is not fully tested, be careful) Checking region status of the cluster prod-cluster... All regions are healthy.
  13. © SAKURA internet Inc. TiUPによる行われること • tidb ユーザーの作成 • /home/tidb/deploy

    以下にデプロイ • /home/tidb/deploy/tidb-4000/bin • /home/tidb/deploy/tidb-4000/data • etc. • systemd へのサービス登録
  14. © SAKURA internet Inc. TiUPによるスケールアウト (ノードの追加) • 追加するノードの情報をYAMLに書く • tiup

    scale-out コマンドを実行する $ tiup cluster scale-out prod-cluster nodeinfo.yaml \ --user admin --ssh system tidb_servers: - host: 192.168.100.12 tikv_servers: - host: 192.168.100.24
  15. © SAKURA internet Inc. TiDBのコンポーネント https://docs.pingcap.com/tidb/stable/tidb-architecture から改変 • 3要素が基本 •

    PD (Placement Driver) • クラスタの頭脳 • データ配置の決定 • トランザクションの管理 etc. • TiDB (SQL Layer) • SQLを解釈し処理を行う • TiKV (Storage Layer) • レコードやインデックスを Key-Valueとして保存する • トランザクションに対応
  16. © SAKURA internet Inc. マルチリージョンの設計 •石狩第一/東京第一/東京第二 •それぞれのゾーンに • PD x

    3 • TiDB x 3 • TiKV x 3 https://docs.pingcap.com/ja/tidb/stable/three-data-centers-in-two-cities-deployment