日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

在RDS MySQL實例進行切換類的運維操作時,應(yīng)用程序與代理的連接會有短暫的斷開,會對業(yè)務(wù)造成一定影響,您可以參考本文使用連接保持功能,保證連接不斷開,提升產(chǎn)品可用性,降低運維成本。

功能簡介

RDS MySQL代理的連接保持功能,即在發(fā)生實例切換類的操作時,能保持應(yīng)用程序與代理的連接不斷開,用戶通過代理地址訪問數(shù)據(jù)庫的應(yīng)用程序不會收到連接斷開的報錯,如下圖所示。

image.png

image.png

實現(xiàn)原理

數(shù)據(jù)庫代理連接分為前端連接(代理與客戶端的連接)和后端連接(代理與數(shù)據(jù)庫的連接),在執(zhí)行實例切換類操作時,能夠在后端連接斷開的情況下,保留前端連接,代理在此基礎(chǔ)上實現(xiàn)了連接保持能力。

對于后端數(shù)據(jù)庫是RDS MySQL的連接,連接保持的關(guān)鍵在于后端連接(代理與后端RDS MySQL連接)的連接狀態(tài)恢復(fù)。

RDS MySQL的連接狀態(tài)通常包括系統(tǒng)變量、用戶變量、臨時表、字符集編碼、事務(wù)狀態(tài)和Prepare語句狀態(tài)信息等。本文將以set names utf8mb4作為連接狀態(tài)為例介紹RDS MySQL連接保持的實現(xiàn)原理。

主動切換:

主動切換場景下,RDS MySQL數(shù)據(jù)庫代理實現(xiàn)連接保持分為三個步驟:

說明

包含主動切換的運維操作:

  • 主動主備切換

  • 升級小版本

  • 修改重啟類參數(shù)(修改參數(shù)時需重啟實例)

  • 變更主實例配置

  1. 開始切換:阻塞新的連接和新的請求

    由于代理不具備事務(wù)保持能力,因此,對于不同狀態(tài)的會話,采取不同的處理方式:

    • 阻塞期間事務(wù)活躍的會話:代理將放行請求到后端數(shù)據(jù)庫主節(jié)點執(zhí)行。

    • 阻塞期間新開啟的事務(wù)的會話:代理將阻塞請求,客戶端的現(xiàn)象是阻塞等待服務(wù)端回包。

    • 阻塞結(jié)束事務(wù)仍活躍的會話:客戶端與代理的連接將會斷開,后端數(shù)據(jù)庫會對未提交的事務(wù)進行回滾。

    image.png

  2. 切換中:切換存量連接

    切換過程中會修改存量連接的切換狀態(tài):

    • 無法保持的連接:代理會將整個連接斷開。

    • 能夠保持的連接:連接將會切換至新的數(shù)據(jù)庫節(jié)點。

    • 連接池中原數(shù)據(jù)庫主節(jié)點的連接:會被清理。

    image.png

  3. 切換完成:恢復(fù)連接

    對于能成功保留的連接,代理與后端新的數(shù)據(jù)庫主節(jié)點建立連接,并且恢復(fù)連接狀態(tài)。

    image.png

故障切換:

當系統(tǒng)出現(xiàn)故障時,RDS實例會自動進行主備切換,提升一個備節(jié)點為主節(jié)點,這種切換是非預(yù)期的,稱為故障切換(Failover)。

代理會緩存當前正在數(shù)據(jù)庫上執(zhí)行或?qū)⒁D(zhuǎn)發(fā)的SQL語句。當數(shù)據(jù)庫發(fā)生故障時,代理與后端數(shù)據(jù)庫的連接將會斷開。代理感知到數(shù)據(jù)庫Failover后,不會立刻斷開與客戶端的連接,代理會將失敗的讀請求重新轉(zhuǎn)發(fā)到可用的數(shù)據(jù)庫節(jié)點,并且恢復(fù)連接狀態(tài)。

重要

對于失敗的寫請求,代理不能確定數(shù)據(jù)庫是否寫成功,因此故障切換時的會話保持不支持寫請求。

開啟連接保持

說明

2024年01月09日起,符合開啟連接保持功能條件的RDS MySQL實例在開通數(shù)據(jù)庫代理時,會默認開啟連接保持功能。開啟連接保持功能后,您可以隨時關(guān)閉該功能。

前提條件

主動切換的連接保持

RDS實例滿足以下條件:

  • 版本:MySQL 5.6或5.7或8.0

  • 系列:高可用系列、集群系列

  • 存儲類型:云盤、本地盤

  • 代理類型:通用型、獨享型

  • 已開通數(shù)據(jù)庫代理,且代理的內(nèi)核版本不低于1.14.5_20231207。

故障切換的連接保持

RDS實例滿足以下條件:

  • 版本:MySQL 5.6或5.7或8.0

  • 系列:高可用系列、集群系列

  • 存儲類型:云盤、本地盤

  • 代理類型:獨享型

    說明

    通用型數(shù)據(jù)庫代理僅支持主動切換場景下的連接保持,獨享型數(shù)據(jù)庫代理支持主動切換和故障切換場景下的連接保持。

  • 已開通數(shù)據(jù)庫代理,且代理的內(nèi)核版本不低于2.9.1。

開啟步驟

  1. 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。

  2. 在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)庫代理

  3. 基本信息區(qū)域,單擊連接保持右側(cè)的開啟

    說明

    若無連接保持字樣,說明您的實例不符合連接保持的開通條件。

使用連接保持

前提條件

  • 已開通數(shù)據(jù)庫代理。

  • 數(shù)據(jù)庫代理已開啟連接保持。

操作步驟

  1. 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。

  2. 在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)庫代理

  3. 根據(jù)業(yè)務(wù)需要配置目標代理連接地址的訪問策略,詳情請參見配置數(shù)據(jù)庫代理連接地址訪問策略。其中讀寫類型設(shè)置為讀寫(讀寫分離)

  4. 根據(jù)業(yè)務(wù)需要申請目標代理連接地址的內(nèi)網(wǎng)/外網(wǎng)地址,詳情請參見設(shè)置數(shù)據(jù)庫代理連接地址

  5. 在應(yīng)用程序中,使用目標代理連接地址的內(nèi)網(wǎng)/外網(wǎng)地址與端口號進行數(shù)據(jù)庫的連接。

  6. 數(shù)據(jù)庫實例進行切換的運維類操作時,數(shù)據(jù)庫代理會自動實現(xiàn)連接保持功能,使用代理連接地址的應(yīng)用程序與代理的連接不會斷開。

使用限制

在切換過程中,連接保持功能無法保持如下場景中的連接:

  • MySQL服務(wù)端還沒有完全返回包的連接。例如,100 MB的結(jié)果集,只返回了50 MB的結(jié)果集,剩余的結(jié)果集還在返回中。

  • 存在未提交的事務(wù)。

  • 連接上使用過change user語句。

  • 連接上使用過LOAD DATA語句。

  • 存在臨時表。

  • 通過代理地址進行Binlog訂閱的連接。

  • 不支持FOUND_ROWS、ROW_COUNT和LAST_INSERT_ID函數(shù)的調(diào)用,這些函數(shù)可以調(diào)用成功,但是無法保證調(diào)用結(jié)果的正確性。其中SELECT FOUND_ROWS()的用法MySQL官方已不推薦,建議您將SELECT FOUND_ROWS()替換為SELECT COUNT(*) FROM tb1進行查詢,詳情請參見FOUND_ROWS()

注意事項

  • 由于連接會重連,所以使用select connection_id()查詢當前連接的thread id可能會變化。

  • 由于連接會重連,所以show processlist或者SQL洞察中顯示的IP地址和端口,可能會與客戶端實際的IP地址和端口不一致。

  • 如果連接上存在用戶自定義的變量,連接能保持,但用戶變量會失效。

關(guān)閉連接保持

前提條件

實例已開啟連接保持功能。

操作步驟

  1. 訪問RDS實例列表,在上方選擇地域,然后單擊目標實例ID。

  2. 在左側(cè)導(dǎo)航欄,單擊數(shù)據(jù)庫代理

  3. 基本信息區(qū)域,在連接保持右側(cè)單擊關(guān)閉

功能測試

本文僅對主動切換場景進行測試。

測試環(huán)境

  • 測試用RDS MySQL實例如下:

    • MySQL 8.0版本、高可用系列。

    • 實例規(guī)格為8核16 GB獨享型規(guī)格(mysql.x2.xlarge.2c)。

  • 測試工具:Sysbench

  • 測試數(shù)據(jù)如下:

    • 100張表,其中每張表包含40000行記錄數(shù)。

    • 并發(fā)度為128。

測試方法

在不同運維場景下,測試RDS MySQL實例的連接保活率(即執(zhí)行運維操作前后的連接保持比例)。

執(zhí)行測試語句如下:

sysbench --db-driver=mysql --mysql-host=127.X.X.1 --mysql-port=3306 --mysql-user=username --mysql-password='' --tables=100 --table-size=40000 --threads=128 --mysql-db=sbtest --report-interval=5  --time=600 oltp_read_write run
說明

上述測試語句中的關(guān)鍵參數(shù)含義如下:

  • db-driver:數(shù)據(jù)庫引擎

  • mysql-host:數(shù)據(jù)庫代理地址

  • tables:數(shù)據(jù)庫中的表數(shù)量

  • table-size:每張表包含的記錄條數(shù)

  • threads:并發(fā)度

  • time:測試時間,單位: 秒

測試結(jié)果

在如下測試的運維場景中,RDS MySQL實例均能保持100%的連接保活率。

主動切換場景

保活率

升級小版本

100%

主動主備切換

100%

變更主實例配置

100%

修改重啟類參數(shù)

100%

相關(guān)API

API

描述

ModifyDBProxy

修改RDS實例的數(shù)據(jù)庫代理功能。

DescribeDBProxy

查詢RDS實例的數(shù)據(jù)庫代理詳情。

相關(guān)文檔

開通數(shù)據(jù)庫代理