本文以ECS執行個體通過內網串連RDS MySQL執行個體為例,介紹驗證RDS MySQL高可用系列執行個體的讀寫分離的方法。
前提條件
已建立RDS MySQL高可用系列主執行個體。
已為主執行個體建立唯讀執行個體,操作方法請參見建立MySQL唯讀執行個體。
已為執行個體建立至少1個資料庫(含至少1個表)和1個測試帳號(普通帳號或高許可權帳號均可),操作方法請參見建立資料庫和帳號。
說明如果您建立的測試帳號為普通帳號,還需要給該帳號賦予待操作資料庫的讀寫(DDL+DML)許可權。
在本例中建立的資料庫為testdb01,表為products,測試帳號為cxx1。
已為執行個體設定IP白名單。操作方法請參見設定IP白名單。
串連RDS MySQL執行個體的ECS執行個體與RDS MySQL執行個體在同一個VPC下,並且已經安裝了MySQL用戶端。
已開通資料庫代理服務。
已開通SQL洞察和審計功能。
背景資訊
資料庫代理的讀寫分離功能可使寫請求自動轉寄到主執行個體,讀請求自動轉寄到各個唯讀執行個體,實現讀寫請求的自動分流,減輕主執行個體的壓力。在您開通並配置了資料庫代理服務後,可通過本文介紹的方法驗證讀寫請求是否按照配置的比例進行分流,實現讀寫分離。
驗證流程
在本例中,以ECS執行個體通過內網串連RDS MySQL執行個體為例進行驗證。主要步驟如下:
在RDS控制台將唯讀執行個體的讀寫分離權重設定為100的整數倍,主執行個體的權重設定為0。只有主執行個體的權重設定為0,才能保證讀請求全部分配給唯讀執行個體處理。在本例中,唯讀執行個體與主執行個體的權重比例設定為10000:0。
通過ECS使用測試帳號串連資料庫Proxy 位址,執行讀操作,在RDS控制台的SQL洞察和審計功能中查看唯讀執行個體和主執行個體的SQL命令執行記錄。
通過ECS使用測試帳號串連資料庫Proxy 位址,執行寫操作,在RDS控制台的SQL洞察和審計功能中查看唯讀執行個體和主執行個體的SQL命令執行記錄。
根據唯讀執行個體和主執行個體的SQL命令執行記錄判斷讀請求和寫請求由哪個執行個體處理,是否實現了讀寫分離。
操作步驟
在RDS控制台設定讀寫分離權重。
訪問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;
在RDS控制台的SQL洞察和審計功能中,查看主執行個體和唯讀執行個體的SQL請求處理記錄,確認SELECT命令請求均由唯讀執行個體處理。
訪問RDS執行個體列表,在上方選擇地區,然後單擊主執行個體ID。
在主執行個體左側導覽列,選擇
,選擇時間範圍,單擊查詢,未查詢到SELECT命令執行記錄。在主執行個體左側導覽列,單擊基本資料,將滑鼠移至上方於唯讀執行個體的右側的數字處,在彈出的對話方塊中,單擊唯讀執行個體ID。
在唯讀執行個體詳情頁的左側導覽列,選擇
,選擇時間範圍,單擊查詢,可以看到6次SELECT命令的執行記錄,如下圖所示。
驗證寫請求的處理情況。
說明在上一步中已通過ECS伺服器串連RDS MySQL執行個體並進入資料庫testdb01(詳細步驟請參見步驟2)。
在資料庫testdb01中執行3次寫操作命令,例如執行如下命令:
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 );
在RDS控制台的SQL洞察和審計功能中,查看主執行個體和唯讀執行個體的SQL請求處理記錄(詳細步驟請參見步驟2),確認CREATE命令請求均由主執行個體處理,在唯讀執行個體中未查詢到CREATE命令請求記錄。主執行個體的SQL請求記錄如下圖所示。
驗證結論
由上述驗證步驟可以看到,在RDS MySQL唯讀執行個體與主執行個體的讀寫分離權重設定為10000:0的情況下,只有寫請求會由主執行個體處理,全部的讀請求均由唯讀執行個體處理,實現了讀寫分離。