全部產品
Search
文件中心

ApsaraDB RDS:驗證讀寫分離

更新時間:Jun 19, 2024

本文以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洞察和審計功能。

    說明

    開通資料庫代理服務、SQL洞察和審計功能需要付費,操作方法和計費詳情,請參見開通資料庫代理SQL洞察和審計

背景資訊

資料庫代理的讀寫分離功能可使寫請求自動轉寄到主執行個體,讀請求自動轉寄到各個唯讀執行個體,實現讀寫請求的自動分流,減輕主執行個體的壓力。在您開通並配置了資料庫代理服務後,可通過本文介紹的方法驗證讀寫請求是否按照配置的比例進行分流,實現讀寫分離。

驗證流程

在本例中,以ECS執行個體通過內網串連RDS MySQL執行個體為例進行驗證。主要步驟如下:

  1. 在RDS控制台將唯讀執行個體的讀寫分離權重設定為100的整數倍,主執行個體的權重設定為0。只有主執行個體的權重設定為0,才能保證讀請求全部分配給唯讀執行個體處理。在本例中,唯讀執行個體與主執行個體的權重比例設定為10000:0。

  2. 通過ECS使用測試帳號串連資料庫Proxy 位址,執行讀操作,在RDS控制台的SQL洞察和審計功能中查看唯讀執行個體和主執行個體的SQL命令執行記錄。

  3. 通過ECS使用測試帳號串連資料庫Proxy 位址,執行寫操作,在RDS控制台的SQL洞察和審計功能中查看唯讀執行個體和主執行個體的SQL命令執行記錄。

  4. 根據唯讀執行個體和主執行個體的SQL命令執行記錄判斷讀請求和寫請求由哪個執行個體處理,是否實現了讀寫分離。

操作步驟

  1. 在RDS控制台設定讀寫分離權重。

    1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊主執行個體ID。

    2. 在左側導覽列,單擊資料庫代理,然後在串連資訊地區,找到目標代理串連地址ID(原代理終端ID)。

    3. 單擊目標代理串連地址操作列的修改配置

    4. 在彈出的對話方塊中,完成以下配置:

      • 讀寫屬性設定為讀寫(讀寫分離)

      • 讀權重分配選擇自訂,將唯讀執行個體的權重設為10000,主執行個體的權重設為0,完成後單擊確定

    5. 串連資訊地區,擷取目標代理串連地址ID關聯的內網(專用網路)的代理串連地址。

  2. 驗證讀請求的處理情況。

    1. 通過ECS伺服器使用帳號cxx1串連資料庫並執行讀操作。

      1. 登入到待串連RDS MySQL執行個體的ECS伺服器。

        說明

        登入ECS的操作,請參見串連ECS執行個體

      2. 執行如下命令,串連RDS MySQL執行個體。

        mysql -h代理串連地址 -P連接埠 -u使用者名稱 -p密碼

        命令中的參數說明如下表所示。

        名稱

        含義

        說明

        代理串連地址

        步驟1中擷取的執行個體的類型為內網(專用網路)的代理串連地址。

        如果使用本地用戶端串連RDS MySQL執行個體,則需要使用類型為外網的代理串連地址。

        大寫字母P

        之後填寫連接埠

        不涉及。

        -u

        之後填寫使用者名稱

        不涉及。

        小寫字母p

        之後填寫密碼

        輸入密碼時,需要在-p後面直接輸入,不允許有空格。

        您也可以不在-p後輸入密碼,在執行命令後再輸入,以防止密碼明文顯示。

      3. 執行如下命令,進入資料庫testdb01。

        USE testdb01;
      4. 執行6次讀操作命令,例如執行如下命令:

        SELECT * FROM products LIMIT 20;
    2. 在RDS控制台的SQL洞察和審計功能中,查看主執行個體和唯讀執行個體的SQL請求處理記錄,確認SELECT命令請求均由唯讀執行個體處理。

      1. 訪問RDS執行個體列表,在上方選擇地區,然後單擊主執行個體ID。

      2. 在主執行個體左側導覽列,選擇自治服務 > SQL洞察和審計,選擇時間範圍,單擊查詢,未查詢到SELECT命令執行記錄。

      3. 在主執行個體左側導覽列,單擊基本資料,將滑鼠移至上方於唯讀執行個體的右側的數字處,在彈出的對話方塊中,單擊唯讀執行個體ID。

      4. 在唯讀執行個體詳情頁的左側導覽列,選擇自治服務 > SQL洞察和審計,選擇時間範圍,單擊查詢,可以看到6次SELECT命令的執行記錄,如下圖所示。執行記錄

  3. 驗證寫請求的處理情況。

    說明

    在上一步中已通過ECS伺服器串連RDS MySQL執行個體並進入資料庫testdb01(詳細步驟請參見步驟2)。

    1. 在資料庫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
      );                               
    2. 在RDS控制台的SQL洞察和審計功能中,查看主執行個體和唯讀執行個體的SQL請求處理記錄(詳細步驟請參見步驟2),確認CREATE命令請求均由主執行個體處理,在唯讀執行個體中未查詢到CREATE命令請求記錄。主執行個體的SQL請求記錄如下圖所示。執行記錄

驗證結論

由上述驗證步驟可以看到,在RDS MySQL唯讀執行個體與主執行個體的讀寫分離權重設定為10000:0的情況下,只有寫請求會由主執行個體處理,全部的讀請求均由唯讀執行個體處理,實現了讀寫分離。