Skala keluar dan masuk kluster

Peringatan

Baca bagian ini sebelum Anda menskalakan

Penskalaan sumber daya komputasi untuk sumber beban kerja aplikasi Anda memerlukan perencanaan yang disengaja, hampir selalu membutuhkan waktu lebih dari satu jam untuk menyelesaikan lingkungan produksi, dan memang mengharuskan Anda untuk memahami beban kerja dan konteks bisnis Anda; pada kenyataannya jika Anda belum pernah melakukan kegiatan ini sebelumnya, sebaiknya Anda mulai dengan membaca dan memahami pertimbangan perencanaan kapasitas kluster Service Fabric, sebelum melanjutkan sisa dokumen ini. Rekomendasi ini untuk menghindari masalah LiveSite yang tidak diinginkan, dan Anda juga disarankan untuk berhasil menguji operasi yang Anda putuskan untuk dilakukan terhadap lingkungan non-produksi. Anda dapat melaporkan masalah produksi atau meminta dukungan berbayar untuk Azure kapan saja. Untuk teknisi yang dialokasikan untuk melakukan operasi ini yang memiliki konteks yang sesuai, artikel ini akan menjelaskan operasi penskalaan, tetapi Anda harus memutuskan dan memahami operasi mana yang sesuai untuk kasus penggunaan Anda; seperti sumber daya apa yang akan diskalakan (CPU, Penyimpanan, Memori), arah apa yang harus diskalakan (Vertikal atau Horizontal), dan operasi apa yang harus dilakukan (penyebaran Templat Sumber Daya, Portal, PowerShell/CLI).

Catatan

Kami menyarankan agar Anda menggunakan modul Azure Az PowerShell untuk berinteraksi dengan Azure. Lihat Menginstal Azure PowerShell untuk memulai. Untuk mempelajari cara bermigrasi ke modul Az PowerShell, lihat Memigrasikan Azure PowerShell dari AzureRM ke Az.

Menskalakan kluster Service Fabric masuk atau keluar menggunakan aturan skala otomatis atau secara manual

Set skala komputer virtual adalah sumber daya komputasi Azure yang Anda gunakan untuk menyebarkan dan mengelola kumpulan komputer virtual sebagai satu set. Setiap jenis node yang didefinisikan dalam kluster Service Fabric yang berjalan di Azure diatur sebagai set skala komputer virtual terpisah. Setiap jenis node kemudian dapat ditingkatkan atau diturunkan skalanya secara terpisah, memiliki set port berbeda yang terbuka, dan dapat memiliki metrik kapasitas yang berbeda. Baca lebih lanjut tentang hal ini di dokumen Jenis node Service Fabric. Karena jenis node Service Fabric di kluster Anda terdiri dari set skala komputer virtual di backend, Anda harus mengatur aturan skala otomatis untuk setiap jenis node/set skala komputer virtual.

Catatan

Langganan Anda harus memiliki cukup core untuk menambahkan VM baru yang membentuk kluster ini. Saat ini tidak ada validasi model, sehingga Anda mendapatkan kegagalan waktu penyebaran, jika ada batas kuota yang tercapai.

Catatan

Jika menggunakan gambar OS Windows dengan peran Hyper-V diaktifkan, yaitu mesin virtual akan dikonfigurasi untuk virtualisasi berlapis, Metrik Memori yang tersedia tidak akan tersedia, karena driver memori dinamis dalam mesin virtual akan berada dalam keadaan berhenti.

Pilih jenis node/set skala Komputer Virtual yang diskalakan

Saat ini, Anda tidak dapat menentukan aturan skala otomatis untuk set skala komputer virtual menggunakan portal untuk membuat Kluster Service Fabric, jadi mari kita gunakan Azure PowerShell (1.0+) untuk mencantumkan jenis node lalu menambahkan aturan skala otomatis untuk set tersebut.

Untuk mendapatkan daftar set skala mesin virtual yang membentuk kluster Anda, jalankan cmdlet berikut:

Get-AzResource -ResourceGroupName <RGname> -ResourceType Microsoft.Compute/VirtualMachineScaleSets

Get-AzVmss -ResourceGroupName <RGname> -VMScaleSetName <virtual machine scale set name>

Mengatur aturan skala otomatis untuk tipe node/set skala komputer virtual

Jika kluster Anda memiliki beberapa jenis node, maka ulangi ini untuk setiap jenis node/set skala komputer virtual yang ingin Anda skalakan (masuk atau keluar). Perhitungkan jumlah node yang harus Anda miliki sebelum menyiapkan penskalaan otomatis. Jumlah minimum node yang harus Anda miliki untuk jenis node utama didorong oleh tingkat keandalan yang Anda pilih. Baca selengkapnya tentang tingkat keandalan.

Catatan

Penskalaan pada tipe node primer menjadi kurang dari angka minimum akan membuat kluster tidak stabil atau bahkan menurunkannya. Ini dapat mengakibatkan kehilangan data untuk aplikasi Anda dan untuk layanan sistem.

Saat ini fitur skala otomatis tidak didorong oleh beban yang mungkin dilaporkan aplikasi Anda ke Service Fabric. Jadi saat ini skala otomatis yang Anda dapatkan murni didorong oleh penghitung performa yang dipancarkan oleh masing-masing instans set skala komputer virtual.

Ikuti instruksi ini untuk mengatur skala otomatis untuk setiap set skala komputer virtual.

Catatan

Dalam skala di skenario, kecuali jenis node Anda memiliki tingkat ketahanan Emas atau Perak, Anda perlu memanggil cmdlet Remove-ServiceFabricNodeState dengan nama node yang sesuai. Untuk ketahanan tingkat Perunggu, tidak disarankan untuk menskalakan lebih dari satu node sekaligus.

Menambahkan VM secara manual ke jenis node/set skala komputer virtual

Saat Anda menskalakan masuk atau keluar, Anda menambahkan lebih banyak instans komputer virtual ke set skala. Instans ini menjadi node yang digunakan Service Fabric. Service Fabric tahu kapan set skala memiliki lebih banyak instans yang ditambahkan (dengan penskalaan keluar) dan bereaksi secara otomatis.

Catatan

Menambahkan VM membutuhkan waktu, jadi jangan berharap penambahannya seketika. Rencanakan untuk menambahkan kapasitas dengan baik terlebih dahulu, memungkinkan selama lebih dari 10 menit sebelum kapasitas VM tersedia bagi replika/instans layanan untuk ditempatkan.

Menambahkan VM menggunakan templat

Ikuti sampel/instruksi di galeri templat mulai cepat untuk mengubah jumlah VM di setiap jenis node.

Menambahkan VM menggunakan perintah PowerShell atau CLI

Kode berikut mendapatkan set skala berdasarkan nama dan kapasitas set skala bertambah 1.

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity += 1

Update-AzVmss -ResourceGroupName $scaleset.ResourceGroupName -VMScaleSetName $scaleset.Name -VirtualMachineScaleSet $scaleset

Kode ini mengatur kapasitas ke 6.

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 6

Menghapus VM secara manual dari tipe node/set skala komputer virtual

Saat Anda menskalakan dalam jenis node, Anda menghapus instans VM dari set skala. Jika jenis node berada di tingkat ketahanan Perunggu, Service Fabric tidak menyadari apa yang terjadi dan melaporkan bahwa node telah hilang. Service Fabric kemudian melaporkan keadaan tidak sehat untuk kluster tersebut. Untuk mencegah keadaan buruk tersebut, Anda harus secara eksplisit menghapus node dari kluster dan menghapus status node.

Layanan sistem service fabric berjalan dalam jenis node utama di kluster Anda. Saat penskalaan dalam jenis node utama, jangan pernah menskalakan jumlah instans menjadi kurang dari apa yang dijamin tingkat keandalan.

Untuk layanan yang dinyatakan, Anda memerlukan sejumlah node yang selalu siap untuk menjaga ketersediaan dan mempertahankan status layanan Anda. Minimal, Anda memerlukan sejumlah node yang sama dengan jumlah set replika target dari partisi/layanan.

Hapus node Service Fabric

Langkah-langkah untuk menghapus status node secara manual hanya berlaku untuk jenis node dengan tingkat ketahanan Perunggu. Untuk tingkat ketahanan Silver dan Gold, langkah-langkah ini dilakukan secara otomatis oleh platform. Untuk informasi selengkapnya tentang ketahanan, lihat Perencanaan kapasitas kluster Service Fabric.

Catatan

Pertahankan jumlah minimum lima node untuk setiap set skala komputer virtual yang memiliki tingkat durabilitas Emas atau Perak aktif. Kluster Anda akan memasukkan status kesalahan jika Anda menskalakan di bawah ambang ini, dan Anda harus membersihkan status secara manual untuk node yang dihapus.

Agar node kluster tetap didistribusikan secara merata di seluruh domain peningkatan dan kesalahan, dan karenanya memungkinkan pemanfaatannya yang merata, node yang baru dibuat harus dihapus terlebih dahulu. Dengan kata lain, node harus dihapus dalam urutan terbalik dari pembuatannya. Node yang baru dibuat adalah node dengan nilai properti virtual machine scale set InstanceId terbesar. Contoh kode di bawah ini mengembalikan node yang baru dibuat.

Get-ServiceFabricNode | Sort-Object NodeInstanceId -Descending | Select-Object -First 1
sfctl node list --query "sort_by(items[*], &name)[-1]"

Kluster Service Fabric perlu tahu bahwa node ini akan dihapus. Ada tiga langkah yang perlu Anda lakukan:

  1. Nonaktifkan node sehingga tidak lagi merupakan replikasi untuk data.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. Hentikan node sehingga runtime Service Fabric dimatikan dengan baik, dan aplikasi Anda mendapatkan permintaan penghentian.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. Hapus node dari kluster.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

Setelah ketiga langkah ini diterapkan pada node, node tersebut dapat dihapus dari set skala. Jika Anda menggunakan tingkat ketahanan selain perunggu, langkah-langkah ini dilakukan untuk Anda saat instans set skala dihapus.

Blok kode berikut mendapatkan node yang terakhir dibuat, menonaktifkan, menghentikan, dan menghapus node dari kluster.

#### After you've connected.....
# Get the node that was created last
$node = Get-ServiceFabricNode | Sort-Object { $_.NodeName.Substring($_.NodeName.LastIndexOf('_') + 1) } -Descending | Select-Object -First 1

# Node details for the disable/stop process
$nodename = $node.NodeName
$nodeid = $node.NodeInstanceId

$loopTimeout = 10

# Run disable logic
Disable-ServiceFabricNode -NodeName $nodename -Intent RemoveNode -TimeoutSec 300 -Force

$state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus

while (($state -ne [System.Fabric.Query.NodeStatus]::Disabled) -and ($loopTimeout -ne 0))
{
    Start-Sleep 5
    $loopTimeout -= 1
    $state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus
    Write-Host "Checking state... $state found"
}

# Exit if the node was unable to be disabled
if ($state -ne [System.Fabric.Query.NodeStatus]::Disabled)
{
    Write-Error "Disable failed with state $state"
}
else
{
    # Stop node
    $stopid = New-Guid
    Start-ServiceFabricNodeTransition -Stop -OperationId $stopid -NodeName $nodename -NodeInstanceId $nodeid -StopDurationInSeconds 300

    $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
    $loopTimeout = 10

    # Watch the transaction
    while (($state -eq [System.Fabric.TestCommandProgressState]::Running) -and ($loopTimeout -ne 0))
    {
        Start-Sleep 5
        $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
        Write-Host "Checking state... $state found"
    }

    if ($state -ne [System.Fabric.TestCommandProgressState]::Completed)
    {
        Write-Error "Stop transaction failed with $state"
    }
    else
    {
        # Remove the node from the cluster
        Remove-ServiceFabricNodeState -NodeName $nodename -TimeoutSec 300 -Force
    }
}

Dalam kode sfctl di bawah ini, perintah berikut digunakan untuk mendapatkan nilai nama node dari node yang terakhir dibuat: sfctl node list --query "sort_by(items[*], &name)[-1].name"

# Inform the node that it is going to be removed
sfctl node disable --node-name _nt1vm_5 --deactivation-intent 4 -t 300

# Stop the node using a random guid as our operation id
sfctl node transition --node-instance-id 131541348482680775 --node-name _nt1vm_5 --node-transition-type Stop --operation-id c17bb4c5-9f6c-4eef-950f-3d03e1fef6fc --stop-duration-in-seconds 14400 -t 300

# Remove the node from the cluster
sfctl node remove-state --node-name _nt1vm_5

Tip

Gunakan kueri sfctl berikut untuk memeriksa status setiap langkah

Periksa status penonaktifansfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

Periksa status berhentisfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

Menskalakan dalam set skala

Sekarang setelah node Service Fabric dihapus dari kluster, set skala komputer virtual dapat diskalakan. Dalam contoh di bawah ini, kapasitas set skala berkurang 1.

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity -= 1

Update-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm -VirtualMachineScaleSet $scaleset

Kode ini mengatur kapasitas menjadi 5.

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 5

Perilaku yang dapat Anda amati di Explorer Service Fabric

Ketika Anda menskalakan kluster keluar, Explorer Service Fabric akan mencerminkan jumlah node (instans set skala komputer virtual) yang merupakan bagian dari kluster. Akan tetapi, ketika Anda menskalakan kluster masuk, Anda akan melihat instans node/VM yang dihapus ditampilkan dalam keadaan tidak sehat kecuali Anda memanggil cmd Remove-ServiceFabricNodeState dengan nama node yang sesuai.

Berikut penjelasan untuk perilaku ini.

Node yang tercantum dalam Service Fabric Explorer adalah gambaran dari hal yang diketahui layanan sistem Service Fabric (FM secara khusus) tentang jumlah node yang dimiliki kluster. Ketika Anda menskalakan set skala komputer virtual masuk, VM dihapus tetapi layanan sistem FM masih berpikir bahwa node (yang dipetakan ke VM yang dihapus) akan kembali. Jadi Explorer Service Fabric terus menampilkan node tersebut (meskipun status kesehatan mungkin error atau tidak diketahui).

Untuk memastikan bahwa node dihapus ketika VM dihapus, Anda memiliki dua opsi:

  1. Pilih tingkat ketahanan Emas atau Perak untuk jenis node di kluster Anda, yang memberi Anda integrasi infrastruktur. Ketika Anda menskalakan, node akan otomatis dihapus dari status layanan sistem (FM) kami. Lihat detail tingkat ketahanan di sini

Catatan

Pertahankan jumlah minimum lima node untuk setiap set skala komputer virtual yang memiliki tingkat durabilitas Emas atau Perak aktif. Kluster Anda akan memasukkan status kesalahan jika Anda menskalakan di bawah ambang ini, dan Anda harus membersihkan status secara manual untuk node yang dihapus.

  1. Setelah instans VM diskalakan, Anda harus memanggil cmdlet Remove-ServiceFabricNodeState.

Catatan

Kluster Service Fabric memerlukan sejumlah simpul agar selalu aktif setiap saat untuk menjaga ketersediaan dan mempertahankan status - disebut sebagai "mempertahankan kuorum". Jadi, biasanya tidak aman untuk mematikan semua komputer di kluster kecuali Anda telah terlebih dahulu melakukan pencadangan penuh terhadap status.

Langkah berikutnya

Baca hal berikut ini untuk juga mempelajari tentang perencanaan kapasitas kluster, peningkatan kluster, dan layanan partisi: