Oktatóanyag: Az SQL Server rendelkezésre állási csoportjainak konfigurálása Ubuntu virtuális gépeken az Azure-ban

Az oktatóanyag segítségével megtanulhatja a következőket:

  • Virtuális gépek létrehozása, rendelkezésre állási csoportba helyezése
  • Magas rendelkezésre állás engedélyezése (HA)
  • Pacemaker-fürt létrehozása
  • Kerítésügynök konfigurálása STONITH-eszköz létrehozásával
  • AZ SQL Server és az mssql-tools telepítése az Ubuntu-on
  • Sql Server Always On rendelkezésre állási csoport konfigurálása
  • Rendelkezésre állási csoport (AG) erőforrásainak konfigurálása a Pacemaker-fürtben
  • Feladatátvétel és a kerítésügynök tesztelése

Megjegyzés:

Torzításmentes kommunikáció

Ez a cikk a rabszolga kifejezésre mutató hivatkozásokat tartalmaz, amely a Microsoft által sértőnek ítélt kifejezés, ha ebben a kontextusban használják. A kifejezés azért jelenik meg ebben a cikkben, mert jelenleg a szoftverben jelenik meg. Ha a kifejezés el lesz távolítva a szoftverből, eltávolítjuk a cikkből.

Ez az oktatóanyag az Azure CLI használatával helyezi üzembe az erőforrásokat az Azure-ban.

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Előfeltételek

  • Ez a cikk az Azure CLI 2.0.30-s vagy újabb verzióját igényli. Az Azure Cloud Shell használata esetén a legújabb verzió már telepítve van.

Erőforráscsoport létrehozása

Ha több előfizetéssel rendelkezik, állítsa be azt az előfizetést, amelybe telepíteni szeretné ezeket az erőforrásokat.

Az alábbi paranccsal hozzon létre egy erőforráscsoportot <resourceGroupName> egy régióban. Cserélje le <resourceGroupName> az Ön által választott névre. Ebben az oktatóanyagban a következőt használjuk: East US 2. További információkért tekintse meg az alábbi rövid útmutatót.

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

Rendelkezésre állási csoport létrehozása

A következő lépés egy rendelkezésre állási csoport létrehozása. Futtassa a következő parancsot az Azure Cloud Shellben, és cserélje le <resourceGroupName> az erőforráscsoport nevére. Válasszon nevet a következőnek <availabilitySetName>: .

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

A parancs befejeződése után a következő eredményeket kell kapnia:

{
  "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": []
}

Virtuális hálózat és alhálózat létrehozása

  1. Hozzon létre egy elnevezett alhálózatot egy előre hozzárendelt IP-címtartománysal. Cserélje le ezeket az értékeket a következő parancsban:

    • <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
    

    Az előző parancs létrehoz egy virtuális hálózatot és egy egyéni IP-tartományt tartalmazó alhálózatot.

Ubuntu virtuális gépek létrehozása a rendelkezésre állási csoportban

  1. Lekérheti az Ubuntu-alapú operációs rendszert kínáló virtuálisgép-rendszerképek listáját az Azure-ban.

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

    A BYOS-rendszerképek keresésekor a következő eredményeknek kell megjelennie:

    [
      {
        "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"
      }
    ]
    

    Ebben az oktatóanyagban a következőt használjuk: Ubuntu 20.04.

    Fontos

    A gépneveknek 15 karakternél rövidebbnek kell lenniük a rendelkezésre állási csoport beállításához. A felhasználónevek nem tartalmazhatnak nagybetűket, és a jelszavaknak 12 és 72 karakter közöttinek kell lenniük.

  2. Hozzon létre három virtuális gépet a rendelkezésre állási csoportban. Cserélje le ezeket az értékeket a következő parancsban:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> - Ilyen például a "Standard_D16s_v3"
    • <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
    

Az előző parancs a korábban definiált virtuális hálózat használatával hozza létre a virtuális gépeket. A különböző konfigurációkkal kapcsolatos további információkért tekintse meg az az vm create cikket.

A parancs azt a --os-disk-size-gb paramétert is tartalmazza, amely 128 GB-os egyéni operációsrendszer-meghajtóméretet hoz létre. Ha később növeli ezt a méretet, bontsa ki a megfelelő mappaköteteket a telepítéshez, konfigurálja a Logikai kötetkezelőt (LVM).

Az egyes virtuális gépek parancsának befejeződése után az alábbihoz hasonló eredményeket kell kapnia:

{
  "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": ""
}

A létrehozott virtuális gépekkel való kapcsolat tesztelése

Csatlakozás az egyes virtuális gépekre az alábbi paranccsal az Azure Cloud Shellben. Ha nem találja a virtuálisgép-IP-címeket, kövesse ezt a rövid útmutatót az Azure Cloud Shellben.

ssh <username>@<publicIPAddress>

Ha a kapcsolat sikeres, a következő kimenetnek kell megjelennie, amely a Linux-terminált jelöli:

[<username>@ubuntu1 ~]$

Írja be exit az SSH-munkamenet elhagyásához.

Jelszó nélküli SSH-hozzáférés konfigurálása csomópontok között

A jelszó nélküli SSH-hozzáférés lehetővé teszi, hogy a virtuális gépek SSH nyilvános kulcsokkal kommunikáljanak egymással. Minden csomóponton konfigurálnia kell az SSH-kulcsokat, és ezeket a kulcsokat minden csomópontra át kell másolnia.

Új SSH-kulcsok létrehozása

A szükséges SSH-kulcsméret 4096 bit. Minden virtuális gépen váltson a /root/.ssh mappára, és futtassa a következő parancsot:

ssh-keygen -t rsa -b 4096

Ebben a lépésben előfordulhat, hogy a rendszer egy meglévő SSH-fájl felülírását kéri. El kell fogadnia ezt a kérést. Nem kell jelszót megadnia.

A nyilvános SSH-kulcsok másolása

Minden virtuális gépen át kell másolnia a nyilvános kulcsot az imént létrehozott csomópontról a ssh-copy-id parancs használatával. Ha meg szeretné adni a célkönyvtárat a cél virtuális gépen, használhatja a paramétert -i .

Az alábbi parancsban a <username> fiók lehet ugyanaz a fiók, amely az egyes csomópontokhoz konfigurálva van a virtuális gép létrehozásakor. Használhatja a root fiókot is, de ez a beállítás éles környezetben nem ajánlott.

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

Jelszó nélküli hozzáférés ellenőrzése minden csomópontról

Annak ellenőrzéséhez, hogy az SSH nyilvános kulcsát minden csomópontra másolta-e, használja az ssh egyes csomópontok parancsát. Ha helyesen másolta a kulcsokat, a rendszer nem kéri a jelszót, és a kapcsolat sikeres.

Ebben a példában az első virtuális gép (ubuntu1)második és harmadik csomópontjaihoz csatlakozunk. A fiók ismét <username> ugyanaz lehet, mint a virtuális gép létrehozásakor az egyes csomópontokhoz konfigurált fiók.

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

Ismételje meg ezt a folyamatot mindhárom csomópontról, hogy az egyes csomópontok jelszavak nélkül kommunikálhassanak a többiekkel.

Névfeloldás konfigurálása

A névfeloldás a DNS használatával vagy az etc/hosts egyes csomópontokon lévő fájl manuális szerkesztésével konfigurálható.

További információ a DNS-ről és az Active Directoryról: Csatlakozás AZ SQL Serverhez Linux-gazdagépen egy Active Directory-tartományhoz.

Fontos

Javasoljuk, hogy az előző példában használja a magánhálózati IP-címét . Ha ebben a konfigurációban a nyilvános IP-címet használja, a beállítás meghiúsul, és a virtuális gépet külső hálózatoknak teszi elérhetővé.

A példában használt virtuális gépek és IP-címük a következőképpen jelennek meg:

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

Magas rendelkezésre állás engedélyezése

Az ssh használatával csatlakozzon a 3 virtuális géphez, és miután csatlakozott, futtassa az alábbi parancsokat a magas rendelkezésre állás engedélyezéséhez.

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

Pacemaker-fürt telepítése és konfigurálása

A Pacemaker-fürt konfigurálásának első lépéseihez telepítenie kell a szükséges csomagokat és erőforrás-ügynököket. Futtassa az alábbi parancsokat az egyes virtuális gépeken:

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

Most hozza létre a hitelesítési kulcsot az elsődleges kiszolgálón:

sudo corosync-keygen

Az authkey a helyszínen jön létre /etc/corosync/authkey . Másolja az authkeyt a másodlagos kiszolgálókra ezen a helyen: /etc/corosync/authkey

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

Helyezze át a hitelesítéskulcsot a kezdőkönyvtárból a következőre /etc/corosync: .

sudo mv authkey /etc/corosync/authkey

A fürt létrehozásához kövesse az alábbi parancsokat:

cd /etc/corosync/
sudo vi corosync.conf

Szerkessze a Corosync-fájlt a tartalom ábrázolásához az alábbiak szerint:

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
}

Másolja a corosync.conf fájlt más csomópontokra a következőre /etc/corosync/corosync.conf:

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

Indítsa újra a Pacemakert és a Corosyncot, és erősítse meg az állapotot:

sudo systemctl restart pacemaker corosync
sudo crm status

A kimenet az alábbi példához hasonlóan néz ki:

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

Kerítésügynök konfigurálása

Konfigurálja a fürtön a kerítést. A kerítés a fürt sikertelen csomópontjainak elkülönítése. Újraindítja a meghibásodott csomópontot, lehetővé teszi, hogy lemenjön, alaphelyzetbe állítsa, és térjen vissza, és csatlakozzon újra a fürthöz.

A kerítés konfigurálásához hajtsa végre a következő műveleteket:

  1. Új alkalmazás regisztrálása a Microsoft Entra-azonosítóban, és titkos kód létrehozása
  2. Egyéni szerepkör létrehozása json-fájlból a PowerShell/CLI-ben
  3. A szerepkör és az alkalmazás hozzárendelése a fürt virtuális gépeihez
  4. A kerítésügynök tulajdonságainak beállítása

Új alkalmazás regisztrálása a Microsoft Entra-azonosítóban, és titkos kód létrehozása

  1. Nyissa meg a Microsoft Entra-azonosítót a portálon, és jegyezze fel a bérlőazonosítót.
  2. Válassza az Alkalmazásregisztrációk lehetőséget a bal oldali menüben, majd válassza az Új regisztráció lehetőséget.
  3. Adjon meg egy nevet , majd válassza a Fiókok lehetőséget csak ebben a szervezeti címtárban.
  4. Alkalmazástípus esetén válassza a Web lehetőséget, írja be http://localhost bejelentkezési URL-címként, majd válassza a Regisztráció lehetőséget.
  5. A bal oldali menüben válassza a Tanúsítványok és titkos kódok lehetőséget, majd az Új ügyfélkód lehetőséget.
  6. Adjon meg egy leírást, és válasszon ki egy lejárati időszakot.
  7. Jegyezze fel a titkos kód értékét, amelyet a rendszer a következő jelszóként és titkos azonosítóként használ, és a következő felhasználónévként használja.
  8. Válassza az "Áttekintés" lehetőséget, és jegyezze fel az alkalmazásazonosítót. A rendszer a következő bejelentkezésként használja.

Hozzon létre egy JSON-fájlt, fence-agent-role.json és adja hozzá a következőt (az előfizetés azonosítójának hozzáadásával):

{
  "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"
  ]
}

Egyéni szerepkör létrehozása JSON-fájlból a PowerShell/CLI-ben

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

A szerepkör és az alkalmazás hozzárendelése a fürt virtuális gépeihez

  1. A fürtben lévő összes virtuális gép esetében válassza az oldalmenü Hozzáférés-vezérlés (IAM) elemét.
  2. Válassza a Szerepkör-hozzárendelés hozzáadása lehetőséget (használja a klasszikus felületet).
  3. Válassza ki a korábban létrehozott szerepkört.
  4. A Kiválasztás listában adja meg a korábban létrehozott alkalmazás nevét.

Most már létrehozhatjuk a kerítésügynök-erőforrást a korábbi értékek és az előfizetés azonosítója alapján:

  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

A kerítésügynök tulajdonságainak beállítása

Futtassa a következő parancsokat a kerítésügynök tulajdonságainak beállításához:

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

És erősítse meg a fürt állapotát:

  sudo crm status

A kimenet az alábbi példához hasonlóan néz ki:

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

Az SQL Server és az mssql-tools telepítése

Az SQL Server telepítéséhez a következő parancsok használhatók:

  1. Importálja a nyilvános adattár GPG-kulcsait:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  2. Regisztrálja az Ubuntu-adattárat:

    sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. Futtassa a következő parancsokat az SQL Server telepítéséhez:

    sudo apt-get update
    sudo apt-get install -y mssql-server
    
  4. Miután a csomag telepítése befejeződött, futtassa mssql-conf setup és kövesse az utasításokat az SA jelszavának beállításához, és válassza ki a kiadást. Emlékeztetőül, a következő kiadások ingyenesen licencelve vannak: Evaluation, Developer és Express.

    sudo /opt/mssql/bin/mssql-conf setup
    
  5. A konfiguráció befejezése után ellenőrizze, hogy a szolgáltatás fut-e:

    systemctl status mssql-server --no-pager
    
  6. Az SQL Server parancssori eszközeinek telepítése

Adatbázis létrehozásához olyan eszközzel kell csatlakoznia, amely képes Transact-SQL-utasításokat futtatni az SQL Serveren. Az alábbi lépésekben telepítse az SQL Server parancssori eszközeit: sqlcmd és bcp.

Az mssql-tools18 Ubuntu-ra való telepítéséhez kövesse az alábbi lépéseket.

Megjegyzés:

  • Az Ubuntu 18.04 az SQL Server 2019 CU 3-tól kezdve támogatott.
  • Az Ubuntu 20.04 az SQL Server 2019 CU 10-től kezdve támogatott.
  • Az Ubuntu 22.04 az SQL Server 2022 CU 10-től kezdve támogatott.
  1. Adja meg a superuser módot.

    sudo su
    
  2. Importálja a nyilvános adattár GPG-kulcsait.

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  3. Regisztrálja a Microsoft Ubuntu-adattárat.

    • Az Ubuntu 22.04-ben használja a következő parancsot:

      curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Az Ubuntu 20.04-ben használja a következő parancsot:

      curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Az Ubuntu 18.04-ben használja a következő parancsot:

      curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Az Ubuntu 16.04-ben használja a következő parancsot:

      curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
  4. Kilépés a superuser módból.

    exit
    
  5. Frissítse a források listáját, és futtassa a telepítési parancsot a unixODBC fejlesztői csomaggal.

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

    Megjegyzés:

    Az mssql-tools legújabb verziójára való frissítéshez futtassa a következő parancsokat:

    sudo apt-get update  
    sudo apt-get install mssql-tools18
    
  6. Nem kötelező: Adja hozzá /opt/mssql-tools18/bin/ a PATH környezeti változóhoz egy bash-rendszerhéjban.

    Ahhoz, hogy az sqlcmd és a bcp elérhető legyen a bash rendszerhéjból a bejelentkezési munkamenetekhez, módosítsa a PATH fájlt a ~/.bash_profile következő paranccsal:

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

    Ahhoz, hogy az sqlcmd és a bcp elérhető legyen a Bash-rendszerhéjból interaktív/nem bejelentkezési munkamenetekhez, módosítsa a PATH fájlban a ~/.bashrc következő paranccsal:

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

Az SQL Server magas rendelkezésre állású ügynökének telepítése

Futtassa az alábbi parancsot az összes csomóponton az SQL Server magas rendelkezésre állású ügynökcsomagjának telepítéséhez:

sudo apt-get install mssql-server-ha

Rendelkezésre állási csoport konfigurálása

Az alábbi lépésekkel konfigurálhat egy SQL Server Always On rendelkezésre állási csoportot a virtuális gépekhez. További információ: Sql Server Always On rendelkezésre állási csoportok konfigurálása magas rendelkezésre álláshoz Linuxon.

Rendelkezésre állási csoportok engedélyezése és az SQL Server újraindítása

Engedélyezze a rendelkezésre állási csoportokat minden olyan csomóponton, amely SQL Server-példányt üzemeltet. Ezután indítsa újra a mssql-server szolgáltatást. Futtassa az alábbi parancsokat minden csomóponton:

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

Tanúsítvány létrehozása

A Microsoft nem támogatja az Active Directory-hitelesítést az AG-végponton. Ezért az AG-végpont titkosításához tanúsítványt kell használnia.

  1. Csatlakozás az összes csomóponthoz az SQL Server Management Studio (SSMS) vagy az sqlcmd használatával. Futtassa a következő parancsokat egy AlwaysOn_health munkamenet engedélyezéséhez és egy főkulcs létrehozásához:

    Fontos

    Ha távolról csatlakozik az SQL Server-példányhoz, meg kell nyitnia az 1433-at a tűzfalon. Emellett engedélyeznie kell a bejövő kapcsolatokat az 1433-at az NSG-ben minden egyes virtuális géphez. További információ: Biztonsági szabály létrehozása bejövő biztonsági szabály létrehozásához.

    • Cserélje le a <MasterKeyPassword> jelszót a saját jelszavára.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
        WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. Csatlakozás az elsődleges replikához SSMS vagy sqlcmd használatával. Az alábbi parancsok létrehoznak egy tanúsítványt /var/opt/mssql/data/dbm_certificate.cer és egy titkos kulcsot var/opt/mssql/data/dbm_certificate.pvk az elsődleges SQL Server-replikán:

    • Cserélje le a <PrivateKeyPassword> jelszót a saját jelszavára.
    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
    

A parancs futtatásával lépjen ki az exit sqlcmd munkamenetből, és térjen vissza az SSH-munkamenethez.

Másolja a tanúsítványt a másodlagos replikákra, és hozza létre a tanúsítványokat a kiszolgálón

  1. Másolja a két létrehozott fájlt ugyanarra a helyre az összes olyan kiszolgálón, amely rendelkezésre állási replikákat fog üzemeltetni.

    Az elsődleges kiszolgálón futtassa a következő scp parancsot a tanúsítvány célkiszolgálókra másolásához:

    • Cserélje le és sles2 írja be <username> a használt felhasználónevet és cél virtuális gép nevét.
    • Futtassa ezt a parancsot az összes másodlagos replikához.

    Megjegyzés:

    Nem kell futtatnia sudo -i, ami megadja a gyökérkörnyezetet. A parancsot az sudo egyes parancsok előtt futtathatja.

    # 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. Futtassa a következő parancsot a célkiszolgálón:

    • Cserélje le <username> a felhasználónevet.
    • A mv parancs áthelyezi a fájlokat vagy könyvtárat egyik helyről a másikra.
    • A chown parancs a fájlok, könyvtárak vagy hivatkozások tulajdonosának és csoportjának módosítására szolgál.
    • Futtassa ezeket a parancsokat az összes másodlagos replikához.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. Az alábbi Transact-SQL-szkript létrehoz egy tanúsítványt az elsődleges SQL Server-replikán létrehozott biztonsági másolatból. Frissítse a szkriptet erős jelszavakkal. A visszafejtési jelszó ugyanaz a jelszó, amelyet az előző lépésben a .pvk fájl létrehozásához használt. A tanúsítvány létrehozásához futtassa a következő szkriptet az sqlcmd vagy az SSMS használatával az összes másodlagos kiszolgáló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
    

Az adatbázis tükrözési végpontjának létrehozása az összes replikán

Futtassa a következő szkriptet minden SQL Server-példányon sqlcmd vagy SSMS használatával:

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

A rendelkezésre állási csoport létrehozása

Csatlakozás az elsődleges replikát sqlcmd vagy SSMS használatával üzemeltető SQL Server-példányra. Futtassa a következő parancsot a rendelkezésre állási csoport létrehozásához:

  • Cserélje le ag1 a kívánt AG-névre.
  • Cserélje le a ubuntu1, ubuntu2és ubuntu3 az értékeket a replikákat üzemeltető SQL Server-példányok nevére.
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

SQL Server-bejelentkezés létrehozása a Pacemakerhez

Minden SQL Server-példányon hozzon létre egy SQL Server-bejelentkezést a Pacemakerhez. Az alábbi Transact-SQL létrehoz egy bejelentkezést.

  • Cserélje le <password> saját összetett jelszavára.
USE [master]
GO

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

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

Minden SQL Server-példányon mentse az SQL Server-bejelentkezéshez használt hitelesítő adatokat.

  1. Hozza létre a fájlt:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Adja hozzá a következő két sort a fájlhoz:

    pacemakerLogin
    <password>
    

    A vi szerkesztőből való kilépéshez először nyomja le az Esc billentyűt, majd írja be a parancsot :wq a fájl megírásához és a kilépéshez.

  3. A fájl csak a gyökér alapján legyen olvasható:

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

Másodlagos replikák csatlakoztatása a rendelkezésre állási csoporthoz

  1. A másodlagos replikákon futtassa a következő parancsokat az AG-hez való csatlakozáshoz:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  2. Futtassa a következő Transact-SQL-szkriptet az elsődleges replikán és minden másodlagos replikán:

    GRANT ALTER, CONTROL, VIEW DEFINITION
        ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  3. A másodlagos replikák csatlakoztatása után az Always On High Availability csomópont kibontásával láthatja őket az SSMS Object Explorerben:

    Screenshot shows the primary and secondary availability replicas.

Adatbázis hozzáadása a rendelkezésre állási csoporthoz

Ez a szakasz az adatbázis rendelkezésre állási csoporthoz való hozzáadásáról szóló cikket követi.

Ebben a lépésben a következő Transact-SQL-parancsokat használja a rendszer. Futtassa az alábbi parancsokat az elsődleges repliká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

Ellenőrizze, hogy az adatbázis a másodlagos kiszolgálókon van-e létrehozva

Minden másodlagos SQL Server-replikán futtassa a következő lekérdezést annak megtekintéséhez, hogy a db1 adatbázis létrejött-e, és SZINKRONIZÁLT állapotban van-e:

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

Ha a synchronization_state_desc listák szinkronizálva db1vannak, az azt jelenti, hogy a replikák szinkronizálva vannak. A másodpéldányok az elsődleges replikában jelennek meg db1 .

Rendelkezésre állási csoport erőforrásainak létrehozása a Pacemaker-fürtben

A rendelkezésre állási csoport erőforrásának a Pacemakerben való létrehozásához futtassa a következő parancsokat:

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

Ez a fenti parancs létrehozza a ag1_cluster erőforrást, vagyis a rendelkezésre állási csoport erőforrását. Ezután létrehozza az ms-ag1 erőforrást (elsődleges/másodlagos erőforrás a Pacemakerben, majd hozzáadja az AG-erőforrást. Ez biztosítja, hogy az AG-erőforrás a fürt mindhárom csomópontján futjon, de csak az egyik csomópont elsődleges.)

Az AG-csoport erőforrásának megtekintése és a fürt állapotának ellenőrzése:

sudo crm resource status ms-ag1
sudo crm status

A kimenet az alábbi példához hasonlóan néz ki:

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

A kimenet az alábbi példához hasonlóan néz ki. A helymeghatározási és előléptetési korlátozások hozzáadásához tekintse meg az oktatóanyagot: Rendelkezésre állási csoport figyelőjének konfigurálása Linux rendszerű virtuális gépeken.

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

Futtassa a következő parancsot egy csoporterőforrás létrehozásához, hogy a figyelőre és a terheléselosztóra alkalmazott áthelyezési és előléptetési korlátozások ne legyenek külön-külön alkalmazva.

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

A kimenet az crm status alábbi példához hasonlóan fog kinézni:

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

Következő lépés