免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

MySQL中間件Atlas實(shí)踐:讀寫分離、分表與踩坑全指南

MySQL中間件Atlas實(shí)踐:讀寫分離、分表與踩坑全指南 剛開始看到“atlas”這個(gè)名字我腦子里瞬間閃過好幾個(gè)東西希臘神話里扛天的泰坦神地圖冊(cè)的英文名波士頓動(dòng)力的雙足機(jī)器人Facebook的廣告系統(tǒng)……但如果你是個(gè)干后端、搞數(shù)據(jù)庫的大概率第一反應(yīng)是那個(gè)曾經(jīng)在國內(nèi)互聯(lián)網(wǎng)圈子里很火的MySQL中間件。沒錯(cuò)這篇文章的主角就是它——奇虎360開源的數(shù)據(jù)庫中間件Atlas。這個(gè)項(xiàng)目源代碼托管在GitHub上奇虎360在2013年左右開源出來定位是MySQL代理層。它的核心價(jià)值說白了就是兩個(gè)讀寫分離和分表。你可以把它理解成數(shù)據(jù)庫門口的智能分流閘機(jī)——讀請(qǐng)求往從庫去寫請(qǐng)求往主庫去還能把一張千萬級(jí)的大表按規(guī)則拆成多張小表分?jǐn)偞鎯?chǔ)和查詢壓力。在那個(gè)MySQL官方還沒出什么像樣的中間件方案、MyCat還沒聲量那么大的年代Atlas確實(shí)算是很多團(tuán)隊(duì)的首選。這篇東西我不打算寫成一份照抄官方README的說明書而是從實(shí)際落地角度出發(fā)把部署、配置、原理、踩坑一條線捋清楚。如果你正在用或者準(zhǔn)備選型Atlas這篇文章能幫你少走不少彎路。文章里所有的操作步驟和配置示例都基于CentOS 7 MySQL 5.7的環(huán)境版本差異比較大的地方我會(huì)單獨(dú)標(biāo)出來。1. 為什么選擇Atlas一個(gè)老牌中間件的價(jià)值與邊界先說清楚一個(gè)觀點(diǎn)Atlas不是萬能的它解決的問題非常聚焦。但正因?yàn)榫劢顾谧约旱念I(lǐng)域里做得相當(dāng)純粹。很多時(shí)候我們選型失敗不是因?yàn)楣ぞ卟缓枚且驗(yàn)槠谕捣佩e(cuò)了位置。1.1 解決了什么問題在MySQL主從架構(gòu)里一臺(tái)主庫負(fù)責(zé)寫若干臺(tái)從庫負(fù)責(zé)讀。如果沒有中間層你的業(yè)務(wù)代碼就得自己感知哪臺(tái)是主、哪臺(tái)是從。比如你要寫數(shù)據(jù)就得連主庫要讀數(shù)據(jù)就得連從庫一旦主從切換所有連接配置都要跟著改。這在小團(tuán)隊(duì)、小業(yè)務(wù)量時(shí)還能湊合一旦服務(wù)多了維護(hù)成本就上來了。Atlas就是為了解決這個(gè)痛點(diǎn)出現(xiàn)的。業(yè)務(wù)方只需要連接Atlas完全不用理會(huì)背后有幾臺(tái)MySQL、哪臺(tái)是什么角色。你發(fā)給Atlas一條SQL它會(huì)自己判斷這條語句該發(fā)到主庫還是從庫然后把結(jié)果返回給你。這相當(dāng)于把“數(shù)據(jù)庫拓?fù)涓兄边@件事從業(yè)務(wù)端下沉到代理層業(yè)務(wù)代碼瞬間變得干凈了。另外一個(gè)殺招是分表。單表數(shù)據(jù)量超過千萬甚至億級(jí)的時(shí)候索引再優(yōu)化也扛不住寫入和查詢的延遲。Atlas支持按某個(gè)字段的哈希值取模把一張邏輯大表拆分成物理上的多張小表。業(yè)務(wù)還是按原表名去查Atlas在中間做映射和路由。這確實(shí)是解決大表問題的有效手段后文我會(huì)詳細(xì)講它的局限在哪。1.2 哪些場景不適合用AtlasAtlas是基于MySQL協(xié)議的代理它天然有一些限制。比如對(duì)事務(wù)的支持就不夠完美——開啟事務(wù)后事務(wù)里的語句默認(rèn)還是走讀寫分離規(guī)則如果你的事務(wù)內(nèi)是先寫后讀就可能出現(xiàn)讀到舊數(shù)據(jù)的情況。另一個(gè)是跨庫跨表的JOIN和子查詢性能會(huì)很差因?yàn)锳tlas需要把數(shù)據(jù)從多個(gè)后端節(jié)點(diǎn)撈回來再做關(guān)聯(lián)。所以這個(gè)方案更適合OLTP場景下的簡單查詢復(fù)雜分析類SQL建議直接上專門的OLAP方案或數(shù)倉別在Atlas這里硬扛。我還見過有人拿Atlas做分庫分表之外的“高可用”兜底這個(gè)用法其實(shí)有點(diǎn)錯(cuò)位。Atlas本身不是集群方案它自身就是單點(diǎn)。真要防Atlas這臺(tái)機(jī)器掛掉得靠Keepalived做VIP浮動(dòng)或者前置一層負(fù)載均衡比如HAProxy來做故障轉(zhuǎn)移否則它一掛整個(gè)數(shù)據(jù)庫入口就癱了。1.3 與其他老牌/同期方案對(duì)比下面這個(gè)表格是我在選型時(shí)候做的對(duì)比當(dāng)時(shí)備選的幾個(gè)方案都列出來了便于你有個(gè)直觀印象方案讀寫分離分表分庫管理界面協(xié)議兼容性活躍度Atlas支持支持單鍵哈希不支持管理端口命令高基于MySQL原生協(xié)議維護(hù)狀態(tài)社區(qū)活躍度一般MyCat支持支持支持有Web管理高支持多協(xié)議社區(qū)比Atlas活躍但配置復(fù)雜ShardingSphere-JDBC支持支持支持無中間件層嵌入應(yīng)用極高應(yīng)用內(nèi)集成很活躍云原生友好MySQL官方Router支持不支持不支持有API高官方維護(hù)但功能少看這張表你就明白了Atlas對(duì)比同期方案最大的優(yōu)勢是輕量、部署簡單、MySQL協(xié)議兼容性好。業(yè)務(wù)幾乎不用改代碼接上就能跑。對(duì)比現(xiàn)在的ShardingSphere-JDBC這種應(yīng)用內(nèi)集成方案Atlas的劣勢是功能不夠全、擴(kuò)展性偏弱但它作為獨(dú)立代理層對(duì)業(yè)務(wù)代碼的侵入性為零運(yùn)維維護(hù)上也更直觀。這兩種路線各有各的適用場景沒有絕對(duì)的好與壞。2. 核心架構(gòu)拆解讀寫分離和分表在Atlas內(nèi)部是怎么跑起來的知其然更要知其所以然。我把Atlas內(nèi)部幾個(gè)關(guān)鍵機(jī)制捋了一遍這塊搞清楚了后面配置和排錯(cuò)會(huì)輕松很多。2.1 連接管理前端連接與后端連接池Atlas本質(zhì)上是一個(gè)代理但它不是簡單的轉(zhuǎn)發(fā)。它內(nèi)部維護(hù)了兩類連接一類是業(yè)務(wù)程序連接到Atlas的連接叫前端連接另一類是Atlas連接到后端MySQL數(shù)據(jù)庫的連接叫后端連接。這里有一個(gè)很關(guān)鍵的機(jī)制后端連接是池化的。前端來一個(gè)連接Atlas不會(huì)立刻向后端建立一個(gè)對(duì)應(yīng)的MySQL連接而是從空閑連接池里取一個(gè)分配給前端。用完歸還。這樣做的好處是避免每個(gè)業(yè)務(wù)請(qǐng)求都要進(jìn)行一次完整的MySQL握手認(rèn)證大幅降低后端數(shù)據(jù)庫的連接建立開銷。類比一下就像你去銀行辦事大堂經(jīng)理Atlas不會(huì)每次都在柜臺(tái)新開一個(gè)窗口MySQL連接給你而是把你引導(dǎo)到已有的空閑窗口。窗口數(shù)量是有限的業(yè)務(wù)量再大后端數(shù)據(jù)庫的連接數(shù)也能被控制在合理區(qū)間。我在生產(chǎn)環(huán)境里就遇到過因?yàn)檫B接管理不當(dāng)導(dǎo)致MySQL連接數(shù)被打滿的故障Atlas這個(gè)機(jī)制幫了大忙。2.2 讀寫分離的判斷邏輯MySQL協(xié)議層玩兒的正則匹配Atlas怎么判斷一條SQL是讀還是寫呢如果你以為它解析了SQL語法那就太小看它了。它的判斷邏輯非常簡單直接對(duì)SQL語句進(jìn)行正則匹配。如果一個(gè)語句以SELECT開頭去掉注釋、空白符后并且不是SELECT ... FOR UPDATE這種帶鎖的查詢Atlas就把它歸為讀請(qǐng)求其余的全部歸為寫請(qǐng)求。包括INSERT、UPDATE、DELETE、CREATE、ALTER、DROP等凡是修改數(shù)據(jù)或結(jié)構(gòu)的一律走主庫。這里注意兩個(gè)容易被忽略的點(diǎn)一是“SELECT ... FOR UPDATE”會(huì)被識(shí)別為寫請(qǐng)求這是合理的因?yàn)镕OR UPDATE加的是行級(jí)排他鎖必須走主庫二是一些看似讀實(shí)則寫的情況比如自定義函數(shù)里執(zhí)行了更新外部套了SELECT。這類SQL會(huì)被判斷成讀請(qǐng)求而路由到從庫一旦從庫是只讀復(fù)制狀態(tài)就會(huì)報(bào)錯(cuò)。這種邊角情況在業(yè)務(wù)里確實(shí)會(huì)遇到后面踩坑部分我會(huì)專門說。2.3 分表實(shí)現(xiàn)哈希取模的規(guī)則世界Atlas的另一個(gè)標(biāo)志性功能是分表。它支持的是一種哈希取模的分片策略指定分表鍵shard key和分表數(shù)量N然后計(jì)算分表鍵的哈希值跟N取模得到的結(jié)果就對(duì)應(yīng)物理分表的表后綴。舉個(gè)例子訂單流水表叫T_ORDER分表鍵是ORDER_ID分表數(shù)量是16。那哈希值對(duì)16取模的結(jié)果就是表后綴實(shí)際物理表就是T_ORDER_0、T_ORDER_1、T_ORDER_2……一直到T_ORDER_15。業(yè)務(wù)插入一條數(shù)據(jù)時(shí)Atlas根據(jù)ORDER_ID算出該去哪個(gè)分表然后把SQL改寫后路由到對(duì)應(yīng)分表。但這里有個(gè)極大的坑如果你的分表規(guī)則設(shè)計(jì)不合理查詢時(shí)沒有帶分表鍵那Atlas就只能對(duì)所有分表做全表掃描把每條分表的結(jié)果全部合并返回。這在數(shù)據(jù)量小的時(shí)候問題不明顯等數(shù)據(jù)量大了一次查詢可能要打幾十張表性能直接崩掉。所以分表鍵的選擇和查詢習(xí)慣的設(shè)計(jì)是分表方案能否跑得好的核心前提比中間件本身還重要。2.4 主庫故障下的主從切換一個(gè)需要你提前準(zhǔn)備的動(dòng)作Atlas自身不具備數(shù)據(jù)庫高可用切換能力。也就是說它只是知道哪臺(tái)是主庫、哪臺(tái)是從庫如果主庫掛了它不會(huì)自動(dòng)把從庫提升為主庫并修改自己的配置。這需要借助外部工具做故障轉(zhuǎn)移比如MHAMaster High Availability或者自研腳本去觸發(fā)MySQL主從切換然后把Atlas.conf里的Master和Slave配置改掉再重啟Atlas。我看到很多初次使用Atlas的團(tuán)隊(duì)都會(huì)忽略這個(gè)問題默認(rèn)以為Atlas會(huì)自己搞定結(jié)果主庫一掛整個(gè)服務(wù)直接癱瘓。所以務(wù)必在前期架構(gòu)設(shè)計(jì)時(shí)就把主從切換的流程想清楚并且做好演練。后面我會(huì)專門有一節(jié)講這個(gè)踩坑。3. 部署實(shí)操從源碼編譯到生產(chǎn)環(huán)境上線Atlas的安裝方式主要有兩種官方提供了編譯好的二進(jìn)制包至少有CentOS和Ubuntu版本另一個(gè)是自己從源碼編譯。我強(qiáng)烈建議一般團(tuán)隊(duì)直接使用官方二進(jìn)制包省時(shí)省力只有需要定制化內(nèi)核或改代碼的團(tuán)隊(duì)才需要走編譯這條路。3.1 環(huán)境準(zhǔn)備與依賴檢查操作系統(tǒng)層面我用的CentOS 7 x86_64。依賴方面Atlas需要依賴libevent、glib2、mysql-devel這些基礎(chǔ)庫。如果你下載的二進(jìn)制包在啟動(dòng)時(shí)報(bào)缺少動(dòng)態(tài)庫的錯(cuò)誤通常就是這些依賴沒裝齊。yum install -y libevent libevent-devel glib2 glib2-devel mysql-devel ncurses-devel建一個(gè)專用的系統(tǒng)用戶來跑Atlas不推薦直接用root這是個(gè)基本的安全習(xí)慣。useradd -M -s /sbin/nologin atlas mkdir -p /usr/local/mysql-proxy chown -R atlas:atlas /usr/local/mysql-proxy3.2 安裝與目錄規(guī)劃把二進(jìn)制包解壓到/usr/local/mysql-proxy目錄后里面會(huì)有bin和conf兩個(gè)目錄。bin里是一個(gè)叫mysql-proxy的可執(zhí)行文件Atlas的運(yùn)行就是靠它。注意雖然它繼承了mysql-proxy的名字但奇虎360在原版基礎(chǔ)上做了大規(guī)模改造和MySQL官方的mysql-proxy已經(jīng)完全不是同一個(gè)東西了。Atlas啟動(dòng)之后主要監(jiān)聽兩個(gè)端口一個(gè)默認(rèn)是1234這是業(yè)務(wù)流量入口就是給應(yīng)用連的另一個(gè)是2345這是管理端口運(yùn)維人員和腳本通過這個(gè)端口執(zhí)行管理命令。配置文件放在conf目錄下一般叫Atlas.conf。還有個(gè)重要的文件是分表規(guī)則文件默認(rèn)叫shard.conf或者加在Atlas.conf尾部各版本命名有差異按實(shí)際來。我習(xí)慣這樣規(guī)劃目錄conf/Atlas.conf —— 主配置文件conf/sharding.conf或Atlas.conf中的分表段 —— 分表規(guī)則logs/ —— 日志目錄包括sql.log和error.logbin/mysql-proxy —— 可執(zhí)行程序3.3 配置文件的詳細(xì)解析下面是一份我在生產(chǎn)環(huán)境中用的Atlas.conf模板去掉了敏感信息每個(gè)關(guān)鍵項(xiàng)都注釋了含義[mysql-proxy] # 是否以后臺(tái)守護(hù)進(jìn)程方式運(yùn)行 daemon true # 管理端口綁定的地址和端口 admin-address 0.0.0.0:2345 # 業(yè)務(wù)流量入口綁定的地址和端口 proxy-address 0.0.0.0:1234 # 管理接口的用戶名和密碼用于連接管理端口 admin-username admin admin-password admin_pwd # 后端主從MySQL配置 # 主庫可寫 proxy-backend-addresses 10.0.0.2:3306 # 從庫可讀多個(gè)從庫用逗號(hào)分隔 proxy-read-only-backend-addresses 10.0.0.3:3306,10.0.0.4:3306 # 連接Atlas自身的認(rèn)證用戶 pwds root:xxxxxx # 分表規(guī)則所在的文件 shard-file /usr/local/mysql-proxy/conf/shard.conf # 日志級(jí)別debug級(jí)別會(huì)輸出每條SQL生產(chǎn)建議用message診斷問題臨時(shí)開debug log-level message log-path /usr/local/mysql-proxy/logs # 工作線程數(shù)建議與CPU核數(shù)相同 event-threads 8 # 會(huì)話空閑超時(shí)時(shí)間單位秒 wait-timeout 60這里面有幾個(gè)容易踩坑的地方第一pwds是連接Atlas的認(rèn)證用戶配置格式是“用戶名:加密后的密碼”。這里的密碼不是明文是MySQL加密后的密碼串。怎么獲取在MySQL服務(wù)器上執(zhí)行SQL來生成SELECT PASSWORD(your_password);把返回的那一串密碼填進(jìn)去。千萬不要直接填明文否則Atlas會(huì)拒絕認(rèn)證。這是新人使用Atlas最常見的坑。第二如果暫時(shí)不分表shard-file可以留空或不配置。但一旦配置了Atlas啟動(dòng)時(shí)就會(huì)強(qiáng)制校驗(yàn)分表規(guī)則文件的格式格式不對(duì)會(huì)啟動(dòng)失敗。3.4 啟動(dòng)、停止與驗(yàn)證啟動(dòng)很簡單/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file/usr/local/mysql-proxy/conf/Atlas.conf注意Atlas默認(rèn)使用/etc/mysql-proxy.cnf作為配置文件如果你把配置放在了別的路徑一定要用--defaults-file指定。而且配置文件要求權(quán)限是0600否則啟動(dòng)時(shí)會(huì)報(bào)錯(cuò)。這也算是一個(gè)隱蔽坑我遇到過直接復(fù)制配置文件過去忘了改權(quán)限的情況。啟動(dòng)后驗(yàn)證兩件事業(yè)務(wù)端口是否監(jiān)聽netstat -tlnp | grep 1234管理端口是否監(jiān)聽netstat -tlnp | grep 2345然后用管理端口連進(jìn)去看后端狀態(tài)mysql -h127.0.0.1 -P2345 -uadmin -padmin_pwd執(zhí)行SELECT * FROM backends;應(yīng)該能看到主庫和從庫的狀態(tài)。正常狀態(tài)下主庫的type是rw從庫type是rostatus是up。為了業(yè)務(wù)流量連通性最好再用一個(gè)有業(yè)務(wù)的賬號(hào)試連一下1234跑一條簡單的SELECT確認(rèn)讀寫分離生效mysql -h127.0.0.1 -P1234 -uappuser -papppass -e SELECT 1;如果這條能通整體鏈路基本就算起來了。把Atlas注冊(cè)成systemd服務(wù)也好寫個(gè)啟動(dòng)腳本扔進(jìn)rc.local也好反正要保證開機(jī)自啟。4. 分表與讀寫分離配置實(shí)戰(zhàn)讓規(guī)則真正跑起來我見過很多團(tuán)隊(duì)部署完Atlas測試讀寫分離正常然后就開始跑業(yè)務(wù)了。但用到分表功能時(shí)由于分表配置不正確或使用方法不對(duì)上線當(dāng)天就出了線上事故。這一節(jié)我專門把分表配置的前前后后講透。4.1 分表規(guī)則文件到底怎么寫我用的shard.conf是一個(gè)Python風(fēng)格的規(guī)則文件核心就是注冊(cè)一個(gè)函數(shù)函數(shù)返回分表后的表名。例如def main(): # 讀取分表鍵的值 from atlas_shard_rule import * return get_shard_table(4)稍微解釋一下邏輯Atlas的分表規(guī)則文件使用Python語法Atlas在啟動(dòng)和路由SQL時(shí)會(huì)加載并執(zhí)行這個(gè)文件根據(jù)你寫的規(guī)則確定物理表名。整個(gè)配置文件里可以寫多個(gè)規(guī)則函數(shù)每個(gè)函數(shù)對(duì)應(yīng)一種分表模式。函數(shù)的返回值就是實(shí)際路由到的物理表名Atlas會(huì)用它替換SQL里的邏輯表名。我自己的分表規(guī)則文件一般長這樣def rule_order(): table_name T_ORDER shard_num 16 return get_shard_table(shard_num) def rule_user(): table_name T_USER shard_num 8 return get_shard_table(shard_num)等等這個(gè)寫法其實(shí)還需要再細(xì)化。前面例子里的get_shard_table內(nèi)部會(huì)拿到當(dāng)前語句的分表鍵值再對(duì)分表數(shù)量取模。具體使用哪個(gè)分表鍵是在SQL語句的WHERE條件里體現(xiàn)的。Atlas會(huì)從句法層面解析出分表鍵的值帶入Python函數(shù)函數(shù)計(jì)算出目標(biāo)分表名后Atlas再改寫SQL并路由。4.2 建分表的最佳實(shí)踐提前建好還是動(dòng)態(tài)創(chuàng)建Atlas本身不負(fù)責(zé)自動(dòng)創(chuàng)建分表。你必須在MySQL實(shí)例上把所有分表手動(dòng)建好。假設(shè)邏輯表名是T_ORDER分16個(gè)分表你必須先在數(shù)據(jù)庫里創(chuàng)建T_ORDER_0、T_ORDER_1、一直到T_ORDER_15這16張表。每張表的表結(jié)構(gòu)完全一致索引也一致。如果業(yè)務(wù)端有DDL變更也要同步到所有分表上。我強(qiáng)烈建議你在項(xiàng)目啟動(dòng)腳本里或者在發(fā)布流程里寫一個(gè)遍歷建表和遍歷改表的腳本確保所有分表結(jié)構(gòu)完全一致。否則后期排查數(shù)據(jù)缺失問題會(huì)痛不欲生。我自己就經(jīng)歷過因?yàn)槟撤直砩倭怂饕齻€(gè)別訂單查詢奇慢無比的問題。不同MySQL實(shí)例上的分表怎么分布Atlas支持在不同后端MySQL節(jié)點(diǎn)上放不同的分表。比如主庫上放T_ORDER_0到T_ORDER_7從庫上放T_ORDER_8到T_ORDER_15。這種情況下路由邏輯會(huì)先根據(jù)哈希值找到分表名再根據(jù)分表名找到對(duì)應(yīng)的后端節(jié)點(diǎn)。這個(gè)功能在生產(chǎn)上非常有用可以把一個(gè)大表的數(shù)據(jù)分散到不同機(jī)器上進(jìn)一步降低單機(jī)壓力。4.3 分表后SQL編寫的硬性要求分表規(guī)則生效后SQL寫入和查詢時(shí)必須帶上分表鍵。我給你的最實(shí)在的建議是在項(xiàng)目初期的代碼規(guī)范里就明確下來所有涉及分表的表查詢、更新、刪除必須強(qiáng)制帶上分表鍵。例如-- 錯(cuò)誤示范沒有帶分表鍵Atlas只能全分表掃描 SELECT * FROM T_ORDER WHERE ORDER_STATUS PAID; -- 正確示范帶分表鍵Atlas可以直接路由到唯一分表 SELECT * FROM T_ORDER WHERE ORDER_ID A123456789;如果確實(shí)需要在不帶分表鍵的情況下查詢雖然Atlas會(huì)廣播到所有分表再合并結(jié)果但這種操作應(yīng)該被嚴(yán)格控制盡量在業(yè)務(wù)低峰期執(zhí)行或者提前在中間層緩存/搜索引擎里做條件查詢。說實(shí)話廣播查詢?cè)诜直頂?shù)量少比如4張、8張且數(shù)據(jù)不是特別巨大時(shí)勉強(qiáng)能用到了16張以上基本就別指望了延遲會(huì)指數(shù)級(jí)上升。還有一個(gè)容易被忽略的點(diǎn)分表鍵不能更新。如果你把某行的分表鍵值改了它的哈希值就變了理論上的位置也跟著變但實(shí)際上數(shù)據(jù)還在老分表里查新分表就找不到了。所以一條鐵律分表鍵只支持新增和查詢不支持修改。4.4 讀寫分離加分表聯(lián)調(diào)測試配置完成之后我是這樣做的聯(lián)調(diào)驗(yàn)證先在主庫上手動(dòng)插入幾條測試數(shù)據(jù)分表規(guī)則比如ORDER_ID100和ORDER_ID101會(huì)路由到不同的分表插入成功后再去各分表確認(rèn)數(shù)據(jù)落位正確。通過在代碼里同時(shí)發(fā)讀請(qǐng)求和寫請(qǐng)求觀察Atlas日志里SQL實(shí)際被路由到了哪個(gè)后端、哪個(gè)分表。開啟debug日志臨時(shí)觀察在Atlas.conf中把log-level改成debug重啟Atlas執(zhí)行幾條典型的CRUD查看logs/sql.log里的實(shí)際路由信息確認(rèn)無誤后再把log-level改回message并重啟避免生產(chǎn)環(huán)境留下大量調(diào)試日志。5. 生產(chǎn)環(huán)境踩坑實(shí)錄這些問題網(wǎng)上真的搜不到現(xiàn)成答案在寫這篇文章之前我特意翻了翻以前運(yùn)維Atlas這段時(shí)間積累的排障筆記。有些問題在當(dāng)時(shí)花了很大力氣才定位現(xiàn)在回想起來如果早點(diǎn)有人寫出來真的能省很多功夫。下面這些都是我實(shí)際踩過的坑按踩坑的頻率和影響程度排個(gè)序。5.1 連接全部掛起問題出在backends狀態(tài)不一致有一次線上突然出現(xiàn)大面積請(qǐng)求超時(shí)檢查Atlas的backends發(fā)現(xiàn)主庫和從庫都顯示up但業(yè)務(wù)就是卡住不動(dòng)。后來仔細(xì)排查發(fā)現(xiàn)問題出在MySQL端主庫因?yàn)橐淮未笫聞?wù)導(dǎo)致臨時(shí)表空間滿了所有寫請(qǐng)求堵塞連帶Atlas的業(yè)務(wù)線程全部卡在等待后端響應(yīng)上。當(dāng)時(shí)的解決辦法是先把主庫上的慢事務(wù)殺掉等主庫恢復(fù)后Atlas自然就恢復(fù)了。但這個(gè)過程我意識(shí)到一個(gè)很重要的問題Atlas沒有健康檢查機(jī)制它不會(huì)自動(dòng)把掛掉的后端從輪詢列表里移出去。你的監(jiān)控系統(tǒng)必須覆蓋到Atlas這一層否則你只會(huì)看到業(yè)務(wù)超時(shí)卻不知道根源在哪。后來我加了一個(gè)定時(shí)腳本每30秒檢查一次Atlas的backends狀態(tài)只要發(fā)現(xiàn)某個(gè)后端狀態(tài)異?;蝽憫?yīng)耗時(shí)超高立刻報(bào)警。這類腳本網(wǎng)上沒有現(xiàn)成的統(tǒng)一方案我建議就自己在服務(wù)器上寫個(gè)Python腳本連上管理端口拉狀態(tài)推送報(bào)警到釘釘或者企業(yè)微信非常管用。5.2 主從切換后Atlas還指向舊主庫這是幾乎每個(gè)用Atlas的團(tuán)隊(duì)都會(huì)遇到的問題只是早晚。當(dāng)主庫宕機(jī)你用MHA把從庫提升為新主庫之后必須手動(dòng)修改Atlas.conf中的proxy-backend-addresses和新從庫地址然后重啟Atlas。我踩過的坑是MHA切換完成后網(wǎng)站還是慢得一塌糊涂。因?yàn)榕f主庫恢復(fù)了但已經(jīng)變成從庫還在被Atlas當(dāng)成主庫接收所有寫流量新主庫只是作為只讀從庫在背后默默復(fù)制。數(shù)據(jù)看著沒丟但高可用完全失效了。后來我總結(jié)出一套相對(duì)順暢的切換流程確認(rèn)MHA完成主從切換新主庫狀態(tài)正常修改Atlas.conf把舊的proxy-backend-addresses改成新主庫地址把舊主庫地址加入proxy-read-only-backend-addresses用mysql-proxy --defaults-file... --reload有些版本是HUP信號(hào)嘗試熱加載配置如果版本不支持就重啟Atlas重啟后立刻在管理端口執(zhí)行SELECT * FROM backends;確認(rèn)主從角色正確讓業(yè)務(wù)側(cè)做一輪功能回歸測試確認(rèn)寫入讀取都正常整個(gè)切換過程我們后來控制在分鐘級(jí)別而且專門做了演練確保操作人員不需要臨時(shí)翻文檔就能執(zhí)行。5.3 FOR UPDATE語句導(dǎo)致的死鎖誤判有一次業(yè)務(wù)頻繁報(bào)死鎖但數(shù)據(jù)庫自身的死鎖日志根本不顯示任何記錄。查了半天發(fā)現(xiàn)是業(yè)務(wù)代碼里在事務(wù)里用了SELECT ... FOR UPDATEAtlas判斷正確地將它路由到了主庫但由于同一個(gè)事務(wù)里的普通SELECT被路由到了從庫瞬間產(chǎn)生了兩個(gè)不同的連接一個(gè)在主庫鎖定行一個(gè)在從庫讀取快照。此時(shí)如果主庫的行一直鎖著從庫讀請(qǐng)求依賴的binlog位置就會(huì)一直等待業(yè)務(wù)表現(xiàn)為死鎖超時(shí)。這個(gè)問題的根源是Atlas的讀寫分離粒度太粗它對(duì)“事務(wù)內(nèi)語句”沒有明確的黏合機(jī)制。解決思路有幾種一是把此類需要嚴(yán)格一致性的查詢都顯式加上FOR UPDATE強(qiáng)制走主庫二是在配置里將所有該業(yè)務(wù)的用戶設(shè)為只走主庫也就是把該用戶加進(jìn)非讀寫分離名單三是修改代碼把事務(wù)內(nèi)的查詢和寫庫操作合并到同一個(gè)連接上執(zhí)行。第三種方案最徹底但需要業(yè)務(wù)配合改動(dòng)。我當(dāng)時(shí)是讓業(yè)務(wù)把事務(wù)內(nèi)的讀改成了FOR UPDATE或者干脆在事務(wù)里只做寫操作事務(wù)結(jié)束之后再做查詢。這個(gè)方案治標(biāo)也治本至少業(yè)務(wù)保持一致性了。5.4 連接數(shù)被打滿Atlas自身線程和MySQL連接數(shù)的聯(lián)動(dòng)關(guān)系A(chǔ)tlas默認(rèn)的連接池行為是一個(gè)前端連接對(duì)應(yīng)一個(gè)后端連接。如果業(yè)務(wù)方連接池配置得比較大比如最小連接數(shù)200最大連接數(shù)500同時(shí)有多個(gè)服務(wù)連同一個(gè)Atlas那Atlas到后端的MySQL連接數(shù)會(huì)非??鋸?。MySQL默認(rèn)最大連接數(shù)是151很快就被打滿了。解決這個(gè)問題需要多端聯(lián)動(dòng)調(diào)大MySQL的max_connections但要有度別把系統(tǒng)資源拖垮控制業(yè)務(wù)連接池大小不要在連接池里設(shè)置過大的空閑連接數(shù)在Atlas層面event-threads線程數(shù)不要盲目調(diào)大設(shè)成CPU核數(shù)比較合適讓Atlas和MySQL之間保持內(nèi)網(wǎng)通信降低TCP連接建立時(shí)間我這里給出一個(gè)我經(jīng)過壓測調(diào)優(yōu)后的參數(shù)組合供參考參數(shù)位置參數(shù)名推薦值說明my.cnfmax_connections1000根據(jù)最大并發(fā)和內(nèi)存綜合評(píng)估m(xù)y.cnfwait_timeout60讓空閑連接盡快釋放Atlas.confevent-threadsCPU核數(shù)太高反而引入上下文切換開銷Atlas.confwait-timeout60和MySQL保持一致業(yè)務(wù)連接池maximum-pool-size50~100按服務(wù)實(shí)例數(shù)和吞吐量評(píng)估5.5 分表鍵沒走索引少了一個(gè)普通的WHERE條件引發(fā)的慘案分表鍵的選擇也很講究。前面說業(yè)務(wù)查詢必須帶上分表鍵但如果你帶的是個(gè)區(qū)分度很低的字段比如狀態(tài)字段那分表本身意義不大因?yàn)楣=Y(jié)果會(huì)集中在某幾個(gè)分表上造成數(shù)據(jù)傾斜。更嚴(yán)重的是如果你在建表時(shí)沒有為分表鍵建索引那么即使路由對(duì)了分表在分表內(nèi)部也會(huì)產(chǎn)生全表掃描。分表只是把你的大表變成多張小表但如果你不建索引每張小表依然要全掃。所以設(shè)計(jì)表結(jié)構(gòu)時(shí)必須把分表鍵納入索引設(shè)計(jì)的第一優(yōu)先級(jí)。一般建議分表鍵同時(shí)是查詢高頻條件比如訂單號(hào)、用戶ID。這樣既能精準(zhǔn)路由又能在單表內(nèi)用上索引性能才真正有保障。6. 日常運(yùn)維與監(jiān)控讓Atlas穩(wěn)定運(yùn)行的管理手段一個(gè)中間件跑起來之后日常維護(hù)工作其實(shí)不少。Atlas本身提供的功能有限但用好管理和監(jiān)控手段還是能過得比較從容。6.1 管理接口的實(shí)用命令管理端口是整個(gè)運(yùn)維的核心入口以下命令是我最常用的-- 查看所有后端節(jié)點(diǎn)的狀態(tài) SELECT * FROM backends; -- 動(dòng)態(tài)加入一個(gè)從庫節(jié)點(diǎn)避免重啟 ADD RO BACKEND 10.0.0.5:3306; -- 動(dòng)態(tài)下線一個(gè)后端節(jié)點(diǎn)常見于數(shù)據(jù)庫實(shí)例維護(hù) REMOVE BACKEND 3; -- 查看當(dāng)前Atlas的配置信息 SELECT * FROM config;動(dòng)態(tài)上下線功能特別重要。比如要從庫做備份或者升級(jí)直接REMOVE再ADD業(yè)務(wù)側(cè)完全無感知不需要重啟Atlas。6.2 日志是排障的第一現(xiàn)場Atlas的日志目錄下一般有sql.log和error.log。sql.log在log-leveldebug時(shí)記錄每一條SQL的路由詳情error.log則記錄運(yùn)行時(shí)的錯(cuò)誤信息。平時(shí)排障我的順序是先看error.log再看sql.log最后看系統(tǒng)層面的dmesg和MySQL慢查詢?nèi)罩?。調(diào)試SQL路由問題時(shí)一條典型的debug日志大概長這樣[DEBUG] 2024-05-20 10:15:30: (sql) SELECT * FROM T_ORDER WHERE ORDER_ID 123 - route to backend 10.0.0.3:3306, table: T_ORDER_5看到這行日志你就能明確知道這條SQL被路由到了哪個(gè)從庫、哪個(gè)分表。如果發(fā)現(xiàn)路由結(jié)果和預(yù)期不符先檢查分表規(guī)則文件再檢查SQL是否帶了正確的分表鍵。6.3 監(jiān)控項(xiàng)不盯這些出了問題只能干瞪眼根據(jù)我對(duì)Atlas長期的運(yùn)維觀察下面這幾個(gè)監(jiān)控指標(biāo)至少要有Atlas進(jìn)程是否存活最簡單一個(gè)進(jìn)程監(jiān)控腳本或systemd守護(hù)就能解決管理端口能不能連能連說明進(jìn)程本身沒死但可能處在異常狀態(tài)backends里各節(jié)點(diǎn)的連接數(shù)如果某個(gè)后端節(jié)點(diǎn)連接數(shù)異常高大概率是有慢查詢堵住了連接池Atlas到后端的響應(yīng)延遲可以用tcprstat之類工具統(tǒng)計(jì)Atlas和MySQL之間的網(wǎng)絡(luò)延遲也可以直接在MySQL端開general_log觀察Atlas過來的請(qǐng)求是否變慢分表數(shù)據(jù)分布是否均勻定期抽查各分表的行數(shù)確認(rèn)數(shù)據(jù)沒有嚴(yán)重傾斜這些監(jiān)控項(xiàng)不用全部自己造輪子如果你有Zabbix或Prometheus可以直接接進(jìn)去。Atlas沒有官方exporter我當(dāng)年是用腳本輪詢管理端口拿到狀態(tài)數(shù)據(jù)再轉(zhuǎn)成metrics推到Prometheus畫到Grafana上。效果挺好中間件自身的狀態(tài)一目了然。6.4 高可用架構(gòu)的完整形態(tài)最后說一個(gè)理想的Atlas部署形態(tài)避免讀者在搭建時(shí)只在單臺(tái)機(jī)器上跑一個(gè)Atlas就以為完事了。我建議的架構(gòu)是兩臺(tái)機(jī)器各部署一個(gè)Atlas實(shí)例前置一臺(tái)HAProxy做負(fù)載均衡后端的MySQL主從由MHA或自研工具負(fù)責(zé)切換。這樣任意一臺(tái)Atlas掛了HAProxy會(huì)自動(dòng)摘除業(yè)務(wù)流量全部轉(zhuǎn)發(fā)到存活的那臺(tái)。Atlas本身是無狀態(tài)的代理配置保持一致即可不涉及數(shù)據(jù)同步問題所以高可用實(shí)現(xiàn)起來并不難。后端MySQL層面主庫掛了MHA自動(dòng)切換然后通過外部腳本更新兩臺(tái)Atlas的配置。整個(gè)鏈路里HAProxy是唯一還需要再考慮高可用的點(diǎn)通常再配一組Keepalived漂移VIP就能解決。這套架構(gòu)跑下來數(shù)據(jù)庫入口層基本就沒有明顯的單點(diǎn)了。業(yè)務(wù)方只認(rèn)一個(gè)VIP背后具體是哪個(gè)Atlas在扛、哪臺(tái)MySQL是主都跟業(yè)務(wù)無關(guān)運(yùn)維自主可控。回到Atlas這個(gè)項(xiàng)目本身雖然它不像今天云原生時(shí)代的很多新組件那么花哨但作為MySQL中間件領(lǐng)域一個(gè)極其務(wù)實(shí)的開源項(xiàng)目它的設(shè)計(jì)思路和實(shí)現(xiàn)方式放到現(xiàn)在的很多場景里依然有參考價(jià)值。如果你正在評(píng)估輕量級(jí)讀寫分離方案或者想理解代理層數(shù)據(jù)庫中間件的工作機(jī)制Atlas確實(shí)是個(gè)值得研究的樣本。最后留一句實(shí)在話任何中間件都只是工具用得好不好關(guān)鍵還是理解它背后的路由邏輯和邊界條件。配置照著抄很簡單真正考驗(yàn)功力的是出了問題之后你能不能從一堆日志里快速定位到它把SQL送到了哪里、為什么會(huì)送錯(cuò)。掌握這個(gè)能力比會(huì)裝一個(gè)Atlas值錢多了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
婷婷碰碰| 99热香港| 久久婷婷五月综合啪| 99热最新国内| 这里只有精品在线观看视频| 色色性爱视频| 涩五月丁香| 亚洲热久久| 五月天激情图片网| 成人做爰A片免费看视频| 色爱终和网| 综合激情肏逼网| 五月婷婷av| 五月丁香激情在线| 久青青久| 色一情一乱一乱一区91| 五月丁香婷婷色播无码| 无码少妇高潮喷水A片免费| 五月婷亚洲精品| 激情婷婷五月女| 久久91久久精品久久| 日本美女五月天| 婷婷五月天国产精品| 综合色图婷婷| 日逼AV影音先锋男人资源站| 婷婷五月天福利| 5五月综合网亚洲| 广东99色在线| 白人荫道BBWBBB大荫道| 国产成人+综合亚洲+天堂| 婷婷五月久久| 亚洲色A| 在线天堂9| 欧美交换配乱吟粗大25P| 老司机日日夜夜青草| 这里只有精品在线视频精品| 国产精品电影| 亭亭丁香aV| 亚洲成人网站在线| 九九热精品99| 久久婷婷色综合| 人妻有码乱操| 亚洲国产成人AV在线 | 色99在线观看| 亚洲高清在线| 99久久综合网| 国产精品久久久久久妇女6080| 五月天婷婷操逼视频| www.99成人视频| 五月天播播综合| 91丨九色丨丰满人妖| 久久XX日本综合| 婷婷综合网| 综激情网| 五月丁香六月婷婷久久| 亚洲色婷婷| 日本久久高清| www.久久99| 中文字幕 码精品视频网站| 天天操夜夜夜拍拍拍| 婷婷国产综合| 日本九九热| 婷婷五月欧美综合| 大地资源色婷婷视频在线| 婷婷五六日| 精品无码色| 91精品综合久久久久久五月丁香| 久久国产精品乱子伦_靑青草…| 五月婷婷av| 91超级碰| 五月在在观看| 天天操狠狠操| 九色无码| 五月丁香影院| 99操不停| 99在线69| 久久精品小视频| 婷婷五月天六月综合| 天天综合激情| 天天爽,夜夜爽| 久久这里只有精品8| 99视频久久| 开心激情站| 五月久久婷婷天堂视频| 99热| 日99网站| 99在线视频播放| 黄网在线播放| 中文字幕性爱丰满| 亚洲AV成人片无码网站| www,婷婷,com| 久久婷婷色| 色色日韩| jiZZdr| 九九色影视| 天天色天天操天天射| www99热| 狠狠爱深色婷婷综合| www.久操| www色婷婷久久综合久色| 五月激情精品视频| 色噜噜五月天| 91色综合网站在线| 九九热视频精品2| 97色色色色色色色色色色色色色| 亚洲成人中心| 99在线精品免费视频| 无码 av电影| 色色网91| 丁香色情五月综合网站| 99热伊人| 99热丁香| 色五狠狠| 被强行糟蹋的女人A片| 久久se 综合网| 日本女人久久| 九九这里都是精品| 日韩黄在免| 在线观看亚洲视频影院| 婷婷五月天激情基地| 五月婷婷六月丁香综合| 久久婷婷色综合老司机| 很很干在线视频| 天天色噜| 久久亭亭电影| 我要射综合| 亚洲另类婷婷综合| 成人短视频在线免费观看| 久久九九99| 五月丁香婷婷激情澎湃四射 | 综合色五月| 超碰人人插| 亚洲1区| 66色在线日韩| 丁香六月青青草| 国产婷婷五月中文字幕高清| 99re8在这里只有精品| 色婷婷五月综合色婷婷| 婷婷丁香五月天亚洲| 在线观看的av| 97人人做| 五月激情网站| 欧美三日本三级少妇三99| 五月丁香婷在线| 五月丁香婷婷六月| www.色婷婷| 69色婷婷| 人妻久久婷婷| 99九九99九九九视频精彩| 色青青电影色五月| 久久久久人妻中文| 一级韩国产精品毛| 久久久久久久久人妻| 性无码专区无码| 人妻中文在线| www.婷婷| 久色中文| 色婷网站| 丰满熟女人妻一区二区三| 99热伊人| 99热这里有精品2| 99在线观看| 九九国产视频| 丁香网站| 人人人va亚洲视频在线| 亚洲国产另类av| 日韩青青| 亚洲色 视频| 久久久久亚洲AV综合| 婷婷丁香六月五月天| 婷婷色综合| 亚洲黄色精品| 国产67194| 天天插天天玩天天干| 99热1| 夜夜资源站| 九月综合| 日本的α片xxxwww| 91呦呦呦| 国产精品视频免费看| 久久图色4| 草综合14| 色色精品色| 狠狠操狠狠| 九九免费视频在线| 国产AV网页| 久久少妇视频| 日韩久热| 国外亚洲成AV人片在线观看| 热思思| 欧美一级毛卡片无码| 丁香五月a| 亚洲精品中文字幕成人片| 少妇激情五月天| 久热99热| 亚洲精品无人区| 91肏肏肏| 九九精品这里只有| 伊人激情| 五月激情综合婷婷| 天天干天天爽天天操| 91超碰人人操| 久久这里只有精品16| 丁香网五月天| 欧美日本黄色| 九玖欧洲亚洲| 99热99成人| 另类小说五月天| 狠狠操在线视频| www.夜夜爱.com| 九九热视频在线观看| 丁香九月激情| 激情婷婷99| 嫩草视频在线观看| 26uuu欧美激情另类| 97色97干| 久草视频大香蕉99| 婷婷久久网| 五月天精品综合| 91碰在线| 99综合| 久久这里只有精品16| 国产免费性爱| 开心深爱激情网| 婷婷五月激情在线| 六月婷伊人| 综合伊人久久| 久久丁香社| 欧美日韩成人在线| 激情综合五月| www.久久爱.com| 色播五月丁香婷婷| 婷婷丁五月| 狠狠色婷婷综合开心影视| 思思热视频| 天天摸天天日天天舔| 婷婷啪啪| 综合啪啪| 九九狠狠干| 亚洲超碰中文字幕| 99精品偷自拍| 日本少妇裸体做爰高潮片 | 可以看的AV| 五月婷婷开心亚州在线| 婷婷五月天影视网址| 五月丁香在线观看99| 久热在线中文字幕色999舞| 亚洲婷婷基地| 精品久久9| 激情婷婷另类| 色大综合| 男女久久婷婷五月天| 99色在线视频观看| 99re在线视频精品,这里只有精品18,| 影音先锋色婷婷| 七七久久婷婷| 亚洲AV永久无码影院黑人 | AA片在线观看视频在线播放| 久99热| 综合激情在线| 婷婷久久丁香五月| 五月天色不卡| 夜夜躁婷婷AV| 日本三级中国三级99| 色亚洲欧洲| 99色在线| 午夜天堂啪啪| 国产成人精品一区二三区熟女在线| www久久99| AV在线大香蕉| 国产精品美女| 九九九激情综合| 婷婷伊人綜合中文字幕小说| 天堂成人A片永久免费网站| 日本天天色| 久久婷婷视频| 伊人久久丁香狠狠婷婷综合香蕉| 丁香五月婷婷色综合| se色婷婷视频| 五月婷婷久久大片| 一本九九色| 九九成年视频| 色九月婷婷综合| 91九色精品女同系列| 久9热| 九九热a| 玖热精品综合视频| 婷婷免费无视频| 青吴乐视频| 色域五月丁香| 棕合影院色色| 密臀久久| 六月丁香色婷婷| 桔色成人在线| 美欧日韩国产成人在战| 99视频| 成功精品影院| 人人操人人添人人摸97| 色色色99| 狠狠操狠狠做| 国产 码在线成人网站| 99九色视频在线观看| 51成人| 色狠狠五月天| 狠狠狠夜夜夜| 久久久久这里只有精品| 日韩小视频在线99| 激情六月婷婷| 亚洲色综久久五月| 9久久精品| 日本猛少妇色XXXXX猛叫| 婷婷久综合| WwW色婷婷| 婷婷丁香五月激情密臀av| 9色在线视频| 男女啪啪做爰高潮无遮挡| 婷婷色色综合| 婷婷五月天免费小说| 五月丁香天堂网婷婷| 26uuu精品国产| 激情四射网| 精品人妻伦一二三区久久| 五六月婷婷久久| 激情综合啪啪| www.99热| 久久您您综合网| 亚洲免费观看高清完整版AV线| 蜜乳9188| 99热网址| 超碰自拍天堂| 色五月久久成人婷婷| 一级黄色尤物综合视频手机在线观看| 99热在线观看| 操91| 久热黄色| 碰久久精品w| AV中文在线| 天天狠狠干| 成人丁香| 91超碰人人操| 97干在线看| WWW色五月天| 久久亚洲天堂| 校园春色亚洲色| 影音先锋一区二区三区| 丁香五月婷婷在线| 久婷视频| 26uuu亚洲欧美日本| 激情五月综合| 97人妻碰碰中文无码久热丝袜| 五月色天情| 狠狠干狠狠干| 99热精品在线播放观看| 伊人婷婷五月天| 99玖玖在线视频| 色日本网| 亚洲精品九九| 天天射色五月天| 国产精品久久久久久久久久免费| 五月激情婷婷图片基地| 夜夜干天天操| 六月婷婷天天操夜夜爽视频| 日本一毛片| 91人人爽人人操| 五月天色网站| 婷婷综合伊人| 五月丁香综合在线| www久久久久| 伊人五月成人| 日本三级毛片| 91碰碰视频| 五月婷婷丁香大陆免费| 91欧美日韩综合| 婷婷丁香九月| 99久久性爱| 婷婷丁香成人| 北京熟妇搡BBBB搡BBBB| 婷婷五月婷婷五月天| 日本精品人妻无码77777| 婷婷开心深爱五月天| 婷婷六月综合激情| 五月开心六月婷婷在线播放网站| 国产肥白大熟妇BBBB视频| 成人色站,在线视频,看片-SS1AV| 久久视频在线视频| 婷婷五月天狠狠搞干| 六月婷欧美丁香综合| 五月天精品综合| 日韩无码亚欧无码| 五月色婷婷影院| 五月丁香六月综合基地| 天天日天天插| 99久久综合精品五月天| 玖玖五月丁香| 九九这里有精品| 日韩五月婷婷| www.国产色| 五月天色播网| 国产探花一片区| 日韩AAAAA| 国产日韩av片| 少妇人妻人伦A片| 青草性爱视频| 三级99热| 超碰人人色| 五月丁香WWW| 色综合久久久无码中文字幕999| 99综合激情久久精品久久| 五月婷婷色色网址| 99热这里有精品| 五月天伊人日日噜影片AV| 在线播放 精品| 这里只有精品69| 色色色97| 精品一二三区久久AAA片 | 婷婷色系婷色| 婷婷丁香成人五月天| 26uuu| 热久久精品视频网站| 婷婷性爱综合| 五月丁香在线| 日本3级片一区2区| 五月色丁香婷婷中文字幕| 日韩成人影片在线观看| 激情五月婷| 淫荡综合网| 激情综合区| 热99视频精品在线| 天天操综合网| 五月丁香激情综合| 五月天婷婷青青草| 日日日日做夜夜夜夜无码| 9 1大香蕉| 激情五月综合婷婷| 2025色婷婷| 久久五月天激情婷婷| 色99免费视频中文| 天天干天天日蜜臀av| 色色丁香五月天| 五月丁香六月婷婷久久久综合| 久久性刺激| 68热超碰在线| 人妻体体内射精一区二区| 婷婷五月激情的图片| 六月丁香深深爱| aa久久| 婷婷丁香大香蕉| 99ri在线视频| 久久天堂网| 91大屁股| 久久婷婷六月综合资源| 99er6免费视频热播| 奇米影视在线视频| 99热最新国内| 国产XXXX搡XXXXX搡麻豆| www.久久久久| 激情久久久久久| 五月丁香六月婷婷综合网站| 婷婷色丁香五月| 五月丁香色婷婷婷基地| 日韩精品一品二区三区的使用体验 | 婷婷五月天亚洲| 久久9热| 99热在线这里| 99热久久这里只有精品2010| 五月美女婷婷风骚| 激情AV网| 婷婷五月花.97| 99熟女| 婷婷五月天久久久| 99热在这里只有精品| 天天综合色| 日日爽日日| 久久激情五月天| 伊人午夜综合色啪| 激情五月狠狠| 久色婷婷200| 人妻操在线看| 99re热视频这里只精品5| 巴基斯坦粉嫩无码视频| 曰日爽日日操| 99色| 在线中文字幕视频| 五月婷婷,六月丁香| 色五月天丁香| 五月天丁香| 九九这里只有精品| 亚洲综合色成丁香五月色| 91人在线观看| 九月丁香婷婷网| 99视频日韩| 热久久婷婷| 久久女人九九| 天天综合网91| Av狠狠色丁香婷| 丁香婷婷人妻综合网| 桔色成人官方网站| 五月婷婷色激情| 色狠久| 亚洲欧美婷婷五月色综合| 天天操中文字幕| 色色五月天丁香| 99爱视频在线观看| 色级停停| 日本WWW九九九| 亚洲第一成人无码A片| 成人午夜无码视频| 欧美成人网婷婷综合在线| 亚洲bt丁香五月天婷婷激情小说| 超碰无码318604| 超碰人人干| 99 频99热国里只有精品| 亚洲色婷婷网站| 五月深爱网| 天堂在线9| 久9视频| 日韩在线观看网址| 伊人色综合影院视频| 丁香五月 综合| 婷婷五月丁综合| 久久电影4399| 婷婷五月天99综合网站| 人人97碰| 激情五月亚洲| 色色色色色色网站| 欧在线一区| 一本久道综合色婷婷五月| 婷婷亚洲丁香五月| 影视av久久久噜噜噜噜噜三级| 欧洲色| 色欧美日| 色小说婷婷五月天天天| 久草性爱| 色色色色色九九九九九| 丁香五月激情天AV无码| 夜夜干天天操| 99热只有| 亚洲天堂久久| 丁香桃色网| 精品人妻伦一二三区久久| 伊人成综合五月婷婷| 狠狠操狠狠爱| 五月婷婷成人| 色99久草在线| 婷婷五月天va| 色色五月天婷婷| 激情五月婷色| 久久草婷婷丁香网站| 热久国产| 丁香久久激情俄| 婷婷五月天少妇| 玖玖爱资源站| 在线伦子99热| 天天操天天爱天天玩| 久热免费视频| 五月婷婷色色色| 老司机日日夜夜青草| 婷婷综合五月| 婷婷丁香宗合888| 人人人va亚洲视频在线| 欧美三级巜人妻互换| 草草视频91| 日亚二欧美| 久久综合香蕉国产国产蜜臀AV| 婷婷五月天成人动漫 | 激情综合4月| 久99综合婷婷| av在线播放网址| 五月亭亭综合五码| 久久五月婷天天干| 激情小说五月天中文字幕| 99视频在线| 性欧美日本| 超碰不卡在线| 五月天丁香成人| 岛国av网站| 伊人激情网| 26uuu另类亚洲欧美日本一| 强辱丰满人妻HD中文字幕| 久久久久久久综合狠狠综合| 色色色色综合网| 婷婷六月激情小说网| 99九色视频在线观看| 九九视屏| 91九色无码日韩| 日韩操女| 免费婷婷| 丁香六月婷月91婷月| 人妻无码精品一区| 老司机午夜福利视频金瓶梅| 99热在线观看| 狠狠色婷婷六月激情网| 色色色色色色色色色色色色色色,网站| 五月婷婷色吧!| 在线成人va| 婷婷五月骚厕所| 影音先锋AV男人站| 久久久27操| 九九操操| 成人综合网站| 激情六月一二| 国产成人精品亚洲线观看| 99热99艹在线观看| 99热99日…..| 欧美成人在线观看| 婷婷激情五月综合| 天天综合网91| 人妻内射一区二区在线视频| 婷婷五月18永久免费视频| 91九色 熟| 欧美成人va| 人妻中文在线| 色五天综合| 五月好婷婷| 在线视频激情网站| 六月激情婷婷| 骚。com| 久久久久婷 | 久久人人九九| 天天狠狠插| 99色在线视频观看| 99热在线观看免费精品| 伊人婷婷五月| 秋霞成人毛片一级A片| 国产激情综合五月久久| 79色色色色| 超碰操网| 九九婷婷热| 亚洲乱码在线观看| 久久五月婷婷开心网| 婷婷综合一二三| 狠狠爱综合网| 欧美成人精品A片免费一区99| 丁香五月天AV在线| 五月婷婷丁香综合,亚洲天堂| 色婷婷亚洲精品天天综| 99热这里只要精品免费| 久久综合丁香五月| 五月丁香888| 国产看真人毛片爱做A片| 亚洲精品婷婷| 天天摸日日舔狠狠添婷婷婷| 久久综合干| 欧美A片在线视频免费观看| 日本久久精品| 丁香五月天成人网站| 人妻性爱| 9久久婷婷国产综合精品性色| 99免费超碰在线| 玖玖色综合网| 五月婷婷在线免费| 亚洲麻豆乱码国产2028| 激情网五夜婷婷| 99干99| 国产毛片精品一区二区色欲黄A片| 夜夜干夜夜操| 丁香五月色五月婷婷宗合| 91啪啪视频| 色情五月天导航| 五月色情| 五月天伊人| 激情五月天综合| 26uuu激情五月天| 99色在线| 婷香五月| 色女人久久| 91九色成人原创视频| 夜夜操加勒比| 超碰v| 激情综合五月| 久碰视频| 五月丁香亚洲综合| 亚洲五月天婷婷| 五月婷婷在线观看黄| 日日夜夜狠狠干| 亚洲VA在线| 色五月天综合| 天天人人天天爽| 久久欧洲久久| 婷婷五月在线综合| 久久五月天合网| 婷婷偷拍网| 五月丁香婷婷久久| 另类图片色五月| 国产激情在线| 97色片| YJLZZJLZZ亚洲乱熟无码| 91激情五月开心| 操人久久| 91九色精品女同系列| 97干视频在线| 182TV大香蕉| 91疯狂操操操操| 色婷av| 婷婷久久性爱| 午夜色婷婷| 婷婷在线播放av| 久久中文人妻系列| 五月天婷婷基地| 在线国产精品色| 九九热九九| 亚洲天堂AAA| 久久久久人妻中文| 亚洲色优| 久久婷婷啪啪视频| 婷婷成人五月天| 99热在线观看| 久久综合站| 欧美熟妇一区二区三区| 大香蕉婷婷色| 色婷婷精品小视频| 婷婷激情五月天在线| 色婷婷五月天视频网站| 婷综合| 狠狠色婷婷7777久| 精品久久穴| 任你搞在线观看视频| 婷婷激情视频| 日韩抽插操逼| 激情五月天色爱| 亚洲中文乱字字幕在线永久| 九九色婷婷| 日本精品人妻无码77777| 99惹 精品在线| 亚卅毛片| 成人婷婷深爱综合网| 天天做天天摸| 超碰成人在线观看| 亚洲国产精品VA在线看黑人| 888久久久| 99re最新地址视频| 精品人妻久久久久| 99精色| 9热成人在线视频| 丁香九月综合激情| 欧美天天性| 综合久久久| 日日影院 | 综合色影院| 丁香五月婷婷呀| 激情五月天色播| 中字幕视频在线永久在线观看免费| 久久99日本精品视频免费观看| 国产67194| 色色色色色色色色色色色色色色,网站| 大香蕉啪啪| 久久九九热re6这里有精品| 99热青青草| 五月婷婷欧美激情| 99久视频| 久久总和99| 99爱免费视频| 五月天激情小说| 日本精品干| 中文不卡一二区| 狠狠五月天| 五月天婷婷社区久久综合| 婷婷瑟五月天久久综合| 99久在线观看| 丁香六月欧美| 69午夜成人影片| 日韩另类| 九九人人自拍| 色色色色色网站| 免费观看全黄做爰的视频| 婷婷的99视频网站| 五月婷婷综合在线| 白度黄视频| 6080av| 少妇综合网| 国产激情av| 五月天综合激情网| 五月婷婷丁香日韩在线| 婷五月丁香| 五月婷婷综合在线| 综合激情在线视频| 九九热最新| 久久一伦| 99热这里只有精品22| 无码视频国内精品久久久| 欧韩性爱| 日本99久久| 色色五月婷婷| 日韩视频99| 曰曰久久| 粉嫩av懂色av蜜臀av熟妇| 91se在线观看| z色五月播播久久| 97ai婷婷| 欧美成人性爱网| 在线观看视频1区| www开心激情网| 成AV人片一区二区三区久久| 久久AAAA片一区二区| 九九热在线视频| 久久永久网址| 大香蕉综合网| 欧美综合婷婷网| 婷婷情色开心五月天99| 亚洲九九99精品视频在线播放| 国产真实乱了老女人视频 | 俺去也综合| 激情宗合 激情宗合| 99热思思| 99 re视频一区| 色啪综合| www.夜夜操.con| 九九热免费视频| 99热综合在线观看| Av中文在线| 噜噜狠狠色综无码久久合欧美| 久久狠婷婷| 激情综合网址| 色婷婷五月天天天天天| 香蕉久久国产AV一区二区| 天天在线天天综合网色| www.色五月| 丁香五月婷婷激情蜜桃| 色婷大香蕉| 色婷婷a v| 色很很96| 色五月丁香A欧美com| 99免费在线| 伊人www22综合色| 可以免费观看的AV| 99热99这里有免费的精品| 91主播在线| 色六月婷婷| 电影《战争与艾拉》免费观看| 七月丁香五月婷婷在线| 丁香五月六月综合激情| 色婷婷久久| 久操欧美在线观看97| 五月丁香六月婷婷操操操| 久久久999精品| 亚洲日韩一页精品发布| 五月婷婷中文字幕| 99色热| 超碰国产在线播放| 激情无码网| 色色色在线免费视频| 婷婷五月丁香四射| 久久人人超| 激情五月天无码| 激情图片婷婷丁香五月| 色999五月色| 婷婷性爱五月天| 狠狠舔| 亚洲视频在线网| 亚洲六月色| 天堂AV在线看| 五月五婷婷网| 婷婷五月天av小说| 亚洲婷婷免费| 婷婷五月天开心激情网| 99色视| 91综合视频在线| 婷婷丁香五月综合| 五月激情站| 天天色综合色| 超碰91av| av人人操| 五月天激情国产综合婷婷婷| 久久最新色| 激情网五月婷婷| 五月丁香六月婷婷综合在线| 殴美97色| 亚洲妇女熟BBW| 综合色五月| 丁香五月欧美激情| 很很操很很操| www.色综合| av线电影| 91性交在线播放| 日本五月婷婷| 丁香五月AV| 96五月丁香熟女| 久久与婷婷| 久热九九| 香蕉五月婷婷| 在线中文AV| 丁香在线视频| 色色色999| 精品久热69| 99热精品中文字幕| 俺去啦综合网| 人妻久久久久久久久妻久久久久| 这里都是精品99| 婷婷九月狠狠色| 9久操| 99久热视频在线| 八戒青柠影视剧在线观看| 超碰人人操在线| 这里只有精品视频在线| WWW五月| 天天做 天天爱| 午夜九九电影| 色婷婷久久综合久色| 婷婷色丁香五月| 六月丁香停| 性爱激情小说AV五月丁香花| 成人在线免费网址| 亚洲成人网址在线观看| 激情五月天天| 综合 激情 婷婷| 亚洲成人影视在线| 超碰在线观看三级片| 成人做爰A片免费看网站找不到了| 激情丁香五月| 嫩草AV久久伊人妇女超级A | 淫五月停停| 99国产精品白浆在线观看免费 | 久久这里这里有精品免费视频| aa久久| 超碰93在线观看| 五月天丁香婷婷社区| www.97干视频| 97婷婷丁香| 色色丁香婷婷综合| 久久久com| 青青草原中文字幕| 天天拍天天做视频| 丁香五月婷婷成人网| 婷婷五月色亚洲| 九九热视频精品| 五月综合无码| 五月天丁香成人| 久久久婷| 欧美内射AAAAAAXXXXX| 97久久人人人干| 91在线视频观看午夜福利| www.cao.com久久| 婷婷五月综合性爱| 欧美碰碰碰| 欧美色宗和激情| 天天做天天爱天天日| 九九热这里只有精品12| 欧美美美女性色视频| 中文字幕av在线播放| 婷婷五月色| 国产小精品| 91碰操| 涩综合网| 亚洲五月婷婷在线| 淫荡综合网| 五月丁香影院 | 婷色五月| 99无码视频| 99天天操夜夜操| 超碰97免费在线| 狠狠五月激情在线| 激情五月天www| 激情人妻综合| 农村熟妇高潮精品A片| 91在线资源| 色色免费网站| 激情 婷婷 插| 九九在线视频| 99色视频| 一起草aV| 丁香六月婷婷缴情欧美| 色久五月天| 天天干天天干天天操| 久久9情免费| 91超碰九色| 99热只有这里才是精品| 网色99| 久久婷婷综合五月| 9l视频自拍9l视频自拍九色学生| www。狠狠干。com| 操骚货在线| 天天综合精品| 夜色综合网| 天天天天天色| 大香蕉婷婷色| 婷婷狠狠香蕉综合| 996er在线观看| 26uuu在线观看| 色婷婷五月天| 久9无码视频| 亚洲人妻一区二区| 亚洲热热视频| 超级碰碰碰碰视频| 久久只这里有精品| 欧美久热| 日本97久久久精品| 深爱丁香激情| 激情五月综合网| www. 五月. com| 五月婷婷久久网| 99在线精品视频| 97色综合视频| 伊人在线婷婷草| 丁香久久| 久久婷婷五月综合激情国产| 极品五月天| 三级av在线| 天天操天天操综合| 日日干夜夜干| se色99| 日本综合色图| 99视频这里只有免费精品| 色啪影院| 亚洲综合五月天婷婷丁香| 日韩黄色电影| 99伊人性爱在线影院| 日日噜噜夜夜狠狠久久丁香六月| www.丁香黄色五月天人与| 99r这里只有精品哦| 91久操| 丁香五月久久社区| 婷婷丁香人妻久久在线观看| 极品少妇XXXX精品少妇偷拍| 女人露出p毛视频www网站| 伊人激情综合网| www.9797国产| 激情丁香五月天图片| www.第四色99| 婷婷丁香五月,狠狠综合| 丁香五月婷婷基地| 婷婷六月丁香在线| 激情小说婷婷| 婷婷五月天堂网| 色色五月天激情| 五月丁香性爱| 五月天大香蕉| 综合久久婷婷| 久热婷婷| www.久久| www.夜夜操.com| 九九人妻福利| 久久a热| 99思思在线视频| 天天玩夜夜操| 五月丁香色婷婷婷基地| 99色在线| 狠狠狠狠狠狠狠狠狠狠狠色宗合图片| 色色色欧美| 婷婷另类开心| 草了bav视频在线观看| 综合色综合| www.久操| 夜夜操狠狠操| 99ri久久| 人人综合久| 久久人操| 激情五月婷婷| 涩涩五| 人妻视频一区而且二区| 99热99热在线| 色色色地址| 思思精品视频| 青草久久五月婷伊人| 欧美婷婷色| 狠狠干综合网| 久久久久久久久久91| 99热啪啪| 干亚洲天堂| 久久婷婷综合五月| 99视频这里有精品| 综合网色| 国产毛片欧美毛片久久久| 激情小说 五月天| 伊人碰碰婷婷| 婷婷丁香五月综合| 2025年最新亚洲在线欧美| 丁香五月天婷婷大香蕉| 免费97碰碰| 婷婷五月丁香六月伊人网| 婷婷五月激情欧美大胆视频| 人人爽天天爽| 香蕉综合在线| 中国无码av| AV色婷婷| 丁香六月激情综合网| 婷婷丁香五月基地| 亚洲高清在线| 久热视频A.| 99热欲| 狠狠色综合网站久久久久| 久久99久久99精品免观看软件 | 丁香五月开心婷婷| 色色五月天丁香| 久久久99精品免费观看| 99精品免费视频| .操區COm| 超碰99成人在线| 五月天激情小说| 久久这里只有欧美| 色色操| cao视频,现在观看| 永久精品| 激情五月天综合| 婷婷五月天激情四射| 国产性爱大片久久| 五月丁香 啪啪| 婷婷五月天亚洲图片| 生活片五区| www.ywav| 色色色综合| 亚洲综合另类| 六月丁香婷婷色69| 亚洲夜五月| 伊人干综合| 小骚穴电影| 综合 蜜月 婷婷| 激情六月婷婷啪啪| 日本不卡高字幕在线2019| 99这里只有精品|v| 亚洲综合视频网| 久狠狠狠| 婷婷深爱五月丁香| www,五月天激情| 五月激情婷婷色| 九九热在视频| 欧美成性色| 五月丁香啪啪啪| 91婷婷在线| 欧美色99| 亚洲色图45p| 99色| 精品久久婷婷| 亚洲AV免费国产电影| 人人操操97| 亚洲免费成人电影AV| 成人性生活免费观看。| 六月色丁香婷婷| 97搞在线| 中文超碰视在线| 亚洲一级 片内射网站在线观看| 嫩草极品| 99丁香五月| 99在线视频观看| www.丁香黄色五月天人与| 色婷婷狠狠禁18久久| 婷婷五月天桃花网| AV片在线观看| 天堂网亚洲色图| 亚洲视频久久| 99热99天堂| 伊人综合色干| 色综合九九色综合88| 中文AV在线播放| www.色婷婷| 色狠狠999综合网| 人色五月天婷婷| 9这里只有精品| WWW五月| 五月婷婷六月丁香五月| 91精品综合久久婷婷九色| AV在线大香蕉| 能看的AV| 国产做爰视频免费播放| 五月婷婷 婷婷五月 一区二区 久久久 | 丁香香五月激情免费视频| 五月天激日本色情在线| 丁香六月高清视频| www夜夜操wwwcon| 免费观看的婷婷五月视频在线| 九九成人| 91操人视频| 公的粗大挺进了我的密道| 无码成人播放器| 亚洲五月天色色| 99热日韩| 日韩五月天婷婷| 天天日夜夜帕| 色三级色三级| 狠狠狠狠狠干| 大香蕉网 久久| 亚洲婷婷丁香| 日韩狠狠色婷婷| 99热免| 99久在线精品99re8热| 五月婷婷激情综合在线| 激情婷婷五月天伊人在线观看| 五月激情网综合| 99自拍网| 国产精产国品一二三在观看| 精品导航在线x不卡| 综合激情五月丁香| 五月激情黄色小说| 欧美视频五区| 亚洲视频在线观看| 中文字幕性爱视频| 在线观看熟女少妇| 丁香激情综合| 99免费| 日本丰满久久| 开心婷婷中文字慕| 天天色激情| 天天色天天| 亚洲视频在线观看区| 99视频内射三四| 开心激情播播五月天| 看片视频在线免费日产在线看| 国产首页在线| 99视频内射三四| 婷婷五月天欧美| 99在线观看| 无码橾| 激情黄色小说五月天| 996er热| 久久日婷婷| 婷婷久久午夜网| 丁香五月中文字幕色播| 精品人妻午夜一区二区三区四区 | 99热黄| 色狠狠激情五月| 亚洲综合五月| av一级棒av| 久久久久这里都是精品| 色色性爱视频| 天堂成人A片永久免费网站| 91色五月| 五月丁香六月在线| 欧美精品在线观看| 久久综合九九| 成人在线日韩欧美| 五月丁香狠狠爱婷婷综合| 成人色站,在线视频,看片-SS1AV| 色丁香五月| 色丁香五月婷婷综合久久| 丁香婷婷六月天| 99综合视频| 色碰干| 色综合天天综合成人网| 婷婷五月天淫荡| 久久99激情| 久草五月天| 精品成人在线观看| 激情五月天影院| 亚洲综合碰| 五月婷婷手机在线| 国产精产国品一二三在观看| www.99视频| 97人人操人人爽| 91丨九色丨白浆| 殴美综合激情五月天免费视频| 婷婷伊人综合| 婷婷丁香成人网址| 国产精产国品一二三在观看| 99色这里| 日韩视频99| 99热老网站| 99精品自拍视频| 婷婷激情在线| 亚洲午夜一区二区| 久re热视频| 黄色精品五月婷婷| 99这里只有精| 综合久久久婷| 丁香五月在线播放| 久久码久久无清| 五月丁香偷拍| 亚洲V国产V欧美V久久久久久| 久久之人妻| 中文AV网站| 五月丁香婷婷爱激情综合网| 亚洲另类在线观看| 99精品在线播放| 色婷婷五月在线| 97人人草| 99热伊人| www..com色爱| 五月天社区婷婷|