AWS RDS postgres veritabanının ana sürümünü sorunsuz bir şekilde nasıl yükseltebilirim?


13

Bu sabah AWS RDS'de bir PostgreSQL veri tabanının güncellenmesine katıldım. 9.3.3 sürümünden 9.4.4 sürümüne geçmek istedik. Yükseltmeyi bir hazırlama veritabanında "test ettik", ancak hazırlama veritabanı hem çok daha küçüktür ve Multi-AZ kullanmaz. Bu testin oldukça yetersiz olduğu ortaya çıktı.

Üretim veritabanımızda Multi-AZ kullanılmaktadır. Geçmişte küçük sürüm yükseltmeleri yaptık ve bu durumlarda RDS önce bekleme modunu yükseltir ve daha sonra master'a yükseltir. Böylece, yük devretme sırasında meydana gelen tek kesinti süresi ~ 60s'dir.

Aynı şeyin büyük sürüm yükseltmesi için olacağını varsaydık, ama oh ne kadar yanıldık.

Kurulumumuzla ilgili bazı ayrıntılar:

  • db.m3.large
  • Sağlanan IOPS (SSD)
  • 139 GB'ı kullanılan 300 GB depolama alanı
  • Olağanüstü RDS işletim sistemi yükseltmeleri vardı, kesinti süresini en aza indirmek için bu yükseltme ile toplu iş yapmak istedik

Yükseltmeyi gerçekleştirirken kaydedilen RDS olayları şunlardır:

resim açıklamasını buraya girin

Veritabanı CPU yaklaşık 08:44 ve 10:27 arasında maksimize edildi. Bu zamanın çoğunda RDS tarafından bir yükseltme öncesi ve yükseltme sonrası anlık görüntü çekildi.

AWS dokümanlar bunları okumasını ancak anlaşılacağı yaklaşımımızda bariz bir kusurdur biz bir kopyasını yaratmadı ki bu tür yankıları uyarma üretim Çoklu AZ kurulumunda veritabanı ve gibi yükseltmeye çalışın deneme koşusu

Genel olarak çok sinir bozucuydu, çünkü RDS bize ne yaptığı ve ne kadar süreceği hakkında çok az bilgi verdi. (Yine, deneme çalışması yapmak yardımcı olurdu ...)

Bunun dışında, bu olaydan öğrenmek istiyoruz, işte sorularımız:

  • RDS'de büyük bir sürüm yükseltmesi yaparken bu tür bir şey normal mi?
  • Gelecekte asgari kesinti süresiyle büyük bir sürüm yükseltmesi yapmak isteseydik, nasıl başaracağız? Daha sorunsuz hale getirmek için çoğaltmayı kullanmanın akıllıca bir yolu var mı?

Yükseltmeden sonra postgres'in milyonlarca kayıt içeren bazı tablolarda sıralı bir tarama yapmaya çalıştığını ve bunun yerine bir dizin kullanması gerektiğini fark ettik (böylece sorgu zaman aşımımıza çarptı). ANALYZEİstatistikleri güncellemek için bir kılavuz çözüldü. Herkes bu konuda herhangi bir fikir varsa bu da çok iyi olurdu.
jonleighton

Yanıtlar:


4

Bu iyi bir soru,
bulut ortamında çalışmak bazen zor.

pg_dumpall -f dump.sqlTüm veritabanınızı bir SQL dosya biçimine dökecek olan komutu kullanabilirsiniz , Sıfırdan diğer uç noktaya işaret ederek onu yeniden yapılandırabilirsiniz. psql -h endpoint-host.com.br -f dump.sqlKısaca kullanmak .

Ancak bunu yapmak için, diskte makul bir boşluğa sahip bir EC2 örneğine ihtiyacınız olacaktır (veritabanı dökümü için). Ayrıca, yum install postgresql94.x86_64döküm ve geri yükleme komutlarını çalıştırabilmek için yüklemeniz gerekir .

PG Dumpall DOC'deki örneklere bakın .

Verilerinizin bütünlüğünü korumak için, bu bakım penceresi sırasında veritabanına bağlanan sistemleri kapatmanız önerilir (bazı durumlarda zorunlu olacaktır).

Ayrıca, bir şeyleri hızlandırmaya ihtiyacınız varsa, pg_dumpbunun yerine pg_dumpall, paralellik ( -j njobs) parametresinden yararlanarak , işlemde yer alan CPU sayısını belirlediğinizde, örneğin -j 88 CPU'ya kadar kullanacağınızı düşünün . Varsayılan olarak pg_dumpallveya pg_dumpyalnızca 1'in davranışı kullanılır. pg_dumpBunun yerine kullanmanın tek avantajı pg_dumpall, sahip olduğunuz her veritabanı için komutu çalıştırmanız ve ayrıca ROLES'i (gruplar ve kullanıcılar) ayrılmış olarak atamanızdır.

PG Dökümü DOC ve PG Geri Yükleme DOC'deki örneklere bakın .


Paralel özelliği kullanmak için aşağıdakilere ihtiyacınız vardır:pg_dump -h host -U user -W pass -Fc -f output_file.dmp -j 8 database_name
Vinnix

... ve paralellik kullanarak geri yükleme:pg_restore -h host -d database_name -U user -W pass -C -Fc -j 8 output_file.dmp
Vinnix

Üretim ortamınızın anlık görüntüsünde yeni bir rds örneği oluşturamaz mısınız?
Öğrenci
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.