欧美成人午夜精品久久久,国产?V天堂一区二区三区,欧美精品va在线观看,亚洲一区二区三区免费在线观看,av无码精品一区二区久久,欧美性爱视频不卡一区三区,欧美乱人伦视频在线观看,国产一级牲交高潮

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
返回資訊列表
色综合综合综合| se色综合网| 99这里只有精品视频免费| 精品99在线| 婷婷视频在线碰| 99 这里只有精品| 俺去也婷婷| 丁香五月激情宗合| 搡BBBB搡BBB搡五十| 人妻狠狠操| 五月丁香六月婷| 五月婷婷激情综合在线| 丰满少妇乱A片无码| 婷婷丁香五月视频| 亚洲成人网址在线观看| 五月天天天天天天天天天天天婷婷婷| 六月婷婷激情| 国产69久久久欧美黑人A片| 亚洲五月天综合色| 97人碰人操| 天天爽天天摸| 婷婷激情人妻| 99热精品在线| 深爱婷婷丁香五月激情| 九九色婷婷| 99精品在这里| 婷婷五月精品中文字幕| 天天肏高清在线| 日韩狠狠色| 91九色在线| 亚洲成人在线播放| 激情5月婷婷| 色婷婷久久综| 日韩精品AV一区二区三区| 五月久久婷婷| 99精彩视频网站在线| 色播五月婷婷综合| 色综合99色| 婷婷色五月天在线观看| 偷偷狠狠久久婷婷五月天| 欧美人与性动交CCOO| 久久机热这里只有| 亚洲成人AV在线播放| 亚洲热久久| 99热久久最新地址| www.97干视频| 极品少妇XXXX精品少妇偷拍| 夜夜爱网站| 91在线日| 日韩AV在线免费| WWW.桔色成人.COM| sewuyue第四色| 五月婷九九草| 精品一区二区三区四区五区六区| 五月天天天天天天天天天天天天天天天婷婷婷 | 激情九月婷婷| 五月丁香花婷婷玉莉AV| 人妻AV在线| 色色色激情网| 五月丁香成人网| 激情小说之五月| 日韩操啪| 亚洲精品国产熟女久久久| 人人人操B超碰| 久久久久激情| 色婷婷亚洲综合天堂| 人人操日| 99精品视频免费| WWW,五月| 丁香婷婷婷婷十二月在线观看视频| 天天躁日日躁狠狠躁日日躁2022年5月9日| 五月婷啪啪| 亚洲综合五月天婷婷丁香| 丁香婷婷视频在线| 亚洲婷婷激情888精品久| 午夜丁香六月婷| 看片视频在线免费日产在线看| 99日韩网站| 草草操操| 久久久久久97| 丁香五月综合久久| 青青久久五月| 麻豆AV一区二区三区| 色色色色色色色色色色色色色97| 手机AVAV天堂看网| 色婷婷在线视频久| 激情欧美婷婷| www久久久久久久97| 五月桃花网综合| 亚洲欧美婷婷五月色综合| www.99热视频在线观看| 五月婷久久草| 九九久久五月天| 99爱视频精品在线观看| 国内久久亭亭| 婷婷五月综合色中文字幕| 久久99国产综合精品免费| 996er热| 五月综合六月丁| www.超碰在线| 丁香五月综合婷婷| 五月伊人网| 日韩久操婷婷| 婷婷情色五月| 狠狠色丁香乆乆| 婷婷综合在线| 色五月天丁香| 婷婷免费视频| 天天摸天天做天天爱天天爽| 五月天天爽| 97涩涩丁香五月天| 青草久久五月婷伊人| 99视频精品| 色九九七七| 另类亚洲电影| yw.av| 久久97久久99久久综合欧美| 久久99热网| 五月天成人综合| 日韩99视频| 国产日韩亚洲欧美在线观看| 色婷婷AV五月天| 丁香五月天色综合| 99高级会所久久| 在线五月婷婷小电影| 99九无网码| 丁香六月天婷婷| 免费在线观看AV网站| 色色色99| 国产精品久久久久久久久久久久| 国产肥白大熟妇BBBB视频| 日本99视频| 99视频在线精品| 色色色综合| 五月天婷婷乱论小说| 第四色婷婷五月| 99综合网| 蜘蛛女免费观看完整版高清电影| 婷婷久久五月天亚洲欧美国产日韩在线观看 | a69在线视频| 91丨九色丨大屁股| 婷婷五月丁香高清无码| 天天日日爽| 97色啪| 99久精品视频| 国产婷婷综合| 久色网址| 久久伊人大香蕉| 99这里有精品视频| 99超超碰| 99精品视频推荐| 美女久久天堂| 国产黄色一级片| 色婷婷操逼网| 婷婷激情五月| 婷婷五月综合在线视频| 激情5月婷婷| 色婷婷六月| 九月综合| 99这里有精品视频| 亚洲一区二区 成人网站戴套| 伊人激情综合| 久久久久亚洲AV无码网影音先锋| 精品网站99| 干婷婷五月天| 狠狠色五月| 午夜激情综合| 丰满少妇猛烈A片免费看观看| 思思热99在线| 丁香五月婷中字幕| 五月婷婷香| 欧美色五月| 婷婷欧美激情综合| 国产熟妇乱子伦hd| 91日日日| 亚洲五月天伊人| 国产色99| 91成人性爱视频| 嫩草AV久久伊人妇女超级A| 三十熟女| 99亚洲精美视频在线观看| 91精品久久久久久77777| 国产伦理精品高清在线观看网站一区二区 | 久久超级碰碰| 亚洲看av的网站| 五月激情婷婷丁香| 亚洲九九视频| 丁香激情五月少妇| 日韩操人| 思思精品热在线| 欧美色色色色色| 色婷婷六月天| 色色五月婷婷网| 密臀av无码人妻精品| VA色婷婷| 精品人妻久久久久| 五月婷婷五月天| 天堂va久久久噜噜噜久久Va| 丁香六月婷婷久久综合| 亚洲人人操BD| 婷婷五月天久久| 久久综合五月情| 五月丁香六月香香蕉| 色亭亭影园| 综合99视频| 久久er免费视频| 狠狠色噜噜狠狠| 超碰人人操在线| 夜夜爽天天爽| 丁香婷婷91在线观看视频| 色色色色色色色综合| 99色免费观看全部| 蜜桃五月天| 狠狠爱婷婷丁香| 天天操天天操综合| 性视频久久| 色狠狠色综合久久久绯色aⅴ影视| 91人妻人人操人人爽| 天天做综合网色综合| 伊人久久大香线蕉av一区| 五月丁香777| 91操在线| 五月婷婷综合色啪| 99热6精品| www.婷婷五月天| 一级韩国产精品毛| 婷婷五月天性| 中文字幕日产A片在线看| 男人的天堂97| 天天色,天天日,天天做| 五月开心播播网| 精品久久久999| 久久久久人妻精选| 久久AV无码精品人妻系列试探| 色天堂A| 久久婷婷五月天亚洲欧美| 99热这里只有精| A1片久久| 深情五月天| 四虎国产精品永久在线国在线| 99精品久久久久| 超碰免费人| 久久九色| 婷婷综合亚洲| 啪啪东京热| 五月婷婷婷婷婷婷艺术| 中文字幕无码人妻少妇免费视频| 五月天快乐开心激情网| 五月丁香综合网| 婷婷午夜激情| 九九久久99精品免费观看www| 大鸡巴伊人网| 激情网五月婷婷| 欧美日韩中文国产一区发布| 少妇婷婷五月天| 97色色色| 深爱五月激情综合| 人妻人人操| 天天噜日日噜综合无码| 欧美97色| 婷婷精品在线| 三级三久久线久久99久目本WW| 天堂久久大香蕉| 色丁香五月婷婷在线| 被男人添B超爽视频| 久久激情视频| 天天玩夜夜操| 99r这里只有精品哦| 综合在线色婷婷| 亚洲天堂色| 少妇激情五月婷婷| 色婷婷在线电影| 日日操夜夜爽天天天| 噼里啪啦在线观看免费完整版视频 | 人人叉久| 9l视频自拍九色9l视频在线观看| 丁香婷婷五月综合欧美另类| 日韩久综合| 丁香五月六月综合欧美| 性爱五月丁香| 激情综合网五月激情| 色丁香婷婷| 欧美日韩123| 五月丁香大相交| 天天爱天天秀天天做| 婷婷久久18| 激情五月天偷拍综合网| 操逼毛片国语对白| 色99视频| 激情综合另类| 欧美性交一区二区三区| 五月丁香91| 婷婷色在线观看| 99热色精品| 狠狠色噜噜狠狠色噜噜噜999| 国产精品色色| 丁香网五月天激情| 香蕉婷婷色五月| 99日本精品视频热| 五月社区丁香| 婷婷五月激情视频网| 久久天天| 色婷婷黄色网络| 丁香婷婷基地| 婷婷成人综合五月| 91 原创 在线 九色| 丁香五月天在线| 成人午夜免费电影| 99热网站| 婷婷色正月| 五月丁香亭亭操逼| 日本狠狠干| 久色国产| 久99视频在线观看| 婷婷五月天亚洲精品| 中国女人做爰A片| 99色热视频| 色色色1网址| 99热精品在线观看| 色五月首页| 国产古装妇女野外A片| 五月停停激情网| 色婷婷a| 伊人99热| 色99视频| 开心五月婷婷在线视频免费观看| 人人操人人爽成人AV| 六月丁香五月婷婷| 99久在线精品99re8热| 欧美精品999| 日韩av手机在线观看| 五月婷婷开心网| 婷婷欧美偷拍综合| 99丁香五月婷婷在线| 五月综合视频| 51国精产品自偷自偷综合| 五月天激情综合首页| 五月九九综合| 亚洲丁香花色| 五月天色综合| 五月丁色AV| 精品人妻一区| 俺去也婷婷| 五月丁香婷婷网网网网| 丁香视频| 激情五月丁香五月综合| 天天婷婷综合亚洲亚洲| 99re8这里只有精品99re8热视频| 99re热在线视频观看| 亚州婷婷五月激情综合| 思思99精品视频在线观看| 啪啪色激情五月天| 中文字幕人妻熟女在线| 9久久婷婷国产综合精品性色| www.婷婷五月天,com| 97超碰免费超级在线观看| 丁香婷婷激情| 99思思热只有在这里看 | 久草视频大香蕉99| 欧美日韩欧美| 五月激情站| 亚洲视频99| 天天网站天天爽| 婷婷综合色网| 97超喷视频在线观看| 九九热九九| 丁香五月成人| 色婷婷五月视频| 人人舔人人色人人高潮| 九月停停| 欧美性猛交 XXXX 乱大交| 久99在线视频| 色偷偷综合| 婷婷五月丁香婷婷| AV伊人青草丁香六月| 日韩在线观看亚洲| 五月丿香啪啪| 俺去婷婷 丁香| 欧美顶级少妇做爰HD| 丁香综合网| 色色亚洲视频| 97色色色色色| 99九九精品| 六月五月久久丁香| 五月婷婷久久开心网| 在线91日韩| 欧美色图片88| 性欧美大战久久久久久久83| AA片在线观看视频在线播放| 99综合视频| 4399亚洲视频| 五月天色五月| 综合网啪| 超碰com| 久久久免费精彩视频| 婷婷色成人| 久久永久网址| 激情丁香婷婷五月天| 久久精品天| 五月丁香 狠狠爱| 这里只有精品9| 另类图片五月天婷婷| 色天天综合天天综合频道。| WWW,五月天| 久久五月综合| 五月天五月色婷婷综合| 激情综合五月激情| 久久亚洲网| 五月天激情国产综合婷婷婷就去爱| 99激情网| 色婷婷五月影视| 欧美啪啪9| 亚洲av无码精品色午夜| 激情中文在线| 激情九月婷婷| 色色色777| 激情5月舔| 丁香五月婷婷狠狠色| 99久久99九九99九九九| www久久五月com| 丁香激情五月综合网| 欧美日韩AAAAA| 丁香六月AV| 九热在线这里有精品6| 色必久悠悠影院| 天天色综合色| 97久久香草精品视频| 激情纯色婷婷五月天在线不卡视频| 久久AAAA片一区二区| 99婷婷五月天激情| 97色婷婷成人综合在线观看| 天天色·欧美| 丁香五月婷婷乱| 亚洲国产va| 夜丁香综合| 婷婷丁香六月天| 大香蕉啪啪| 99免费热视频在线| 色婷婷亚洲婷婷| A片试看50分钟做受视频| 国产AV一区二区三区最新精品| 性生活视频98791| site:wpjngj.com| 影音先锋日本三级资源| 丁香婷婷五月份| 婷婷五月天久| 97资源欧美日韩大香蕉超碰一区| 人人色人人摸人人看| 久热这里这里有精品| 色色色色色色综合| 在线观看免费狠狠色丁香香综合| 97精品综合久久| co超碰在线观看| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 丁香激情五月少妇| 国产操碰| 黄色国久久| 丁香五月天堂网AV| 激情图片亚洲| 99在线亚洲| 亚洲综合在线播放| 成人午夜天| 9 大屁股在线视频精品| 亚洲性受XXXX五月丁香| 日本久久婷婷| 操逼三区| 96精品成人无码A片观看金桔| 天天视频精品9| 九九精品综合| 婷婷五月天 偷拍| 99re热视频这里只精品5| 亚洲综合久| 日韩在线观看网址| 色综合网址| 五月六月播婷婷| 日本va欧美va欧美| jiZZdr| 丁香五月激情啪啪综合| 久热大香蕉| 综合激情五月丁香| 91九色丨国产丨爆乳| 国产真人做爰视频免费| 久久婷婷五月天懂色| 国产免费一区二区在线A片视频| 91/九色黑人| 激情小说五月天| 亚洲成人va| 亚洲色视频| 偷拍99在线视频观看| 婷婷五月丁香五月| 99热这里只有精品18| 九九视频这里只有精品| 五他月天啪啪啪| AV伊人青草丁香六月| 5月婷婷激情在线| 六月婷婷色综合| 成人一区在线观看| www.人人操人人看人人想人人摸 人人人人操,COM | 婷婷五月天av| 日韩av干| 天天插天天日| 9久热在线视频精品| 五月丁香激情欧洲啪啪| 99热这里都是精品| 在线成人视频免费| 99免费视频在线观看爱| 日韩一区二区A片免费观看| 97人人搞| 成人va视频| 狠狠色综合网| 大香蕉五月天婷婷| 亚洲婷婷激情综合激情999精品| 国产日韩欧美| 嫩草AV久久伊人妇女超级A| www,超碰| 天天透天天干| 五月丁香六月婷婷的女人| 99久久婷婷| 色一情一乱一乱一区91| a久久免费视频| 四川BBB搡BBB搡多人乱亂| 99在线精品观看99| 超碰色色综合| 久久五月婷婷丁香| 婷婷六月久久| 亚洲无AV在线中文字幕| 五月天婷基地| 婷婷五月天网| 91成人品| 另类小说五月天| 六月婷婷色色色| 激情五月,婷婷五月,丁香五月| 色色欧美色色| 十月丁香婷婷| 欧美槡BBBB槡BBB少妇| 99热9| 五月色网| 色色综合网站| AV成人在线播放| 亚洲精品**不卡在线播he| 呦呦v线| 99热这里都是精品| 日韩美一级毛卡片| 五月在线| 综合网狠狠| 久久久天天啊| 九月婷婷综合网| 五月婷婷综合丁香视频| 国产色99| 丁香久久综合| 欧美啪啪五月天| 欧美xx激情视频在线观看| 色欲色香,www,com| 色无码| 综合色七七| 热99re| 久久密臀婷婷| 婷婷涩五月天综合| 99ER热精品视频| 森林影视大全,最好看的2019年视频 | av最新在线| 久久九九国产精品怡红院| 中文成人在线| 免费视频1区| 久久精品国产一区二区三区四区 | 五月噜噜| 91伦| 色婷婷超碰| 99久在线| 天天天天天天操| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 国产婷婷五月在线视频| 秋霞AV美国| Av九九| 噜一噜免费视频| 色婷婷成人做爰A片免费看网站| 人人人人人人人人人草| 亚洲AV日韩在线观看| 丁香六月色婷婷| 97五月婷婷| 丁香五月天啪啪| 热99热| 91呦呦呦| 欧美丁香婷婷五月天| 婷婷五月,偷窥偷拍网| 玖玖婷婷五月天| 色五月婷婷丁香国产在线| 五月天成人综合| 五月花婷婷丁香| 就爱日五月天| 亚洲视频五区| 天天在线久久综合 | 久综合网| 久色中文| 97五月久久丁香婷婷| 五月天.com| 99热这里只有精品1998| 色五月婷婷1| 欧美激情综合色综合啪啪五月| 99久久思思| 丁香五月最新网址| 99热99在线| 草AV9999| 亚洲国产网站| 婷婷丁香五月综合| 99 频99热国里只有精品| 91精品久久久久久综合五月天| 99精品偷自拍| 激情小说婷婷| 天天色天天搡| 超级久久久| 99精在线| 亚洲天堂AV免费片| 超碰国产AV| 99久热| 狠狠干五月天| 六月婷婷日| 丁香 亚洲 久久| 大地资源色婷婷视频在线| 婷五月天| 色之综合网| 亚洲综合欧美色丁香婷婷888月图片 | 久久九九亚洲| 色婷婷激情| 激情五月天视频| 丁香五月婷婷丫| 九月综合| 9九九久久精品无码专区| 天天操综合网| 丁香六月婷婷开心| 久久色五月天| 亚洲久久天堂| 色综合五月| 在线只有精品| 色婷婷五月综合网| 这里只有视频精品| 九月激情综合| 欧美一级毛卡片无码| 久色激情| 激情综合国产| 99热这里只有精品2| 久久永久网址| 五月婷婷婷综合网| 亚洲情欲久久| 婷婷久久综合久| 激情99| 婷婷丁香五月激情图片| 久久色情| www.五月婷婷.com| 狠狠色色综合| 久草婷婷网| 丁香五月天堂| 玖玖爱综合网| 色婷婷色五月综合| 玖玖综合色| 狠狠色婷婷7777久综合| 天天日天天插| 激情小说视频图片| 国产精品久久..4399| 天天日夜夜操五月| 久一这里有精品国产| 大香蕉Av在线| 色婷网站| 双性美人被调教到喷水A片| 青青草激情网| 婷婷丁香花五月天| 婷婷爱五月| se影音资源在线观看| 五月丁香婷中文| 蜜臀A∨在线水帘洞| 成人午夜无码视频| 久草五月婷婷| 人妻视频在线| 2017人人操| 麻豆精品| 婷婷丁香社区| 在线观看免费观看在线9久| 超碰99在线| 狠狠操狠狠插| 五月婷在线| 久久久精品人妻| 丁香五月婷婷啪啪| 综合久久99| 99久久综合| 亚洲色综合| 伊人久久婷婷| 美欧日韩国产成人在战| 第2色五月婷| 欧美在线干| 婷婷中文字幕网| 色一情一乱一乱一区9| 五月色婷婷夜色| 搡BBBB搡BBB搡五十| 夜精品无码A片一区二区蜜桃| 亚洲中文乱字字幕在线永久| 九九这里只有精品| 涩涩五月天| 色色色在线观看| 久久人妻人人槡| 开心婷婷五月花| 婷婷五月天视频小说| 青青草护士中出内射-欧美电影在线天堂新版| 91啪啪视频| 天天色综合天天| 538午夜激情| 99热这里只有精品21| 色婷婷丁香| 99在线综合视频| 婷婷九月在线| 九九色婷婷| 欧美成人无码一区二区三区| 五月夜丁香| 九月色婷婷综合| 丁香五月婷中字幕| 啪啪综合| 欧美激情综合| 9九九久久精品无码专区| 人妻六月天| 天天综合五月| 天天插综合在线| 99热成人精品| 婷婷激情五月天小说校园| 五月久视频| 激情五月丁香社区| 丁香五月激情综合| 一本道在线电影| 狠狠狠狠草草| 日韩av在线电影| 九九热10| 另类小说婷婷色| 熟女乱论网| 丁香五月婷婷激情中文| 久久婷婷内射| 亚洲精品99| 亚洲成人在线观看网址| 91视频一起草| 五月婷婷色丁香| 开心五月网 | 色吧婷婷五月亚洲| 1024成人在线观看| 精品久久人妻热| 久久大香免费| 天天色情站| 五月天激情AV| 99热久| 黄色视频网站在线播放| 免费AV在线| 色五月开心五月激情五月| 99精彩视频在线观看| 成人丁香| 色999五月色| 免费观看全黄做爰的视频| 亚洲日比视频| 亚洲电影中文字幕| 99热久草| 热这里| 日本狠狠色| 色婷婷丁香A片区毛片区女人区| 五月色婷婷夜色| 亚洲VA欧美VA| 六月婷婷五月丁香| 成人午夜视频精品一区| 天天综合 99久久婷婷| 热无码A∨| 午夜成人综合| 丁香六月在线综合| 99ri视频在线观看| 2025中文在线视频字幕免费观看| 婷婷五月天综合久久| 99视频在线| 色老久久| 色婷婷五月天不卡| 婷婷五月天播播| 国产亚洲精品AAAAAAA片| 视频久久9| 亚洲99在线| 色五月婷婷久久| 日本色色影院| 少妇口诉沐足视频播放器网址| 五月婷婷五月天激情网| 亚洲乱码日产精品BD在线观看 | 深夜A片| 精品久久9| 1024久婷| 九九在线免费观看| 色播五月婷婷| 2016日日夜夜操| 五月婷六月天| 337p大胆噜噜噜噜噜91Av| 丁香六月婷| 久久久久人妻精选| 激情综合五月| 狠狠干五月天婷婷网| 天天操天天插| www.久久99精品| 成人小说 五月天 婷婷| 婷婷五月色播放| 综合 蜜月 婷婷| 99精品无码网站| 九九精品综合| www91久久| www,婷婷| 在线视频婷婷| 五月综合婷婷网| 婷婷社区五月天| 丁香九九九九| 99热资源在线| 日韩有码久久| 色色色色色色色色综合网| 成人 在线观看国产| 日韩黄黄| 天天干天天干天天| 色婷婷av在线| 丁香激情四射| 大香蕉中文| 深爱激情五月天| www.色情五月天.com| 丁香五月区| 色婷网站| 五月天亚洲最大成人| 九九色影院| 色狠狠五月天| 99色热| 久久婷婷青草五月天| 欧美日韩999| 色五月色五天色情网| 999婷婷综合| 成人婷婷| 亚洲综合婷婷| 婷婷的久久网站| 午夜免费试看| 色五月琪琪| 婷婷午夜综合| 老师把我爽高潮了免费A片| 色五月影视| 激情丁香五月| 丁香六月激情综合| 大香蕉操操| 久久这里有精品视频| 婷婷丁香黄色| 99视频久久| 91九色欧美| 欧美综合123区| 99色综合网| av狠狠操| 婷婷爱综合| 少妇人妻偷人精品无码视频新浪| 五月丁香狠狠爱婷婷综合| 欧美成人猛片AAAAAAA| wwwC0maV五月花| 91精品激情9| www.99成人视频| 成人VAV视频在线观看| 噜噜五月天综合| 97热久久五月婷婷| 99精品久久久久久久婷婷| 操操碰| 中文字幕在线观看视频www| 色狠狠伊人久久五月丁香| 大香伊人久色| 最新va在线播放| 影音先锋女人AA鲁色资源| 丁香婷婷激情五月天无毒不卡蜜桃| 99热狠狠操| 九九热超碰| 国产日批视频| www.com在线操视频免费观看| 激情九色| 久久在线视频只有这里有精品| 国产精品久久久爽爽爽麻豆色哟哟| 天天干天天色天天干| 久热伊人在91| 91色婷婷综合久久中文字幕二区| 七七九九色色| 五月丁香久久激情综合| 五月婷婷综合网| 色综合色| 超碰97在线操| 色老久久| 激情九月婷婷| 免费无码毛片一区二区A片| se99视频| 婷婷综合影院| 久久九色| 99免费视频网| 亚洲综合五月天婷婷丁香| 色99色| 久久婷婷五月综合啪| www.色色com| 五月天.com| 淫荡综合网| 伊人网大香| 五月丁香激情综合网| 久久99热 这里有精品| 亚洲视频1区| 亚洲99热| 有哪些A片网站| 中文字幕在线免费| 欧美五月停| 亚洲精品在线视频| 日韩成人五月天| 天天肏天天肏| 丁香九月婷婷| 五月天婷久精视频| 日日噜噜夜夜狠狠久久丁香六月| 婷婷在线精品| 久久精热| 色久在| 久久精品一区二区三区四区| 噜一噜在线| 狠狠久久婷五月综合色| 久久丁香婷婷五月| 九九在线视频| 婷婷久久免费| 啪啪激情网站| 五月丁香999| 五月 婷 久| 婷婷狠狠操| 久久九九热视频| 久久6这里只有精品| 婷婷爱五月| 中国女人做爰A片| 99热老司机| 亚洲欧美另类在线23p| 99这里有精品久久97| 91人无码久久久久久| 丁香五月婷婷啪啪| 久久久99免费视频| 色操b| 激情综合五月激情XXXX| 伊人九九综合| 九九综合九| www.五月天婷婷| 人人摸人人| 婷婷五月天亚洲综合网| 欧美图片丁香五月天| 久777| 97色婷| 99九九在线精品热动漫| 婷婷五月天欧美图片在线播放电驴| 永久的网站AAAA| 中文字幕成| 中文字幕人妻一区二区| 激情婷婷五月天| 色五月婷婷丁香五月| 五月丁香直播| 丁香五月天啪啪| 婷婷激情在线| 婷婷色五月天色| 激情电影五月婷婷| 在线18av | 99色在线| 亚洲色五月| 色婷婷五月天在线观看| 五月天堂色| 五月婷婷日| 激情六月天婷婷| 狠狠激情五月天| 五月天激情无码高清| 丁香六月视频| 色婷婷精品小视频| 人人爱干人人爱草| 99热综合在线| www.超碰| 全亚洲最大的婷婷五月天网站COM| 久热AA| 五月丁香久久呀| 亚洲综合一区二区| 成人在线视频一区| 日韩精品电影| 国产性爱色| 精品九九婷婷| 色婷婷最新域名 | 亚洲人妻av| 九九人人操| 日韩AV大全| 亚洲色网络| 激情综合五| 天天干天天插| 乱精品一区字幕二区| 日本人妻伦在线中文字幕 | av五月天婷婷丁香| 思思热AV| 噜一噜在线| 久久人人九| 99久视频| 婷婷激情综合网| 国产精品一区在线观看你懂的| 五月婷婷丁香六月| 一起草AV入口| 99爱在线| 日韩情色在线观看| 五月婷婷|欧美| 九九99免费理论| 只有精品在线观看| 丁香五月成人论坛| 婷婷五月天免费| 色丁香五月天婷婷| 久热免费| 丁香色五月 97干| 国产精品色| 日日躁夜夜躁狠狠久久AV| 牛牛热这里只有jingpin| 亚洲色99综合天堂| 五月丁香趴趴| 伊人久久大香线蕉av最新| 一起草av| 丁香五月天欧美| 另类五月激情| 热99精品视频五月| 能看的AV| www.91五月| 大香蕉九九操| 91久久久久久| er99免费视频在线| 五月婷婷婷婷网| 色域五月婷婷丁香| 天天爽天天| 久久R激情| 九9九9无码| 精品久久99| 五月婷婷综合色啪首页| 婷婷五月丁香六月综合网| 久久婷.com| 女人高潮内射99精品| 99日热在线视频| 婷婷婷久久久| 秋霞黄色一级久久| 婷婷五月丁香综合人妻| 久99久精品| 五月丁香六月激情综合| 婷综合六月| 九九色逼| 婷婷综合五月色播| 欧美激情综合色综合啪啪五月| 大香蕉综合在线| 婷婷丁香久久网| 99久热在线精品| 天天综合色综合| 五月婷婷丁香| 国产乱子轮XXX农村| 东北熟女视频99| 激情丁香婷婷| 可以直接看的AV网站| 色综合激情| 极骚大香蕉伊人| WWW.久久久久久久| 五月婷婷久久综合| 少妇人妻人伦A片| 五月综合视频| 99热第一页| 天天草天天舔| 亚洲碰碰碰| 免费无码毛片一区二区A片| 国产超碰人人| 久久五月网| 91凹凸在线| 小香蕉av| 丁香大香蕉| 五月之婷婷| www.日日夜夜.com| 91人无码久久久久久| 99热最新地址在线| 99精品在这里| 国产精品人成A片一区二区| 91啪啪啪啪| 色五月婷婷视频| 婷婷九月丁香| 波多野结衣成人作品在线| 26UUU一区二区| 日韩aaa| 国产99久久久国产精品免费看 | 五月天色婷婷综合| 欧美啪啪五月天| 2023天天日夜夜爽| 久久9久| 婷婷国产五月天17c| 性 色 婷婷| 久操福利| 国产综合A片| 开心婷婷五月天电影院| 99热大香蕉| 大香蕉在线观看9| 五月天婷婷久色| 99热91| 婷婷爱五月| 色射婷婷五月天| 九九色综合| 久久五月网| 直接看的AV| 人妻无码视频网| 色色网站免费在线视频| 五月天丁香成人| 婷婷天天婷婷天天澡| 丁香五月婷婷色综合| 婷婷色五月噜噜| 亚洲乱码在线观看| www.爱婷婷.com| 五月色俺婷婷| 五月天精品| 丁香婷婷久久 | 五月激情五月婷婷五月天在线| 国产又粗又大又爽又黄| 91欧美| 大香蕉99热| 美女91一起草| 久久黄色片| 青青久久五月| 婷婷亚洲丁香五月| 五月婷婷基地| 色色五月天婷婷| 大香蕉久艹| 九色 在线| 伊人五月综合网| 色拍九九九| 久久婷婷亚洲五月天| 国产欧美精品AAAAAA片| 五月网激情| 天天操天天操天天操天天操天天操| 99在线免费视频| 亚洲秘 无码一区二区三区妃光/1| 激情五月婷婷色色| 色色哒五月婷婷六月丁香| 啪啪日本欧美| 国产日日操夜夜操的肉棒视频| 国产午夜成人AV在线播放| 青青操avbb| 久久98| 26UUU成人网| 日日夜夜天天| 久久色五月| 久久香蕉影院| 久久只有精品| 性做久久久久久久免费看| 亚洲色激婷| 久草热8精品视频在线观看| aaaaaa片| 国产AV一区二区三区日韩| 99热久只有精品首页| 91丨九色丨熟女高潮| 99热6这里只有精品6| 99免费视频| 四虎婷婷五月天| 玩熟女五十AV一二三区| 久久五月婷婷综合网| 国产日韩欧美性爱| 丝袜大香蕉| 99精品视频网站| 5月婷婷视频网站综合| 99热18| 婷婷的五月天另类视频| 国色天香成人网| www.日韩艹| 99热8在线| 99热这里有精力| 99婷婷五月天激情| 日本啪啪网| 久久xx| 国产 码在线成人网站| 五月激情网五月综合网| 无码少妇高潮喷水A片免费| 9这里只有精品| 日韩AV成人电影| 九九成人| 99视频久久| 九九色热| 亚洲精品性色| 丁香九月综合在线| 9l视频自拍九色9l视频在线观看| 五月天色综合| 无码99| 超碰renrenai| 激情色情五月天| 91视频精品99| 热的国产99热| 精品人妻一区二区三区在| 丁香婷婷色五月| 激情综合色图| 99热免费观看| 无码婷婷五月天| 激情婷婷99| 色伊人婷婷| 777.色色| 超碰自拍天堂| 99ri精品在线| 另类色网| ZpRSw| 97人人搞| 天干干夜夜操| 国产亚洲av片| 色五月网址| 激情亚洲色图片丁香综合| 欧美色偷拍| 97精品综合久久| 免费视频这里只有精品| 五月丁香黄色| 国产精品国产成人国产三级| 九九在线这里只有精品视频| 亚洲激情综| 八戒青柠影视剧在线观看| 99re视频精品| 激情综合五月| 日本在线播放97| 九九大香视频| 激情综合网五月天天| 欲求不满的人妻| 99re8这里只有精品99re8热视频| 婷婷五月天亚洲激情戏精品| 色婷成人狠干| 婷婷久久五月天| rr天天操| 深爱 五月天| 丁香六月综合激| 超碰人人色| 人妻啪啪啪| 成人精品一区二区三区四区五区 | 久久久婷婷| 五月天狠狠草| 久草五月| 99久热在线精品99re6热| 婷婷大香蕉| 中国激情网| 噜噜噜噜婷婷五月天| 亚洲丁香婷婷| 婷婷五月在线观看| 日本va欧美va欧美精品88| 久婷婷五月丁香在线观看| 五月婷婷精品| 色爱综合网| 99热99极品观看| 天天射天天射一道本日本社区 | 五月婷婷免费看| 色婷婷色五月另类综合| 婷色视频| 久九男女天堂| 97福利视频| 狠狠草狠狠草| 五月丁香少妇网| 另类A片| 永久天堂日本| 极品少妇XXXX精品少妇偷拍| 丁香五月先锋| 99爱免费视频| 精品久久人妻热| 99热大香蕉| www99xxxx五月丁| 人妻体体内射精一区二区| 成人av播放| 婷婷五月色播放| 丁香婷婷六月天| 婷婷午夜| 99玖玖在线视频| 色婷婷狠狠禁久久| 少妇水多A片太爽了| 激情综合网五月婷婷| 久久婷婷综合五月天| 免费试看小视频 99| 婷婷丁香社区网| 欧美天堂久久| 密视AV综合在线| 99干免费视频| 亚洲爆乳无码精品AAA片蜜桃| 亚洲午夜AV| 色噜噜狠狠色综合网| 亚洲99精品欧美一区| 丁香婷婷色五月合集|