成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

UCloud MySQL云數(shù)據(jù)庫(kù)讀寫分離

joywek / 2457人閱讀

摘要:讀寫分離中間件具有獨(dú)立的。變量語(yǔ)句將被廣播考慮到節(jié)點(diǎn)間數(shù)據(jù)一致性問(wèn)題,只會(huì)分發(fā)到主節(jié)點(diǎn)。節(jié)點(diǎn)健康檢查,提升數(shù)據(jù)庫(kù)系統(tǒng)可用性。

UCloud MySQL云數(shù)據(jù)庫(kù)讀寫分離

背景

數(shù)據(jù)顯示,關(guān)系型數(shù)據(jù)庫(kù)在OLTP業(yè)務(wù)下96.87%都在等待讀I/O,而處理器計(jì)算僅僅占了5.3%,這說(shuō)明要提高數(shù)據(jù)庫(kù)的QPS性能,關(guān)鍵的一點(diǎn)是提高系統(tǒng)的IO能力。

另一個(gè)數(shù)據(jù)表明, 大多數(shù)業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),是讀大于寫。 典型的如電商、O2O、互聯(lián)網(wǎng)金融等業(yè)務(wù),讀寫比例可以達(dá)到 5:1 甚至 10:1 。

提高IO能力的方法, 除了升級(jí)硬件, 提升單個(gè)節(jié)點(diǎn)的磁盤I/O能力之外, 還有一個(gè)重要的方法是讀寫分離。 可以部署一主多從的主從復(fù)制集群, 進(jìn)而將讀請(qǐng)求分發(fā)給多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)并行處理??紤]到大部分業(yè)務(wù)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)以讀居多, 讀寫分離能夠給數(shù)據(jù)庫(kù)性能帶來(lái)明顯的增益。

首先,多個(gè)節(jié)點(diǎn)并行讀取,能夠提供幾倍于單個(gè)節(jié)點(diǎn)的磁盤數(shù)據(jù)讀取能力;第二,由于將讀請(qǐng)求分?jǐn)偟蕉鄠€(gè)節(jié)點(diǎn), 單個(gè)節(jié)點(diǎn)的I/O也得以減輕, I/O等待時(shí)間得以減小。 最終,整個(gè)系統(tǒng)的I/O能力得到有效提升。

對(duì)于OLAP業(yè)務(wù)而言, 由于需要涉及大量的內(nèi)存存儲(chǔ)和計(jì)算, CPU和內(nèi)存可能成為瓶頸,讀寫分離也具有一定的意義。 通過(guò)將數(shù)據(jù)分析請(qǐng)求分流到多個(gè)節(jié)點(diǎn),可以讓不同的數(shù)據(jù)分析操作,在多個(gè)節(jié)點(diǎn)并行地執(zhí)行, 節(jié)點(diǎn)之間互不干擾, 充分發(fā)揮并行處理的優(yōu)勢(shì)。

方案

UDB目前已提供完整的讀寫分離方案,具體做法如下:

  1. 在控制臺(tái)上, 通過(guò)?創(chuàng)建從庫(kù)?, 創(chuàng)建出一主多從的主從復(fù)制集群;
  2. 在控制臺(tái)上,通過(guò)?開啟讀寫分離, 為主從復(fù)制集群創(chuàng)建讀寫分離中間件。該中間件作為業(yè)務(wù)程序和主從復(fù)制集群之間的代理,中轉(zhuǎn)業(yè)務(wù)程序發(fā)往主從復(fù)制集群的請(qǐng)求。 中轉(zhuǎn)過(guò)程中,讀寫分離中間件將識(shí)別請(qǐng)求的類型,如果是讀請(qǐng)求,則根據(jù)某種分發(fā)規(guī)則(分發(fā)規(guī)則可配置),將讀請(qǐng)求分發(fā)到主從節(jié)點(diǎn),如果是寫請(qǐng)求,則發(fā)往主節(jié)點(diǎn)。
  3. 讀寫分離中間件具有獨(dú)立的IP。 需要做讀寫分離時(shí),客戶可以將業(yè)務(wù)的數(shù)據(jù)庫(kù)訪問(wèn)地址,直接切換到該IP即可,無(wú)需修改業(yè)務(wù)程序代碼, 支持標(biāo)準(zhǔn)SQL、系統(tǒng)命令、事務(wù)、視圖、存儲(chǔ)過(guò)程、觸發(fā)器等MySQL功能。

UDB讀寫分離中間件是永久免費(fèi)的, 客戶只需要?jiǎng)?chuàng)建好主從節(jié)點(diǎn),即可開啟并使用讀寫分離中間件,無(wú)需額外費(fèi)用。

普通版UDB和高可用UDB均支持創(chuàng)建讀寫分離中間件。

目前, UDB讀寫分離功能已經(jīng)在北京二可用區(qū)B、北京二可用區(qū)C、北京二可用區(qū)D、北京二可用區(qū)E、上海二可用區(qū)B、廣東可用區(qū)二B、香港可用區(qū)A上線,其他地域和可用區(qū)陸續(xù)上線中。

實(shí)現(xiàn)原理

如圖所示, 一個(gè)讀寫分離中間件由兩個(gè)高性能 Proxy 節(jié)點(diǎn)和 UCloud 分布式負(fù)載均衡產(chǎn)品 ULB 構(gòu)成。 兩個(gè) Proxy 采用雙活模式部署, 前端采用 ULB 來(lái)做負(fù)載均衡和容災(zāi),保證整個(gè)系統(tǒng)無(wú)單點(diǎn)。 客戶可以對(duì)讀請(qǐng)求的分發(fā)方式,進(jìn)行自定義配置(配置方法詳見下文),Proxy 節(jié)點(diǎn)根據(jù)客戶配置分發(fā)讀請(qǐng)求。

讀寫分離中間件對(duì)業(yè)務(wù)請(qǐng)求的處理方式非常簡(jiǎn)單, 有三個(gè)基本原則:

  1. 從業(yè)務(wù)請(qǐng)求中,識(shí)別Select SQL, 只有Select SQL才考慮做讀寫分離;
  2. 如果該Select SQL處于一個(gè)事務(wù)當(dāng)中, 則將該Select SQL發(fā)往主節(jié)點(diǎn),如果該Select SQL不處于事務(wù)當(dāng)中, 則根據(jù)讀請(qǐng)求分發(fā)策略, 將該Select SQL發(fā)往主節(jié)點(diǎn)或者從節(jié)點(diǎn)。
  3. 對(duì)于一些必須要廣播的語(yǔ)句, 如Use database、Set Session變量等語(yǔ)句,由中間件進(jìn)行廣播,如果廣播未全部成功,則中斷客戶端連接,以此嚴(yán)格保證各節(jié)點(diǎn)的數(shù)據(jù)一致性。

以及針對(duì)一些特殊情況的修正:

  1. 涉及到鎖的Select語(yǔ)句, 如Select For Update 、 Select Lock 等, 將被分發(fā)到主節(jié)點(diǎn)。
  2. 將Set語(yǔ)句中的變量, 分為三種類型: Session、Global、User。 set Session、Set User變量語(yǔ)句將被廣播;考慮到節(jié)點(diǎn)間數(shù)據(jù)一致性問(wèn)題, Set Global只會(huì)分發(fā)到主節(jié)點(diǎn)。 后續(xù)含全局變量的 Select 語(yǔ)句, 也只會(huì)發(fā)送到主節(jié)點(diǎn)。

功能限制

1.MySQL協(xié)議限制

1.1 不支持SSL加密

1.2 暫不支持壓縮協(xié)議

1.3 暫不支持綁定除3306之外的端口,UDB主從節(jié)點(diǎn)端口也必須為3306

2.SQL限制

2.1 支持savepoint語(yǔ)句(該語(yǔ)句將被分發(fā)到主節(jié)點(diǎn)), 但暫不支持rollback to savepoint

2.2 暫不支持XA事務(wù)命令

2.3?Lock Tables/Unlock Tables?將被分發(fā)到主節(jié)點(diǎn),而Proxy層不會(huì)有任何Lock狀態(tài)。因此, Lock Tables產(chǎn)生的鎖不會(huì)影響到從節(jié)點(diǎn)。

2.4 存儲(chǔ)過(guò)程,以及存儲(chǔ)過(guò)程后的Select語(yǔ)句, 一律分發(fā)到主節(jié)點(diǎn)。如:

call udb_test("000001",@pp,@qq);
select @pp,@qq;
select * from t1;

上述兩條 Select 語(yǔ)句,都將被分發(fā)到主節(jié)點(diǎn)。

2.5?show processlists、?Show master/slave statuskill query、COM_PROCESS_INFOCOM_STATISTICS命令,目前只會(huì)轉(zhuǎn)發(fā)到主節(jié)點(diǎn),針對(duì)中間件和數(shù)據(jù)庫(kù)系統(tǒng)管理場(chǎng)景的, 更豐富的系統(tǒng)管理命令正在開發(fā)中。

2.6 暫不支持COM_TABLE_DUMPCOM_CHANGE_USER協(xié)議。

3.對(duì)Set語(yǔ)句的特別說(shuō)明

3.1 Set Session、Set User變量語(yǔ)句, 將被廣播到主節(jié)點(diǎn)和從節(jié)點(diǎn),如果廣播失敗,Proxy將斷開和客戶端連接, 從而撤銷廣播失敗導(dǎo)致的數(shù)據(jù)不一致; 考慮到節(jié)點(diǎn)間的數(shù)據(jù)一致性, Set global變量語(yǔ)句只會(huì)被分發(fā)到主節(jié)點(diǎn)。 后續(xù)含全局變量的 Select 語(yǔ)句, 也只會(huì)發(fā)送到主節(jié)點(diǎn)。

3.2 不允許在一條Set語(yǔ)句中,同時(shí)出現(xiàn)Global變量和Session、User變量。

4.不推薦使用讀寫分離的場(chǎng)景

a. 業(yè)務(wù)的SQL均為事務(wù)SQL(所有SQL都包含在事務(wù)中), 由于事務(wù)只能被路由到主節(jié)點(diǎn),故該場(chǎng)景下UDB讀寫分離無(wú)法起到分離讀請(qǐng)求的作用

b. 業(yè)務(wù)使用了大量存儲(chǔ)過(guò)程。 由于存儲(chǔ)過(guò)程只能被路由到主節(jié)點(diǎn),故該場(chǎng)景下UDB讀寫分離無(wú)法起到分離讀請(qǐng)求的作用需要修改的點(diǎn)

c. 不推薦業(yè)務(wù)使用短連接來(lái)訪問(wèn)讀寫分離。 UDB讀寫分離中間件處理業(yè)務(wù)數(shù)據(jù)庫(kù)連接的邏輯是: 業(yè)務(wù)每向讀寫分離中間件發(fā)起一個(gè)連接,讀寫分離會(huì)到每個(gè)主從節(jié)點(diǎn)均建立一個(gè)連接,用于后續(xù)的SQL轉(zhuǎn)發(fā)。 因此,如果業(yè)務(wù)使用短連接訪問(wèn)讀寫分離,且業(yè)務(wù)發(fā)起短連接的頻率非常高,則讀寫分離中間件將頻繁地建連-斷連, 在進(jìn)程內(nèi)部產(chǎn)生大量TIME WAIT的TCP連接,占用甚至耗盡進(jìn)程的句柄數(shù),導(dǎo)致業(yè)務(wù)新來(lái)連接無(wú)法建立。

功能優(yōu)勢(shì)

  1. 讀寫分離地址統(tǒng)一,讀寫分離實(shí)現(xiàn)對(duì)業(yè)務(wù)程序透明。

在原有的主從節(jié)點(diǎn)模式中,主UDB節(jié)點(diǎn)和每個(gè)從節(jié)點(diǎn)有一個(gè)多帶帶的連接地址,用戶需要在業(yè)務(wù)程序中,多帶帶對(duì)每個(gè)地址自行進(jìn)行配置管理,才能實(shí)現(xiàn)將寫請(qǐng)求發(fā)往主UDB節(jié)點(diǎn), 而將讀請(qǐng)求發(fā)往從節(jié)點(diǎn)。

UDB的讀寫分離功能,則額外提供一個(gè)讀寫分離地址,用戶連接該地址后即可對(duì)所屬主從節(jié)點(diǎn)進(jìn)行讀寫操作,讀寫語(yǔ)句的轉(zhuǎn)發(fā)邏輯完全對(duì)業(yè)務(wù)透明,降低維護(hù)成本。

2. 讀寫分離Proxy雙活無(wú)單點(diǎn), 可用性和穩(wěn)定性有保證。

相對(duì)于業(yè)內(nèi)開源讀寫分離中間件的單節(jié)點(diǎn)部署方式, UDB讀寫分離Proxy采用雙活部署, 同時(shí)前端利用分布式負(fù)載均衡產(chǎn)品ULB來(lái)做負(fù)載均衡和容災(zāi), 整個(gè)Proxy層無(wú)單點(diǎn), 高可用和穩(wěn)定性得以保證。

3. 創(chuàng)建簡(jiǎn)單, 配置靈活。

在控制臺(tái)上一鍵即可開啟/釋放讀寫分離功能, 提供四種讀請(qǐng)求分發(fā)模式, 供客戶根據(jù)業(yè)務(wù)需要靈活選擇和配置。這四種模式為:

3.1 主節(jié)點(diǎn): 讀請(qǐng)求只下發(fā)給主節(jié)點(diǎn), 從節(jié)點(diǎn)不下發(fā)任何請(qǐng)求;

3.2 節(jié)點(diǎn)均衡: 讀請(qǐng)求均勻分發(fā)給主從節(jié)點(diǎn);

3.3 只讀節(jié)點(diǎn)均衡: 讀請(qǐng)求均勻分發(fā)給所有從節(jié)點(diǎn),但不分發(fā)給主節(jié)點(diǎn);

3.4 自定義: 客戶自定義讀請(qǐng)求的分發(fā)比例。

4. UDB節(jié)點(diǎn)健康檢查, 提升數(shù)據(jù)庫(kù)系統(tǒng)可用性。

讀寫分離Proxy會(huì)對(duì)所屬主從復(fù)制集群的所有節(jié)點(diǎn),進(jìn)行健康檢查。 當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可用時(shí), 將拒絕發(fā)往主節(jié)點(diǎn)的寫入請(qǐng)求以及系統(tǒng)命令等。當(dāng)發(fā)現(xiàn)從節(jié)點(diǎn)不可用或者和主節(jié)點(diǎn)的數(shù)據(jù)延遲超過(guò)閾值(該閾值可配置)時(shí),將把不可用的從節(jié)點(diǎn)剔除出分發(fā)目標(biāo)列表,直到從節(jié)點(diǎn)恢復(fù)或者數(shù)據(jù)延遲低于閾值時(shí),才將其重新加入分發(fā)目標(biāo)列表。

5. 用于免費(fèi), 降低業(yè)務(wù)使用成本。

UDB讀寫分離功能對(duì)所有客戶永久免費(fèi)使用, 客戶無(wú)需支付任何額外費(fèi)用。

性能優(yōu)勢(shì)

讀寫分離中間件的核心價(jià)值,在于添加從節(jié)點(diǎn)后,數(shù)據(jù)庫(kù)讀性能有顯著提高,從節(jié)點(diǎn)的讀請(qǐng)求處理能力,能夠得到充分發(fā)揮。 如果做不到這一點(diǎn),中間件的 MySQL兼容度再好, 管理功能再?gòu)?qiáng)大,也無(wú)法滿足業(yè)務(wù)的本質(zhì)需求。 UDB讀寫分離中間件,通過(guò)精心的結(jié)構(gòu)設(shè)計(jì),推敲和打磨每一行跟性能相關(guān)的代碼, 實(shí)現(xiàn)了讓讀性能隨從節(jié)點(diǎn)數(shù)量線性增長(zhǎng):增加相應(yīng)數(shù)量的從節(jié)點(diǎn),數(shù)據(jù)庫(kù)的讀性能也能夠隨之線性增長(zhǎng)。?從這個(gè)意義上講,使用UDB讀寫分離中間件, 能夠?qū)⒖蛻羲?gòu)買的從節(jié)點(diǎn)的每一點(diǎn)性能都?jí)赫コ鰜?lái),杜絕浪費(fèi)。而這一點(diǎn),是業(yè)內(nèi)絕大多數(shù)中間件無(wú)法做到的

從上圖可以看到, 采用Sysbench測(cè)試程序,在測(cè)試線程數(shù)>=128個(gè)(保證測(cè)試壓力足夠)的情況下, 讀QPS隨著從節(jié)點(diǎn)數(shù)增加而線性增加: 只有1個(gè)主節(jié)點(diǎn)時(shí)QPS最高能到5萬(wàn),1主1從QPS能夠到10萬(wàn), 1主2從時(shí)QPS峰值為15萬(wàn)。

為了能夠更加直觀地說(shuō)明:讓讀性能隨從節(jié)點(diǎn)數(shù)量線性擴(kuò)展 這一效果, 我們從上圖中, 分別挑選1主0從, 1主1從, 1主2從三種配置下的最高讀QPS,得到以下性能曲線:

從圖中可以看出, 讀QPS隨著節(jié)點(diǎn)數(shù)的增加,呈現(xiàn)幾乎完美的線性增長(zhǎng)。

ProxysQL是業(yè)內(nèi)一款著名的數(shù)據(jù)庫(kù)中間件,主要功能有讀寫分離、數(shù)據(jù)庫(kù)管理、Cache等, 為國(guó)內(nèi)外大量DBA所喜愛。甚至在某種程度上,ProxySQL是開源讀寫分離中間件的第一選擇。

產(chǎn)品發(fā)布之前,為了搞清楚UDB讀寫分離中間件在讀性能上離業(yè)內(nèi)標(biāo)桿還有多大差距, 我們做了兩個(gè)產(chǎn)品的讀性能對(duì)比測(cè)試。出乎意料的是, 我們發(fā)現(xiàn)在讀性能上,UDB讀寫分離中間件幾乎完勝ProxySQL:

從測(cè)試結(jié)果看, 對(duì)于配置完全一樣的兩個(gè)后端數(shù)據(jù)庫(kù)節(jié)點(diǎn),UDB讀寫分離中間件讀性能峰值能夠到10w QPS, 而ProxySQL最高僅為7.5w QPS, 兩者之間有25%的差距(但是ProxySQL消耗的CPU比UDB讀寫分離中間件低,由于瓶頸在后端數(shù)據(jù)庫(kù)節(jié)點(diǎn)IO上,因此兩個(gè)中間件都沒(méi)有跑完測(cè)試機(jī)的CPU)。

考慮到ProxySQL采用C++開發(fā), 而UDB讀寫分離中間件采用Go語(yǔ)言開發(fā),這個(gè)結(jié)果讓我們感到驚訝。我們仔細(xì)檢查了測(cè)試方法并進(jìn)行多次測(cè)試,得到的結(jié)果是一樣的。

從這次測(cè)試我們得到的結(jié)論是:一般而言,C++由于對(duì)底層更具掌控力,在性能上相較于Go會(huì)有更多的優(yōu)勢(shì),但這也并不是絕對(duì)的。性能往往更多地取決于模塊設(shè)計(jì)是否科學(xué),代碼是否經(jīng)過(guò)精心優(yōu)化,以及是否能夠充分利用多核CPU強(qiáng)勁的計(jì)算能力。

具體的測(cè)試方法如下:

類別 名稱
測(cè)試程序 Sysbench 1.1.0
測(cè)試機(jī)器 測(cè)試機(jī)器
讀寫分離中間件 雙活兩節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)配置:4GB內(nèi)存 / CPU不限
ULB 復(fù)用標(biāo)準(zhǔn)的ULB產(chǎn)品,無(wú)特殊配置
UDB 主從節(jié)配置均為:6GB內(nèi)存 / 200GB SSD / CPU不限 / MySQL5.6
數(shù)據(jù)量 5張表,每個(gè)表5000w
ProxySQL 單節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)配置:8GB內(nèi)存 / CPU不限

建表語(yǔ)句:

CREATE TABLE `sbtest1` (`id` int(10) unsigned NOT NULL,`k` int(10) unsigned NOT NULL DEFAULT "0",`c` char(120) NOT NULL DEFAULT "",`pad` char(60) NOT NULL DEFAULT "",PRIMARY KEY (`id`),KEY `k_1` (`k`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 MAX_ROWS=1000000

測(cè)試命令:

./src/sysbench --db-driver=mysql 
--mysql-table-engine=innodb 
--mysql-host=10.9.99.169  --mysql-port=3306 --mysql-user=root --mysql-password="liuly624@cloud" --mysql-db=sbtest 
--oltp-tables-count=5 --oltp-table-size=50000000 --report-interval=2 --max-requests=0 --time=300 --threads=128 
--rand-init=on --rand-type=special --rand-spec-pct=5 --percentile=99 --oltp_auto_inc=off 
--test=/data/sysbench/tests/include/oltp_legacy/select.lua run

具體的測(cè)試步驟是:

  1. 分別采用64、128、192、256線程,直連UDB主節(jié)點(diǎn)進(jìn)行壓測(cè),記錄QPS;
  2. 分別采用64、128、192、256線程,連接讀寫分離中間件,后端配置1主0從共1個(gè)UDB節(jié)點(diǎn)進(jìn)行壓測(cè), 記錄QPS;
  3. 分別采用64、128、192、256線程,連接讀寫分離中間件,后端配置1主1從共2個(gè)UDB節(jié)點(diǎn)進(jìn)行壓測(cè), 記錄QPS(注: 主從節(jié)點(diǎn)的配置完全一致,下同);
  4. 分別采用64、128、192、256線程,連接讀寫分離中間件,后端配置1主2從共3個(gè)UDB節(jié)點(diǎn)進(jìn)行壓測(cè), 記錄QPS。
  5. 分別采用64、128、192、256線程,連接ProxySQL中間件, 后端配置1主2從共3個(gè)節(jié)點(diǎn),記錄QPS。 我們?cè)跍y(cè)試時(shí)發(fā)現(xiàn),由于ProxySQL是以SQL語(yǔ)句為粒度進(jìn)行轉(zhuǎn)發(fā),而且轉(zhuǎn)發(fā)目的是以group 為單位,主從節(jié)點(diǎn)不在同一個(gè)group。因此雖然后端配置了3個(gè)節(jié)點(diǎn),實(shí)際利用的是2個(gè)從節(jié)點(diǎn)。因此,在上面性能測(cè)試結(jié)果最后一張圖中,這次測(cè)試只體現(xiàn)ProxySQL后端接2個(gè)從節(jié)點(diǎn)的性能。

管理功能

SQL自定義路由

UDB讀寫分離中間件支持SQL自定義路由功能。 通過(guò)兩種方式, 可以將一條SQL,指定路由到主節(jié)點(diǎn)或者某個(gè)從節(jié)點(diǎn)。

方式1:SQL模板

可以通過(guò)以下中間件自定義SQL,為中間件配置SQL路由規(guī)則:

uinsert sql_route ("SQL模板", "UDB Id");
舉例:
uinsert sql_route ("select money from t_account where uid=? and name=?" : "udbha-robert");

其中,?select money from t_account where uid=? and name=??為SQL模板,該模板將實(shí)際參數(shù)用?號(hào)代替, 用來(lái)概括結(jié)構(gòu)相同,但參數(shù)不同的同一類SQL。?udbha-robert為要路由到的UDB節(jié)點(diǎn)id。 該自定義SQL下發(fā)到中間件節(jié)點(diǎn)后, 凡是和SQL模板結(jié)構(gòu)相同的SQL, 都將被路由到udbha-robert這個(gè)UDB節(jié)點(diǎn)。

注意: 現(xiàn)階段,SQL模板的結(jié)構(gòu),和實(shí)際SQL語(yǔ)句的結(jié)構(gòu),必須完全一致。假如SQL模板為:select money from t_account where uid=? and name=??則業(yè)務(wù)發(fā)起SQL, 必須保證where查詢條件中的uid在前, name在后。 否則中間件會(huì)認(rèn)為結(jié)構(gòu)和SQL模板不一樣的SQL。

方式2:SQL Hints

對(duì)于Select語(yǔ)句, 可以在SQL前面的注釋中,增加forcemater, forceslave命令, 來(lái)指定將該Select SQL路由主節(jié)點(diǎn), 或者某個(gè)從節(jié)點(diǎn)。舉例:

/*force_master*/ select money from t_account where uid="tony";?: 該語(yǔ)句將被路由到主節(jié)點(diǎn)/*force_slave*/ select money from t_account where uid="tony";?: 該語(yǔ)句將被路由到某個(gè)節(jié)點(diǎn)

注意:注釋必須為: /* */, #和–類型的SQL不具備該功能。

如果要?jiǎng)h除某一條SQL路由規(guī)則,可采用以下自定義SQL:

udelete sql_route ("select money from t_account where uid=?");

查看中間件中全部路由規(guī)則,可以采用以下自定義SQL:

ushow all_sql_route;

查看上一條SQL路由目的地

要查看上一條SQL被路由到了哪個(gè)節(jié)點(diǎn),可以采用以下命令:

mysql> ushow last_route;
+-------------+------------+
| LastSqlCmd  | Route      |
+-------------+------------+
| show tables | udb-123qwe |
+-------------+------------+
1 row in set (0.00 sec)

其中,udb-123qwe 為 show tables 這條SQL被路由到的節(jié)點(diǎn)。

業(yè)務(wù)ip訪問(wèn)白名單

在UDB主從節(jié)點(diǎn)前,增加了讀寫分離中間件后, UDB看到的客戶端Ip是中間件的Ip, 而不是業(yè)務(wù)真實(shí)ip。 因此, MySQL根據(jù)用戶名+訪問(wèn)ip來(lái)做權(quán)限管理的功能, 便不再可用。 為了解決這一問(wèn)題, UDB讀寫分離中間件提供業(yè)務(wù)ip訪問(wèn)白名單機(jī)制。該機(jī)制具備兩個(gè)功能: 1. 業(yè)務(wù)ip訪問(wèn)白名單: 在該白名單中的業(yè)務(wù)ip,才能登錄到中間件,否則拒絕登錄。 2. 業(yè)務(wù)操作白名單:業(yè)務(wù)Ip登錄后,發(fā)起的操作將被中間件進(jìn)行鑒別。 如果該操作在操作白名單中,則中間件予以通過(guò);否則將被拒絕。

業(yè)務(wù)ip訪問(wèn)白名單, 和業(yè)務(wù)操作白名單,均可通過(guò)4條自定義SQL進(jìn)行配置。同時(shí)為了減少用戶學(xué)習(xí)成本, 這4條自定義SQL的語(yǔ)法,和MySQL用戶權(quán)限管理語(yǔ)句:create user、grant、revoke、drop user高度相似。

舉例: 假如用戶需要?jiǎng)?chuàng)建一個(gè)名為robert的賬號(hào), 并只允許該賬號(hào)在10.10.1.%網(wǎng)段, 和10.10.2.%網(wǎng)段的UHost,訪問(wèn)數(shù)據(jù)庫(kù)。 而且, robert 在10.10.1.%網(wǎng)段發(fā)起訪問(wèn)時(shí), 只具備select權(quán)限,但不具備其他權(quán)限(比如create table、insert等);robert 在10.10.2.%網(wǎng)段發(fā)起訪問(wèn)時(shí), 除了不具備create 庫(kù)表的權(quán)限,具備所有其他權(quán)限,而且能夠授權(quán)給其他用戶。

為了實(shí)現(xiàn)這個(gè)權(quán)限配置,可以采用以下做法:

  1. 登錄讀寫分離中間件(使用高權(quán)限用戶,比如root)
  2. 創(chuàng)建mysql用戶:

使用標(biāo)準(zhǔn)的create user、grant命令, 到主udb節(jié)點(diǎn)(可直連或者通過(guò)讀寫分離中間件)去創(chuàng)建用戶。其中, 用戶ip必須為%?create user "robert"@"%" identified by "123qwe";?grant all privileges on test.* to "robert"@"%";?注: udb等云數(shù)據(jù)庫(kù), 均不可對(duì)整個(gè)實(shí)例(.)進(jìn)行授權(quán), 而只能以庫(kù)或表為單位進(jìn)行授權(quán)

創(chuàng)建成功后, 可以使用該用戶名(robert), 在任意uhost上, 登錄讀寫分離中間件。

  1. 使用ucreate user命令, 創(chuàng)建ip訪問(wèn)白名單:

ucreate user "robert"@"10.10.1.%";

該命令執(zhí)行后, 允許10.10.1.%網(wǎng)段的robert賬號(hào)登錄中間件, 其他ip禁止。 但登錄后, 權(quán)限只有show databases 和 show processlist,暫無(wú)其他權(quán)限。

  1. 使用ugrant 、urevoke等命令,配置ip操作權(quán)限白名單。比如:?ugrant select to "robert"@"10.10.1.%";
    注: 和標(biāo)準(zhǔn)grant命令不同的是, ugrant省略了 指定授權(quán)對(duì)象(on?.) 這個(gè)語(yǔ)法, ugrant的授權(quán)對(duì)象,直接繼承自grant 執(zhí)行該命令, 為 "robert"@"10.10.1.%" 用戶開通 select 權(quán)限 如果要為10.10.2.%上的roert賬號(hào), 開通除create table之外的其他權(quán)限,可以這樣做:?ugrant all privileges to "robert"@"10.10.2.%" with grant option;?urevoke create from "robert"@"10.10.2.%";?執(zhí)行該命令, 允許 "robert"@"10.10.2.%" 執(zhí)行除create table、database 之外的所有其他操作; 同時(shí),還支持級(jí)聯(lián)授權(quán),允許"robert"@"10.10.2.%" 將權(quán)限授予其他用戶(發(fā)起ucreate user 和ugrant命令)。
  2. 使用udrop命令, 刪除訪問(wèn)ip訪問(wèn)控制白名單。如:

udrop user "robert"@"10.10.1.%";

注意: 如果robert用戶下的所有ip訪問(wèn)白名單都被刪除, 則視為系統(tǒng)沒(méi)有配置白名單, 此時(shí)可以用robert賬號(hào)從任意uhost上登錄。

  1. 提供權(quán)限配置查詢命令:

ushow users;

使用介紹

開啟讀寫分離

在UCloud控制臺(tái), 創(chuàng)建好UDB主從節(jié)點(diǎn)之后, 點(diǎn)擊詳情到達(dá)管理二級(jí)頁(yè)面,即可看到讀寫分離:

在讀寫分離頁(yè)面點(diǎn)擊開啟讀寫分離:

點(diǎn)擊確認(rèn)開啟成功后,控制臺(tái)可以看到讀寫分離Proxy的詳細(xì)信息,并進(jìn)行管理,如關(guān)閉、重啟、設(shè)置等管理:

修改延遲閾值

點(diǎn)擊讀寫分離管理頁(yè)面延遲閾值欄的編輯圖標(biāo), 即可修改延遲閾值:

修改讀模式

點(diǎn)擊讀寫分離管理頁(yè)面讀模式欄的編輯圖標(biāo)或點(diǎn)擊設(shè)置讀寫分離按鈕, 即可修改讀模式:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/579.html

相關(guān)文章

  • UCloud MySQL數(shù)據(jù)庫(kù)讀寫分離基準(zhǔn)測(cè)試

    摘要:基準(zhǔn)測(cè)試云數(shù)據(jù)庫(kù)基準(zhǔn)測(cè)試基準(zhǔn)測(cè)試是針對(duì)系統(tǒng)設(shè)計(jì)的一種壓力測(cè)試,目標(biāo)是為了掌握系統(tǒng)的行為。作為一款優(yōu)秀的基準(zhǔn)測(cè)試工具為業(yè)界所認(rèn)可。測(cè)試詳情最大請(qǐng)求數(shù),測(cè)試時(shí)長(zhǎng),測(cè)試腳本。UCloud MySQL云數(shù)據(jù)庫(kù)基準(zhǔn)測(cè)試 基準(zhǔn)測(cè)試(benchmark)是針對(duì)系統(tǒng)設(shè)計(jì)的一種壓力測(cè)試,目標(biāo)是為了掌握系統(tǒng)的行為。 sysbench作為一款優(yōu)秀的MySQL基準(zhǔn)測(cè)試工具為業(yè)界所認(rèn)可。 本文應(yīng)用s...

    用戶84 評(píng)論0 收藏0
  • UCloud MySQL數(shù)據(jù)庫(kù)簡(jiǎn)介

    摘要:用戶可以根據(jù)對(duì)云數(shù)據(jù)庫(kù)的硬件需求進(jìn)行選擇。主庫(kù)與從庫(kù)云數(shù)據(jù)庫(kù)主庫(kù)與從庫(kù)主庫(kù)支持讀寫操作。云數(shù)據(jù)庫(kù)提供自動(dòng)備份和手動(dòng)備份兩種方式,防止數(shù)據(jù)丟失,避免誤操作帶來(lái)的風(fēng)險(xiǎn)。日志云數(shù)據(jù)庫(kù)日志日志是用于記錄云數(shù)據(jù)庫(kù)操作事件的記錄文件。UCloud MySQL云數(shù)據(jù)庫(kù)實(shí)例類型 MySQL實(shí)例包括普通版和高可用版實(shí)例類型。 普通版實(shí)例提供基本的數(shù)據(jù)庫(kù)單實(shí)例,可根據(jù)需求創(chuàng)建主從同步,實(shí)現(xiàn)數(shù)據(jù)冗余和...

    Vultr 評(píng)論0 收藏0
  • U產(chǎn)品快報(bào) | UCloud 智能大數(shù)據(jù)平臺(tái)USDP公測(cè)、快杰裸金屬服務(wù)器上線等重要更新

    摘要:幫助企業(yè)快速搭建和使用大數(shù)據(jù)平臺(tái),降低大數(shù)據(jù)開發(fā)運(yùn)維成本。發(fā)布范圍北京二可用區(qū)灰度中。機(jī)型快杰版的數(shù)據(jù)庫(kù)實(shí)例,采用業(yè)內(nèi)主流的計(jì)算存儲(chǔ)分離架構(gòu)計(jì)算層使用高性能快杰云主機(jī),存儲(chǔ)層采用超高性能云盤。UCloud PyPI私有源上線PyPI是Python官方的第三方庫(kù)的倉(cāng)庫(kù),為解決默認(rèn)官方源在國(guó)內(nèi)的訪問(wèn)速度受限,并發(fā)請(qǐng)求受限,經(jīng)常出現(xiàn)丟包、超時(shí)等問(wèn)題,UCloud 近期上線了PyPI私有源。PyPI...

    Tecode 評(píng)論0 收藏0
  • 原生HTAP數(shù)據(jù)庫(kù),加速業(yè)務(wù)升級(jí)—UCloud Serverless分布式NewSQL數(shù)據(jù)庫(kù)TiD

    摘要:業(yè)務(wù)量突增突減傳統(tǒng)數(shù)據(jù)庫(kù)有單機(jī)的計(jì)算及存儲(chǔ)瓶頸,無(wú)法靈活應(yīng)對(duì)業(yè)務(wù)量突增突減場(chǎng)景。脆弱的傳統(tǒng)數(shù)據(jù)庫(kù)需獨(dú)立部署系統(tǒng),那么要考慮系統(tǒng)與系統(tǒng)的數(shù)據(jù)同步等操作,增加成本易出錯(cuò)。用戶案例以下客戶已經(jīng)用上分布式數(shù)據(jù)庫(kù)前言5G、物聯(lián)網(wǎng)、大數(shù)據(jù)&AI等新技術(shù),驅(qū)動(dòng)數(shù)據(jù)爆炸式增長(zhǎng),讓傳統(tǒng)數(shù)據(jù)庫(kù)遇到挑戰(zhàn)——實(shí)時(shí)在線交易、在線分析等對(duì)現(xiàn)有數(shù)據(jù)庫(kù)訪問(wèn),帶來(lái)極大壓力,企業(yè)不得不對(duì)數(shù)據(jù)庫(kù)進(jìn)行分庫(kù)分表或者業(yè)務(wù)重構(gòu),承受沉重...

    Tecode 評(píng)論0 收藏0
  • 搭載超高性能RSSD盤的快杰數(shù)據(jù)庫(kù)UDB重磅上線

    摘要:關(guān)于快杰云主機(jī)的性能表現(xiàn),已在阿里云騰訊云華為云云主機(jī)對(duì)比測(cè)試報(bào)告中詳細(xì)測(cè)試對(duì)比過(guò),其對(duì)數(shù)據(jù)庫(kù)的支持能力尤為突出??旖芙?jīng)過(guò)此次架構(gòu)和硬件升級(jí),無(wú)論是對(duì)比自建,還是友商同等配置下的,其高性能和高性價(jià)比都是企業(yè)部署高性能數(shù)據(jù)庫(kù)的優(yōu)秀選擇。2020年4月中旬,UCloud云數(shù)據(jù)庫(kù)產(chǎn)品線發(fā)布了MySQL版本的快杰UDB,作為UDB產(chǎn)品架構(gòu)升級(jí)后的最新一代云數(shù)據(jù)庫(kù),快杰UDB采用了業(yè)內(nèi)主流的計(jì)算存儲(chǔ)分...

    Pluser 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<