SQL Server on Linux でコンテナーを使用する
コンテナーは、組織が SQL Server の柔軟でスケーラブルなインストールを作成するのに役立ちます。
Wide World Importers は、柔軟でスケーラブルなホスティング アーキテクチャを必要とするいくつかの大規模なデータベース ワークロードをサポートしています。 あなたは、Virtual Machines (VM) やコンテナーなどの仮想環境内で SQL Server をホストする可能性を評価したいと考えています。
ここでは、データベースに対して、コンテナーと VM のいずれかを選択する方法について学習します。
VM とコンテナーを比較する
仮想化は、1 台の物理サーバー上で複数の仮想サーバーをホストするために管理者が使用する手法です。 仮想化を使用すると、追加のハードウェアを購入してインストールすることなく、SQL Server などの追加のインスタンスを簡単にデプロイできます。 仮想化には、次の 2 つの一般的なアプローチがあります。
- VM: VM を使用すると、各インスタンスは、独自のオペレーティング システムとハードウェアを備えた完全な仮想サーバーになります。
- コンテナー: コンテナーを使用すると、各インスタンスとホスト コンピューターによって、オペレーティング システムとハードウェア リソースが共有されます。
VM とコンテナーはどちらも、分離された環境を備えています。ここでは、SQL Server などのアプリケーションが、別の物理コンピューター上に存在しているかのように実行されます。
VM はサイズが大きく、作成に時間がかかりますが、独自のオペレーティング システムがあるため、ホスト コンピューターとは異なる構成とハードウェアが使用されます。 同じホスト上にオペレーティング システムが異なる VM を混在させることもできます。 たとえば、Web サイトをホストするために Linux と Apache を実行している VM を Linux ホスト上にインストールできます。 また別の VM では、データベースをホストするために Windows と SQL Server を実行している場合もあります。
コンテナーの方が小さく、VM よりもはるかに高速に読み込まれます。 ただし、お使いのホストで、たとえば Linux Ubuntu が実行されている場合、そのコンピューター上のすべてのコンテナーで同じバージョンの Ubuntu を実行する必要があります。 Linux ホストでは、Linux と Apache を実行しているコンテナーをインストールできますが、データベース コンテナーでも Linux を実行する必要があります。 これは SQL Server 2017 以降を実行している場合に限り可能です。
ホスト マシンには、VM をホストするための Hyper-V や VirtualBox などのソフトウェアをインストールする必要があります。 コンテナー用には、Docker システムや CRI-O、rkt、その他のコンテナー ホストを使用できます。
Virtual Machines を使用する理由
コンテナーが最適なソリューションではない状況もあります。 コンテナーは 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 によって新しいインスタンスがブートストラップされます。 単純なテストでは、そのポッドを削除し、新しいものが自動的に開始されることを確認します。