Share via


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.

Dekont

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 dosyasını 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 Microsoft.Azure.SqlDatabase.ElasticScale.Service.SplitMerge.x.x.xxx.x adlı bir dizine yerleştirilir; burada x.x.xxx.x sürüm numarasını yansıtır. content\splitmerge\service alt dizininde bölünmüş birleştirme Hizmeti dosyalarını ve content\splitmerge\powershell alt dizininde Split-Merge PowerShell betiklerini (ve gerekli istemci dll'lerini) 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 Azure Hizmetlerine erişime izin ver ayarının Açık olarak ayarlandığından emin olun. "Kaydet" simgesine tıklayın.

  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, SplitMergeService.cspkg ile birlikte gönderilen ServiceConfiguration.Template.cscfg dosyasının bir kopyasını oluşturun ve ServiceConfiguration.cscfg olarak yeniden adlandırın.

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

  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ı (Transact-SQL).

    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. Bu bağlantı dizesi ElasticScaleMetadata ayarındaki Hem SplitMergeWeb hem de SplitMergeWorker rolü bölümlerindeki .cscfg dosyasına girin.

  5. SplitMergeWorker rolü için WorkerRoleSynchronization Depolama Account Bağlan ionString ayarı için 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 çok az sayıda yapılandırma adımı 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 bir parola girmeniz istenir. Güçlü bir parola girin ve onaylayın. Bundan sonra parolanın bir kez daha kullanılması istenir. Sonunda Evet'e tıklayarak 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 MyCert.pfx dosyasına çift tıklayın.
  2. Sertifika İçeri Aktarma Sihirbazı'nda Geçerli Kullanıcı'ya tıklayın ve İleri'ye tıklayın.
  3. Dosya yolunu onaylayın ve İleri'ye tıklayın.
  4. Parolayı yazın, Tüm genişletilmiş özellikleri ekle seçeneğini işaretli bırakın ve İleri'ye tıklayın.
  5. Otomatik olarak sertifika deposunu [...] işaretli olarak bırakın ve İleri'ye tıklayın.
  6. Son'a ve Tamam'a tıklayın.

PFX dosyasını bulut hizmetine yükleme

  1. Azure portalına gidin.
  2. Cloud Services'ı seçin.
  3. Bölme/Birleştirme hizmeti için yukarıda oluşturduğunuz bulut hizmetini seçin.
  4. Üstteki menüde Sertifikalar'a tıklayın.
  5. Alt çubukta Karşıya Yükle'ye tıklayın.
  6. PFX dosyasını seçin ve yukarıdakiyle aynı parolayı girin.
  7. Tamamlandıktan sonra, listedeki yeni girdiden sertifika parmak izini kopyalayın.

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

Yukarıda 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ılması gerektiğini lütfen unutmayın. 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ış'a tıklayın.
  4. Hazırlama ortamını seçin ve karşıya yükle'ye tıklayın.
  5. İletişim kutusuna bir dağıtım etiketi girin. Hem 'Paket' hem de 'Yapılandırma' için 'Yerel'e tıklayın ve SplitMergeService.cspkg dosyasını ve daha önce yapılandırdığınız cscfg dosyanızı seçin.
  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 yukarıda açıklandığı gibi yapılandırıldığından denetleyin.

Çalışan rolünüz çevrimiçi olamasa da 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 https:// ile 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ğlan

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 http:// yerine https:// yazın. 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ölme/Birleştirme için bir test veri katmanı ayarlar (ayrıntılı açıklama için aşağıdaki tabloya bakın)

  2. ExecuteSampleSplitMerge.ps1 - Test işlemlerini test veri katmanında yürütür (ayrıntılı açıklama için aşağıdaki tabloya bakın)

  3. GetMappings.ps1 - Parça eşlemelerinin geçerli durumunu yazdıran en üst düzey örnek betik.

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

  5. SqlDatabaseHelpers.psm1 - SQL Veritabanı'de veritabanı oluşturmaya ve yönetmeye yönelik yardımcı betik

    PowerShell dosyası Adımlar
    SetupSampleSplitMergeEnvironment.ps1 1. Parça eşleme yöneticisi veritabanı oluşturur
    2. 2 parça veritabanı oluşturur.
    3. Bu veritabanları için bir parça eşlemesi oluşturur (bu veritabanlarındaki mevcut parça haritalarını 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.
    PowerShell dosyası Adımlar
    ExecuteSampleSplitMerge.ps1 1. Bölme-Birleştirme Hizmeti web ön ucuna, verilerin yarısını ilk parçadan ikinci parçaya bölen bir bölme isteği gönderir.
    2. Bölünmüş istek durumu için web ön ucu yoklar ve istek tamamlanana kadar bekler.
    3. Verileri ikinci parçadan ilk parçaya geri taşıyan Bölünmüş Birleştirme Hizmeti web ön ucuna bir birleştirme isteği gönderir.
    4. Birleştirme isteği durumu için web ön ucu yoklar ve istek tamamlanana kadar bekler.

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

    Dekont

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

    Bölünmüş Birleştirme hizmetinin verileri taşıması ve parça eşlemesini güncelleştirmesi için DB'lere okuma/yazma erişimine sahip sql kimlik doğrulaması oturum açma bilgileri gerekir. Bölme-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. Örnek ortamı oluşturmak için SetupSampleSplitMergeEnvironment.ps1 betiğini 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 betiğini yürüterek bir bölme işlemi (ilk parçadaki verilerin yarısını ikinci parçaya taşıma) ve ardından birleştirme işlemini (verileri ilk parçaya geri taşıma) 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 bir 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, çıktı aşağıdaki 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önderecek SplitMerge.psm1 PowerShell modülünü içeri aktarıp kullanarak 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çalanmadığından 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şınmasını istediğiniz parçalı tabloları ve başvuru tablolarını bildirmeniz gerekir. Bu, SchemaInfo API'siyle gerçekleştirilir. Bu API, Microsoft.Azure.SqlDatabase.ElasticScale.ShardManagement.Schema ad alanındadır.

  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. Yukarıdaki 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'aSchemaInfo 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ılmadığı anlamına gelir. Lütfen 'web tarayıcısıyla Bağlan' 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 WorkerRoleSynchronization Depolama Account Bağlan ionString ayarını denetleyin. Bu hata genellikle çalışan rolünün ilk kullanımda meta veri veritabanını başarıyla başlatamadığı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.