Menggunakan database pengikut

Fitur database pengikut memungkinkan Anda melampirkan database yang terletak di kluster yang berbeda ke kluster Azure Data Explorer Anda. Database pengikut dilampirkan dalam mode baca-saja, memungkinkan untuk melihat data dan menjalankan kueri pada data yang diserap ke dalam database pemimpin. Database pengikut menyinkronkan perubahan dalam database pemimpin. Karena sinkronisasi, ada jeda data beberapa detik hingga beberapa menit dalam ketersediaan data. Panjang jeda waktu tergantung pada ukuran keseluruhan metadata database pemimpin. Database pemimpin dan pengikut menggunakan akun penyimpanan yang sama untuk mengambil data. Penyimpanan dimiliki oleh database pemimpin. Database pengikut menampilkan data tanpa perlu menyerapnya. Karena database yang dilampirkan adalah database baca-saja, data, tabel, dan kebijakan dalam database tidak dapat dimodifikasi kecuali untuk kebijakan penembolokan, prinsipal, dan izin. Database terlampir tidak dapat dihapus. Mereka harus dilepaskan oleh pemimpin atau pengikut dan hanya kemudian mereka dapat dihapus.

Melampirkan database ke kluster yang berbeda menggunakan kemampuan pengikut digunakan sebagai infrastruktur untuk berbagi data antara organisasi dan tim. Fitur ini berguna untuk memisahkan sumber daya komputasi untuk melindungi lingkungan produksi dari kasus penggunaan non-produksi. Pengikut juga dapat digunakan untuk mengaitkan biaya kluster Azure Data Explorer kepada pihak yang menjalankan kueri pada data.

Untuk sampel kode berdasarkan versi SDK sebelumnya, lihat artikel yang diarsipkan.

Database mana yang diikuti?

  • Kluster dapat mengikuti satu database, beberapa database, atau semua database kluster pemimpin.
  • Satu kluster dapat mengikuti database dari beberapa kluster pemimpin.
  • Kluster dapat berisi database pengikut dan database pemimpin.

Prasyarat

Melampirkan database

Ada berbagai metode yang dapat Anda gunakan untuk melampirkan database. Dalam artikel ini, kita membahas melampirkan database menggunakan templat C#, Python, PowerShell, atau Azure Resource Manager. Untuk melampirkan database, Anda harus memiliki pengguna, grup, perwakilan layanan, atau identitas terkelola dengan setidaknya peran kontributor pada kluster pemimpin dan kluster pengikut. Menambahkan atau menghapus penetapan peran menggunakan templat portal Azure, PowerShell, Azure CLI, dan ARM. Pelajari selengkapnya tentang kontrol akses berbasis peran Azure (Azure RBAC) dan berbagai peran.

Berbagi tingkat tabel

Saat melampirkan database semua tabel, tabel eksternal dan tampilan materialisasi juga diikuti. Anda dapat berbagi tabel tertentu/tabel eksternal/tampilan materialisasi dengan mengonfigurasi 'TableLevelSharingProperties'.

'TableLevelSharingProperties' berisi delapan array string: tablesToInclude, , , externalTablesToIncludetablesToExclude, materializedViewsToIncludeexternalTablesToExclude, materializedViewsToExclude, functionsToInclude, dan functionsToExclude. Jumlah maksimum entri dalam semua array bersama-sama adalah 100.

Catatan

  • Berbagi tingkat tabel tidak didukung saat menggunakan notasi '*' semua database.
  • Saat tampilan materialisasi disertakan, tabel sumbernya juga disertakan.

Contoh

  1. Sertakan semua tabel. Tidak diperlukan '*', karena semua tabel diikuti secara default:

    tablesToInclude = []
    
  2. Sertakan semua tabel dengan nama yang dimulai dengan "Log":

    tablesToInclude = ["Logs*"]
    
  3. Kecualikan semua tabel eksternal:

    externalTablesToExclude = ["*"]
    
  4. Kecualikan semua tampilan materialisasi:

    materializedViewsToExclude=["*"]
    

Penimpaan nama database

Anda dapat secara opsional membuat nama database di kluster pengikut berbeda dari kluster pemimpin. Misalnya, Anda mungkin ingin melampirkan nama database yang sama dari beberapa kluster pemimpin ke kluster pengikut. Untuk menentukan nama database yang berbeda, konfigurasikan properti 'DatabaseNameOverride' atau 'DatabaseNamePrefix'.

Melampirkan database menggunakan C#

Paket NuGet yang diperlukan

C# contoh

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfigurations = cluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
    ClusterResourceId = new ResourceIdentifier($"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}"),
    DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
    DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
    Location = AzureLocation.NorthCentralUS
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new KustoDatabaseTableLevelSharingProperties();
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}
await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData);

Verifikasi bahwa database berhasil dilampirkan

Untuk memverifikasi bahwa database berhasil dilampirkan, temukan database terlampir Anda di portal Azure. Anda dapat memverifikasi bahwa database berhasil dilampirkan di kluster pengikut atau pemimpin .

Periksa kluster pengikut Anda

  1. Telusuri ke kluster pengikut dan pilih Database.

  2. Dalam daftar database, cari database baca-saja baru.

    Cuplikan layar database pengikut baca-saja di portal.

    Anda juga bisa menampilkan daftar ini di halaman gambaran umum database:

    Cuplikan layar halaman gambaran umum database dengan daftar kluster pengikut.

Periksa kluster pemimpin Anda

  1. Telusuri ke kluster pemimpin dan pilih Database

  2. Periksa apakah database yang relevan ditandai sebagai DIBAGIKAN DENGAN ORANG LAIN>Ya

  3. Alihkan tautan hubungan untuk melihat detail.

    Cuplikan layar database yang dibagikan dengan orang lain untuk memeriksa kluster pemimpin.

    Anda juga bisa menampilkan ini di halaman gambaran umum database:

    Cuplikan layar gambaran umum dengan daftar database yang dibagikan dengan orang lain.

Melepaskan database pengikut

Catatan

Untuk melepaskan database dari sisi pengikut atau pemimpin, Anda harus memiliki pengguna, grup, perwakilan layanan, atau identitas terkelola dengan setidaknya peran kontributor pada kluster tempat Anda mencopot database. Dalam contoh di bawah ini, kami menggunakan perwakilan layanan.

Lepaskan database pengikut terlampir dari kluster pengikut menggunakan C#**

Kluster pengikut dapat melepaskan database pengikut terlampir sebagai berikut:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfiguration = (await cluster.GetKustoAttachedDatabaseConfigurationAsync(attachedDatabaseConfigurationsName)).Value;
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);

Lepaskan database pengikut terlampir dari kluster pemimpin menggunakan C#

Kluster pemimpin dapat melepaskan database terlampir apa pun sebagai berikut:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, leaderSubscriptionId);
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(leaderResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(leaderClusterName)).Value;
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
    clusterResourceId: new ResourceIdentifier($"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"),
    attachedDatabaseConfigurationName: attachedDatabaseConfigurationsName
);
await cluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);

Mengelola prinsipal, izin, dan kebijakan penembolokan

Mengelola prinsipal

Saat melampirkan database, tentukan "jenis modifikasi prinsipal default". Defaultnya adalah menggabungkan penimpaan prinsipal yang berwenang dengan kumpulan database pemimpin prinsipal yang berwenang

Jenis Deskripsi
union Prinsipal database yang dilampirkan akan selalu menyertakan prinsipal database asli ditambah prinsipal baru lainnya yang ditambahkan ke database pengikut.
Replace Tidak ada pewarisan prinsipal dari database asli. Prinsipal baru harus dibuat untuk database yang dilampirkan.
Tidak ada Prinsipal database yang dilampirkan hanya mencakup prinsipal database asli tanpa prinsipal lain.

Untuk informasi selengkapnya tentang menggunakan perintah manajemen untuk mengonfigurasi prinsipal yang diotorisasi, lihat Perintah manajemen untuk mengelola kluster pengikut.

Mengelola izin

Mengelola izin database baca-saja sama dengan untuk semua jenis database. Untuk menetapkan izin, lihat Mengelola izin database di portal Azure atau menggunakan perintah manajemen untuk Mengelola peran keamanan database.

Mengonfigurasi kebijakan penembolokan

Administrator database pengikut dapat mengubah kebijakan penembolokan database terlampir atau tabelnya pada kluster hosting. Defaultnya adalah menggabungkan database sumber dalam database kluster pemimpin dan kebijakan penembolokan tingkat tabel dengan kebijakan yang ditentukan dalam database dan kebijakan penimpaan tingkat tabel. Anda dapat, misalnya, memiliki kebijakan penembolokan 30 hari pada database pemimpin untuk menjalankan pelaporan bulanan dan kebijakan penembolokan tiga hari pada database pengikut untuk mengkueri hanya data terbaru untuk pemecahan masalah. Untuk informasi selengkapnya tentang menggunakan perintah manajemen untuk mengonfigurasi kebijakan penembolokan pada database atau tabel pengikut, lihat Perintah manajemen untuk mengelola kluster pengikut.

Catatan

  • Jika ada konflik antara database kluster pemimpin/pengikut, ketika semua database diikuti oleh kluster pengikut, mereka diselesaikan sebagai berikut:
    • Database bernama DB yang dibuat pada kluster pengikut lebih diutamakan daripada database dengan nama yang sama yang dibuat pada kluster pemimpin. Itulah sebabnya database DB di kluster pengikut perlu dihapus atau diganti namanya untuk kluster pengikut untuk menyertakan DB database pemimpin.
    • Database bernama DB diikuti dari dua kluster pemimpin atau lebih akan dipilih secara semena-mena dari salah satu kluster pemimpin, dan tidak akan diikuti lebih dari sekali.
  • Perintah untuk menampilkan log aktivitas kluster dan riwayat yang dijalankan pada kluster pengikut akan menampilkan aktivitas dan riwayat pada kluster pengikut, dan kumpulan hasilnya tidak akan menyertakan hasil kluster atau kluster pemimpin tersebut.
    • Misalnya: perintah yang .show queries dijalankan pada kluster pengikut hanya akan menampilkan kueri yang dijalankan pada database diikuti oleh kluster pengikut, dan bukan kueri yang dijalankan terhadap database yang sama di kluster pemimpin.

Batasan

  • Pengikut dan kluster pemimpin harus berada di wilayah yang sama.
  • Jika Penyerapan streaming digunakan pada database yang sedang diikuti, kluster pengikut harus diaktifkan untuk Penyerapan Streaming untuk memungkinkan berikut data penyerapan streaming.
  • Mengikuti kluster dengan enkripsi data menggunakan kunci yang dikelola pelanggan (CMK) didukung dengan batasan berikut:
    • Baik kluster pengikut maupun kluster pemimpin tidak mengikuti kluster lain.
    • Jika kluster pengikut mengikuti kluster pemimpin dengan CMK diaktifkan, dan akses pemimpin ke kunci dicabut, baik kluster pemimpin maupun pengikut akan ditangguhkan. Dalam situasi ini, Anda dapat menyelesaikan masalah CMK dan kemudian melanjutkan kluster pengikut, atau Anda dapat melepaskan database pengikut dari kluster pengikut dan melanjutkan independen dari kluster pemimpin.
  • Anda tidak dapat menghapus database yang dilampirkan ke kluster lain sebelum mencopotnya.
  • Anda tidak dapat menghapus kluster yang memiliki database yang dilampirkan ke kluster lain sebelum mencopotnya.
  • Properti berbagi tingkat tabel tidak didukung saat mengikuti semua database.
  • Dalam database pengikut, untuk mengkueri tabel eksternal yang menggunakan Identitas Terkelola sebagai metode autentikasi, Identitas Terkelola harus ditambahkan ke kluster pengikut. Kemampuan ini tidak berfungsi ketika kluster pemimpin dan pengikut disediakan di penyewa yang berbeda.

Langkah selanjutnya