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

Docker kurulumunu Bölüm 1‘de tamamlamıştık ve imageları localimize çektik.

Bu bölümde SQL Server 2019 HA için docker hub’dan çektiğimiz Ubuntu 18.04 image’ını hazırlayıp kuruluma hazır hale getireceğiz. İlk önce yeni bir dizin oluşturalım, çünkü yapılandırma dosyalarımızı burada tutacağız.

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

Yeni bir container image oluşturmak için dockerfile isminde dosya oluşturup gerekli komutları 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çıklayalım.

FROM: Oluşturulacak image’ın base alınacağı image.

RUN: Image hazırlama aşamasında çalıştırılacak komut setleri.

EXPOSE: Bu komut ile containera erişilecek port belirlenir. Yani containerın dinleyeceği port.

ENTRYPOINT: Container başlatıldığında komutları, hizmetleri vb. çalıştırmak için.

Dockerfile’ımız hazırlandıktan sonra image’ımızı oluşturup 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 sürecinin başarılı olduğunu ve localimizdeki image’ın başarıyla oluşturulduğunu görüyoruz. Aşağıdaki komutu çalıştırarak hazırladığımız image’a bakalım:

$ 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

Artık image hazır olduğuna göre, aynı anda 3 SQL node kurabilmek için docker-compose ile yapılandırma dosyasını oluşturabiliriz. Docker Compose hakkında detaylı bilgiyi buradan bulabilirsiniz.

Docker Compose yapılandırma dosyasının, çalıştığınız dizinde olduğundan emin olun. Değilseniz cd ile geçiş yapabilirsiniz.

$ 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 başlatmanız için aşağıdaki komutu çalıştırmamız yeterli. Varsayılan olarak, ilgili dizinde docker-compose.yml dosyasını bulur ve buradaki yönergelere göre sunucuları oluşturur ve build eder.

Komutun sonundaki -d parametresi ile onun daemon modda yani arka planda çalışmasını istediğimizi belirttik.

$ 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

Docker compose kurulu değilse; aşağıdaki komutla kurabilirsiniz:

$ apt install docker-compose -y
$ 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üler. Artık hostlarımız hazır ve erişilebilir durumda. AlwaysOn AG’nin kurulumu için SSMS’den veya terminalden erişerek gerekli kontrolleri yapabiliriz.

Docker’ın bulunduğu hostun ip adresini almak 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
..

SQL Server nodelarına sırasıyla 192.168.72.176 IP adresi ve 1501, 1502 ve 1503 portları üzerinden erişebiliriz.

Nodeların yanındaki Linux simgesi dikkatinizi çekti mi? 🙂

Son bölümde Docker Container üzerinde AlwaysOn AG kurulumunu tamamlayacağız.

Görüşmek üzere, sağlıcakla kalın.

Bir cevap yazın

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