Microsoft사가 Linux에 SQL Server2016의 일부기능만 담은 리눅스용 제품은 2016년 6월 정식 공개됐습니다.
리눅스용 SQL서버는 MS리서치에서 개발한 기술인 ‘드로브릿지(Drawbridge)’를 탑재했습니다.
명령어 yum으로 Microsoft사의 mssql-server 인스톨 :
# curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo | sudo tee /etc/yum.repos.d/mssql-server.repo
# sudo yum update
# sudo yum install mssql-server
내부 핵심
MSSQL을 Linux로 포팅하는 데있어 가장 중요한 사항 중 하나는 런타임 동작이 Windows에 비해 변하지 않는다는 것입니다.
애플리케이션이 백엔드로 진입하는 방식을 인지하지 못하더라도 애플리케이션이 인식되지 않아야 합니다.
Microsoft는 Linux에서 Linux와 동일한 실행 파일과 라이브러리를 Windows와 같이 사용합니다.
– 기능
- 데이터를 항상 안 전, 동작 및 메모리 내에서 암호화하여 최대한의 보안을 제공 할 수있는 획기적인 보안 암호화 기능
- 성능이 향상되는 모든 워크로드에 대한 메모리 내 데이터베이스 지원이 최대 30-100 배 증가
- on-premises 및 cloud 기반 시스템에서 데이터 워크로드를 분할하는 하이브리드 아키텍처를 구축하여 비용을 절감하고 민첩성을 높일 수있는 고유 한 클라우드 기능
SQL OS
SQL Server 내부의 OS와 같은 역할로서 메모리, I/O, 잠금 및 트랜잭션 등에 대한 관리 및 교착상태 모니터링 및 예외 처리 등의 역할 수행합니다.
SQL Server 2005부터 Microsoft는 이미 SQL OS라는 자체 모듈에서 운영 체제 종속 구성 요소를 그룹화하기 시작했습니다.
[그림1] SQLOS 그룹화
Drawbridge(드로브릿지)기술
Drawbridge는 2011년에 시작된 연구 프로젝트이며 picoprocess 와 LibOS 의 두가지 핵심 기술을 결합한 기술입니다. Drawbridge는 윈도우 시스템에서 오버 헤드를 줄이는 것에 관한 것이었습니다.
Microsoft사에서 다음과 같은 구성요소가 필요합니다 :
- Process isolation
- 프로세스 격리
- Layer, which represents the Windows ABI (kernel/syscalls)
- Windows ABI를 나타내는 Layer
- User space implementation of the Windows APIs/libs
- WindowsXP/Vista의 사용자 공간 구현
- Drivers on the guest system to initialise the memory for the VM
- VM의 메모리를 오버커밋 하기 위한 게스트 시스템의 드라이버
이러한 구성요소들은 VM을 생성할 때 발생하는 현상에 대해 비교적 명확하게 파악할 수 있습니다.
드라이버는 게스트 시스템에서 가상 시스템에 대한 메모리를 시작합니다. 이 단계에서는 Windows ABI를 덮는 계층이로드됩니다.
사용자 공간 NT 커널로 수행이되고 또한 Windows API를 나타내는 VM의 메모리에 Library가 로드됩니다. LibOS의 일부에는 사용자 모드 커널과 API를 나타내는 Library입니다.
VM이 LibOS로 시작되는 즉시 Windows 바이너리를 실행할 수 있으며 Windows 라이브러리는 VM에서 나가기위한 시스템 호출 또는 API 호출없이 로드 될 수 있습니다.
Drawbirdge 설명 : https://www.microsoft.com/en-us/research/project/drawbridge/
LibOS
Drawbridge의 단락에서 LibOS를 언급하였습니다. Windows에서는 필요한 모든 사용자 공간의 완벽한 사용자공간의 구현을 포함하고 있습니다.
LibOS는 사용자 공간에서 Windows API를 나타내는 Library를 가지고 있습니다.
Windows 환경의 실제 구현과 비교할 때,두 가지 요소는 훨씬 가볍게 유지되지만 런타임 환경은 기존 Windows와 다르게 동작하지 않습니다.
SQL PAL(Performance Analysis of Logs/게시엑세스목록)
Drawbridge와 SQLOS를 함께 사용하면 MSSQL 서버를 Linux에서 실행할 수 있습니다. PAL을 통해 게시에 대한 액세스 권한을 부여합니다.
PAL 기능은 Microsoft Windows 액세스 제어 목록과 유사하게 작동합니다.
구독자가 게시자 또는 배포자에 연결하여 게시에 대한 액세스를 요청하면 에이전트가 전달한 인증 정보가 PAL과 비교됩니다.
SQLServer와 관련된 ABI와 API만 포함하고 있으며, MSSQL의 런타임 환경을 제공하는 데 필요한 모든 기능이 있습니다.
하위 레이어는 환경의 나머지 부분을 초기화하는 Linux바이너리(사용자 공간)로 구성됩니다.
.
SQL server / SOS and LibOS
SQLServer에는 Linux를 위한 두가지 버전의 SOS(SQL Server Operating System) LibOS(Library Operating System)이 있습니다.
Drawbridge 프로젝트는 보안 컨테이너 및 SOS의 강력한 메모리 관리, 스레드 스케줄링 및 IO 서비스를 제공하기 위해 기본 운영 체제와 응용 프로그램 간의 추상화를 제공했습니다.
SQL Server 데이터베이스 엔진 코드를 변경하여 Windows 라이브러리를 바이 패스하고 리소스를 많이 사용하는 기능을 위해 SQL PAL로 직접 호출합니다.
최종 아키텍처
전반적으로 SQL PAL은 MSSQL의 런타임 환경을 구성하고 RPM / DEB 패킷은 모두 실행 가능하고SQL PAL 기반의 MSSQL을 실행하는 데 필요한 추가 Windows 라이브러리도 제공됩니다.
Microsoft에 따르면 약 81MB의 압축되지 않은 Windows라이브러리에는 전체 Windows설치에 대한 지원이 포함됩니다.(전체 Windows설치 중 약 1%, SQL PAL 바이너리는 약 8MB입니다.)
이 소프트웨어는 /opt에 설치되며 systemd로 관리됩니다. Microsoft는 즉시 사용할 수 있는 모든 것을 제공하며 설명서 페이지도 제공합니다.
일반적으로 Linux에서 MSSQL을 시작하는 프로세스는 다음과 같이 설명 할 수 있습니다 :
호스트 구성 요소 (표준 Linux 바이너리)는 먼저 SQL PAL을 시작하고 “emulate”Windows 환경에서 MSSQL 서버를 시작합니다.
최종 아키텍처는 다음과 같습니다.
[그림2] SQL Server 아키텍처
리눅스의 mssql의 한계
Microsoft는 Linux에서 MSSQL의 현재 제한 사항에 대해 매우 자주 의견을 교환하고 릴리스 정보에서 이러한 제한 사항에 대해 자세히 설명합니다.
예를 들어, 다음과 같은 것은 아직 사용할 수 없습니다.
- Full text search
- Replication
- Active Directory authentication
자세한 내용은 공식 릴리스 노트를 참조하십시오
.릴리스 노트 링크 : https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes