Docker Container: SQL Server 2019 AlwaysOn Availability Group – Part 2

Önceki bölümde docker kurulumunu tamamlamış ve imageları localimize çekmiştik. Önceki adımları gerçekleştirmediyseniz bu linkten erişebilirsiniz.

Bu bölümde docker hubtan çektiğimiz Ubuntu 18.04 image’ını SQL Server 2019 HA için hazırlayıp, kuruluma hazır hale getireceğiz. Öncelikle çalışma için yeni bir dizin oluşturup, konfigürasyon dosyalarımızı burada tutacağız.

$ mkdir sql2019ha-demo
$ cd sql2019ha-demo
$ ls -l
total 0

Yeni bir container image’ını build edebilmek için dockerfile isminde bir dosya oluşturup, gerekli yönergeleri ekleyeceğiz. Dockerfile ile ilgili detaylı bilgiye buradan ulaşabilirsiniz.

$ touch dockerfile
$ vi dockerfile
FROM ubuntu:18.04

RUN apt-get update

RUN apt install sudo wget curl gnupg gnupg1 gnupg2 -y
RUN apt install software-properties-common systemd vim -y
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

RUN add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
RUN apt-get update
RUN apt-get install -y mssql-server

RUN /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
RUN /opt/mssql/bin/mssql-conf set sqlagent.enabled true

EXPOSE 1433

ENTRYPOINT /opt/mssql/bin/sqlservr

Sırasıyla keywordleri ve değerlerini açıklayayım.

FROM: hazırlanacak image’ın hangi image’ı base alacağını bildiriyor.

RUN: image hazırlanma aşamasında çalıştırılması istenen komut setleri bildiriliyor.

EXPOSE: dışarıdan containera hangi port üzerinden erişim sağlanacağı yani containerın hangi portunun dinleneceği belirleniyor.

ENTRYPOINT: containerın ayağa kalktığı anda hangi komut, service vb. çalıştırması istendiği belirtiliyor.

Dockerfile’ımız hazırlandıktan sonra artık image’ımızı build edip kullanıma hazır hale getirebiliriz.

$ docker build -t sqlag2019:ha .
Sending build context to Docker daemon   2.56kB
Step 1/12 : FROM ubuntu:18.04
 ---> c3c304cb4f22
Step 2/12 : RUN apt-get update
 ---> Running in 950e50f80f00
Get:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Get:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [932 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]...
Step 3/12 : RUN apt install sudo wget curl gnupg gnupg1 gnupg2 -y
 ---> Running in edc9d15b2383
..
..
Step 8/12 : RUN sudo apt-get install -y mssql-server
 ---> Running in 43d82a503f8a
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
Step 9/12 : RUN sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
 ---> Running in 166c6596d2dd
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
Removing intermediate container 166c6596d2dd
 ---> bcdb057fed43
Step 10/12 : RUN sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
 ---> Running in 22dd6a93d1ef
SQL Server needs to be restarted in order to apply this setting. Please run
'systemctl restart mssql-server.service'.
Removing intermediate container 22dd6a93d1ef
 ---> 6b90afbaf94e
Step 11/12 : EXPOSE 1433
 ---> Running in bcc14f3b0bad
Removing intermediate container bcc14f3b0bad
 ---> 4aae1563aa74
Step 12/12 : ENTRYPOINT /opt/mssql/bin/sqlservr
 ---> Running in 68b6ed45ff6a
Removing intermediate container 68b6ed45ff6a
 ---> b7467618c371
Successfully built b7467618c371
Successfully tagged sqlag2019:ha

Son iki satırda build işleminin başarılı olduğunu ve image’ın localimizde başarılı bir şekilde oluşturulduğu çıktısını görüyoruz. Localimizdeki imageları görüntülemek için aşağıdaki komutu çalıştırıp hazırladığımız image’ın yer aldığını doğruluyoruz:

$ docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
sqlag2019                        ha                  b7467618c371        About a minute ago   1.4GB
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

Image hazır olduğuna göre, tek seferde 3 SQL node’un ayağa kaldırılması için docker-compose ile konfigürasyon dosyasını oluşturabiliriz. Docker Compose ile ilgili detaylı bilgiye buradan ulaşabilirsiniz. Docker Compose konfigürasyon dosyasının çalışma yaptığınız dizinde olmasına dikkat edin.

$ touch docker-compose.yml
$ vi docker-compose.yml
version: '3'

services:
  db1:
    container_name: sqlNode1
    image: sqlag2019:ha
    hostname: sqlNode1
    domainname: lab.local
    environment:
      SA_PASSWORD: "Str0ngPa$$w0rd"
      ACCEPT_EULA: "Y"
    ports:
    - "1501:1433"
    extra_hosts:
      sqlNode2.labl.local: "172.16.238.22"
      sqlNode3.labl.local: "172.16.238.23"
    networks:
        internal:
                ipv4_address: 172.16.238.21

  db2:
    container_name: sqlNode2
    image: sqlag2019:ha
    hostname: sqlNode2
    domainname: lab.local
    environment:
      SA_PASSWORD: "Str0ngPa$$w0rd"
      ACCEPT_EULA: "Y"
    ports:
    - "1502:1433"
    extra_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode3.lab.local: "172.16.238.23"
    networks:
        internal:
                ipv4_address: 172.16.238.22

  db3:
    container_name: sqlNode3
    image: sqlag2019:ha
    hostname: sqlNode3
    domainname: lab.local
    environment:
      SA_PASSWORD: "Str0ngPa$$w0rd"
      ACCEPT_EULA: "Y"
    ports:
    - "1503:1433"
    extra_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode2.lab.local: "172.16.238.22"
    networks:
        internal:
                ipv4_address: 172.16.238.23

networks:
    internal:
      ipam:
            driver: default
            config:
                - subnet: 172.16.238.0/24

Docker Compose ile stack’i ayağa kaldırmak için aşağıdaki komutu çalıştırmamız yeterlidir. Varsayılan olarak ilgili dizindeki docker-compose.yml dosyasını bulacak ve buradaki direktiflere göre serviceleri oluşturacak ve ayağa kaldıracaktır. Komutun sonundaki -d parametresi detached modeda yani backgroundta çalışmasını istediğimizi belirliyoruz.

$ docker-compose up -d
Creating network "sql2019hademo_internal" with the default driver
Creating sqlNode2 ...
Creating sqlNode1 ...
Creating sqlNode2
Creating sqlNode3 ...
Creating sqlNode1
Creating sqlNode2 ... done

Eğer docker compose yüklü değilse apt install docker-compose -y ile yükleyebilirsiniz.

$ docker-compose ps
Name                Command               State           Ports
--------------------------------------------------------------------------
sqlNode1   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1501->1433/tcp
sqlNode2   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1502->1433/tcp
sqlNode3   /bin/sh -c /opt/mssql/bin/ ...   Up      0.0.0.0:1503->1433/tcp

Yukarıdaki komut docker compose ile oluşturulan containerları görüntülemektedir. Artık hostlarımız ayakta ve erişilebilir durumda. AlwaysOn AG kurulumu için kontrollerimizi sağlayabiliriz. SSMS’ten ya da yine terminalden erişip kontrollerimizi sağlayabiliriz. Bunun için docker’ı host eden hostun ip adresini elde etmek için aşağıdaki komutu çalıştırıyoruz.

$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.72.176  netmask 255.255.255.0  broadcast 192.168.72.255
..

192.168.72.176 ve sırasıyla 1501, 1502 ve 1503 portları üzerinden SQL Server nodelarımıza erişim sağlayabiliriz.

Nodeların yanındaki Linux ikonu dikkatinizi çekmiştir 🙂

Sonraki bölümde bu hostlar üzerinde AlwaysOn AG için gerekli yapılandırmayı gerçekleştirip kurulumu tamamlayacağız. Sağlıcakla kalın.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir