如果您的業務是少寫多讀場景,隨著業務的不斷發展,主實例會面臨越來越大的讀請求壓力,進而影響到主實例的整體性能。為了解決這個問題,您可以創建只讀實例,通過數據庫代理實現讀寫請求自動分發,將讀請求分流到只讀實例上,降低主實例負載。
費用說明
創建RDS主實例與只讀實例會產生實例規格費用和存儲費用,詳情請參見RDS MySQL計費項。
創建ECS實例會產生實例規格費用與塊存儲費用,詳情請參見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實例在同一地域且同一專有網絡(VPC)下,以實現內網互通,否則后續使用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,進入實例基本信息頁。
在
右側,單擊添加,進入只讀實例購買頁。購買只讀實例:選擇按量付費,高可用系列,標準版,存儲空間需要大于等于主實例的存儲空間(本教程中可以選擇20 GB),其余選項可以按照最低配置選擇以降低成本。
單擊下一步:實例配置、確認訂單,選擇購買1個只讀實例并支付。
只讀實例創建成功后,主實例的數據庫代理會自動連接只讀實例并分配讀寫權重(默認主實例只處理寫請求,只讀實例只處理讀請求),您可以在主實例或只讀實例的數據庫代理頁面中查看實例的連接拓撲圖。
讀寫請求的分發由數據庫代理功能實現與保障,如您希望驗證讀寫分離的效果,需要您在下一步讀寫請求發送前為主實例與只讀實例均開通SQL洞察與審計功能,詳情請參見SQL洞察和審計。
SQL洞察和審計功能會收取日志流量與日志索引費用,本教程中該功能主要用于驗證主節點和只讀節點的請求分發情況,預計費用不超過1元(如您體驗完本教程后希望保留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洞察和審計功能。