SQL Server on Linux에서 컨테이너 사용

완료됨

컨테이너는 조직에서 유연하고 확장 가능한 SQL Server 설치를 만들 수 있도록 지원합니다.

Wide World Importers는 유연하고 확장 가능한 호스팅 아키텍처가 필요한 대규모 데이터베이스 워크로드를 지원합니다. VM(Virtual Machines) 및 컨테이너와 같은 가상 환경에서 SQL Server의 호스팅 가능성을 평가하려고 합니다.

여기서는 데이터베이스를 위해 컨테이너를 사용할지 또는 VM을 사용할지를 선택하는 방법을 알아봅니다.

VM 및 컨테이너 비교

가상화는 관리자가 단일 물리적 서버에서 여러 가상 서버를 호스트하는 데 사용하는 기술입니다. 가상화를 사용하는 경우 추가 하드웨어를 구입 및 설치하지 않고도 SQL Server와 같은 추가 인스턴스를 쉽게 배포할 수 있습니다. 가상화에는 다음과 같은 두 가지 일반적인 접근 방식이 있습니다.

  • VM: VM을 사용하는 경우 각 인스턴스는 고유한 운영 체제 및 하드웨어를 포함하는 완전한 가상 서버입니다.
  • 컨테이너: 컨테이너를 사용하는 경우 각 인스턴스는 호스트 컴퓨터와 운영 체제 및 하드웨어 리소스를 공유합니다.

VM과 컨테이너는 모두 SQL Server와 같은 애플리케이션이 별도의 물리적 컴퓨터에 있는 것처럼 실행되는 격리된 환경을 제공합니다.

VM이 더 크고 생성하는 데 더 오래 걸리지만, 고유한 운영 체제를 유지하므로 호스트 컴퓨터에 다른 구성 및 하드웨어를 사용합니다. 동일한 호스트에서 다른 운영 체제를 사용하는 VM을 혼합할 수도 있습니다. 예를 들어 Linux 호스트에서 Linux 및 Apache를 실행하는 VM을 설치하여 웹 사이트를 호스트할 수 있습니다. 또한 데이터베이스를 호스트하기 위해 Windows와 SQL Server를 실행하는 또 다른 VM도 있을 수 있습니다.

컨테이너는 좀 더 작으므로 VM보다 훨씬 더 빠르게 로드합니다. 그러나 예를 들어 호스트에서 Linux Ubuntu를 실행하는 경우, 해당 컴퓨터의 모든 컨테이너는 동일한 버전의 Ubuntu를 실행해야 합니다. Linux 호스트에서 Linux 및 Apache를 실행하는 컨테이너를 설치할 수 있지만 데이터베이스 컨테이너에서도 Linux를 실행해야 합니다. SQL Server 2017 이상 버전을 실행하는 경우에만 가능합니다.

Diagram comparing the layers of software required to run VMs versus Containers.

호스트 컴퓨터에서 Hyper-V 또는 VirtualBox와 같은 소프트웨어를 설치하여 VM을 호스트해야 합니다. 컨테이너의 경우 Docker 시스템, CRI-O, rkt 및 기타 컨테이너 호스트를 사용할 수 있습니다.

가상 머신을 사용하는 이유

컨테이너가 최상의 적합한 솔루션이 아닌 경우도 있습니다. 컨테이너는 단일 운영 체제에서 실행되고 시스템 리소스를 공유하므로 보안 문제가 있습니다. 공격자가 슈퍼 사용자 권한을 얻게 되면 일부 공격 벡터가 애플리케이션에 대한 액세스 권한을 얻게 될 수 있습니다. 컨테이너에서 애플리케이션은 호스트 컴퓨터와 동일한 OS에서 실행해야 합니다. Windows의 컨테이너에서 Linux 기반 애플리케이션을 실행할 수 없습니다. VM을 사용하면 Windows에서 Linux 머신 또는 macOS에서 Windows 머신을 호스트하여 유연성을 높일 수 있습니다. VM을 사용하면 긴밀한 통합을 통해 단일 VM에서 여러 애플리케이션을 호스트할 수 있습니다. 컨테이너는 일반적으로 단일 애플리케이션의 호스트 역할만 합니다.

VM은 컨테이너보다 효율성이 낮습니다. 지정된 하드웨어 세트에서 VM으로 실행할 수 있는 것보다 적어도 두 배의 애플리케이션을 컨테이너에서 실행할 수 있습니다. VM은 운영 체제의 전체 복사본이 필요하고 게스트 운영 체제를 지원하기 위해 모든 하드웨어의 가상화된 버전이 필요하기 때문에 더 많은 리소스를 사용합니다.

컨테이너를 사용하는 이유

컨테이너는 비교적 좀 더 경량이며, 더 적은 공간에 앱을 패키지할 수 있습니다. 단일 운영 체제에서 컨테이너를 호스팅하므로 관리가 줄어듭니다. 각 VM의 모든 게스트 OS가 아닌 단일 OS를 패치 및 업데이트하기만 하면 됩니다. VM을 시작하는 데는 몇 분이 걸리지만, 컨테이너가 더 작고 좀 더 단순하므로 몇 초 안에 시작할 수 있습니다.

오케스트레이션

Docker Swarm, Kubernetes 및 기타 솔루션을 컨테이너로 오케스트레이션할 수 있습니다. 오케스트레이터는 모니터링을 수행하며, 컨테이너를 사용하여 앱을 스케일링할 수 있도록 하고, 재해 복구 수준을 제공합니다. Microsoft는 Kubernetes를 사용하는 방법에 대한 도구와 예제를 제공하므로 SQL Server on Linux를 컨테이너화하는 데 적합합니다. Kubernetes와 함께 사용할 수 있는 SQL Server on Linux 컨테이너 이미지가 있습니다.

컨테이너화된 SQL Server on Linux

컨테이너에서 실행되는 데이터베이스의 한 가지 문제점은 영구 스토리지입니다. 데이터베이스에서 데이터베이스 파일을 유지할 수 있는 스토리지 위치를 컨테이너 외부에 제공해야 합니다. 그러면 클러스터의 모든 컨테이너에서 변경 내용을 사용할 수 있습니다. Kubernetes를 사용하는 경우 이 위치에 영구적 볼륨을 사용할 수 있습니다.

Diagram of the a Kubernetes cluster running SQL Server and the relationship between nodes, pods, storage, replica sets, and the service.

먼저 영구 볼륨을 만든 다음, PVC(영구적 볼륨 클레임)를 추가합니다. Microsoft에서 만든 mssql-server-linux 컨테이너 이미지를 사용하는 SQL Server on Linux에 대해 배포 매니페스트를 만듭니다. 또한 매니페스트에는 일정한 IP 주소를 보장하기 위해 서비스의 PVC 및 부하 분산 장치에 대한 정의도 포함됩니다. 배포를 만들고 pod 내에서 SQL Server가 실행되고 있는지 확인합니다. 이 설정이 완료되면 노드가 실패하는 경우 Kubernetes에서 새 인스턴스를 부트스트랩합니다. 간단한 테스트는 해당 pod를 삭제하고 새 pod가 자동으로 시작되는지 확인하는 것입니다.

지식 점검

1.

애플리케이션을 호스트하는 데 VM이 가장 적합한 경우는 언제인가요?