Bagikan melalui


Terapkan layanan pisah-gabung juga untuk memindahkan data antar database yang dipecah

Berlaku untuk: Azure SQL Database

Alat pisah-gabung juga untuk memindahkan data antar database yang dipecah. Lihat Memindahkan data di antara database cloud yang diskalakan.

Catatan

Alat pisah-gabung ditujukan untuk Azure Web Apps. Akhir masa pakai untuk Cloud Services (Klasik) adalah 31 Agustus 2024. Jika Anda menggunakan alat pisah-gabung di Cloud Services (Klasik), migrasikan ke Azure Web Apps sebelum 31 Agustus 2024.

Prasyarat

  1. Buat database SQL untuk digunakan sebagai database status pisah-gabung. Buka portal Azure. Buat database SQL baru. Beri nama database dan buat administrator dan kata sandi baru. Pastikan untuk merekam nama dan kata sandi untuk digunakan nanti.

  2. Pastikan server logis Anda di Azure memungkinkan Azure Services untuk menyambungkannya. Di portal Azure, di Pengaturan Firewall untuk server logis Anda, pastikan pengaturan Izinkan akses ke Layanan Azure diatur ke Aktif. Pilih ikon Simpan.

  3. Buat akun Azure Storage untuk output diagnostik.

  4. Gunakan gambar docker pisah-gabung publik, atau dorong gambar docker pisah-gabung ke Azure Container Service atau registri docker pilihan Anda.

Membuat dua Azure Web Apps untuk layanan Anda

Buat dua Web Apps - aplikasi worker web dan UI .

Aplikasi web pekerja

  1. Buat Aplikasi Web di portal Azure.

  2. Di bidang Terbitkan, pilih Kontainer.

  3. Untuk Sistem Operasi, pilih Windows.

  4. Lanjutkan ke tab Docker .

  5. Isi informasi berikut:
    Sumber gambar: Docker hub
    Jenis akses: Public
    Gambar dan tag: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Gunakan Tinjau + buat untuk membuat aplikasi web.

Aplikasi Web UI

Untuk membuat aplikasi web UI, ikuti langkah-langkah yang sama dengan yang Anda gunakan untuk membuat aplikasi web Pekerja dengan satu perbedaan:

  • Gambar docker yang berbeda di bidang Gambar dan tag : mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Mengonfigurasi aplikasi web Split-Merge Anda

Mengonfigurasi keamanan

Untuk instruksi terperinci untuk mengonfigurasi keamanan layanan, lihat konfigurasi keamanan Pisah-Gabung.

Untuk tujuan penyebaran pengujian sederhana untuk tutorial ini, serangkaian langkah konfigurasi minimal dilakukan untuk menyiapkan dan menjalankan layanan. Langkah-langkah ini hanya mengaktifkan satu mesin/akun yang mengeksekusinya untuk berkomunikasi dengan layanan.

Membuat sertifikat yang ditandatangani sendiri dan file PFX

Gunakan PowerShell untuk membuat sertifikat yang ditandatangani sendiri dan file PFX.

Pertama, buat direktori baru. Kemudian ganti nilai sebaris yang sesuai dan jalankan perintah PowerShell berikut dari direktori baru:

  $cert = New-SelfSignedCertificate -Subject "CN=*.cloudapp.net" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
  $mypwd = ConvertTo-SecureString -String "{myPassword}" -Force -AsPlainText  ## Replace {myPassword}
  Export-PfxCertificate -Cert $cert -FilePath "C:\Users\admin\Desktop\$certname.pfx" -Password $mypwd   ## Specify your preferred location

Unggah file PFX ke aplikasi web dan aktifkan penggunaan sertifikat

Ulangi langkah-langkah berikut untuk worker dan UI Web Apps.

  1. Buka portal Azure.
  2. Pilih App Services.
  3. Pilih Aplikasi Web yang Anda buat di atas untuk alat pisah-gabung.
  4. Pilih Sertifikat dari menu.
  5. Pilih Bawa sertifikat Anda sendiri (.pfx).
  6. Pilih Tambahkan sertifikat dari bilah.
  7. Pilih file PFX dan masukkan kata sandi yang sama seperti di atas.
  8. Setelah selesai, salin thumbprint sertifikat dari entri baru dalam daftar.
  9. Di menu Aplikasi Web, buka Konfigurasi Pengaturan / .
  10. Atur mode sertifikat Klien ke Require.

Konfigurasi applikasi web

Ulangi langkah-langkah berikut untuk worker aplikasi web dan UI .

  1. Buka Aplikasi Web yang disebarkan dan buka Pengaturan>pengaturan Aplikasi variabel>Lingkungan. Pilih Tambahkan.

  2. Tambahkan variabel dengan nama ElasticScaleMetadata dan nilai dengan string koneksi untuk database status yang disebarkan sebelumnya.

    Penting

    Saat ini, database status harus menggunakan kolase Latin (SQL\_Latin1\_General\_CP1\_CI\_AS). Untuk informasi selengkapnya, lihat Nama Kolate Windows.

    Dengan Azure SQL Database, string koneksi biasanya dalam bentuk:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<userId>; Password=<password>; Encrypt=True; Connection Timeout=30

  3. Tambahkan variabel tambahan:

    Nama Nilai
    WorkerRoleSynchronizationStorageAccountConnectionString Valid string koneksi ke penyimpanan Azure yang dibuat sebelumnya.
    DataEncryptionPrimaryCertificateThumbprint Thumbprint sertifikat yang dihasilkan sebelumnya.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
    WEBSITE_PULL_IMAGE_OVER_VNET 0
  4. Pilih Terapkan dan mulai ulang aplikasi.

  5. Ulangi langkah yang sama untuk worker aplikasi web dan UI .

Pecahkan masalah kesalahan penyebaran

Jika peran web Anda gagal online, kemungkinan ada masalah dengan konfigurasi keamanan. Periksa apakah TLS/SSL dikonfigurasi seperti yang dijelaskan sebelumnya.

Jika peran pekerja Anda gagal online, tetapi peran web Anda berhasil, kemungkinan besar masalah menyambungkan ke database status yang Anda buat sebelumnya.

  • Pastikan bahwa string koneksi akurat.

  • Periksa apakah server dan database ada, dan id pengguna dan kata sandi sudah benar.

  • Untuk Azure SQL Database, string koneksi harus dalam formulir:

    Server=<serverName>.database.windows.net; Database=<databaseName>;User ID=<user>; Password=<password>; Encrypt=True; Connection Timeout=30

  • Pastikan bahwa nama server tidak dimulai dengan https://.

  • Pastikan server Anda memperbolehkan Azure Services untuk menyambungkannya. Untuk melakukan ini, buka database Anda di portal dan pastikan bahwa pengaturan Izinkan akses ke Layanan Azure diatur ke Aktif.

Menguji penyebaran layanan

Sambungkan dengan browser web

Buka Gambaran Umum Aplikasi Web Anda UI dan pilih Telusuri. Pilih sertifikat yang benar, jika diminta.

Uji dengan skrip PowerShell

Penyebaran dan lingkungan Anda dapat diuji dengan menjalankan contoh skrip PowerShell yang disertakan.

Penting

Contoh skrip berjalan di PowerShell 5.1. Saat ini tidak berjalan di PowerShell 6 atau yang lebih baru.

File skrip yang disertakan adalah:

  1. SetupSampleSplitMergeEnvironment.ps1 - menyiapkan tingkat data pengujian untuk split-merge.

    1. Membuat database manajer peta shard.
    2. Membuat dua database shard.
    3. Membuat peta pecahan untuk database tersebut (menghapus peta pecahan yang ada pada database tersebut).
    4. Membuat tabel sampel kecil di kedua pecahan, dan mengisi tabel di salah satu pecahan.
    5. Mendeklarasikan SchemaInfo untuk tabel pecahan.
  2. ExecuteSampleSplitMerge.ps1 - menjalankan operasi pengujian pada tingkat data pengujian.

    1. Mengirim permintaan terpisah ke frontend web Layanan Pisah Gabung, yang membagi setengah data dari pecahan pertama ke pecahan kedua.
    2. Jajak pendapat frontend web untuk status permintaan pisah dan tunggu sampai permintaan selesai.
    3. Mengirim permintaan terpisah ke frontend web Layanan Pisah Gabung, yang memindahkan setengah data dari pecahan pertama ke pecahan kedua.
    4. Pilih frontend web untuk status permintaan gabung dan tunggu sampai permintaan selesai.
  3. GetMappings.ps1 - Skrip sampel tingkat atas yang mencetak status pemetaan shard saat ini.

  4. ShardManagement.psm1 - skrip pembantu yang membungkus API ShardManagement.

  5. SqlDatabaseHelpers.psm1 - skrip pembantu untuk membuat dan mengelola database di SQL Database.

Menggunakan PowerShell untuk memverifikasi penyebaran Anda

  1. Buka jendela PowerShell baru dan navigasikan ke direktori tempat Anda mengunduh paket Pisah-Gabung, lalu navigasikan ke direktori "PowerShell".

  2. Buat server (atau pilih server yang ada) di mana manajer peta pecahan dan pecahan akan dibuat.

    Catatan

    SetupSampleSplitMergeEnvironment.ps1 Skrip membuat semua database ini di server yang sama secara default untuk menjaga skrip tetap sederhana. Ini bukan batasan Layanan Pisah-Gabung itu sendiri.

    Login autentikasi SQL dengan akses baca/tulis ke database diperlukan agar layanan Pisah-Gabung memindahkan data dan memperbarui peta shard. Karena Layanan Pisah-Gabung berjalan di cloud, saat ini tidak mendukung Autentikasi Terintegrasi.

    Pastikan server dikonfigurasi untuk mengizinkan akses dari alamat IP mesin yang menjalankan skrip ini. Anda dapat menemukan pengaturan ini di bawah server SQL / Firewall dan jaringan virtual / Alamat IP klien.

  3. Jalankan SetupSampleSplitMergeEnvironment.ps1 skrip untuk membuat lingkungan sampel.

    Menjalankan skrip ini menghapus struktur data manajemen peta shard yang ada pada database manajer peta shard dan shard. Mungkin berguna untuk menjalankan ulang skrip jika Anda ingin menginisialisasi ulang peta shard atau pecahan.

    Sampel baris perintah:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Jalankan skrip Getmappings.ps1 untuk melihat pemetaan yang saat ini ada di lingkungan sampel.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. Jalankan ExecuteSampleSplitMerge.ps1 skrip untuk menjalankan operasi terpisah (memindahkan setengah data pada shard pertama ke shard kedua) dan kemudian operasi penggabungan (memindahkan data kembali ke shard pertama). Jika Anda mengonfigurasi TLS dan membiarkan titik akhir http dinonaktifkan, pastikan Anda menggunakan titik akhir https://.

    Sampel baris perintah:

    .\ExecuteSampleSplitMerge.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' ^
    -ShardMapManagerServerName 'abcdefghij.database.windows.net' ^
    -SplitMergeServiceEndpoint 'https://mysplitmergeservice.cloudapp.net' ^
    -CertificateThumbprint '0123456789abcdef0123456789abcdef01234567'
    

    Jika Anda menerima kesalahan berikut, kemungkinan besar masalah dengan sertifikat titik akhir Web Anda. Coba sambungkan ke titik akhir Web dengan browser Web favorit Anda dan periksa apakah ada kesalahan sertifikat.

    Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLSsecure channel.

    Jika berhasil, output akan terlihat seperti output berikut:

    .\ExecuteSampleSplitMerge.ps1 -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net' -SplitMergeServiceEndpoint 'http://mysplitmergeservice.cloudapp.net' -CertificateThumbprint 0123456789abcdef0123456789abcdef01234567
    Sending split request
    Began split operation with id dc68dfa0-e22b-4823-886a-9bdc903c80f3
    Polling split-merge request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Waiting for reference tables copy     completion.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    Sending merge request
    Began merge operation with id 6ffc308f-d006-466b-b24e-857242ec5f66
    Polling request status. Press Ctrl-C to end
    Progress: 0% | Status: Queued | Details: [Informational] Queued request
    Progress: 5% | Status: Starting | Details: [Informational] Starting split-merge state machine for request.
    Progress: 5% | Status: Starting | Details: [Informational] Performing data consistency checks on target     shards.
    Progress: 20% | Status: CopyingReferenceTables | Details: [Informational] Moving reference tables from     source to target shard.
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Moving key range [100:110) of     Sharded tables
    Progress: 44% | Status: CopyingShardedTables | Details: [Informational] Successfully copied key range     [100:110) for table [dbo].[MyShardedTable]
    ...
    ...
    Progress: 90% | Status: Completing | Details: [Informational] Successfully deleted shardlets in table     [dbo].[MyShardedTable].
    Progress: 90% | Status: Completing | Details: [Informational] Deleting any temp tables that were created     while processing the request.
    Progress: 100% | Status: Succeeded | Details: [Informational] Successfully processed request.
    
  6. Bereksperimenlah dengan jenis data lainnya. Semua skrip ini mengambil parameter opsional-ShardKeyType yang memungkinkan Anda menentukan jenis kunci. Defaultnya adalah Int32, tetapi Anda juga dapat menentukan Int64, Guid, atau Biner.

Membuat permintaan

Layanan ini dapat digunakan baik dengan menggunakan UI web, atau dengan mengimpor dan menggunakan SplitMerge.psm1 modul PowerShell, yang mengirimkan permintaan Anda melalui peran web.

Layanan ini dapat memindahkan data dalam tabel yang dipecah dan tabel referensi. Tabel yang dipecah memiliki kolom kunci pemecah dan memiliki data baris yang berbeda pada setiap pecahan. Tabel referensi tidak dipecah sehingga berisi data baris yang sama pada setiap shard. Tabel referensi berguna untuk data yang tidak sering berubah dan digunakan untuk JOIN dengan tabel pecahan dalam kueri.

Untuk melakukan operasi pisah-gabung, Anda harus mendeklarasikan tabel pecahan dan tabel referensi yang ingin Anda pindahkan. Operasi ni dicapai dengan API SchemaInfo. API ini berada di Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema namespace layanan.

  1. Untuk setiap tabel yang dipecah, buat objek ShardedTableInfo yang menjelaskan nama skema induk tabel (opsional, default ke "dbo"), nama tabel, dan nama kolom dalam tabel yang berisi kunci pemecah.
  2. Untuk setiap tabel referensi, buat objek ReferenceTableInfo yang menjelaskan nama skema induk tabel (opsional, default ke "dbo") dan nama tabel.
  3. Tambahkan objek TableInfo sebelumnya ke objek SchemaInfo baru.
  4. Dapatkan referensi ke objek ShardMapManager, dan hubungi GetSchemaInfoCollection.
  5. Tambahkan SchemaInfo ke SchemaInfoCollection, menyediakan nama peta pecahan.

Contohnya dapat dilihat dalam skrip SetupSampleSplitMergeEnvironment.ps1.

Layanan Pisah-Gabung tidak membuat database target (atau skema untuk tabel apa pun dalam database) untuk Anda. Mereka harus dibuat sebelumnya sebelum mengirim permintaan ke layanan.

Kesalahan yang diketahui

Anda mungkin melihat pesan berikut saat menjalankan contoh skrip PowerShell:

Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

Kesalahan ini berarti bahwa sertifikat TLS/SSL Anda tidak dikonfigurasi dengan benar. Ikuti instruksi di bagian Sambungkan dengan browser web.

Jika Anda tidak dapat mengirimkan permintaan, Anda mungkin melihat ini:

[Exception] System.Data.SqlClient.SqlException (0x80131904): Could not find stored procedure 'dbo.InsertRequest'.

Dalam hal ini, periksa file konfigurasi Anda, khususnya pengaturan untuk WorkerRoleSynchronizationStorageAccountConnectionString. Kesalahan ini biasanya menunjukkan bahwa peran pekerja tidak berhasil menginisialisasi database metadata pada penggunaan pertama.

Belum menggunakan alat database elastis? Lihat Panduan Memulai kami. Jika memiliki pertanyaan, hubungi kami di halaman pertanyaan Tanya Jawab Microsoft untuk SQL Database dan untuk permintaan fitur, tambahkan ide-ide baru atau ambil suara terbanyak untuk ide yang sudah ada di forum umpan balik SQL Database.