Let's Encryptを支える次世代データベースサーバー
Let’s Encryptは、2億3500万以上のウェブサイトにTLS証明書を提供することで、ウェブの大きな部分を保護するのに役立っています。統計はこちら。データベースは、Let’s Encryptが証明書の発行を管理する方法の中核を成しています。このデータベースのパフォーマンスが不十分な場合、加入者にとってAPIエラーやタイムアウトが発生する可能性があります。データベースのパフォーマンスは、サービスレベル目標を達成しながらスケールする能力において、最も重要な要素です。2020年末、私たちはデータベースサーバーをアップグレードし、その結果に非常に満足しています。
これらのサーバーで具体的に何をしているのでしょうか?
私たちのCAソフトウェアであるBoulderは、加入者アカウントと証明書の発行プロセス全体を管理するために、MySQLスタイルのスキーマとクエリを使用しています。これは、単一のMySQL、MariaDB、またはPerconaデータベースで動作するように設計されています。現在、私たちはInnoDBデータベースエンジンを使用するMariaDBを使用しています。
複雑さを最小限に抑えるために、単一のデータベースに対してCAを実行しています。複雑さを最小限に抑えることは、セキュリティ、信頼性、およびメンテナンス負担の軽減に役立ちます。常に複数のデータベースレプリカがアクティブになっており、プライマリへの負荷を軽減するために、一部の読み取り操作をレプリカデータベースサーバーに転送しています。
この設計の結果として、データベースマシンは非常に強力である必要があります。最終的には、単一のデータベースを複数のデータベースにシャーディングまたは分割する必要があるかもしれませんが、ハードウェアの進歩により、今のところそれを回避できています。
ハードウェアスペック
前世代のデータベースハードウェアは強力でしたが、定期的に限界に達していました。次世代では、同じ2Uフォームファクタで、ほぼすべての性能指標を2倍以上にしたいと考えていました。そのためには、AMD EPYCチップとDellのPowerEdge R7525が理想的でした。こちらが仕様です。
前世代 | 次世代 | |
CPU | 2x Intel Xeon E5-2650 合計24コア/48スレッド |
2x AMD EPYC 7542 合計64コア/128スレッド |
メモリ | 1TB 2400MT/s | 2TB 3200MT/s |
ストレージ | 24x 3.8TB Samsung PM883 SATA SSD 560/540 MB/s 読み取り/書き込み |
24x 6.4TB Intel P4610 NVMe SSD 3200/3200 MB/s 読み取り/書き込み |

AMD EPYCを採用することで、クロックスピードを高く維持しながら、64個の物理CPUコアを取得することができました。基本クロック周波数は2.9GHz、ブーストクロック周波数は3.4GHzです。さらに重要なのは、EPYCが128個のPCIe v4.0レーンを提供することで、1台のマシンに24個のNVMeドライブを搭載できることです。NVMeはSATAではなくPCIeを使用しているため、非常に高速です(前世代のデータベースサーバーのSATA SSDよりも約5.7倍高速)。ただし、PCIeレーンは通常非常に限られています。最新の消費者向けチップは通常16レーンしか持たず、IntelのXeonチップは48レーンです。チップあたり128個のPCIレーン(v4.0)を提供することで、AMD EPYCは、大量のNVMeドライブを1台のマシンに搭載することを可能にしました。後でNVMeについて詳しく説明します。
パフォーマンスへの影響
加入者のエクスペリエンスを最もよく反映しているため、まずリクエストの処理にかかる中央値の時間を確認します。アップグレード前、中央値のAPIリクエストは約90msで処理されていました。アップグレードにより、この指標は9msにまで削減されました!
古いCPUが限界に達していたことがはっきりとわかります。プライマリデータベースサーバーをアップグレードする前の週、そのCPU使用率(/proc/statから)は平均で90%を超えていました。
新しいAMD EPYC CPUは約25%です。このグラフでは、9月15日に新しいデータベースサーバーをレプリカ(読み取り専用)からプライマリ(読み取り/書き込み)に昇格させた場所を確認できます。
アップグレードにより、データベースのレイテンシが大幅に削減されました。平均クエリ応答時間(INFORMATION_SCHEMAから)は以前は約0.45msでした。
クエリは現在、約0.15msで3倍高速になっています。
OpenZFSとNVMe
NVMeドライブは、その驚異的なパフォーマンスのためにますます普及しています。しかし、最近まで、NVMeはPCIeレーンを使用しているため、1台のマシンに多数のNVMeドライブを搭載することはほぼ不可能でした。それらは非常に限られていました。IntelのXeonプロセッサはわずか48個のPCIe v3レーンしか備えておらず、そのいくつかはチップセットやネットワークアダプターやGPUなどのアドオンカードによって使用されています。残りのレーンには多くのNVMeドライブを搭載できません。
AMDの最新世代のEPYCプロセッサは、Intelが提供する量の2倍以上の128個のPCIeレーンを備えており、PCIe v4です!これにより、2UサーバーにNVMeドライブを満載できます(私たちの場合は24個)。
NVMeドライブでサーバーがいっぱいになったら、それらを管理する方法を決定する必要があります。前世代のデータベースサーバーでは、RAID-10構成でハードウェアRAIDを使用していましたが、NVMeには効果的なハードウェアRAIDがないため、別のソリューションが必要でした。1つのオプションはソフトウェアRAID(Linux mdraid)でしたが、OpenZFSに関するいくつかの推奨事項を受け、試してみることにしました。私たちはそれに非常に満足しています!
NVMeドライブのプールとデータベースワークロードに対してOpenZFSを最適にセットアップおよび最適化する方法に関する情報はほとんどありませんでした。そのため、私たちが学んだことを共有したいと考えています。このGitHubリポジトリで、私たちのセットアップに関する詳細情報を見つけることができます。
結論
より多くの人がTLS/SSLが提供するセキュリティとプライバシーのためにLet’s Encryptに依存するようになっているため、このデータベースのアップグレードは必要でした。機器は非常に高価であり、SREチームにとって移行の計画と実行は相当な作業でしたが、その過程で多くのことを得ることができました。
Let’s Encryptをサポートする
私たちは、サービスを提供するために、サポーターからの貢献に依存しています。貴社の組織がLet’s Encryptをスポンサーしたい場合は、sponsor@letsencrypt.orgまでメールでお問い合わせください。可能であれば、個人からの寄付をお願いします。