Denetleyici veritabanını yedekleme ve kurtarma
Azure Arc veri hizmetlerini dağıttığınızda Azure Arc Veri Denetleyicisi dağıtılan en kritik bileşenlerden biridir. Veri denetleyicisinin işlevleri şunlardır:
- Kaynakları sağlama, sağlamayı kaldırma ve güncelleştirme
- Yükseltmeler, ölçeği genişletme gibi Azure Arc tarafından etkinleştirilen SQL Yönetilen Örneği etkinliklerinin çoğunu düzenleme.
- Arc SQL yönetilen örneklerinin faturalama ve kullanım bilgilerini yakalayın.
Yukarıdaki işlevleri gerçekleştirmek için Veri denetleyicisinin tüm geçerli Arc SQL yönetilen örneklerinin, faturalamanın, kullanımın ve tüm bu SQL yönetilen örneklerinin geçerli durumunun bir envanterini depolaması gerekir. Tüm bu veriler, pod'a controldb-0
dağıtılan SQL Server örneğinde adlı controller
bir veritabanında depolanır.
Bu makalede denetleyici veritabanını yedekleme açıklanmaktadır.
Veri denetleyicisi veritabanını yedekleme
Yerleşik özelliklerin bir parçası olarak, yedeklemeler etkinleştirildikten sonra Veri denetleyicisi veritabanı controller
her 5 dakikada bir otomatik olarak yedeklenir. Yedeklemeleri etkinleştirmek için:
backups-controldb
PersistentVolumeClaim
Erişimi destekleyenReadWriteMany
bir depolama sınıfıyla oluşturma:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: backups-controldb
namespace: <namespace>
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 15Gi
storageClassName: <storage-class>
- Özel kaynak belirtimini
DataController
bir depolama tanımı içerecek şekildebackups
düzenleyin:
storage:
backups:
accessMode: ReadWriteMany
className: <storage-class>
size: 15Gi
data:
accessMode: ReadWriteOnce
className: managed-premium
size: 15Gi
logs:
accessMode: ReadWriteOnce
className: managed-premium
size: 10Gi
.bak
Veritabanının controller
dosyaları konumundaki backups
podun controldb
/var/opt/backups/mssql
biriminde depolanır.
Denetleyici veritabanını kurtarma
İki tür kurtarma mümkündür:
controller
bozuk ve yalnızca veritabanını geri yüklemeniz gerekiyor- veri ve günlük dosyalarını içeren
controller
tüm depolama alanı bozuk/yok ve kurtarmanız gerekiyor
Bozuk denetleyici veritabanı senaryosu
Bu senaryoda tüm podlar çalışır durumdadır, SQL Server'a controldb
bağlanabilirsiniz ve veritabanında bir bozulma controller
olabilir. Veritabanını yedekten geri yüklemeniz yeterlidir.
SQL Server pod üzerinde controldb
çalışmaya devam ediyorsa ve buna bağlanabiliyorsanız denetleyici veritabanını yedekten geri yüklemek için şu adımları izleyin:
Veritabanını barındıran SQL Server podunun
controller
bağlantısını doğrulayın.İlk olarak, gizli dizi için kimlik bilgilerini alın.
controller-system-secret
, SQL örneğine bağlanmak içinsystem
kullanılabilecek kullanıcı hesabının kimlik bilgilerini tutan gizli dizidir. Gizli dizi içeriğini almak için aşağıdaki komutu çalıştırın:kubectl get secret controller-system-secret --namespace [namespace] -o yaml
Örneğin:
kubectl get secret controller-system-secret --namespace arcdataservices -o yaml
base64 kodlanmış kimlik bilgilerinin kodunu çözme. Gizli
controller-system-secret
dizinin yaml dosyasının içeriği birpassword
veusername
içerir. içeriğinin kodunupassword
çözmek için herhangi bir base64 kod çözücü aracını kullanabilirsiniz.Bağlantıyı doğrulama: Kodu çözülen kimlik bilgileriyle, SQL Server bağlantısını doğrulamak için gibi
SELECT @@SERVERNAME
bir komut çalıştırın.kubectl exec controldb-0 -n <namespace> -c mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
kubectl exec controldb-0 -n contosons -c mssql-server -- /opt/mssql-tools/bin/sqlcmd -S localhost -U system -P "<password>" -Q "SELECT @@SERVERNAME"
ReplicaSet denetleyicisini aşağıdaki gibi 0 çoğaltmaya ölçeklendirin:
kubectl scale --replicas=0 rs/control -n <namespace>`
Örneğin:
kubectl scale --replicas=0 rs/control -n arcdataservices
1. adımda açıklandığı gibi
system
SQL Server'acontroldb
bağlanın.Bozuk denetleyici veritabanını T-SQL kullanarak silin:
DROP DATABASE controller
Veritabanını yedekten geri yükleyin; bozuk
controllerdb
olan bırakıldıktan sonra. Örneğin:RESTORE DATABASE test FROM DISK = '/var/opt/backups/mssql/<controller backup file>.bak' WITH MOVE 'controller' to '/var/opt/mssql/data/controller.mdf ,MOVE 'controller' to '/var/opt/mssql/data/controller_log.ldf' ,RECOVERY; GO
ReplicaSet denetleyicisini 1 çoğaltmaya kadar ölçeklendirin.
kubectl scale --replicas=1 rs/control -n <namespace>
Örneğin:
kubectl scale --replicas=1 rs/control -n arcdataservices
Bozuk depolama senaryosu
Bu senaryoda, Veri denetleyicisi verilerini ve günlük dosyalarını barındıran depolamada bozulma var ve yeni bir depolama alanı sağlandı ve denetleyici veritabanını geri yüklemeniz gerekiyor.
StatefulSet için yeni depolama alanıyla denetleyici veritabanını yedekten geri yüklemek için controldb
şu adımları izleyin:
Veritabanının bilinen son iyi durumunun yedeğine sahip olduğunuzdan
controller
emin olunReplicaSet denetleyicisini aşağıdaki gibi 0 çoğaltmaya ölçeklendirin:
kubectl scale --replicas=0 rs/control -n <namespace>
Örneğin:
kubectl scale --replicas=0 rs/control -n arcdataservices
StatefulSet'i
controldb
aşağıdaki gibi 0 çoğaltmaya ölçeklendirin:kubectl scale --replicas=0 sts/controldb -n <namespace>
Örneğin:
kubectl scale --replicas=0 sts/controldb -n arcdataservices`
Aşağıdaki YAML ile adlı
controller-sa-secret
bir kubernetes gizli dizisi oluşturun:apiVersion: v1 kind: Secret metadata: name: controller-sa-secret namespace: <namespace> type: Opaque data: password: <base64 encoded password>
StatefulSet'i
controldb
, komutunu kullanarakkubectl edit sts controldb -n <namespace>
kapsayıcıya bircontroller-sa-secret
birim ve karşılık gelen birim bağlamasınımssql-server
(/var/run/secrets/mounts/credentials/mssql-sa-password
) içerecek şekilde düzenleyin.Pod için
controldb
aşağıdaki gibi yeni veriler (data-controldb
) ve günlükler (logs-controldb
) kalıcı birim talepleri oluşturun:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-controldb namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 15Gi storageClassName: <storage class> --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: logs-controldb namespace: <namespace> spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: <storage class>
StatefulSet'i
controldb
kullanarak yeniden 1 çoğaltmaya ölçeklendirin:kubectl scale --replicas=1 sts/controldb -n <namespace>
controldb
Daha önce oluşturulan gizli dizideki parolayı kullanarak SQL sunucusunasa
controller-sa-secret
bağlanın.Aşağıdaki gibi kubernetes gizli dizisindeki
controller-system-secret
parolayı kullanarak sysadmin rolüyle oturumsystem
açma bilgileri oluşturun:CREATE LOGIN [system] WITH PASSWORD = '<password-from-secret>' ALTER SERVER ROLE sysadmin ADD MEMBER [system]
Aşağıdaki komutu kullanarak yedeklemeyi
RESTORE
geri yükleyin:
RESTORE DATABASE [controller] FROM DISK = N'/var/opt/backups/mssql/<controller backup file>.bak' WITH FILE = 1
Gizli dizideki
controller-db-rw-secret
parolayı kullanarak oturumcontroldb-rw-user
açma bilgileri oluşturun ve bunu denetleyici DB'deki mevcutcontroldb-rw-user
kullanıcıyla ilişkilendirinALTER USER [controldb-rw-user] WITH LOGIN = [controldb-rw-user]
.CREATE LOGIN [controldb-rw-user] WITH PASSWORD = '<password-from-secret>'
sa
TSQL kullanarak oturum açmayı devre dışı bırakın -ALTER LOGIN [sa] DISABLE
.StatefulSet'i
controldb
düzenleyerek birimi ve ilgili birim bağlamasınıcontroller-sa-secret
kaldırın.Gizli diziyi
controller-sa-secret
silin.komutunu kullanarak ReplicaSet denetleyicisini 1 çoğaltmaya kadar ölçeklendirin
kubectl scale
.