本文介紹如何通過ECS執行個體內網串連驗證RDS MySQL高可用執行個體的讀寫分離。
前提條件
已建立RDS MySQL高可用系列主執行個體。
已為主執行個體建立MySQL唯讀執行個體。
已為執行個體建立至少1個資料庫(含至少1個表)和1個測試帳號(普通帳號或高許可權帳號均可),操作方法請參見(廢棄,重新導向至“第一步”)建立資料庫和帳號。
說明如果您建立的測試帳號為普通帳號,還需賦予其待操作資料庫的讀寫(DDL+DML)許可權。
在本例中建立的資料庫為testdb01,表為products,測試帳號為cxx1。
已為執行個體設定IP白名單。
串連RDS MySQL執行個體的ECS執行個體與RDS MySQL執行個體在同一個VPC下,並且已經安裝了MySQL用戶端。
已開通資料庫代理。
已開通SQL洞察和審計。
背景資訊
資料庫代理的讀寫分離功能將寫請求轉寄到主執行個體,讀請求轉寄到唯讀執行個體,實現讀寫請求的自動分流,減輕主執行個體的壓力。開通並配置了資料庫代理服務後,可通過本文操作驗證讀寫請求是否按照配置的比例進行分流,實現讀寫分離。
驗證流程
本例以ECS執行個體通過內網串連RDS MySQL執行個體為例,驗證讀寫分離功能。主要步驟如下:
在RDS控制台設定唯讀執行個體權重為100的整數倍,主執行個體權重為0(例如10000:0),確保所有讀請求均分配至唯讀執行個體。
通過ECS使用測試帳號串連資料庫Proxy 位址,分別執行讀操作和寫操作。
在RDS控制台的SQL洞察和審計功能中,查看唯讀執行個體和主執行個體的SQL命令執行記錄。
根據SQL執行記錄,判斷讀請求是否由唯讀執行個體處理、寫請求是否由主執行個體處理,從而驗證讀寫分離是否生效。
操作步驟
設定讀寫分離權重。
訪問RDS執行個體列表,在上方選擇地區,然後單擊主執行個體ID。
在左側導覽列,單擊資料庫代理,然後在串連資訊地區,找到目標代理串連地址ID(原代理終端ID)。
單擊目標代理串連地址操作列的修改配置。
在彈出的對話方塊中,完成以下配置:
將讀寫屬性設定為讀寫(讀寫分離)。
讀權重分配選擇自訂,將唯讀執行個體的權重設為10000,主執行個體的權重設為0,完成後單擊確定。
在串連資訊地區,擷取目標代理串連地址ID關聯的內網(專用網路)的代理串連地址。
通過ECS伺服器使用帳號cxx1串連資料庫並執行讀操作。
登入到待串連RDS MySQL執行個體的ECS伺服器。
說明登入ECS的操作,請參見串連ECS執行個體。
執行如下命令,串連RDS MySQL執行個體。
mysql -h代理串連地址 -P連接埠 -u使用者名稱 -p密碼命令中的參數說明如下表所示。
名稱
含義
說明
代理串連地址
步驟1中擷取的執行個體的類型為內網(專用網路)的代理串連地址。
如果使用本地用戶端串連RDS MySQL執行個體,則需要使用類型為外網的代理串連地址。
大寫字母P
之後填寫連接埠
不涉及。
-u
之後填寫使用者名稱
不涉及。
小寫字母p
之後填寫密碼
輸入密碼時,需要在
-p後面直接輸入,不允許有空格。您也可以不在
-p後輸入密碼,在執行命令後再輸入,以防止密碼明文顯示。執行如下命令,進入資料庫testdb01。
USE testdb01;執行6次讀操作命令,例如執行如下命令:
SELECT * FROM products LIMIT 20;
執行寫操作。在資料庫testdb01中執行3次寫操作命令,例如執行如下命令:
說明在上一步中已通過ECS伺服器串連RDS MySQL執行個體並進入資料庫testdb01(詳細步驟請參見步驟2)。
CREATE TABLE Products11 ( prod_id CHAR(10) NOT NULL, vend_id CHAR(10) NOT NULL, prod_name CHAR(254) NOT NULL, prod_price DECIMAL(8,2) NOT NULL, prod_desc VARCHAR(1000) NULL );查看主執行個體和唯讀執行個體的SQL請求處理記錄。
確認SELECT命令請求均由唯讀執行個體處理。確認CREATE命令請求均由主執行個體處理,在唯讀執行個體中未查詢到CREATE命令請求記錄。
訪問RDS執行個體列表,在上方選擇地區,然後單擊主執行個體ID。
在主執行個體左側導覽列,選擇,選擇時間範圍,單擊查詢,未查詢到SELECT命令執行記錄。
在主執行個體左側導覽列,單擊基本資料,將滑鼠移至上方於唯讀執行個體的右側的數字處,在彈出的對話方塊中,單擊唯讀執行個體ID。
在唯讀執行個體左側導覽列,選擇,選擇時間範圍,單擊查詢,可以看到6次SELECT命令的執行記錄,如下圖所示。

在主執行個體左側導覽列,選擇,選擇時間範圍,單擊查詢,可以看到3次CREATE命令的執行記錄,如下圖所示。

驗證結論
在權重設定為10000:0時,只有寫請求由主執行個體處理,所有讀請求均由唯讀執行個體處理,實現了讀寫分離。