如果您的業務是少寫多讀情境,隨著業務的不斷髮展,主執行個體會面臨越來越大的讀請求壓力,進而影響到主執行個體的整體效能。為瞭解決這個問題,您可以建立唯讀執行個體,通過資料庫代理實現讀寫請求自動分發,將讀請求分流到唯讀執行個體上,降低主執行個體負載。
費用說明
建立RDS主執行個體與唯讀執行個體會產生執行個體規格費用和儲存費用,詳情請參見RDS MySQL計費項目。
建立ECS執行個體會產生執行個體規格費用與Block Storage費用,詳情請參見ECS計費概述。
為RDS主執行個體和唯讀執行個體開通SQL洞察和審計功能會產生日誌流量與日誌索引費用,詳情請參見DAS產品計費。
準備工作
本教程需要預先建立並配置一台ECS執行個體與一台RDS執行個體,用於類比業務中讀寫請求的發送和處理,詳細建立與配置步驟如下:
建立與配置RDS執行個體
訪問RDS管理主控台,單擊建立實例進入RDS執行個體售賣頁。
購買執行個體:本教程以MySQL 8.0、高可用系列、標準版、ESSD雲端硬碟 PL1或高性能云盘,20 GB儲存空間為例,其它選項可以按照最低配置選擇以降低成本。
建立資料庫:資料庫名稱為
dbtest,支援字元集為utf8。建立高許可權帳號:帳號名稱為
dbuser,帳號類型為高許可權帳號,密碼由使用者自訂。
建立與配置ECS執行個體
本教程中建立的ECS執行個體主要用於類比服務端向資料庫發送讀寫請求,您需要建立一個ECS執行個體並在執行個體中安裝MySQL資料庫,ECS執行個體相關操作請參見ECS執行個體新手指引。
購買ECS執行個體:進入ECS執行個體售賣頁,選擇隨用隨付,華東 1 (杭州)地區,Alibaba Cloud Linux 3.2104 LTS 64位鏡像,設定登入名稱為
root,並設定自訂密碼,其餘選項可以按照最低配置購買以降低體驗成本。重要ECS執行個體需要與RDS執行個體在同一地區且同一Virtual Private Cloud下,以實現內網互連,否則後續使用ECS串連資料庫會失敗。
登入ECS執行個體:在ECS管理主控台找到對應執行個體ID,單擊远程连接,使用
root帳號登入ECS執行個體。安裝與啟用MySQL資料庫服務:在執行個體命令列介面輸入以下命令安裝並啟用MySQL服務。
yum install -y mysql-server systemctl start mysqld systemctl enable mysqld待安裝完成後輸入
mysql命令,如果可以看到如下介面,說明MySQL服務安裝與啟用成功,後續您可以輸入exit命令退出MySQL命令列。
1. 配置主執行個體與唯讀執行個體
RDS高可用系列執行個體的備節點是不可訪問的,所以您需要建立一個唯讀執行個體,通過資料庫代理將讀請求分發至建立的唯讀執行個體中進行處理,以實現資料庫的讀寫分離。唯讀執行個體詳情請參見MySQL唯讀執行個體簡介。
1.1 配置主執行個體
登入RDS控制台,單擊準備工作中建立的高可用執行個體ID。
為主執行個體開通資料庫代理:
說明本教程開通的通用型資料庫代理是免費的,主要用於分發讀寫請求至主執行個體和唯讀執行個體,更多資料庫代理功能請參見什麼是資料庫代理。
單擊左側導覽列中資料庫代理,選擇通用型資料庫代理服務,單擊立即开通。
在彈出的對話方塊中單擊確定,等待1-2分鐘完成通用型資料庫代理的開通。
1.2 配置唯讀執行個體
在執行個體列表中單擊主執行個體ID,進入執行個體基本資料頁。
在
購買唯讀執行個體:選擇按量付费,高可用系列,2017 標準版,儲存空間需要大於等於主執行個體的儲存空間(本教程中可以選擇20 GB),其餘選項可以按照最低配置選擇以降低成本。
單擊下一步:執行個體配置、確認,選擇購買1個唯讀執行個體並支付。
唯讀執行個體建立成功後,主執行個體的資料庫代理會自動連接唯讀執行個體並分配讀寫權重(預設主執行個體只處理寫請求,唯讀執行個體只處理讀請求),您可以在主執行個體或唯讀執行個體的資料庫代理頁面中查看執行個體的串連拓撲圖。

讀寫請求的分發由資料庫代理功能實現與保障,如您希望驗證讀寫分離的效果,需要您在下一步讀寫請求發送前為主執行個體與唯讀執行個體均開通SQL洞察與審計功能,詳情請參見SQL洞察和審計。
SQL洞察和審計功能會收取日誌流量與日誌索引費用,本教程中該功能主要用於驗證主節點和唯讀節點的請求分發情況(如您體驗完本教程後希望保留RDS執行個體且無需使用該功能,建議您將其關閉,以免持續計費,詳情請參見關閉SQL洞察和審計功能)。
2. 類比業務讀寫請求
2.1 串連資料庫
登入ECS執行個體,在命令列介面輸入以下命令串連資料庫。
# mysql串連命令模版
mysql -h資料庫代理的內網串連地址 -P連接埠號碼 -u使用者名稱 -p
# mysql串連命令樣本
mysql -hmr-bm**************.rwlb.rds.aliyuncs.com -P3306 -udbuser -p連接埠號碼預設為
3306。使用者名稱以準備工作中建立的
dbuser高許可權帳號為例,密碼為使用者自訂。串連地址請使用資料庫代理的內網串連地址,若直接使用主執行個體地址將無法實現讀寫分離。資料庫代理的內網串連地址可以在資料庫代理頁面的串連拓撲圖中複製。

2.2 寫請求類比
串連資料庫成功後,您可以使用以下命令將資料庫切換為在準備工作中建立的
dbtest資料庫。-- 使用dbtest資料庫 USE dbtest;使用以下建表命令在
dbtest資料庫中建立table_test表,並向表中插入4條資料。-- 建立table_test表 CREATE TABLE table_test ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); -- 向其中插入4條資料 INSERT INTO table_test (id, name, age) VALUES (1, 'user1', 25); INSERT INTO table_test (id, name, age) VALUES (2, 'user2', 30); INSERT INTO table_test (id, name, age) VALUES (3, 'user3', 28); INSERT INTO table_test (id, name, age) VALUES (4, 'user4', 18);
2.3 讀請求類比
您可以使用以下5條SELECT命令查詢資料庫,類比業務中的讀請求發送。
SELECT * FROM table_test;
SELECT * FROM table_test WHERE id = 1;
SELECT * FROM table_test WHERE id = 2;
SELECT * FROM table_test WHERE id = 3;
SELECT * FROM table_test WHERE id = 4;(可選)3. 驗證讀寫分離
如您希望驗證讀寫分離的效果,需要在第二步讀寫請求發送前為主執行個體與唯讀執行個體開通SQL洞察和審計功能。
在ECS執行個體發送讀寫請求後,您可以通過SQL洞察和審計功能,在主執行個體和唯讀執行個體中查看讀寫請求的分發和處理情況。根據資料庫代理預設的讀寫分離權重,高可用系列主執行個體只會接收寫請求(CREATE TABLE建表命令與INSERT插入命令),唯讀執行個體只會接收讀請求(SELECT查詢命令)。
主執行個體驗證
在執行個體列表頁單擊主執行個體ID,然後在左側導覽列單擊SQL洞察和审计,選擇審計頁簽。

設定查詢條件:選擇合適的時間範圍,使用者填入
dbuser,資料庫填入dbtest,單擊查詢。您可以在下方的日誌列表中查看主執行個體的SQL命令執行情況。
從表中可以看出,分發至主執行個體的SQL語句只有一條CREATE TABLE建表命令與4條INSERT插入命令,沒有出現SELECT命令,說明只有寫請求發送至主執行個體,讀請求未發送至主執行個體。
唯讀執行個體驗證
在執行個體列表頁單擊唯讀執行個體ID,然後在左側導覽列單擊SQL洞察和审计,選擇審計頁簽。
設定查詢條件:選擇合適的時間範圍,使用者填入
dbuser,資料庫填入dbtest,單擊查詢。您可以在下方的日誌列表中查看唯讀執行個體的SQL命令執行情況。
從表中可以看出,分發至唯讀執行個體的SQL語句只有5條SELECT命令,說明只有讀請求發送至唯讀執行個體,寫請求未發送至該執行個體。
4. 多隻讀執行個體權重配置
單一的唯讀執行個體會有一定的效能瓶頸,隨著讀請求數量的不斷增加,執行個體的處理能力也會達到飽和。同時,單一隻讀執行個體故障也會較大影響業務的穩定性。您可以為主執行個體配置多個唯讀執行個體,調整不同執行個體間的讀權重,構建更高效能、更穩定的讀寫分離結構。
4.1 設定不同唯讀執行個體的讀權重
為主執行個體再購買與配置一個唯讀執行個體,並為唯讀執行個體開通SQL洞察和审计功能,詳細步驟請參考開通SQL洞察和審計。
在執行個體列表頁單擊主執行個體ID,然後在資料庫代理頁面中找到執行個體的串連拓撲圖,單擊修改配置。

在彈窗中找到讀權重分配,選擇自訂,在權重分配表中將一個唯讀執行個體的權重修改為300,另一個唯讀執行個體權重保持100不變,單擊確定。
說明執行個體讀權重取值範圍為1-10000,讀權重越高,處理的讀請求越多。
不同唯讀執行個體間按照權重比例分配讀請求,本教程中唯讀執行個體的讀請求分配比例為1:3。讀權重配置詳見設定讀寫屬性和讀權重。

(可選)4.2 驗證讀權重分配
在ECS執行個體的SQL命令列介面重複輸入並執行以下SELECT命令8次。根據設定的讀權重,兩個唯讀執行個體即將處理的讀請求數量分別為2(讀權重100的執行個體)和6(讀權重300的執行個體)
SELECT * FROM table_test;在執行個體列表單擊讀權重為100的唯讀執行個體ID,然後在SQL洞察和审计功能中查看SQL命令執行情況,詳細步驟可以參考(可選)3. 驗證讀寫分離。從下表中可以看到,分發至該執行個體的讀請求數量只有兩個,符合權重比例。

在執行個體列表單擊讀權重為300的唯讀執行個體ID,在SQL洞察和审计中查看SQL命令接收情況。從下表中可以看出,分發至該執行個體的讀請求為6個,兩個唯讀執行個體處理的讀請求符合1:3的權重比例。

5. 釋放資源
釋放ECS執行個體:訪問ECS管理主控台,找到本教程中建立的ECS執行個體,在操作列更多選項中單擊釋放執行個體。
釋放RDS執行個體:訪問RDS控制台,找到本教程中建立的主執行個體,在更多選項中單擊释放实例。唯讀執行個體會隨主執行個體一起釋放,無需逐個釋放唯讀執行個體,各執行個體開通的服務也會隨主執行個體釋放而登出。
重要如您體驗完本教程後希望繼續使用該RDS執行個體且無需使用SQL洞察和審計功能,建議您將其關閉,以免該功能持續計費,詳情請參見關閉SQL洞察和審計功能。