Verileri parçalı veritabanları arasında taşımak için bölünmüş birleştirme hizmeti dağıtma

Şunlar için geçerlidir: Azure SQL Veritabanı

Bölünmüş birleştirme aracı, verileri parçalanmış veritabanları arasında taşımanıza olanak tanır. Bkz . Ölçeği genişletilmiş bulut veritabanları arasında veri taşıma.

Not

Bölünmüş birleştirme aracı Azure Web Apps'e yöneliktir. Cloud Services (Klasik) için kullanım ömrü 31 Ağustos 2024'tür. Cloud Services(Klasik) üzerinde bölünmüş birleştirme aracını kullanıyorsanız 31 Ağustos 2024'den önce Azure Web Apps'e geçiş.

Önkoşullar

  1. Bölünmüş birleştirme durum veritabanı olarak kullanılacak bir SQL veritabanı oluşturun. Azure portalına gidin. Yeni bir SQL veritabanı oluşturun. Veritabanını adlandırın ve yeni bir yönetici ve parola oluşturun. Daha sonra kullanmak üzere adı ve parolayı kaydettiğinizden emin olun.

  2. Azure'daki mantıksal sunucunuzun Azure Hizmetleri'nin buna bağlanmasına izin verdiğinden emin olun. Azure portalında, mantıksal sunucunuzun Güvenlik Duvarı Ayarları'nda Azure Hizmetlerine erişime izin ver ayarının Açık olarak ayarlandığından emin olun. Kaydet simgesini seçin.

  3. Tanılama çıktısı için bir Azure Depolama hesabı oluşturun.

  4. Ortak bölünmüş birleştirme docker görüntülerini kullanın veya bölünmüş birleştirme docker görüntülerini Azure Container Service'e veya istediğiniz docker kayıt defterine gönderin.

Hizmetiniz için iki Azure Web Apps oluşturma

İki Web Uygulaması oluşturun: bir worker ve UI web uygulaması.

Çalışan web uygulaması

  1. Azure portalında bir Web Uygulaması oluşturun.

  2. Yayımla alanında Kapsayıcı'yı seçin.

  3. İşletim Sistemi için Windows'a tıklayın.

  4. Docker sekmesine geçin.

  5. Aşağıdaki bilgileri doldurun:
    Görüntü kaynağı: Docker hub
    Erişim türü: Public
    Resim ve etiket: mcr.microsoft.com/splitmerge/splitmergeworker:20240812.1

  6. Web uygulamasını oluşturmak için Gözden Geçir + oluştur'u kullanın.

KULLANıCı Arabirimi Web Uygulaması

Ui web uygulamasını oluşturmak için, çalışan web uygulamasını oluşturmak için kullandığınız adımları tek bir farkla izleyin:

  • Görüntü ve etiket alanında farklı bir docker görüntüsü:mcr.microsoft.com/splitmerge/splitmergeweb:20240812.1

Bölünmüş Birleştirme web uygulamalarınızı yapılandırma

Güvenliği yapılandırma

Hizmetin güvenliğini yapılandırmaya yönelik ayrıntılı yönergeler için Bölünmüş Birleştirme güvenlik yapılandırmasına bakın.

Bu öğretici için basit bir test dağıtımı amacıyla, hizmeti çalışır duruma getirmek için en düşük yapılandırma adımları kümesi gerçekleştirilir. Bu adımlar yalnızca bir makine/hesabı yürüterek hizmetle iletişim kurmasını sağlar.

Otomatik olarak imzalanan sertifika ve PFX dosyası oluşturma

Otomatik olarak imzalanan bir sertifika ve PFX dosyası oluşturmak için PowerShell'i kullanın.

İlk olarak yeni bir dizin oluşturun. Ardından satır içi değerleri uygun şekilde değiştirin ve yeni dizinden aşağıdaki PowerShell komutlarını çalıştırın:

  $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

PFX dosyasını web uygulamalarına yükleme ve sertifika kullanımını etkinleştirme

Hem hem de worker UI Web Apps için aşağıdaki adımları yineleyin.

  1. Azure portalına gidin.
  2. Uygulama Hizmetleri’ni seçin.
  3. Bölme birleştirme aracı için yukarıda oluşturduğunuz Web Uygulamasını seçin.
  4. Menüden Sertifikalar'ı seçin.
  5. Kendi sertifikalarınızı getir (.pfx) seçeneğini belirleyin.
  6. Çubuktan Sertifika ekle'yi seçin.
  7. PFX dosyasını seçin ve yukarıdakiyle aynı parolayı girin.
  8. Tamamlandıktan sonra, listedeki yeni girdiden sertifika parmak izini kopyalayın.
  9. Web Uygulaması menüsünde Ayarlar / Yapılandırması'nı açın.
  10. İstemci sertifika modunu olarak Requireayarlayın.

Web uygulaması yapılandırması

Hem hem de worker UI web uygulamaları için aşağıdaki adımları yineleyin.

  1. Dağıtılan Web Uygulamasını açın ve Ayarlar>Ortam değişkenleri>Uygulama ayarları'na gidin. Ekle'yi seçin.

  2. ElasticScaleMetadata adına ve daha önce dağıtılan durum veritabanının bağlantı dizesi değerine sahip bir değişken ekleyin.

    Önemli

    Şu anda durum veritabanının Latin harmanlamasını ()SQL\_Latin1\_General\_CP1\_CI\_AS kullanması gerekir. Daha fazla bilgi için bkz . Windows Harmanlama Adı.

    Azure SQL Veritabanı ile, bağlantı dizesi genellikle formdadır:

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

  3. Ek değişkenler ekleyin:

    Veri Akışı Adı Değer
    WorkerRoleSynchronizationStorageAccountConnectionString Daha önce oluşturulmuş Azure depolama için geçerli bağlantı dizesi.
    DataEncryptionPrimaryCertificateThumbprint Daha önce oluşturulan sertifika parmak izi.
    MetadataExpirationPeriodInMinutes 20160
    MaxRetryCount 5
    WEBSITE_LOAD_CERTIFICATES *
    WEBSITE_PULL_IMAGE_OVER_VNET 0
  4. Uygula'yı seçin ve uygulamayı yeniden başlatın.

  5. Hem hem de worker UI web uygulaması için aynı adımları yineleyin.

Dağıtım sorunlarını giderme

Web rolünüz çevrimiçi olmazsa, bu büyük olasılıkla güvenlik yapılandırmasıyla ilgili bir sorundur. TLS/SSL'nin daha önce açıklandığı gibi yapılandırıldığından denetleyin.

Çalışan rolünüz çevrimiçi olamıyorsa ancak web rolünüz başarılı olursa, büyük olasılıkla daha önce oluşturduğunuz durum veritabanına bağlanırken sorun oluşur.

  • bağlantı dizesi doğru olduğundan emin olun.

  • Sunucunun ve veritabanının mevcut olup olmadığını ve kullanıcı kimliği ile parolasının doğru olup olmadığını denetleyin.

  • Azure SQL Veritabanı için bağlantı dizesi şu biçimde olmalıdır:

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

  • Sunucu adının ile https://başlamadığından emin olun.

  • Sunucunuzun Azure Hizmetleri'nin buna bağlanmasına izin verdiğinden emin olun. Bunu yapmak için portalda veritabanınızı açın ve Azure Hizmetlerine erişime izin ver ayarının Açık olarak ayarlandığından emin olun.

Hizmet dağıtımını test edin

Web tarayıcısıyla bağlanma

Web Uygulamanıza Genel Bakış'a gidin ve Gözat'ı seçin.UI İstenirse doğru sertifikayı seçin.

PowerShell betikleriyle test edin

Dağıtım ve ortamınız, dahil edilen örnek PowerShell betikleri çalıştırılarak test edilebilir.

Önemli

Örnek betikler PowerShell 5.1 üzerinde çalışır. Şu anda PowerShell 6 veya sonraki sürümlerde çalışmıyorlar.

Dahil edilen betik dosyaları şunlardır:

  1. SetupSampleSplitMergeEnvironment.ps1 - bölünmüş birleştirme için bir test veri katmanı ayarlar.

    1. Parça eşleme yöneticisi veritabanı oluşturur.
    2. İki parça veritabanı oluşturur.
    3. Bu veritabanları için bir parça eşlemesi oluşturur (bu veritabanlarındaki mevcut parça eşlemelerini siler).
    4. Her iki parçada da küçük bir örnek tablo oluşturur ve tabloyu parçalardan birinde doldurur.
    5. Parçalanmış tablo için SchemaInfo bildirir.
  2. ExecuteSampleSplitMerge.ps1 - Test veri katmanında test işlemlerini yürütür.

    1. Bölme-Birleştirme Hizmeti web ön ucuna, verilerin yarısını ilk parçadan ikinci parçaya bölen bir bölünmüş istek gönderir.
    2. Bölünmüş istek durumu için web ön ucu yoklar ve istek tamamlanana kadar bekler.
    3. Bölünmüş Birleştirme Hizmeti web ön ucuna bir birleştirme isteği gönderir ve bu da verileri ikinci parçadan ilk parçaya geri taşır.
    4. Birleştirme isteği durumu için web ön ucu yoklar ve istek tamamlanana kadar bekler.
  3. GetMappings.ps1 - Parça eşlemelerinin geçerli durumunu yazdıran üst düzey örnek betik.

  4. ShardManagement.psm1 - ShardManagement API'sini sarmalayan yardımcı betik.

  5. SqlDatabaseHelpers.psm1- SQL Veritabanı'de veritabanı oluşturmak ve yönetmek için yardımcı betik.

Dağıtımınızı doğrulamak için PowerShell kullanma

  1. Yeni bir PowerShell penceresi açın, Split-Merge paketini indirdiğiniz dizine gidin ve ardından "PowerShell" dizinine gidin.

  2. Parça eşleme yöneticisinin ve parçalarının oluşturulacağı bir sunucu oluşturun (veya var olan bir sunucuyu seçin).

    Not

    Betik, SetupSampleSplitMergeEnvironment.ps1 betiği basit tutmak için varsayılan olarak tüm bu veritabanlarını aynı sunucuda oluşturur. Bu, Bölünmüş Birleştirme Hizmeti'nin kendisi için bir kısıtlama değildir.

    Split-Merge hizmetinin verileri taşıması ve parça eşlemesini güncelleştirmesi için veritabanlarına okuma/yazma erişimine sahip bir SQL kimlik doğrulaması oturum açma bilgileri gerekir. Bölünmüş Birleştirme Hizmeti bulutta çalıştığından, şu anda Tümleşik Kimlik Doğrulamasını desteklemez.

    Sunucunun bu betikleri çalıştıran makinenin IP adresinden erişime izin verecek şekilde yapılandırıldığından emin olun. Bu ayarı SQL server / Güvenlik duvarları ve sanal ağlar / İstemci IP adresleri altında bulabilirsiniz.

  3. SetupSampleSplitMergeEnvironment.ps1 Örnek ortamı oluşturmak için betiği yürütür.

    Bu betiği çalıştırmak, parça eşleme yöneticisi veritabanında ve parçalarda var olan parça eşleme yönetimi veri yapılarını siler. Parça eşlemesini veya parçalarını yeniden başlatmayı istiyorsanız betiği yeniden çalıştırmak yararlı olabilir.

    Örnek komut satırı:

    .\SetupSampleSplitMergeEnvironment.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  4. Örnek ortamda mevcut olan eşlemeleri görüntülemek için Getmappings.ps1 betiğini yürütün.

    .\GetMappings.ps1 ^
    -UserName 'mysqluser' -Password 'MySqlPassw0rd' -ShardMapManagerServerName 'abcdefghij.database.windows.net'
    
  5. ExecuteSampleSplitMerge.ps1 Bir bölme işlemi (ilk parçadaki verilerin yarısını ikinci parçaya taşıma) ve ardından bir birleştirme işlemi (verileri ilk parçaya geri taşıma) yürütmek için betiği yürütür. TLS'yi yapılandırdıysanız ve http uç noktasını devre dışı bıraktıysanız, bunun yerine https:// uç noktasını kullandığınızdan emin olun.

    Örnek komut satırı:

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

    Aşağıdaki hatayı alırsanız, bu büyük olasılıkla Web uç noktanızın sertifikasıyla ilgili bir sorundur. Sık kullandığınız Web tarayıcısıyla Web uç noktasına bağlanmayı deneyin ve sertifika hatası olup olmadığını denetleyin.

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

    Başarılı olursa, çıkış aşağıdaki çıkış gibi görünmelidir:

    .\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. Diğer veri türleriyle denemeler yapın. Bu betiklerin tümü, anahtar türünü belirtmenize olanak tanıyan isteğe bağlı bir -ShardKeyType parametresi alır. Varsayılan değer Int32'dir, ancak Int64, Guid veya İkili de belirtebilirsiniz.

Oluşturma istekleri

Hizmet, web kullanıcı arabirimi kullanılarak veya isteklerinizi web rolü aracılığıyla gönderen PowerShell modülünü içeri aktarıp kullanarak SplitMerge.psm1 kullanılabilir.

Hizmet hem parçalı tablolardaki hem de başvuru tablolarındaki verileri taşıyabilir. Parçalı tabloda parçalama anahtarı sütunu vardır ve her parçada farklı satır verileri vardır. Başvuru tablosu parçalanmamıştır, bu nedenle her parçada aynı satır verilerini içerir. Başvuru tabloları, sık değişmeyen veriler için kullanışlıdır ve sorgulardaki parçalı tablolarla JOIN için kullanılır.

Bölünmüş birleştirme işlemi gerçekleştirmek için, taşımak istediğiniz parçalı tabloları ve başvuru tablolarını bildirmeniz gerekir. Bu, SchemaInfo API'siyle gerçekleştirilir. Bu API ad alanındadır Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema .

  1. Her parçalı tablo için, tablonun üst şema adını (isteğe bağlı, varsayılan olarak "dbo" olarak adlandırılır), tablo adını ve parçalama anahtarını içeren tablodaki sütun adını açıklayan bir ShardedTableInfo nesnesi oluşturun.
  2. Her başvuru tablosu için, tablonun üst şema adını (isteğe bağlı, varsayılan olarak "dbo" olarak adlandırılır) ve tablo adını açıklayan bir ReferenceTableInfo nesnesi oluşturun.
  3. Önceki TableInfo nesnelerini yeni bir SchemaInfo nesnesine ekleyin.
  4. ShardMapManager nesnesine başvuru alın ve GetSchemaInfoCollection'ı çağırin.
  5. Parça eşleme adını sağlayarak SchemaInfoCollection'a SchemaInfo ekleyin.

Bunun bir örneği SetupSampleSplitMergeEnvironment.ps1 betiğinde görülebilir.

Bölünmüş Birleştirme hizmeti sizin için hedef veritabanını (veya veritabanındaki tabloların şemasını) oluşturmaz. Hizmete istek göndermeden önce bunların önceden oluşturulmuş olması gerekir.

Bilinen hatalar

Örnek PowerShell betiklerini çalıştırırken aşağıdaki iletiyi görebilirsiniz:

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

Bu hata, TLS/SSL sertifikanızın doğru yapılandırılmamış olduğu anlamına gelir. Web tarayıcısıyla bağlanma bölümündeki yönergeleri izleyin.

İstek gönderemiyorsanız şunu görebilirsiniz:

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

Bu durumda, yapılandırma dosyanızı, özellikle WorkerRoleSynchronizationStorageAccountConnectionStringayarını denetleyin. Bu hata genellikle çalışan rolünün ilk kullanımda meta veri veritabanını başarıyla başlatalamadığını gösterir.

Elastik veritabanı araçlarını henüz kullanmıyor musunuz? Başlarken Kılavuzumuza göz atın. Sorular için, SQL Veritabanı ve özellik istekleri için Microsoft Soru-Cevap soru sayfasından bizimle iletişime geçin, yeni fikirler ekleyin veya SQL Veritabanı geri bildirim forumunda mevcut fikirler için oy verin.