Aracılığıyla paylaş


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ının, App Services ile değil, Cloud Services (Klasik) ile çalışması amaçlanmıştır.

Bölünmüş Birleştirme paketlerini indirme

  1. NuGet'ten en son NuGet sürümünü indirin.

  2. Bir komut istemi açın ve nuget.exe indirdiğiniz dizine gidin. İndirme işlemi PowerShell komutlarını içerir.

  3. Aşağıdaki komutla en son Split-Merge paketini geçerli dizine indirin:

    nuget install Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge
    

Dosyalar, sürüm numarasını yansıtan <x.x.xxx.x> adlı Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.<x.x.xxx.x> bir dizine yerleştirilir. Alt dizinde bölünmüş birleştirme hizmeti dosyalarını ve alt dizinde content\splitmerge\service Split-Merge PowerShell betiklerini (ve gerekli istemci DLL'lerini content\splitmerge\powershell ) bulun.

Önkoşullar

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

  2. Sunucunuzun Azure Hizmetleri'nin buna bağlanmasına izin verdiğinden emin olun. Portaldaki 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. Bölünmüş Birleştirme hizmetiniz için bir Azure Bulut Hizmeti oluşturun.

Bölünmüş Birleştirme hizmetinizi yapılandırma

Bölünmüş Birleştirme hizmeti yapılandırması

  1. Split-Merge derlemelerini indirdiğiniz klasörde, yanında SplitMergeService.cspkg gönderilen dosyanın bir kopyasını ServiceConfiguration.Template.cscfg oluşturun ve yeniden adlandırınServiceConfiguration.cscfg.

  2. Sertifika parmak izlerinin biçimi gibi girişleri doğrulayan Visual Studio gibi bir metin düzenleyicisinde açın ServiceConfiguration.cscfg .

  3. Yeni bir veritabanı oluşturun veya Bölünmüş Birleştirme işlemleri için durum veritabanı olarak görev yapmak ve bu veritabanının bağlantı dizesi almak için mevcut bir veritabanını seçin.

    Ö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 şu biçimdedir:

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

  4. ElasticScaleMetadata ayarındaki .cscfg SplitMergeWeb ve SplitMergeWorker rolü bölümlerindeki dosyaya bu bağlantı dizesi girin.

  5. SplitMergeWorker rolü için, ayar için WorkerRoleSynchronizationStorageAccountConnectionString Azure depolamaya geçerli bir bağlantı dizesi girin.

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 oluşturma

Yeni bir dizin oluşturun ve bu dizinden Visual Studio için Geliştirici Komut İstemi penceresini kullanarak aşağıdaki komutu yürütür:

makecert ^
-n "CN=*.cloudapp.net" ^
-r -cy end -sky exchange -eku "1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2" ^
-a sha256 -len 2048 ^
-sr currentuser -ss root ^
-sv MyCert.pvk MyCert.cer

Özel anahtarı korumak için parola isteminde güçlü bir parola girin ve onaylayın. İstendiğinde parolayı yeniden girin. Sonunda Evet'i seçerek Güvenilen Sertifika Yetkilileri Kök deposuna aktarın.

PFX dosyası oluşturma

Makecert'in yürütüldüğü pencerede aşağıdaki komutu yürütür; sertifikayı oluşturmak için kullandığınız parolayı kullanın:

pvk2pfx -pvk MyCert.pvk -spc MyCert.cer -pfx MyCert.pfx -pi <password>

İstemci sertifikasını kişisel depoya aktarma

  1. Windows Gezgini'nde öğesine çift tıklayın MyCert.pfx.
  2. Sertifika İçeri Aktarma Sihirbazı'nda Geçerli Kullanıcı'yı ve ardından İleri'yi seçin.
  3. Dosya yolunu onaylayın ve İleri'yi seçin.
  4. Parolayı yazın, Tüm genişletilmiş özellikleri ekle seçeneğini işaretli bırakın ve İleri'yi seçin.
  5. Otomatik olarak sertifika depoyu [...] işaretli olarak bırakın ve İleri'yi seçin.
  6. Son'u ve Tamam'ı seçin.

PFX dosyasını bulut hizmetine yükleme

  1. Azure portalına gidin.
  2. Cloud Services'ı seçin.
  3. Daha önce Split-Merge hizmeti için oluşturduğunuz bulut hizmetini seçin.
  4. Üstteki menüden Sertifikalar'ı seçin.
  5. Alt çubukta Karşıya Yükle'yi seçin.
  6. PFX dosyasını seçin ve önceki parolayla aynı parolayı girin.
  7. Tamamlandıktan sonra, listedeki yeni girdiden sertifika parmak izini kopyalayın.

Hizmet yapılandırma dosyasını güncelleştirme

Daha önce kopyalanan sertifika parmak izini bu ayarların parmak izi/değer özniteliğine yapıştırın. Çalışan rolü için:

<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Web rolü için:

<Setting name="AdditionalTrustedRootCertificationAuthorities" value="" />
<Setting name="AllowedClientCertificateThumbprints" value="" />
<Setting name="DataEncryptionPrimaryCertificateThumbprint" value="" />
<Certificate name="SSL" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="CA" thumbprint="" thumbprintAlgorithm="sha1" />
<Certificate name="DataEncryptionPrimary" thumbprint="" thumbprintAlgorithm="sha1" />

Üretim dağıtımları için CA, şifreleme, Sunucu sertifikası ve istemci sertifikaları için ayrı sertifikalar kullanılmalıdır. Bununla ilgili ayrıntılı yönergeler için bkz . Güvenlik Yapılandırması.

Hizmetinizi dağıtma

  1. Azure portal'a gidin
  2. Daha önce oluşturduğunuz bulut hizmetini seçin.
  3. Genel bakış'ı seçin.
  4. Hazırlama ortamını ve ardından Karşıya Yükle'yi seçin.
  5. İletişim kutusuna bir dağıtım etiketi girin. hem hem de Package için, daha önce yapılandırdığınız dosyayı ve cscfg dosyanızı seçin From Local ve seçinSplitMergeService.cspkg.Configuration
  6. Bir veya daha fazla rol tek bir örnek içerse bile Dağıt etiketli onay kutusunun işaretli olduğundan emin olun.
  7. Dağıtımı başlatmak için sağ alttaki onay düğmesine basın. Tamamlanmasının birkaç dakika sürmesini bekleyin.

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.

  • cscfg'nizdeki 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

Bölünmüş Birleştirme hizmetinizin web uç noktasını belirleyin. Bunu portalda, bulut hizmetinize genel bakış'a gidip sağ taraftaki Site URL'sinin altına bakarak bulabilirsiniz. varsayılan güvenlik ayarları HTTP uç noktasını devre dışı bırakdığından değerini ile https://değiştirinhttp://. Bu URL'nin sayfasını tarayıcınıza yükleyin.

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.

Sorun giderme

Ö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.

Ek kaynaklar

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.