SQL Server on Linux でコンテナーを使用する
- 5 分
コンテナーは、組織が SQL Server の柔軟でスケーラブルなインストールを作成するのに役立ちます。
Wide World Importers は、柔軟でスケーラブルなホスティング アーキテクチャを必要とするいくつかの大規模なデータベース ワークロードをサポートしています。 あなたは、Virtual Machines (VM) やコンテナーなどの仮想環境内で SQL Server をホストする可能性を評価したいと考えています。
ここでは、データベースのコンテナーと VM を選択する方法について説明します。
VM とコンテナーの比較
仮想化は、1 台の物理サーバー上で複数の仮想サーバーをホストするために管理者が使用する手法です。 仮想化を使用すると、追加のハードウェアを購入してインストールすることなく、SQL Server などの追加のインスタンスを簡単にデプロイできます。 仮想化には、次の 2 つの一般的なアプローチがあります。
- VM: VM を使用すると、各インスタンスは、独自のオペレーティング システムとハードウェアを備えた完全な仮想サーバーになります。
- コンテナー: コンテナーを使用すると、各インスタンスとホスト コンピューターによって、オペレーティング システムとハードウェア リソースが共有されます。
VM とコンテナーはどちらも、分離された環境を備えています。ここでは、SQL Server などのアプリケーションが、別の物理コンピューター上に存在しているかのように実行されます。
VM はサイズが大きく、作成に時間がかかりますが、独自のオペレーティング システムがあるため、ホスト コンピューターとは異なる構成とハードウェアが使用されます。 同じホスト上にオペレーティング システムが異なる VM を混在させることもできます。 たとえば、Linux ホストに、Linux と Apache を実行している仮想マシン (VM) をインストールして Web サイトをホストできます。 また別の VM では、データベースをホストするために Windows と SQL Server を実行している場合もあります。
コンテナーの方が小さく、VM よりもはるかに高速に読み込まれます。 ただし、お使いのホストで、たとえば Linux Ubuntu が実行されている場合、そのコンピューター上のすべてのコンテナーで同じバージョンの Ubuntu を実行する必要があります。 Linux ホストでは、Linux と Apache を実行しているコンテナーをインストールできますが、データベース コンテナーでも Linux を実行する必要があります。 この構成は、SQL Server 2017 以降を実行している限り可能です。
ホスト マシンには、VM をホストするための Hyper-V や VirtualBox などのソフトウェアをインストールする必要があります。 コンテナー用には、Docker システムや CRI-O、rkt、その他のコンテナー ホストを使用できます。
仮想マシンを使用する理由
コンテナーが最適なソリューションではない状況もあります。 コンテナーは 1 つのオペレーティング システム上で実行され、システム リソースを共有するので、セキュリティが問題になります。 攻撃者がスーパーユーザーの特権を取得した場合、一部のベクターがアプリケーションへのアクセスの獲得につながる可能性があります。 コンテナー内では、アプリケーションをホスト コンピューターと同じ OS 上で実行する必要があります。 Windows 上のコンテナーで Linux ベースのアプリケーションを実行することはできません。 VM を使用すると、Windows で Linux マシンをホストしたり、macOS で Windows マシンをホストしたりすることで、柔軟性が向上します。 VM を使用すると、1 つの VM で複数のアプリケーションを緊密に結合してホストできます。 コンテナーでは、従来、1 つのアプリケーションのみをホストしていました。
VM は、効率性でコンテナーよりも劣ります。 特定のハードウェア セットでは、VM と同じように、コンテナー内のアプリケーションの少なくとも 2 倍の数を実行できます。 VM には、オペレーティング システムの完全なコピーと、ゲスト オペレーティング システムをサポートするすべてのハードウェアの仮想化されたバージョンが必要なため、より多くのリソースが使用されます。
コンテナーを使用する理由
コンテナーの方がより軽量であるため、アプリをより小さなメモリ占有領域にパッケージ化できます。 1 つのオペレーティング システムでコンテナーをホストしているため、管理が少なくて済みます。 パッチの適用と更新は、各 VM のすべてのゲスト OS にする必要はなく、1 つの OS に適用するだけで済みます。 VM の起動には数分かかりますが、コンテナーはより小さく、より単純なため、数秒で起動できます。
オーケストレーション
Docker Swarm、Kubernetes およびその他のソリューションを使用すると、コンテナーをオーケストレーションできます。 オーケストレーターによってアプリが監視され、コンテナーを使用したスケーリングが可能になり、あるレベルのディザスター リカバリーが提供されます。 Kubernetes は、Microsoft からツールと使用例が提供されているため、SQL Server on Linux のコンテナー化に適した選択肢です。 Kubernetes で使用できる SQL Server on Linux のコンテナー イメージがあります。
コンテナー化された SQL Server on Linux
コンテナーで実行されているデータベースの問題の 1 つは、永続的なストレージです。 コンテナーの外側にストレージの場所を指定する必要があります。そこにデータベースのデータベース ファイルを保持することができます。 それによりクラスター内のすべてのコンテナーで変更が使用可能になります。 Kubernetes を使用する場合は、この場所に永続的なボリュームを使用できます。
まず、永続ボリュームを作成してから、永続ボリューム要求 (PVC) を追加します。 Microsoft が作成した mssql-server-linux
コンテナー イメージを使用する SQL Server on Linux 用に、配置マニフェストを作成します。 マニフェストには、一貫した IP アドレスを保証するために、PVC とサービスのロード バランサーの定義も含まれています。 配置を作成し、ポッド内で SQL Server が実行されていることを確認します。 このセットアップが完了すると、ノードが失敗した場合に Kubernetes によって新しいインスタンスがブートストラップされます。 単純なテストでは、そのポッドを削除し、新しいものが自動的に開始されることを確認します。