AWS Türkçe Blog

Amazon RDS for MySQL ve PostgreSQL için Yeni Multi-AZ Dağıtım Seçeneği: İyileştirilmiş Yazma Performansı ve Daha Hızlı Yük Devretme

Orijinal makale: Link (Sébastien Stormacq)

Bugün, 2 kata kadar daha hızlı işlem tamamlama gecikmesi (transaction commit latency), tipik olarak 35 saniyenin altında otomatik yük devretme ve okunabilir yedek (readable standby) sunucuları ile yeni bir Amazon Relational Database Service (RDS) Multi-AZ dağıtım seçeneğini duyuruyoruz.

Amazon RDS, kullanılabilirliği ve performansı artırmak için iki çoğaltma seçeneği sunar:

  • Multi-AZ dağıtımları, yüksek kullanılabilirlik ve otomatik yük devretme sağlar. Amazon RDS, ikinci bir Erişilebilirlik Alanında veritabanının depolama düzeyinde bir kopyasını oluşturur. Ardından, yüksek kullanılabilirlik için verileri birincil veri tabanından yedek veritabanı bulut sunucusuna eşzamanlı olarak çoğaltır. Birincil DB örneği uygulama isteklerine hizmet ederken, yedek DB örneği bir arıza durumunda devralmaya hazır kalır. Amazon RDS, veritabanını kullanan uygulamaların yüksek düzeyde kullanılabilir olabilmesi için arıza algılama, yük devretme ve onarım eylemlerinin tüm yönlerini yönetir.
  • Okuma replikaları (read replicas), uygulamaların okuma işlemlerini birden çok veritabanı sunucusunda ölçeklendirmesine olanak tanır. Veritabanı motoru, verileri asenkron olarak okuma kopyalarına çoğaltır. Uygulama, yazma isteklerini (INSERT, UPDATE ve DELETE) birincil veritabanına gönderir ve okuma istekleri (SELECT), okuma replikaları arasında yük dengelenebilir. Birincil düğümün arızalanması durumunda, yeni birincil veritabanı olması için bir okuma replikasını manuel olarak yükseltebilirsiniz.

Multi-AZ dağıtımları ve okuma replikaları farklı amaçlara hizmet eder. Multi-AZ dağıtımları, uygulamanıza yüksek kullanılabilirlik, dayanıklılık ve otomatik yük devretme sağlar. Okuma replikaları, uygulamalarınıza okuma ölçeklenebilirliği sağlar.

Peki ya hem otomatik yük devretme ile yüksek kullanılabilirlik hem de okuma ölçeklenebilirliği gerektiren uygulamalar?

İki Okunabilir Yedek Sunucuya Sahip Yeni Amazon RDS Multi-AZ Dağıtım Seçeneğiyle Tanışın.
Bugünden itibaren, RDS veritabanlarını dağıtmak için yeni bir seçenek ekliyoruz. Bu seçenek, otomatik yük devretme ve okuma replikalarını birleştirir: Amazon RDS Multi-AZ ile iki adet okunabilir yedek bulut sunucusu. Bu dağıtım seçeneği MySQL ve PostgreSQL veritabanları için kullanılabilir. Bu, bir birincil ve iki okunabilir bekleme sunucusuna sahip bir veritabanı kümesidir. 2 kata kadar daha hızlı işlem tamamlama gecikmesi ve genellikle 35 saniyenin altında otomatik yük devretme sağlar.

Aşağıdaki şema, böyle bir dağıtımı göstermektedir:

Yeni Multi-AZ DB kümesi devreye alma seçeneği etkinleştirildiğinde, RDS, üç farklı Erişilebilirlik Alanında bir birincil veritabanı ve iki okuma replikası yapılandırır. Ardından, birincil düğümün arızalanması durumunda yük devretmeyi izler ve etkinleştirir.

Tıpkı geleneksel okuma replikalarında olduğu gibi, veritabanı motoru verileri birincil düğüm ile okuma replikaları arasında çoğaltır. Ve tıpkı Multi-AZ tek yedek dağıtım seçeneğinde olduğu gibi, RDS, yüksek kullanılabilirlik için yük devretmeyi otomatik olarak algılar ve yönetir.

Yüksek kullanılabilirlik veya ölçeklenebilirlik arasında seçim yapmak zorunda değilsiniz; iki okunabilir beklemeye sahip Multi-AZ DB kümesi, her ikisini de etkinleştirir.

Faydaları nelerdir?
Bu yeni dağıtım seçeneği, geleneksel multi-AZ dağıtımlarına göre size dört avantaj sunar: geliştirilmiş tamamlama gecikmesi, daha hızlı yük devretme, okunabilir bekleme sunucuları ve optimize edilmiş çoğaltmalar.

İlk olarak, Multi-AZ DB kümesi kullanılırken yazma işlemleri daha hızlıdır. Yeni Multi-AZ DB kümesi bulut sunucuları, M6gd ve R6gd bulut sunucusu türlerinden yararlanır. Bu bulut sunucuları, AWS Graviton2 işlemciler tarafından desteklenmektedir. Yerel depolama için yüksek hızlı ve düşük gecikmeli depolama için ideal olan hızlı NVMe SSD ile donatılmıştır. Karşılaştırılabilir x86 tabanlı bulut sunucularına kıyasla vCPU başına yüzde 40’a kadar daha iyi fiyat performansı ve yüzde 50 daha fazla yerel depolama GB’ı sunarlar.

Multi-AZ DB bulut sunucuları, verileri ve işlem günlüğünü depolamak için Amazon Elastic Block Store’u (EBS) kullanır. Yeni Multi-AZ DB kümesi bulut sunucuları, işlem günlüğünü depolamak için bulut sunucuları tarafından sağlanan yerel depolamayı kullanır. Yerel depolama, uygulamalara düşük gecikme süreli, saniyede yüksek I/O işlemleri (IOPS) sağlamak için optimize edilmiştir. Yazma işlemleri önce yerel depolama işlem günlüğüne yazılır, ardından veritabanı depolama birimlerindeki kalıcı depolamaya aktarılır.

İkincisi, yük devretme işlemleri genellikle Multi-AZ DB bulut sunucusu senaryosunda olduğundan daha hızlıdır. Yeni Multi-AZ DB kümesi tarafından oluşturulan okuma replikaları, tam teşekküllü veritabanı sunucularıdır. Sistem 35 saniye kadar kısa bir sürede yük devretme ve ayrıca bekleyen herhangi bir işlem günlüğünün uygulanması için gereken süre kadar tasarlanmıştır. Yük devretme durumunda, sistem yeni bir birincil sunucu yükseltmek ve eski birincil sunucuyu yeni bir okuma replikası olarak yeniden yapılandırmak için tam otomatiktir.

Üçüncüsü, iki yedek durumu etkin yedeklerdir (hot standbys). Uygulamalarınız, bu bekleme sunucularına okuma isteklerini (SELECT) göndermek için küme okuyucu uç noktasını (cluster reader endpoint) kullanabilir. Uygulamanızın, veritabanı okuma yükünü veritabanı kümesinin sunucuları arasında eşit olarak dağıtmasına olanak tanır.

Son olarak, işlem günlüğü için yerel depolamadan yararlanmak çoğaltmayı optimize eder. Mevcut Multi-AZ DB bulut sunucusu, tüm değişiklikleri depolama düzeyinde çoğaltır. Yeni Multi-AZ DB kümesi, yalnızca işlem günlüğünü çoğaltır ve en az bir yedeğin değişikliği kabul ettiğini doğrulamak için bir yetersayı mekanizması (quorum mechanism) kullanır. Veritabanı işlemleri, ikincil sunuculardan biri işlem günlüğünün yerel diskine yazıldığını doğruladığında eşzamanlı olarak yerine getirilir.

Mevcut Veritabanlarını Taşıma
Mevcut RDS veritabanlarına sahip olan ve bu yeni Multi-AZ DB kümesi dağıtım seçeneğinden yararlanmak isteyenler için, mevcut veritabanı bulut sunucunuzun depolama düzeyinde bir yedeğini oluşturmak için veritabanınızın anlık görüntüsünü alabilirsiniz. Anlık görüntü hazır olduğunda, bu anlık görüntüyü temel alan Multi-AZ DB kümesi dağıtım seçeneğiyle yeni bir veritabanı kümesi oluşturabilirsiniz. Yeni Multi-AZ DB kümeniz, mevcut veritabanınızın mükemmel bir kopyası olacaktır.

Hadi Bunu Eylemde Görelim
Başlamak için tarayıcımı AWS Management Console‘a yönlendiriyorum ve RDS‘e gidiyorum. Multi-AZ DB kümesi dağıtım seçeneği, MySQL sürüm 8.0.28 veya üzeri ve PostgreSQL sürüm 13.4 R1 için kullanılabilir. Her iki veritabanı motorunu da seçerim ve sürümün minimum gereksinimlerle eşleşmesini sağlarım. Prosedürün geri kalanı, standart bir Amazon RDS veritabanı başlatmasıyla aynıdır.

Deployment options altında PostgreSQL, sürüm 13.4 R1‘i, Availability and Durability altında ise Multi-AZ DB cluster‘ı seçiyorum.

Gerekirse, RDS’in küme için kullandığı Erişilebilirlik Alanları kümesini seçebilirim. Bunun için bir DB subnet group oluşturuyorum ve kümeyi bu subnet grubuna adıyorum.

Başlatıldıktan sonra, üç DB sunucusunun oluşturulduğunu doğruluyorum. Ayrıca Amazon RDS tarafından sağlanan iki uç noktayı da not alıyorum: birincil uç nokta ve iki okunabilir yedek bulut sunucusu için bir yük dengeli uç nokta.

Yeni kümeyi test etmek için, veritabanıyla aynı security group içinde aynı VPC’de bir Amazon Linux 2 EC2 bulut sunucusu oluşturuyorum ve AmazonSSMManagedInstanceCore yönetilen politikasını içeren bir IAM rolü eklediğimden emin oluyorum. Bu, sunucuya SSH yerine SSM kullanarak bağlanmamı sağlıyor.

Sunucu başlatıldığında, sunucuya bağlanmak için SSM kullanıyorum. PostgreSQL istemci araçlarını kuruyorum.

sudo amazon-linux-extras enable postgresql13
sudo yum clean metadata
sudo yum install postgresql
Zsh

Birincil DB’ye bağlanıyorum. Bir tablo oluşturuyorum ve bir kayıt INSERT ediyorum.

psql -h awsnewsblog.cluster-c1234567890r.us-east-1.rds.amazonaws.com -U postgres

postgres=> create table awsnewsblogdemo (id int primary key, name varchar);
CREATE TABLE

postgres=> insert into awsnewsblogdemo (id,name) values (1, 'seb');
INSERT 0 1

postgres=> exit
Zsh

Çoğaltmanın beklendiği gibi çalıştığını doğrulamak için salt okunur replikaya bağlanıyorum. Uç noktası adındaki -ro- işaretine dikkat edin. Tablo yapısını kontrol ediyorum ve verilerin çoğaltıldığını doğrulamak için bir SELECT ifadesi giriyorum.

psql -h awsnewsblog.cluster-ro-c1234567890r.us-east-1.rds.amazonaws.com -U postgres

postgres=> \dt

              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | awsnewsblogdemo | table | postgres
(1 row)

postgres=> select * from awsnewsblogdemo;
 id | name
----+------
  1 | seb
(1 row)

postgres=> exit
Zsh

Yük devretme senaryosunda, uygulamanın birincil veritabanı sunucusuyla bağlantısı kesilecektir. Bu durumda, uygulama düzeyindeki kodunuzun ağ bağlantısını yeniden kurmaya çalışması önemlidir. Kısa bir süre sonra, uç noktanın DNS adı yedek sunucuyu gösterecek ve uygulamanız yeniden bağlanabilecektir.

Multi-AZ DB kümeleri hakkında daha fazla bilgi edinmek için dokümantasyonumuza başvurabilirsiniz.

Fiyatlandırma ve Kullanılabilirlik
İki okunabilir yedeğe sahip Amazon RDS Multi-AZ dağıtımları şu Bölgelerde sunuluyor: US East (N. Virginia), US West (Oregon) ve Europe (Ireland). Bu listeye daha fazla bölge ekleyeceğiz.

MySQL 8.0.28 veya üzeri sürümü veya PostgreSQL 13.4 R1 sürümü ile kullanabilirsiniz.

Fiyatlandırma, sunucu türüne bağlıdır. US bölgelerinde isteğe bağlı (on-demand) fiyatlandırma, M6gd bulut sunucuları için saatte 0,522 ABD dolarından ve R6gd bulut sunucuları için saatte 0,722 ABD dolarından başlar. Her zamanki gibi, Amazon RDS fiyatlandırma sayfasında MySQL ve PostgreSQL için ayrıntılar bulunur.

Bugün kullanmaya başlayabilirsiniz.