設(shè)置讀寫屬性和讀權(quán)重
如果您需要修改數(shù)據(jù)庫代理連接地址的讀寫屬性,或者不希望使用系統(tǒng)默認(rèn)的讀權(quán)重策略,可以參考本文,RDS PostgreSQL支持調(diào)整數(shù)據(jù)庫代理連接地址的讀寫屬性,并且支持自定義各只讀實(shí)例的讀權(quán)重比例。
前提條件
已開通數(shù)據(jù)庫代理服務(wù),具體請參見開通數(shù)據(jù)庫代理。
您需要已經(jīng)創(chuàng)建只讀實(shí)例 ,才可以設(shè)置讀寫屬性,使用讀寫分離功能。創(chuàng)建方法,請參見創(chuàng)建PostgreSQL只讀實(shí)例。
讀寫屬性說明
數(shù)據(jù)庫代理的IP白名單和RDS主實(shí)例的IP白名單是保持一致的。RDS主實(shí)例的IP白名單更新,數(shù)據(jù)庫代理的IP白名單也會(huì)同步更新。
讀寫屬性支持設(shè)置為讀寫或只讀。
讀寫:用來支持讀寫分離功能實(shí)現(xiàn)業(yè)務(wù)線性擴(kuò)展。
該模式下代理連接地址(原代理終端)訪問策略中需要至少包含一個(gè)主實(shí)例和一個(gè)只讀實(shí)例,寫請求都只會(huì)發(fā)往主實(shí)例。
只讀:用來支持只讀的業(yè)務(wù),比如報(bào)表查詢。
該模式下代理連接地址訪問策略中需要至少配置一個(gè)只讀實(shí)例,主實(shí)例不會(huì)參與路由。
當(dāng)代理連接地址訪問策略的讀寫屬性設(shè)置為只讀時(shí),RDS會(huì)根據(jù)代理連接地址訪問策略中配置的只讀實(shí)例輪循分配連接,即一個(gè)客戶端連接僅對應(yīng)到一個(gè)只讀實(shí)例的一個(gè)連接,而主實(shí)例不會(huì)參與到該分配,可用的業(yè)務(wù)連接總數(shù)是所有只讀實(shí)例上的連接數(shù)之和。
讀寫屬性處理邏輯
讀寫屬性 | 權(quán)限分配方式 | 主實(shí)例權(quán)重 | 正常情況 | 刪除最后一個(gè)只讀實(shí)例 | 只讀實(shí)例全部故障 |
只讀 | 系統(tǒng)分配或自定義 | 主實(shí)例權(quán)重不可設(shè)置 |
|
|
|
讀寫 | 系統(tǒng)分配 | 等于0 |
|
|
|
自定義 | 大于0 |
|
|
| |
等于0 |
|
|
|
不轉(zhuǎn)發(fā):表示在只讀屬性中,主實(shí)例不參與只讀請求的轉(zhuǎn)發(fā)。
連接報(bào)錯(cuò):表示在只讀屬性中,代理終端不可讀不可寫時(shí)連接會(huì)報(bào)錯(cuò)。
在讀寫模式下,當(dāng)主實(shí)例權(quán)重配置為0時(shí),默認(rèn)不將讀請求轉(zhuǎn)發(fā)到主實(shí)例,但是當(dāng)只讀節(jié)點(diǎn)異常,強(qiáng)制Hint指定,或者開啟了事務(wù)拆分的情況下,讀請求會(huì)被轉(zhuǎn)發(fā)到主實(shí)例。
操作步驟
- 訪問RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在左側(cè)導(dǎo)航欄單擊數(shù)據(jù)庫代理。
在連接信息區(qū)域,找到目標(biāo)代理連接地址(終端)ID,單擊目標(biāo)代理連接地址右側(cè)的修改配置。
在彈出的對話框中,勾選讀寫屬性右側(cè)的讀寫(讀寫分離)或只讀(不連接主實(shí)例,無法接受寫請求)。
在讀權(quán)重分配區(qū)域,選擇系統(tǒng)分配或自定義。
系統(tǒng)分配:系統(tǒng)根據(jù)實(shí)例規(guī)格自動(dòng)分配各個(gè)實(shí)例的讀權(quán)重。后續(xù)該主實(shí)例下新增的只讀實(shí)例也會(huì)自動(dòng)按照系統(tǒng)分配的權(quán)重加入到讀寫分離鏈路中,無需手動(dòng)設(shè)置。更多信息,請參見系統(tǒng)默認(rèn)讀權(quán)重分配規(guī)則。
自定義:手動(dòng)設(shè)置各個(gè)實(shí)例的讀權(quán)重,范圍為0~10000。后續(xù)該主實(shí)例下新增只讀實(shí)例的讀權(quán)重默認(rèn)為0,需要您手動(dòng)修改。
說明實(shí)例的讀權(quán)重越高,處理的讀請求越多。例如,假設(shè)主實(shí)例有3個(gè)只讀實(shí)例,主實(shí)例讀權(quán)重為0,只讀實(shí)例讀權(quán)重分別為100、200和200,則表示主實(shí)例不處理讀請求(寫請求仍然自動(dòng)發(fā)往主實(shí)例),3個(gè)只讀實(shí)例按照
1:2:2
的比例處理讀請求。修改本參數(shù)實(shí)時(shí)生效,不會(huì)造成業(yè)務(wù)閃斷。修改完成后,已存在的連接不會(huì)斷開重連且讀權(quán)重不變,只有新連接才會(huì)根據(jù)新權(quán)重進(jìn)行分配。
只讀實(shí)例釋放后將自動(dòng)移除權(quán)重。
實(shí)例宕機(jī)或者延遲超時(shí)將自動(dòng)移除權(quán)重,實(shí)例恢復(fù)后權(quán)重也將自動(dòng)恢復(fù)。
您可以在讀請求的SQL中加入
/*FORCE_MASTER*/
,指定該請求被轉(zhuǎn)發(fā)到主實(shí)例。如果需要轉(zhuǎn)發(fā)到只讀實(shí)例,則使用/*FORCE_SLAVE*/
。示例:
/*FORCE_MASTER*/ SELECT * FROM table_name;
相關(guān)API
API | 描述 |
查詢數(shù)據(jù)庫代理詳情。 | |
查詢數(shù)據(jù)庫代理的代理連接地址信息。 | |
修改數(shù)據(jù)庫代理的代理連接地址讀寫屬性和讀權(quán)重。 |