Okuma ve yazma trafiği tek bir bağlantı yolunu paylaştığında, yoğun yazma iş yükleri analitik sorguları sıkıştırabilir ve okuma trafiğinin salt okunur örnekler arasında nasıl dağıtılacağı üzerinde doğrudan kontrolünüz olmaz. Veritabanı ara sunucusu uç noktası, her uç noktaya bir okuma/yazma niteliği atamanıza ve örnek başına okuma ağırlıkları ayarlamanıza olanak tanıyarak bu sorunu çözer; böylece trafiği hassas bir şekilde yönlendirebilir ve okuma kapasitesini bağımsız olarak ölçeklendirebilirsiniz.
Önkoşullar
Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:
RDS örneğiniz için veritabanı ara sunucusu özelliği etkinleştirilmiş olmalıdır. Bkz. Veritabanı ara sunucusu özelliğini etkinleştirme
RDS örneğinize en az bir salt okunur örnek bağlı olmalıdır; bu, okuma/yazma ayrımı için gereklidir. Bkz. Salt okunur bir ApsaraDB RDS for PostgreSQL örneği oluşturma
Okuma/yazma nitelikleri
Bir ara sunucu uç noktası iki moddan birinde çalışır:
| Nitelik | Tipik kullanım senaryosu | Trafik davranışı |
|---|---|---|
| Read/Write | Okuma/yazma ayrımı içeren genel uygulama trafiği | Tüm yazma istekleri birincil örneğe gider. Okuma istekleri, okuma ağırlığına göre salt okunur örnekler arasında dağıtılır. Uç noktanın birincil örneğe ve en az bir salt okunur örneğe bağlı olması gerekir. |
| Read-only | Raporlama, analitik ve diğer salt okunur iş yükleri | Birincil örnek, bu uç nokta üzerinden hiçbir trafik almaz. Yeni bağlantılar, bağlı salt okunur örnekler arasında round-robin sırasına göre dağıtılır. Her istemci bağlantısı bir salt okunur örnekte sonlanır. Toplam bağlantı kapasitesi, bağlı tüm salt okunur örneklerdeki kullanılabilir bağlantıların toplamına eşittir. |
Veritabanı ara sunucusunun IP adresi izin listesi, birincil örneğin IP adresi izin listesi ile otomatik olarak eşitlenir. Birincil örnek izin listesinde yapılan herhangi bir güncelleme hemen ara sunucuya uygulanır.
Nitelik ve ağırlığa göre davranış
Aşağıdaki tabloda, okuma/yazma niteliği ve ağırlık ayarlarının her birleşimi altında trafiğin nasıl işlendiği açıklanmaktadır.
| Nitelik | Ağırlık yöntemi | Birincil örnek ağırlığı | Normal çalışma | Son salt okunur örnek silindikten sonra | Tüm salt okunur örnekler arızalandıktan sonra |
|---|---|---|---|---|---|
| Salt okunur | Otomatik veya özel | Yapılandırılamaz | Birincil: trafik yok. Ara sunucu: yalnızca okuma istekleri. | Birincil: trafik yok. Ara sunucu: bağlantı hatası. | Birincil: trafik yok. Ara sunucu: bağlantı hatası. |
| Okuma/Yazma | Otomatik | 0 (bkz. Varsayılan okuma ağırlıkları) | Birincil: yalnızca yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. |
| Özel | Ağırlık > 0 | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | |
| Ağırlık = 0 | Birincil: yalnızca yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. | Birincil: okuma ve yazma istekleri. Ara sunucu: okuma ve yazma istekleri. |
Tablo terimleri hakkında notlar:
Birincile trafik yok: Birincil örnek, salt okunur istek iletme işleminden hariç tutulur.
Bağlantı hatası: Salt okunur bir ara sunucu uç noktasının istekleri işlemek için kullanılabilecek herhangi bir salt okunur örneği olmadığında oluşur.
Birincil ağırlığı = 0 olan Okuma/Yazma modu: Normal koşullar altında okuma istekleri birincil örneğe iletilmez. Tüm salt okunur örnekler arızalıysa, zorlayıcı bir ipucu belirtilmişse veya işlem bölünmesi etkinleştirilmişse, ara sunucu okuma isteklerini yedekleme amacıyla birincil örneğe iletir.
Okuma/yazma niteliklerini ve okuma ağırlığını yapılandırma
Instances sayfasına gidin. Üst gezinme çubuğunda, RDS örneğinizin bulunduğu bölgeyi seçin ve ardından örnek ID'sine tıklayın.
Sol gezinme bölmesinde, Database Proxy öğesine tıklayın.
Connection Information bölümünde, Proxy Endpoint (Terminal) ID sütununda değiştirmek istediğiniz uç noktayı bulun ve İşlemler sütunundaki Modify Configuration seçeneğine tıklayın.
-
Read/Write Attributes değerini aşağıdakilerden biri olarak ayarlayın:
Read/Write (Read/Write Splitting)
Read-only (Primary Instance Not Connected to Receive Write Requests)
-
Read Weight Allocation değerini Automatic veya Custom olarak belirleyin:
Automatic: Sistem, her örneğe teknik özelliklerine dayalı olarak bir okuma ağırlığı atar. Bir salt okunur örnek eklediğinizde, sistem bunu uygun bir ağırlıkla okuma/yazma ayrımına otomatik olarak dahil eder; manuel güncelleme gerekmez. Sistemin atadığı ağırlık değerleri için bkz. Varsayılan okuma ağırlıkları.
Custom: Her salt okunur örnek için bir okuma ağırlığı belirtin. Geçerli değerler: 0–10000. Yeni bir salt okunur örnek oluşturduğunuzda, başlangıç ağırlığı 0'dır; trafiğin dağıtımına dahil etmek için ağırlığı güncelleyin.
NotDaha yüksek bir ağırlık, örneğin orantılı olarak daha fazla okuma isteği aldığı anlamına gelir. Örneğin, üç salt okunur örneğin ağırlıkları 100, 200 ve 200 ise ve birincil örnek ağırlığı 0 ise, birincil örnek yalnızca yazmaları işler ve salt okunur örnekler trafiği
1:2:2
oranında alır.
Ağırlık değişiklikleri, bağlantı kesintisi olmadan anında etkili olur. Mevcut bağlantılar etkilenmez; yalnızca yeni bağlantılar güncellenen ağırlıkları kullanır.
Bir salt okunur örnek serbest bırakıldığında veya birincil örnek başarısız olduğunda ya da çoğaltma gecikme süresi eşiğini aştığında okuma ağırlıkları otomatik olarak geçersiz kılınır. Örnek kurtarıldığında ağırlıklar tekrar geçerli hale gelir.
SQL ipuçlarıyla istekleri yönlendirme
Belirli bir sorgu için ara sunucunun yönlendirme kararını geçersiz kılmak üzere SQL ifadesine bir yönlendirme ipucu ekleyin:
-
Sorguyu birincil örneğe zorlamak için:
/*FORCE_MASTER*/ SELECT * FROM table_name; -
Sorguyu bir salt okunur örneğe zorlamak için:
/*FORCE_SLAVE*/ SELECT * FROM table_name;
API referansı
| İşlem | Açıklama |
|---|---|
| DescribeDBProxy | Bir veritabanı ara sunucusunun ayrıntılarını sorgulayın |
| DescribeDBProxyEndpoint | Bir veritabanı ara sunucusu uç noktasının ayrıntılarını sorgulayın |
| ModifyDBProxyEndpoint | Bir veritabanı ara sunucusu uç noktasının okuma/yazma niteliğini ve okuma ağırlığını değiştirin |