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 terlampir 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 ke pihak yang menjalankan kueri pada data.
Untuk sampel kode berdasarkan versi SDK sebelumnya, lihat artikel yang diarsipkan.
- 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.
- Langganan Azure. Membuat akun Azure gratis.
- Kluster dan database Azure Data Explorer untuk pemimpin dan pengikut. Membuat kluster dan database.
- Database pemimpin harus berisi data. Anda dapat menyerap data menggunakan salah satu metode yang dibahas dalam gambaran umum penyerapan.
Ada berbagai metode yang dapat Anda gunakan untuk melampirkan database. Dalam artikel ini, kita membahas melampirkan database menggunakan C#, Python, PowerShell, atau templat 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 peran yang berbeda.
Catatan
Membuat database pengikut sebelumnya tidak diperlukan karena database dibuat selama proses lampiran.
Saat melampirkan database semua tabel, tabel eksternal dan tampilan materialisasi juga diikuti. Anda dapat berbagi tabel/tabel eksternal/tampilan materialisasi tertentu dengan mengonfigurasi 'TableLevelSharingProperties'.
'TableLevelSharingProperties' berisi delapan array string: tablesToInclude
, , , tablesToExclude
externalTablesToInclude
, externalTablesToExclude
, materializedViewsToInclude
, materializedViewsToExclude
, functionsToInclude
, dan functionsToExclude
. Jumlah maksimum entri dalam semua array bersama-sama adalah 100.
Catatan
- Berbagi tingkat tabel tidak didukung saat menggunakan '*' semua notasi database.
- Saat tampilan materialisasi disertakan, tabel sumbernya juga disertakan.
Contoh berikut mencakup semua tabel. Secara default, semua tabel diikuti tanpa menggunakan notasi '*':
tablesToInclude = []
Contoh berikut mencakup semua fungsi. Secara default, semua fungsi diikuti tanpa menggunakan notasi '*':
functionsToInclude = []
Contoh berikut mencakup semua tabel dengan nama yang dimulai dengan "Log":
tablesToInclude = ["Logs*"]
Contoh berikut mencakup semua tabel eksternal:
externalTablesToExclude = ["*"]
Contoh berikut mencakup semua tampilan materialisasi:
materializedViewsToExclude=["*"]
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'.
- Instal Azure.ResourceManager.Kusto.
- Instal Azure.Identity untuk autentikasi.
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);
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 .
Telusuri ke kluster pengikut dan pilih Database.
Dalam daftar database, cari database baca-saja baru.
Anda juga bisa menampilkan daftar ini di halaman gambaran umum database:
Telusuri ke kluster pemimpin dan pilih Database
Periksa apakah database yang relevan ditandai sebagai DIBAGIKAN DENGAN ORANG LAIN>Ya
Alihkan tautan hubungan untuk melihat detail.
Anda juga bisa menampilkan ini di halaman gambaran umum database:
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 melepaskan database. Dalam contoh di bawah ini, kami menggunakan perwakilan layanan.
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);
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);
Saat melampirkan database, tentukan "jenis modifikasi prinsipal default". Defaultnya adalah menggabungkan penggantian prinsipal yang berwenang dengan kumpulan database pemimpin prinsipal yang berwenang
Kind | Keterangan |
---|---|
union | Prinsipal database terlampir akan selalu menyertakan prinsipal database asli ditambah prinsipal baru lainnya yang ditambahkan ke database pengikut. |
Menggantikan | Tidak ada warisan prinsipal dari database asli. Prinsipal baru harus dibuat untuk database terlampir. |
Tidak | Prinsipal database terlampir 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 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.
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 penggantian 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.
- 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.
- Misalnya: perintah yang
- Pengikut dan kluster pemimpin harus berada di wilayah yang sama.
- Jika Penyerapan streaming digunakan pada database yang diikuti, kluster pengikut harus diaktifkan untuk Penyerapan Streaming untuk memungkinkan mengikuti 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 melepaskannya.
- Anda tidak dapat menghapus kluster yang memiliki database yang dilampirkan ke kluster lain sebelum melepaskannya.
- 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.