SQL Server 2019 AlwaysOn Availability Group on Docker Container – Part I

SQL Server, 2016 sürümü ile birlikte Linux’u, 2017 ve 2019 sürümleri ile birlikte, Linux ve Container platformlarında HA/DR, Kubernetes ve Big Data Cluster çözümlerini desteklemeye başladı.

Bu yazımızda Docker Container üzerinde 3 nodelu SQL Server 2019 kurup AlwaysOn Availability Group oluşturacağız.

Amacımız, ortamımızı tek bir yapılandırma dosyasıyla hızlı bir şekilde hazır hale getirmek. Böylece geliştirici veya test ekipleri; compability, connectivity, fonksiyonelite gibi testleri hızlı bir şekilde gerçekleştirebilir.

Bu bölümde, Container üzerine Availability Group kurabilmek için öncelikle Ubuntu tabanlı bir image hazırlayacağız.

Önemli: Production ortamında bu çalışmanın yapılması önerilmez.

Kurulumlar Ubuntu 18.04 üzerinde gerçekleştirilmiştir.

Docker kurulumu ile ilgili detaylı bilgiye bu linkten ulaşabilirsiniz.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.4 LTS
Release: 18.04
Codename: bionic

Önceki sürümden bir docker kurulumu varsa, kaldırılmanız öneriliyor.

Daha sonra docker kurulumu için gerekli paketleri kurmamız gerekiyor:

$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ sudo apt-get remove docker docker-engine docker.io containerd runc
$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

Docker’ın resmi GPG anahtarını ekliyoruz:

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Son olarak Docker engine’i kuralım:

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker kurulumunu doğrulamak için aşağıdaki komutu çalıştırıyoruz:

$ sudo docker run hello-world

Çıktı aşağıdaki gibi olmalıdır. “Unable to find image” ile başlayan bir uyarı var. Bu uyarıyı görmemiz normal çünkü local repomuzda bu image yok ve image docker hub’ından çekilecek.

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.
..
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Her seferinde sudo yazmamak için sudo su ile geçiş yapıyoruz:

$ sudo su

Image hazırlamak için, Ubuntu ve SQL Server 2019’un container imagelarını docker hub’dan çekiyoruz:

$ docker pull ubuntu:18.04
18.04: Pulling from library/ubuntu
23884877105a: Pull complete
bc38caa0f5b9: Pull complete
2910811b6c42: Pull complete
36505266dcc6: Pull complete
Digest: sha256:3235326357dfb65f1781dbc4df3b834546d8bf914e82cce58e6e6b676e23ce8f
Status: Downloaded newer image for ubuntu:18.04
docker.io/library/ubuntu:18.04
 
$ docker pull mcr.microsoft.com/mssql/server:2019-latest
2019-latest: Pulling from mssql/server
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
..
9a00f22bcd90: Pull complete
1a5a58ce1097: Pull complete
Digest: sha256:360f6e6da94fa0c5ec9cbe6e391f411b8d6e26826fe57a39a70a2e9f745afd82
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2019-latest
mcr.microsoft.com/mssql/server:2019-latest

Imagelar çekildikten sonra, localimizdeki imageları listeleyelim şimdi:

$ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
ubuntu                           18.04               c3c304cb4f22        5 weeks ago         64.2MB
mcr.microsoft.com/mssql/server   2019-latest         d60e9ac97708        2 months ago        1.5GB
hello-world                      latest              bf756fb1ae65        5 months ago        13.3kB

Doğrulamak için SQL Server 2019 container oluşturalım ve sürüm bilgilerini kontrol edelim. Kullanıcı sözleşmesini kabul etmek ve SA şifresini ayarlamak için, ortam değişkenlerini ayarlıyoruz ve dış portu container portuyla eşleştiriyoruz.

$ docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Str0ngPa$w0rd" \
   -p 1501:1433 --name sqldemo \
   -d mcr.microsoft.com/mssql/server:2019-latest

Çalışan containerları listeleyelim:

$ docker ps -a
CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
9c3eceb18f3f        mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm…"   36 seconds ago      Up 34 seconds       0.0.0.0:1501->1433/tcp   sqldemo

Yalnızca oluşturduğumuz containerları görüyoruz, eğer test amaçlı oluşturduğunuz containerlar varsa listede farklı containerlar görebilirsiniz.

İnteraktif moda geçmek ve SQL Server sürümünü öğrenmek için aşağıdaki komutları çalıştırıyoruz (PRINT, terminalde temiz çıktı almak için kullanıldı):

$ docker exec -it sqldemo "bash"
mssql@9c3eceb18f3f:/$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -Q"PRINT @@VERSION"
Password:
Microsoft SQL Server 2019 (RTM-CU4) (KB4548597) - 15.0.4033.1 (X64)
        Mar 14 2020 16:10:35
        Copyright (C) 2019 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 18.04.4 LTS) <X64>
mssql@9c3eceb18f3f:/$ exit

Görüldüğü üzere SQL Server 2019 Developer Edition RTM CU4 kurulu. Bu bölümde artık aktif containerları listeleyebilir ve şu anda ihtiyacımız olmayanları durdurup kaldırabiliriz:

$ docker ps -a
CONTAINER ID        IMAGE                                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
9c3eceb18f3f        mcr.microsoft.com/mssql/server:2019-latest   "/opt/mssql/bin/perm…"   6 minutes ago       Up 6 minutes        0.0.0.0:1501->1433/tcp   sqldemo
$ docker stop 9c3eceb18f3f
9c3eceb18f3f
$ docker rm 9c3eceb18f3f
9c3eceb18f3f

Ek bilgi: Container id’sinin tamamı yerine, id’nin ilk 2 veya 3 karakteri yazabilirsiniz.

Örnek: 9c ile başlayan başka bir container için 9c3eceb18f3f yerine 9c ya da 9c3 yazabilirsiniz.

Yine, yalnızca aktif containerların yalnız idlerini listelemek istiyorsanız, aşağıdaki komutu kullanabilirsiniz:

$ docker ps -aq

İkinci bölümde görüşmek üzere, sağlıcakla kalın.