Aracılığıyla paylaş


Öğretici: Azure'da Ubuntu sanal makinelerinde SQL Server için kullanılabilirlik gruplarını yapılandırma

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Sanal makineler oluşturma, kullanılabilirlik kümesine yerleştirme
  • Yüksek kullanılabilirliği etkinleştirme (HA)
  • Pacemaker kümesi oluşturma
  • STONITH cihazı oluşturarak eskrim aracısını yapılandırma
  • Ubuntu'ya SQL Server ve mssql-tools yükleme
  • SQL Server Always On kullanılabilirlik grubunu yapılandırma
  • Pacemaker kümesindeki kullanılabilirlik grubu (AG) kaynaklarını yapılandırma
  • Yük devretmeyi ve eskrim aracısını test etme

Dekont

Tarafsız iletişim

Bu makalede, Microsoft'un bu bağlamda kullanıldığında rahatsız edici olarak değerlendiren bağımlı terimine yönelik başvurular yer alır. Terim şu anda yazılımda göründüğünden bu makalede görünür. Terim yazılımdan kaldırıldığında, bunu makaleden kaldıracağız.

Bu öğreticide, Azure'da kaynakları dağıtmak için Azure CLI kullanılır.

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Önkoşullar

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

  • Bu makale, Azure CLI'nın 2.0.30 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanılıyorsa en son sürüm zaten yüklüdür.

Kaynak grubu oluşturma

Birden fazla aboneliğiniz varsa, bu kaynakları dağıtmak istediğiniz aboneliği ayarlayın.

Bir bölgede kaynak grubu <resourceGroupName> oluşturmak için aşağıdaki komutu kullanın. değerini, seçtiğiniz bir adla değiştirin <resourceGroupName> . Bu öğreticide East US 2 kullanılır. Daha fazla bilgi için aşağıdaki Hızlı Başlangıç'a bakın.

az group create --name <resourceGroupName> --location eastus2

Kullanılabilirlik kümesi oluşturma

Sonraki adım bir kullanılabilirlik kümesi oluşturmaktır. Azure Cloud Shell'de aşağıdaki komutu çalıştırın ve öğesini kaynak grubu adınızla değiştirin <resourceGroupName> . için <availabilitySetName>bir ad seçin.

az vm availability-set create \
    --resource-group <resourceGroupName> \
    --name <availabilitySetName> \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 2

Komut tamamlandıktan sonra aşağıdaki sonuçları almanız gerekir:

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
  "location": "eastus2",
  "name": "<availabilitySetName>",
  "platformFaultDomainCount": 2,
  "platformUpdateDomainCount": 2,
  "proximityPlacementGroup": null,
  "resourceGroup": "<resourceGroupName>",
  "sku": {
    "capacity": null,
    "name": "Aligned",
    "tier": null
  },
  "statuses": null,
  "tags": {},
  "type": "Microsoft.Compute/availabilitySets",
  "virtualMachines": []
}

Sanal ağ ve alt ağ oluşturma

  1. Önceden atanmış IP adresi aralığına sahip adlandırılmış bir alt ağ oluşturun. Aşağıdaki komutta bu değerleri değiştirin:

    • <resourceGroupName>
    • <vNetName>
    • <subnetName>
    az network vnet create \
        --resource-group <resourceGroupName> \
        --name <vNetName> \
        --address-prefix 10.1.0.0/16 \
        --subnet-name <subnetName> \
        --subnet-prefix 10.1.1.0/24
    

    Önceki komut bir sanal ağ ve özel IP aralığı içeren bir alt ağ oluşturur.

Kullanılabilirlik kümesi içinde Ubuntu VM'leri oluşturma

  1. Azure'da Ubuntu tabanlı işletim sistemi sunan sanal makine görüntülerinin listesini alın.

     az vm image list --all --offer "sql2022-ubuntupro2004"
    

    BYOS görüntülerini ararken aşağıdaki sonuçları görmeniz gerekir:

    [
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230808",
        "version": "16.0.230808"
      }
    ]
    

    Bu öğreticide Ubuntu 20.04 kullanılır.

    Önemli

    Kullanılabilirlik grubu ayarlamak için makine adlarının uzunluğu 15 karakterden kısa olmalıdır. Kullanıcı adları büyük harf karakter içeremez ve parolalar 12 ile 72 karakter arasında olmalıdır.

  2. Kullanılabilirlik kümesinde üç VM oluşturun. Aşağıdaki komutta bu değerleri değiştirin:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> - Örnek olarak "Standard_D16s_v3" olabilir
    • <username>
    • <adminPassword>
    • <vNetName>
    • <subnetName>
    for i in `seq 1 3`; do
        az vm create \
           --resource-group <resourceGroupName> \
           --name <VM-basename>$i \
           --availability-set <availabilitySetName> \
           --size "<VM-Size>" \
           --os-disk-size-gb 128 \
           --image "Canonical:0001-com-ubuntu-server-jammy:20_04-lts-gen2:latest" \
           --admin-username "<username>" \
           --admin-password "<adminPassword>" \
           --authentication-type all \
           --generate-ssh-keys \
           --vnet-name "<vNetName>" \
           --subnet "<subnetName>" \
           --public-ip-sku Standard \
           --public-ip-address ""
        done
    

Önceki komut, önceden tanımlanmış sanal ağı kullanarak VM'leri oluşturur. Farklı yapılandırmalar hakkında daha fazla bilgi için az vm create makalesine bakın.

Komut ayrıca 128 GB'lık özel bir işletim sistemi sürücüsü boyutu oluşturmak için parametresini de içerir --os-disk-size-gb . Bu boyutu daha sonra büyütürseniz, yüklemenize uyum sağlamak için uygun klasör birimlerini genişletin, Mantıksal Birim Yöneticisi'ni (LVM) yapılandırın.

Her VM için komut tamamlandıktan sonra aşağıdakine benzer sonuçlar almalısınız:

{
  "fqdns": "",
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/ubuntu1",
  "location": "westus",
  "macAddress": "<Some MAC address>",
  "powerState": "VM running",
  "privateIpAddress": "<IP1>",
  "resourceGroup": "<resourceGroupName>",
  "zones": ""
}

Oluşturulan VM'lere bağlantıyı test etme

Azure Cloud Shell'de aşağıdaki komutu kullanarak vm'lerin her birine Bağlan. VM IP'lerinizi bulamıyorsanız Azure Cloud Shell'de bu Hızlı Başlangıcı izleyin.

ssh <username>@<publicIPAddress>

Bağlantı başarılı olursa Linux terminalini temsil eden aşağıdaki çıkışı görmeniz gerekir:

[<username>@ubuntu1 ~]$

SSH oturumundan çıkmak için yazın exit .

Düğümler arasında parolasız SSH erişimini yapılandırma

Parolasız SSH erişimi, VM'lerinizin SSH ortak anahtarlarını kullanarak birbirleriyle iletişim kurmasını sağlar. Her düğümde SSH anahtarları yapılandırmanız ve bu anahtarları her düğüme kopyalamanız gerekir.

Yeni SSH anahtarları oluşturma

Gerekli SSH anahtarı boyutu 4.096 bittir. Her VM'de klasörüne /root/.ssh geçin ve aşağıdaki komutu çalıştırın:

ssh-keygen -t rsa -b 4096

Bu adım sırasında, mevcut bir SSH dosyasının üzerine yazmanız istenebilir. Bu istemi kabul etmeniz gerekir. Parola girmeniz gerekmez.

Genel SSH anahtarlarını kopyalama

Her VM'de, komutunu kullanarak ssh-copy-id yeni oluşturduğunuz düğümden ortak anahtarı kopyalamanız gerekir. Hedef VM'de hedef dizini belirtmek istiyorsanız parametresini -i kullanabilirsiniz.

Aşağıdaki komutta <username> hesap, VM'yi oluştururken her düğüm için yapılandırdığınız hesapla aynı olabilir. Hesabı da kullanabilirsiniz root , ancak bu seçenek üretim ortamında önerilmez.

sudo ssh-copy-id <username>@ubuntu1
sudo ssh-copy-id <username>@ubuntu2
sudo ssh-copy-id <username>@ubuntu3

Her düğümden parolasız erişimi doğrulama

SSH ortak anahtarının her düğüme kopyalandığını onaylamak için her düğümden komutunu kullanın ssh . Anahtarları doğru kopyaladıysanız, parola girmeniz istenmez ve bağlantı başarılı olur.

Bu örnekte, ilk VM'den (ubuntu1) ikinci ve üçüncü düğümlere bağlanıyoruz. Bir kez daha hesap, <username> VM'yi oluştururken her düğüm için yapılandırdığınız hesapla aynı olabilir.

ssh <username>@ubuntu2
ssh <username>@ubuntu3

Her düğümün parola gerektirmeden diğerleriyle iletişim kurabilmesi için bu işlemi üç düğümden de yineleyin.

Ad çözümlemeyi yapılandırma

Ad çözümlemesini DNS kullanarak veya dosyayı her düğümde etc/hosts el ile düzenleyerek yapılandırabilirsiniz.

DNS ve Active Directory hakkında daha fazla bilgi için bkz . Linux konağındaki SQL Server'ı Active Directory etki alanına ekleme.

Önemli

Önceki örnekte özel IP adresinizi kullanmanızı öneririz. Bu yapılandırmada genel IP adresinin kullanılması kurulumun başarısız olmasına neden olur ve VM'nizi dış ağlarda kullanıma sunar.

Bu örnekte kullanılan VM'ler ve IP adresleri aşağıdaki gibi listelenir:

  • ubuntu1: 10.0.0.85
  • ubuntu2: 10.0.0.86
  • ubuntu3: 10.0.0.87

Yüksek kullanılabilirliği etkinleştirme

3 VM'nin her birine bağlanmak için ssh kullanın ve bağlandıktan sonra yüksek kullanılabilirliği etkinleştirmek için aşağıdaki komutları çalıştırın.

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server

Pacemaker kümesini yükleme ve yapılandırma

Pacemaker kümesini yapılandırmaya başlamak için gerekli paketleri ve kaynak aracılarını yüklemeniz gerekir. Vm'lerinizin her birinde aşağıdaki komutları çalıştırın:

sudo apt-get install -y pacemaker pacemaker-cli-utils crmsh resource-agents fence-agents csync2 python3-azure

Şimdi birincil sunucuda kimlik doğrulama anahtarı oluşturmaya devam edin:

sudo corosync-keygen

authkey, konumda oluşturulur /etc/corosync/authkey . Kimlik doğrulama anahtarı şu konumdaki ikincil sunuculara kopyalayın: /etc/corosync/authkey

sudo scp /etc/corosync/authkey username@ubuntu2:~
sudo scp /etc/corosync/authkey username@ubuntu3:~

authkey'i giriş dizininden öğesine /etc/corosynctaşıyın.

sudo mv authkey /etc/corosync/authkey

Aşağıdaki komutları kullanarak küme oluşturmaya devam edin:

cd /etc/corosync/
sudo vi corosync.conf

Corosync dosyasını içeriği aşağıdaki gibi görüntülemek için düzenleyin:

totem {
    version: 2
    secauth: off
    cluster_name: demo
    transport: udpu
}

nodelist {
    node {
        ring0_addr: 10.0.0.85
        name: ubuntu1
        nodeid: 1
    }
    node {
        ring0_addr: 10.0.0.86
        name: ubuntu2
        nodeid: 2
    }
    node {
        ring0_addr: 10.0.0.87
        name: ubuntu3
        nodeid: 3
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 0
}

qb {
    ipc_type: native
}

logging {
    fileline: on
    to_stderr: on
    to_logfile: yes
    logfile: /var/log/corosync/corosync.log
    to_syslog: no
    debug: off
}

corosync.conf Dosyasını diğer düğümlere /etc/corosync/corosync.confkopyalayın:

sudo scp /etc/corosync/corosync.conf username@ubuntu2:~
sudo scp /etc/corosync/corosync.conf username@ubuntu3:~
sudo mv corosync.conf /etc/corosync/

Pacemaker ve Corosync'i yeniden başlatın ve durumu onaylayın:

sudo systemctl restart pacemaker corosync
sudo crm status

Çıktı aşağıdaki örneğe benzer:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by hacluster via crmd on ubuntu1
  * 3 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * No resources

Eskrim aracısını yapılandırma

Kümede eskrim yapılandırın. Eskrim , kümedeki başarısız düğümün yalıtımıdır. Başarısız düğümü yeniden başlatır ve kümeye yeniden katılarak düğümün kapanmasına, sıfırlanıp geri dönmesine izin vererek başarısız olur.

Eskrim yapılandırmak için aşağıdaki eylemleri gerçekleştirin:

  1. Microsoft Entra Id'ye yeni bir uygulama kaydetme ve gizli dizi oluşturma
  2. PowerShell/CLI'da json dosyasından özel rol oluşturma
  3. Rolü ve uygulamayı kümedeki VM'lere atama
  4. Eskrim aracısı özelliklerini ayarlama

Microsoft Entra Id'ye yeni bir uygulama kaydetme ve gizli dizi oluşturma

  1. Portalda Microsoft Entra Id'ye gidin ve Kiracı Kimliğini not edin.
  2. Sol taraftaki menüden Uygulama Kayıtları'nı ve ardından Yeni Kayıt'ı seçin.
  3. Bir Ad girin ve ardından Yalnızca bu kuruluş dizinindeki Hesaplar'ı seçin.
  4. Uygulama Türü için Web'i seçin, oturum açma URL'si olarak girin http://localhost ve ardından Kaydet'i seçin.
  5. Sol taraftaki menüde Sertifikalar ve gizli diziler'i ve ardından Yeni istemci gizli dizisi'ni seçin.
  6. Bir açıklama girin ve bir süre sonu seçin.
  7. Gizli dizi değerini not edin; aşağıdaki parola ve gizli dizi kimliği olarak kullanılır; aşağıdaki kullanıcı adı olarak kullanılır.
  8. "Genel Bakış" öğesini seçin ve Uygulama Kimliğini not edin. Aşağıdaki oturum açma bilgileri olarak kullanılır.

adlı fence-agent-role.json bir JSON dosyası oluşturun ve aşağıdakileri ekleyin (abonelik kimliğinizi ekleyin):

{
  "Name": "Linux Fence Agent Role-ap-server-01-fence-agent",
  "Id": null,
  "IsCustom": true,
  "Description": "Allows to power-off and start virtual machines",
  "Actions": [
    "Microsoft.Compute/*/read",
    "Microsoft.Compute/virtualMachines/powerOff/action",
    "Microsoft.Compute/virtualMachines/start/action"
  ],
  "NotActions": [],
  "AssignableScopes": [
    "/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]
}

PowerShell/CLI'da JSON dosyasından özel rol oluşturma

az role definition create --role-definition fence-agent-role.json

Rolü ve uygulamayı kümedeki VM'lere atama

  1. Kümedeki vm'lerin her biri için yan menüden Erişim Denetimi (IAM) öğesini seçin.
  2. Rol ataması ekle'yi seçin (klasik deneyimi kullanın).
  3. Daha önce oluşturulan rolü seçin.
  4. Seç listesinde, daha önce oluşturulan uygulamanın adını girin.

Artık önceki değerleri ve abonelik kimliğinizi kullanarak eskrim aracısı kaynağını oluşturabiliriz:

  sudo crm configure primitive fence-vm stonith:fence_azure_arm \
params \
action=reboot \
resourceGroup="resourcegroupname" \
resourceGroup="$resourceGroup" \
username="$secretId" \
login="$applicationId" \
passwd="$password" \
tenantId="$tenantId" \
subscriptionId="$subscriptionId" \
pcmk_reboot_timeout=900 \
power_timeout=60 \
op monitor \
interval=3600 \
timeout=120

Eskrim aracısı özelliklerini ayarlama

Eskrim aracısı özelliklerini ayarlamak için aşağıdaki komutları çalıştırın:

sudo crm configure property cluster-recheck-interval=2min
sudo crm configure property start-failure-is-fatal=true
sudo crm configure property stonith-timeout=900
sudo crm configure property concurrent-fencing=true
sudo crm configure property stonith-enabled=true

Küme durumunu onaylayın:

  sudo crm status

Çıktı aşağıdaki örneğe benzer:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 1 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

SQL Server ve mssql-tools'u yükleme

SQL Server'ı yüklemek için aşağıdaki komutlar kullanılır:

  1. Genel depo GPG anahtarlarını içeri aktarın:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  2. Ubuntu deposunu kaydedin:

    sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. SQL Server'ı yüklemek için aşağıdaki komutları çalıştırın:

    sudo apt-get update
    sudo apt-get install -y mssql-server
    
  4. Paket yüklemesi tamamlandıktan sonra komutunu çalıştırın mssql-conf setup ve istemleri izleyerek SA parolasını ayarlayın ve sürümünüzü seçin. Hatırlatmak gerekirse, aşağıdaki sürümler serbestçe lisanslandırılır: Değerlendirme, Geliştirici ve Express.

    sudo /opt/mssql/bin/mssql-conf setup
    
  5. Yapılandırma tamamlandıktan sonra hizmetin çalıştığını doğrulayın:

    systemctl status mssql-server --no-pager
    
  6. SQL Server komut satırı araçlarını yükleme

Veritabanı oluşturmak için, SQL Server'da Transact-SQL deyimlerini çalıştırabilen bir araçla bağlanmanız gerekir. Aşağıdaki adımlar SQL Server komut satırı araçlarını yükler: sqlcmd ve bcp.

Ubuntu'ya mssql-tools18 yüklemek için aşağıdaki adımları kullanın.

Dekont

  • Ubuntu 18.04, SQL Server 2019 CU 3'den itibaren desteklenir.
  • Ubuntu 20.04, SQL Server 2019 CU 10'dan itibaren desteklenir.
  • Ubuntu 22.04, SQL Server 2022 CU 10'dan itibaren desteklenir.
  1. Süper kullanıcı moduna girin.

    sudo su
    
  2. Genel depo GPG anahtarlarını içeri aktarın.

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  3. Microsoft Ubuntu deposunu kaydedin.

    • Ubuntu 22.04 için aşağıdaki komutu kullanın:

      curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Ubuntu 20.04 için aşağıdaki komutu kullanın:

      curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Ubuntu 18.04 için aşağıdaki komutu kullanın:

      curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Ubuntu 16.04 için aşağıdaki komutu kullanın:

      curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
  4. Süper kullanıcı modundan çıkın.

    exit
    
  5. Kaynak listesini güncelleştirin ve unixODBC geliştirici paketiyle yükleme komutunu çalıştırın.

    sudo apt-get update
    sudo apt-get install mssql-tools18 unixodbc-dev
    

    Dekont

    mssql-tools'un en son sürümüne güncelleştirmek için aşağıdaki komutları çalıştırın:

    sudo apt-get update  
    sudo apt-get install mssql-tools18
    
  6. İsteğe bağlı: Bash kabuğunda ortam değişkeninize PATH ekleyin/opt/mssql-tools18/bin/.

    Sqlcmd ve bcp'nin oturum açma oturumları için bash kabuğundan erişilebilir olmasını sağlamak için, dosyadaki ~/.bash_profile öğesini PATH aşağıdaki komutla değiştirin:

    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
    

    Sqlcmd ve bcp'nin etkileşimli/oturum açma dışı oturumlar için bash kabuğundan erişilebilir olmasını sağlamak için dosyasındaki ~/.bashrc öğesini aşağıdaki komutla değiştirin PATH:

    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
    source ~/.bashrc
    

SQL Server yüksek kullanılabilirlik aracısı yükleme

SQL Server için yüksek kullanılabilirlik aracısı paketini yüklemek için tüm düğümlerde aşağıdaki komutu çalıştırın:

sudo apt-get install mssql-server-ha

Kullanılabilirlik grubunu yapılandırma

VM'leriniz için bir SQL Server Always On kullanılabilirlik grubu yapılandırmak için aşağıdaki adımları kullanın. Daha fazla bilgi için bkz . Linux'ta yüksek kullanılabilirlik için SQL Server Always On kullanılabilirlik gruplarını yapılandırma.

Kullanılabilirlik gruplarını etkinleştirme ve SQL Server'ı yeniden başlatma

SQL Server örneğini barındıran her düğümde kullanılabilirlik gruplarını etkinleştirin. Ardından hizmeti yeniden başlatın mssql-server . Her düğümde aşağıdaki komutları çalıştırın:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server

Sertifika oluşturma

Microsoft, AG uç noktasında Active Directory kimlik doğrulamasını desteklemez. Bu nedenle, AG uç nokta şifrelemesi için bir sertifika kullanmanız gerekir.

  1. SQL Server Management Studio (SSMS) veya sqlcmd kullanarak tüm düğümlere Bağlan. AlwaysOn_health oturumunu etkinleştirmek ve bir ana anahtar oluşturmak için aşağıdaki komutları çalıştırın:

    Önemli

    SQL Server örneğine uzaktan bağlanıyorsanız güvenlik duvarınızda 1433 numaralı bağlantı noktasının açık olması gerekir. Ayrıca her VM için NSG'nizdeki 1433 numaralı bağlantı noktasına gelen bağlantılara izin vermeniz gerekir. Daha fazla bilgi için bkz . Gelen güvenlik kuralı oluşturmak için güvenlik kuralı oluşturma.

    • öğesini <MasterKeyPassword> kendi parolanızla değiştirin.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
        WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. SSMS veya sqlcmd kullanarak birincil çoğaltmaya Bağlan. Aşağıdaki komutlar birincil SQL Server çoğaltmanızda bir sertifika /var/opt/mssql/data/dbm_certificate.cer ve konumunda var/opt/mssql/data/dbm_certificate.pvk özel anahtar oluşturur:

    • öğesini <PrivateKeyPassword> kendi parolanızla değiştirin.
    CREATE CERTIFICATE dbm_certificate
        WITH SUBJECT = 'dbm';
    GO
    
    BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
            FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
            ENCRYPTION BY PASSWORD = '<PrivateKeyPassword>'
            );
    GO
    

komutunu çalıştırarak sqlcmd oturumundan exit çıkın ve SSH oturumunuza geri dönün.

Sertifikayı ikincil çoğaltmalara kopyalayın ve sunucuda sertifikalar oluşturun

  1. Oluşturulan iki dosyayı kullanılabilirlik çoğaltmalarını barındıracak tüm sunucularda aynı konuma kopyalayın.

    Birincil sunucuda aşağıdaki scp komutu çalıştırarak sertifikayı hedef sunuculara kopyalayın:

    • ve sles2 değerini kullandığınız kullanıcı adı ve hedef VM adıyla değiştirin<username>.
    • Tüm ikincil çoğaltmalar için bu komutu çalıştırın.

    Dekont

    komutunu çalıştırmanız sudo -igerekmez ve bu da size kök ortamı sağlar. Bunun yerine komutu her komutun önünde çalıştırabilirsiniz sudo .

    # The below command allows you to run commands in the root environment
    sudo -i
    
    scp /var/opt/mssql/data/dbm_certificate.* <username>@sles2:/home/<username>
    
  2. Hedef sunucuda aşağıdaki komutu çalıştırın:

    • değerini kullanıcı adınız ile değiştirin <username> .
    • Komut, mv dosyaları veya dizini bir yerden diğerine taşır.
    • Komutu chown dosya, dizin veya bağlantı sahibini ve grubunu değiştirmek için kullanılır.
    • Tüm ikincil çoğaltmalar için bu komutları çalıştırın.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. Aşağıdaki Transact-SQL betiği, birincil SQL Server çoğaltması üzerinde oluşturduğunuz yedeklemeden bir sertifika oluşturur. Betiği güçlü parolalarla güncelleştirin. Şifre çözme parolası, önceki adımda .pvk dosyasını oluşturmak için kullandığınız parolayla aynıdır. Sertifikayı oluşturmak için tüm ikincil sunucularda sqlcmd veya SSMS kullanarak aşağıdaki betiği çalıştırın:

    CREATE CERTIFICATE dbm_certificate
        FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
        WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        DECRYPTION BY PASSWORD = '<PrivateKeyPassword>'
    );
    GO
    

Tüm çoğaltmalarda veritabanı yansıtma uç noktalarını oluşturma

sqlcmd veya SSMS kullanarak tüm SQL Server örneklerinde aşağıdaki betiği çalıştırın:

CREATE ENDPOINT [Hadr_endpoint]
   AS TCP (LISTENER_PORT = 5022)
   FOR DATABASE_MIRRORING (
   ROLE = ALL,
   AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO

Kullanılabilirlik grubunu oluşturma

sqlcmd veya SSMS kullanarak birincil çoğaltmayı barındıran SQL Server örneğine Bağlan. Kullanılabilirlik grubunu oluşturmak için aşağıdaki komutu çalıştırın:

  • değerini istediğiniz AG adıyla değiştirin ag1 .
  • ubuntu1, ubuntu2ve ubuntu3 değerlerini çoğaltmaları barındıran SQL Server örneklerinin adlarıyla değiştirin.
CREATE AVAILABILITY
GROUP [ag1]
WITH (
        DB_FAILOVER = ON,
        CLUSTER_TYPE = EXTERNAL
        )
FOR REPLICA
    ON N'ubuntu1'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu1:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'ubuntu2'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu2:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'ubuntu3'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu3:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        );
GO

ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO

Pacemaker için SQL Server oturumu oluşturma

Tüm SQL Server örneklerinde Pacemaker için bir SQL Server oturumu oluşturun. Aşağıdaki Transact-SQL bir oturum açma bilgisi oluşturur.

  • değerini kendi karmaşık parolanızla değiştirin <password> .
USE [master]
GO

CREATE LOGIN [pacemakerLogin]
    WITH PASSWORD = N'<password>';
GO

ALTER SERVER ROLE [sysadmin]
    ADD MEMBER [pacemakerLogin];
GO

Tüm SQL Server örneklerinde, SQL Server oturum açma bilgileri için kullanılan kimlik bilgilerini kaydedin.

  1. Dosyayı oluşturun:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Dosyaya aşağıdaki iki satırı ekleyin:

    pacemakerLogin
    <password>
    

    Vi düzenleyicisinden çıkmak için önce Esc tuşuna basın ve ardından dosyayı yazmak ve çıkmak için komutunu :wq girin.

  3. Dosyayı yalnızca kök tarafından okunabilir hale getirin:

    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

İkincil çoğaltmaları kullanılabilirlik grubuna ekleme

  1. İkincil çoğaltmalarınızda aşağıdaki komutları çalıştırarak bunları AG'ye ekleyin:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  2. Birincil çoğaltmada ve her ikincil çoğaltmada aşağıdaki Transact-SQL betiğini çalıştırın:

    GRANT ALTER, CONTROL, VIEW DEFINITION
        ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  3. İkincil çoğaltmalar birleştirildikten sonra, Always On Yüksek Kullanılabilirlik düğümünü genişleterek bunları SSMS Nesne Gezgini görebilirsiniz:

    Screenshot shows the primary and secondary availability replicas.

Kullanılabilirlik grubuna veritabanı ekleme

Bu bölüm, kullanılabilirlik grubuna veritabanı ekleme makalesini izler.

Bu adımda aşağıdaki Transact-SQL komutları kullanılır. Birincil çoğaltmada şu komutları çalıştırın:

CREATE DATABASE [db1]; -- creates a database named db1
GO

ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery mode
GO

BACKUP DATABASE [db1] -- backs up the database to disk
    TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO

Veritabanının ikincil sunucularda oluşturulduğunu doğrulayın

Her ikincil SQL Server çoğaltmasında aşağıdaki sorguyu çalıştırarak db1 veritabanının oluşturulup oluşturulmadığını ve EŞITLENDİ durumda olup olmadığını denetleyin:

SELECT * FROM sys.databases
WHERE name = 'db1';
GO

SELECT DB_NAME(database_id) AS 'database',
    synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO

synchronization_state_desc listeleri için db1EŞITLENDİyse, bu çoğaltmaların eşitlenmiş olduğu anlamına gelir. İkinciller birincil çoğaltmada gösteriliyor db1 .

Pacemaker kümesinde kullanılabilirlik grubu kaynakları oluşturma

Pacemaker'da kullanılabilirlik grubu kaynağını oluşturmak için aşağıdaki komutları çalıştırın:

sudo crm

configure

primitive ag1_cluster \
ocf:mssql:ag \
params ag_name="ag1" \
meta failure-timeout=60s \
op start timeout=60s \
op stop timeout=60s \
op promote timeout=60s \
op demote timeout=10s \
op monitor timeout=60s interval=10s \
op monitor timeout=60s on-fail=demote interval=11s role="Master" \
op monitor timeout=60s interval=12s role="Slave" \
op notify timeout=60s

ms ms-ag1 ag1_cluster \
meta master-max="1" master-node-max="1" clone-max="3" \
clone-node-max="1" notify="true"

commit

Yukarıdaki komut, kullanılabilirlik grubu kaynağı olan ag1_cluster kaynağını oluşturur. Ardından ms-ag1 kaynağı (Pacemaker'da birincil/ikincil kaynak) oluşturur ve ag kaynağını buna ekler. Bu, AG kaynağının kümedeki üç düğümde de çalışmasını sağlar, ancak bu düğümlerden yalnızca biri birincildir.)

AG grubu kaynağını görüntülemek ve kümenin durumunu denetlemek için:

sudo crm resource status ms-ag1
sudo crm status

Çıktı aşağıdaki örneğe benzer:

resource ms-ag1 is running on: ubuntu1 Master
resource ms-ag1 is running on: ubuntu3
resource ms-ag1 is running on: ubuntu2

Çıktı aşağıdaki örneğe benzer şekilde görünür. Birlikte bulundurma ve yükseltme kısıtlamaları eklemek için bkz . Öğretici: Linux sanal makinelerinde kullanılabilirlik grubu dinleyicisini yapılandırma.

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 4 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * Clone Set: ms-ag1 [ag1_cluster] (promotable):
  * Masters: [ ubuntu1 ]
  * Slaves : [ ubuntu2 ubuntu3 ]
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

Dinleyiciye ve yük dengeleyiciye uygulanan birlikte bulundurma ve yükseltme kısıtlamalarının tek tek uygulanması gerekmeyecek şekilde bir grup kaynağı oluşturmak için aşağıdaki komutu çalıştırın.

sudo crm configure group virtualip-group azure-load-balancer virtualip

çıktısı crm status aşağıdaki örneğe benzer olacaktır:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * Clone Set: ms-ag1 [ag1_cluster] (promotable):
    * Masters: [ ubuntu1 ]
    * Slaves : [ ubuntu2 ubuntu3 ]
  * Resource Group:  virtual ip-group:
    * azure-load-balancer  (ocf  :: heartbeat:azure-lb):           Started ubuntu1     
    * virtualip     (ocf :: heartbeat: IPaddr2):                   Started ubuntu1
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

Sonraki adım