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
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.
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.
Buat akun Azure Storage untuk output diagnostik.
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
Di bidang Terbitkan, pilih Kontainer.
Untuk Sistem Operasi, pilih Windows.
Lanjutkan ke tab Docker .
Isi informasi berikut:
Sumber gambar:Docker hub
Jenis akses:Public
Gambar dan tag:mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1
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.
- Buka portal Azure.
- Pilih App Services.
- Pilih Aplikasi Web yang Anda buat di atas untuk alat pisah-gabung.
- Pilih Sertifikat dari menu.
- Pilih Bawa sertifikat Anda sendiri (.pfx).
- Pilih Tambahkan sertifikat dari bilah.
- Pilih file PFX dan masukkan kata sandi yang sama seperti di atas.
- Setelah selesai, salin thumbprint sertifikat dari entri baru dalam daftar.
- Di menu Aplikasi Web, buka Konfigurasi Pengaturan / .
- Atur mode sertifikat Klien ke
Require
.
Konfigurasi applikasi web
Ulangi langkah-langkah berikut untuk worker
aplikasi web dan UI
.
Buka Aplikasi Web yang disebarkan dan buka Pengaturan>pengaturan Aplikasi variabel>Lingkungan. Pilih Tambahkan.
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
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 Pilih Terapkan dan mulai ulang aplikasi.
Ulangi langkah yang sama untuk
worker
aplikasi web danUI
.
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:
SetupSampleSplitMergeEnvironment.ps1
- menyiapkan tingkat data pengujian untuk split-merge.- Membuat database manajer peta shard.
- Membuat dua database shard.
- Membuat peta pecahan untuk database tersebut (menghapus peta pecahan yang ada pada database tersebut).
- Membuat tabel sampel kecil di kedua pecahan, dan mengisi tabel di salah satu pecahan.
- Mendeklarasikan SchemaInfo untuk tabel pecahan.
ExecuteSampleSplitMerge.ps1
- menjalankan operasi pengujian pada tingkat data pengujian.- Mengirim permintaan terpisah ke frontend web Layanan Pisah Gabung, yang membagi setengah data dari pecahan pertama ke pecahan kedua.
- Jajak pendapat frontend web untuk status permintaan pisah dan tunggu sampai permintaan selesai.
- Mengirim permintaan terpisah ke frontend web Layanan Pisah Gabung, yang memindahkan setengah data dari pecahan pertama ke pecahan kedua.
- Pilih frontend web untuk status permintaan gabung dan tunggu sampai permintaan selesai.
GetMappings.ps1
- Skrip sampel tingkat atas yang mencetak status pemetaan shard saat ini.ShardManagement.psm1
- skrip pembantu yang membungkus API ShardManagement.SqlDatabaseHelpers.psm1
- skrip pembantu untuk membuat dan mengelola database di SQL Database.
Menggunakan PowerShell untuk memverifikasi penyebaran Anda
Buka jendela PowerShell baru dan navigasikan ke direktori tempat Anda mengunduh paket Pisah-Gabung, lalu navigasikan ke direktori "PowerShell".
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.
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'
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'
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.
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.
- 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.
- Untuk setiap tabel referensi, buat objek ReferenceTableInfo yang menjelaskan nama skema induk tabel (opsional, default ke "dbo") dan nama tabel.
- Tambahkan objek TableInfo sebelumnya ke objek SchemaInfo baru.
- Dapatkan referensi ke objek ShardMapManager, dan hubungi GetSchemaInfoCollection.
- 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.
Konten terkait
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.