欧美成人午夜精品久久久,国产?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
返回資訊列表
久久中文人妻系列| 日日爱激情| 五月丁香婷婷五月色| 99色精品| 日本在线噜噜| 99色综合网| 99热热热99精品丁香| 色爱综合网| 亚洲色五月天是什么| 97色色色色色| 婷婷久月| 91在线日| 五月天激情国产综合婷婷婷就去爱| 碰97久久| 五月婷中文字幕| 老师的粉嫩小又紧水又多A片视频 粉嫩AV久久一区二区三区 | 六月丁香五月婷婷首页| 日韩av在线免费观看| 777影视理论片大全在线观看| 激情五月天影院| 思思热思在线精品视频| 婷婷成人网五月天| 日韩黄黄| 狠狠狠狠草草| 久久久宗合视频88| 96自拍视频九色在线观看| 中文字幕色色| 天天开心AV色综合婷婷五月天| 伊人玖玖精品| 久久久久网站| 九九综舍久久| 少妇婷婷五月天| 国产成人精品亚洲线观看| 99视频精品全部观看10| 丁香婷婷激情网站| 国产精品成人av在线观看春天| 亚洲色人妻| 九九99久久精品| 久久ww| 97自拍视频网| 婷婷五月丁香综合亚洲| 国产做爰视频免费播放| AA片在线观看视频在线播放| 人人草人人爱| 思思热这里只有精品| 欧美色婷婷| 日韩操| 色婷婷五月天av在线| 人人爽欧美婷婷久久久五月丁香| 丁香五月激情五月| 亚洲性图一区二区三区| 五月天婷婷色播综合在线| 九九久久五月天| 不卡成人免费| 1024在线视频| 99久免费视频| 黄色精品五月婷婷| 日本一级一级一级一级| 丁香激惜男女| 狠狠搞综合色| ji'qi'luan'ren'lun| 婷婷五月色丁香在线看| 成人丁香婷婷| 99福利导航| www.99热在线| 91精品久久久久| 九九干视频| 五月婷视频| 五月亭亭狠狠| 五月天亭亭俺也| 色婷视频| 国产美女无遮挡裸体毛片A片 | 97ai婷婷| 久草婷| 人妻肉射免费观看| 丁香五月23111| 久久性爱网站| 五月丁香六月在线| 五月天精品视频| 大香蕉久| 五月婷婷丁香日韩在线| 色色色婷婷| 久久综合色五月| 视频一二区| 野战毛片三一3| 国产熟女大叫受不了| 欧美一级a | 丁香花五月天| 天天爽天天摸天天爱| 精品亚洲国产成AV人片传媒| 五月婷婷丁香瑟瑟视频| 午夜婷婷| 五月婷婷丁香六月在线| 91刘玥视频在线观看| 97成人在线视频| 岛国资源站| 日韩AV在线免费观看| 97在线观视频免费观看| 丁香五月天天| 综合在线网| 开心五月激情五月丁香五月婷婷| 97九色视频| 天天操综合网| 久久jiuwww| 天天日天天舔天天摸| 夜夜骑日日操| 久久婷婷丁香| 婷婷丁香五月综合网| 久久婷五月影院| 欧美VA视频| 99久久久国产大片| 丁香五月天啪啪| 久久99综合| 98国产精品综合一区二区三区| 国产女生爱爱AA| 色色免费网站| 六月丁香婷婷五月| 99热在线播放| 久久五月网| 六月婷婷无码| 91丁香五月| 99成人| 色九月综合| www99久久| 爱草视频在线| 日本三级大片| 人人爽欧美婷婷久久久五月丁香 | 男女啪啪做爰高潮无遮挡 | 久久这里只有欧美| 亚洲精品婷婷| 久9综合| 色五月激情网| 五月婷婷六月丁香在线视频| 亚洲成av人影院| 久九九热| 婷婷丁香五月在线播放| 少妇出轨做爰高潮A片| 伊人五月天久久| 丁香色色五月| 天天色色婷婷| 99re在线观看| 婷婷色色网| 婷婷色五月在线视频| 欧美色色网| 天天草天天日| 丁香五月天社区| 久久久五月天| 九九色99| 国产精品激情五月天色婷婷| 九九综合色综合| 婷婷五月天久久久| 26uuu国产| 久久永久视频| 99超碰在线观看| 五月天激情久久| 久9热插入| 丁香婷婷大香蕉| 99热这里只有精品86| 六月激情婷婷| 激情丁香久久| 天天插,天天射| 欧美成人AAA片一区国产精品| 九九aV| 五月丁六月香| 伊人久久大香线蕉综合网站| 99在线视频女女视频| 色婷婷综合网| 猫咪伊人久久| 伊人久久丁香狠狠婷婷综合香蕉| 五月丁香久久呀| 五月色丁香视频精品| 精品一二三区久久AAA片| 97色永久免费视频| 色综合综合色| 操人91| 色五月婷婷综合在线| 久久丁香网| 第四色婷婷色五月| 久草婷婷在线| 99亚洲日韩| 五月婷婷亚洲天堂97色婷婷| 久久久五月婷婷| 色五月情| 伊人AV五月婷| 大香蕉五月| 久久美女五月天| 99国产97在线,| 婷婷五月天a| 99精品在线观看| 婷婷激情四射| 日本人妻伦在线中文字幕| 婷婷,五月天,丁香,第一| 超碰chaompinm| 人人操91| 五月天色丁香| 久热最新视频| 日韩无码性爱| 日本一道久久| 亚洲综合网激情小说| 99精品久久| 天天摸,天天爽| 国产古装妇女野外A片| 一区二区成人电影免费播放| 米奇影视资源婷婷狠狠色激情欧美五月丁香 | 99日在线观看视频| 五月婷网| 亚洲熟妇AV综合网五月丁香伊人| 激情久久伊人| 日日夜夜狠狠| 五月天激情黄色小说在线观看| 94干大香蕉| 亚洲精品V天堂中文字幕| 大香蕉视频婷| 操碰99| 丁香五月天网站| 九九在线精品| 天天爽天天摸天天爱| 婷婷情色五月| 色九月婷婷| 天天在线天天综合网色| 免费超碰在线| 成人精品在线观看| 日本色婷婷| av网址在线| 色欲天天综合网| 亚洲丁香婷婷五月天综合色| 五月婷婷激情在线| 色婷婷综合网| 国产精品香蕉| 婷婷五月天成人五月天| 久久精品日| 成人AV免费观看| 国产91视频| 欧美 日韩 人妻 高清 中文| www.五月天婷婷| 91丨九色丨熟女| 丁香五月天社区| 激情五月天激情综合网| 五月丁香激情片| 99热香港| 99性爱| 婷婷五月丁香六月综合网| 嫩模aV在线| 三级黄色大片视频| 丁香五月成人| 99色| av人人操| yazhou seshipin| 日韩啪图| 精品成人在线| 午夜大香蕉| 熟女激情五月天 | 五月天成人综合| 五月丁香色色综合| 久综合| 丁香五月婷婷av影院| 婷婷97碰碰| 去干网最新版本亚洲版| 婷婷色五月婷婷姐妹| 九九热青青草| 华人在线免费| 久久婷婷综合五月天| 99久久综合| 色色婷五月天| 99热网站| 色五月激情五月丁香五月婷婷啪啪综合 | 五月婷婷自拍| 九九综舍久久| 热婷婷久| 伊人天堂婷婷| 97日韩无套内| 风流少妇A片一区二区蜜桃 | 免费无码毛片一区二区A片| 天天爱天天爽| 亚洲色视频| 91视屏在线观看com.wwwvv| 97久久精品| 婷婷五月激情五月丁香五月| av国产精品| AV在线免费网站| 色噜噜狠狠插综合| 激情内射p| 五月丁香婷婷啪啪综合网| 免费人人操| 久久看九九90| 夜夜穞天天穞狠狠穞AV美女按摩| 99性视频| 天天干天天日天天操| 激情久久丁香| 97人人操人人| 婷婷的99视频网站| www色色色com| 26uuu国产| 96丁香婷婷九月蜜桃综合久久| 日本丁香五月| 99在线免费观看| 久久婷婷综合网| 精品人妻一区| 久久总和99| 99热手机在线精品| 五月婷婷免费在线观看视频| 天天爽综合| 五月婷婷播| 九九色热| 99九九热在线观看| 九九热re99re6在线精品| 天天做天天爽| 26uuu激情五月天| 丁香五月色综合色播五月| 亚洲中文字幕av| 亚洲精品在线视频| 五月丁香大香蕉| 久九色| 成人 在线 日韩| 婷婷五月综合久久中文字幕| 久久黄A片| 亚洲天堂久久| 天天插天天干天天舔| 五月丁香婷婷激情在线| 99免费视频网| 色婷婷五月在线| 天天噜噜| 99ri视频| 亚洲爆乳无码精品AAA片蜜桃| 亚洲熟妇AV乱码在线观看| 色综合久久天天综合网| 日韩啪啪视频| 五月丁六月香| 91热久久| 无码少妇高潮喷水A片免费| 国产婷婷色综合AV蜜臀AV| 思思热99热| 天天日综合| 99国产精品久久久久久久久久久 | 六月丁香停| 天天色丁香| 色婷婷色五月另类综合| 天天干天天射色综合| 久久丁香五月| 欧洲色| 俺去也五月| 超碰v| 永久天堂日本| 久久久www| 就爱操www com| 秋霞三及片| 五月精品| 思思99热| 超碰爱爱爱| 色情五月天丁香社区| 久久九九综合| 五月天五月天成人网亭亭成人色网站| 99热日| 婷婷六月丁香五月| 91九色 熟| 丁香六月婷婷久久亚洲天堂| 日日噜噜夜夜狠狠久久丁香五月| 97在线刺激| 久一网站| 色婷婷综合影院| 操97| 中文字幕+乱码+中文字幕在线观看| 久久久久久久综合狠狠综合| 六月色丁香中文字幕| 夜夜操夜夜操| 亚洲亚洲人成综合网络| 日韩99视频| 久热欧美| 婷婷五月天综合网| 五月天大香蕉av| 日本一级一片免费视频| 亚洲夜夜操| 成人精品在线| AV在线不卡网站| 99五月丁香丁| 性天堂久久| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 久久久日韩特色特黄AAAA| 五月天激情四射网站| caobi四区| 丁香五月五月婷婷五月天激情四射| 秋霞性爱AV| 亚洲爆乳无码精品AAA片蜜桃 | 久久伊人五月天| 丁香花综合永久入口| 五月婷婷丁香综合,亚洲天堂| 大香蕉九九| 九九九九这里只有精品| 免费在线观看AV网站| 丁香婷婷啪啪| 五月天婷婷免费| 狠狠色综合图片| 久久久久婷婷五月热综合| 热99在线| 9久热在线视频| 精品无码色欲AV| 亚洲熟妇无码乱子AV电影| 婷婷五月天久久| 婷婷九九视频| 26uuu欧美日本| 亚洲视频一区| www.精品99| 欧美人妻一区二区| 人伦30P| 婷婷久久亚洲| 九月色婷婷综合亚洲| 亚洲婷婷性爱| 婷色五月| 五月天激情综合在线| 天天色粽合合合合合合合| 色色色9| 激情亚洲婷婷| 国产日韩av片| 久久蜜臀婷婷| 性爱在线播放av| 日本九九九九| 97啪啪| 1000部毛片A片免费观看| 日韩久久色| 99免费在线视频| 欧美碰碰碰| 日日干日日s| 九九亚洲视频| 777精品成人a v久久| 激情婷婷五月天| 欧美激情综合| 五月天大香蕉| 另类色视频| 五月天婷婷在线AN| 五月花综合网| 国产精品成人AV在线观看春天| 99成人网站| 五月天婷婷成人网| 五月激情偷拍婷婷| 久久3级片| 99re热免费观看视频精品| 蒲京久久无码视频| 久久婷婷激情视频| 99热线观看9| 六月撸婷婷| 97狠狠色| 99这里都是精品| 国产日日夜夜操| 超碰在线免费观看日韩| 热思思| 色级婷婷| 久久久8| AV中文在线| 天天色播| 六月久久狠狠| AAA久久| 久色视频在线| 九月丁香很很色| 婷婷狠狠五月综合| 久久九九婷婷| 九九性视频| 亚洲五月婷婷在线| 久久丁香综合精品综合| 99爱在线观看视频| 成人亚洲精品| 色婷婷丁香花五月天| 这里只有精品视频99| 国产AV不卡福利| 婷婷色中文字幕| 台湾综合丁香五月蜜桃| 影音先锋男人AV资源站| 免费视频舔| 色婷婷综合亚洲| 色五月综合激情网| 五月丁香六月婷| 色五月亚洲| 天天色综合综合| 五月六月激情| 91色色色| 激情五月天伊人av| www。狠狠干。com| 日韩五月婷婷| 婷婷色导航| 激情五月婷婷老师| 五月花综合| 91在线资源| 97操操操| 五月天婷婷丁香六月| 色婷婷久久综合久色综| 色色五月婷婷网| 天天操夜夜橾| 国产成人精品一区二区三区视频 | 97亚洲视频在线| 高清无码入口| 五月丁香六月婷婷在线小说视频| 亚州综合色| CHINESE熟女老女人HD视频| 天天干、天天日日| 五月丁香婷婷爱激情综合网| 99久久.www| 99久久99九九99九九九| 97九色视频| 婷婷丁香五月激情图片| 国产ava| 国产av天堂| 色婷婷六月天| 五月丁香免费看| 青青操绿aaa一区日v| 亚洲另类av| 天堂成人A片永久免费网站| 婷婷五月天激情小说| 五月婷婷亚洲综合网| 99碰网站| 超碰在线网站| 五月天另类小说久久小说网| 久久婷五月婷| 中文字幕成人影视| 桃色激情网| 狠狠色情婷婷| 天天综合色丁香| 丁香婷婷五月六月久久| 五月婷婷六月丁香首页| 99久久婷婷国产综合亚洲| 婷婷性爱| 欧美婷婷综合| 婷婷伊人| 蜜乳av一级av| 国产精品久久久久久五月天加勒比| 日韩久久日| 久久99国产综合精品免费| yiqicaoav| 五月天天天开心激情网| 国产真实乱了老女人视频| 日本片日本片祼观看网站在线看中文版网页在线看 | 色欧洲| 天天爱天天做天天爽| 丁香午月AV中文字幕| 超碰在线观看caop| 丁香五月激情五月色综合| 国产AV一区二区三区最新精品| 色啪网| 亚洲不卡欧洲| 另类激情五月| 99久久久久| 欧美在线操| 91碰超| 久久五月婷婷丁香| 七七九色| 五月色网| www.色婷婷| 久久人妻视频| 天天干天天干天天| 无码成人AAAAA毛片AI换脸| 婷婷五月天成人网| 99精品偷自拍| 丁香五月婷婷图片综合| 日本色99网站| 日韩操啪| 久超超碰| 热99国产精品| 这里只有精品,日韩视频| 包操45分钟网站| 国产欧美婷婷五月| 午夜激情五月| 26uuu国产| 欧美 日韩 成人| 天堂久久精品| 色婷婷丁香五月| 99操| 97超碰色| 五月婷色| 婷婷97狠狠成人网站| 荫道BBWBBB高潮潮喷| 爱爱网址9| 一本色道久久综合狠狠躁一二三| 丁香花五月天社区| 亚洲综合在线播放| 丁香综合伊人| 玖玖资源天天无码| 国产婷婷综合在线免费视频| 很很干天天干| 久久99最新地址| 97sese婷婷| 熟女91九色| 久久综合99| 婷婷丁香高潮了| 天天色综合网吨吧| 99热天堂| 97色色网| 五月亭大香蕉| 性色欲情 网站| 婷婷综合在线| 丁香五月婷婷av影院| 综合超碰熟| 色五月色五天色情网| 免费99情趣网视频| 国产婷婷五月色情综合| 婷婷五月天综合在线| 这里只有精品免费| 热日韩欧美| 欧美99热| 91精品综合久久婷婷九色| 婷婷四月 成人 狠狠干| 综合六月激情婷婷| 99在线er热| 久草婷| 久久免费高| 综合激情在线观看| 色碰碰| 五月婷婷中文字幕| 国产精品久久久久久久久久| 激情五月天伊人影院| 久久精品女人天堂AAA| 影视av久久久噜噜噜噜噜三级| 久久婷婷五月综合色奶水99啪| 操人妻AV| 无码激情AAAAA片-区区| 激情五月天色婷婷综合| 大香蕉九操| 999热在线视频| 免费观看的av| 九九在线精品| 精品婷婷丁香五| 91综合在线| 婷婷王月天影院| 久婷| 天堂二区| 色婷婷精品小视频| www.色五月.com| 日本eVa一区=区视频| 99热久草| 69er小视频| 亚洲精品大片| 亚州操逼网| 思思久久青草热| 丁香五月影院| 超碰在线免费9| www.成人婷婷综合| 日本不卡高字幕在线2019| 激情综合五月丁香| 色婷五月天| 婷婷五月天桃花网| 色五月亚洲五月天| 色五月婷婷综合| 五月婷婷婷| 色五月丁香一区在线| www色综合亚洲92| 噜噜噜色噜噜| 特级片神马电影| 色六月天| 国产肥白大熟妇BBBB视频 | 99热最新网址| 97AV在线视频| 婷婷久久性爱| 这里只有精品视频| 秋霞九九无码| 婷婷六月天亚州| 欧美成人猛片AAAAAAA| 狠狠爱婷婷| 免费观看大片视频 丁香婷婷 六月欧美| 天天狠狠综合精区| 亚州视频九九99| 六月天婷婷| 成人色五月天婷婷| h在线看免费版在线看| 九色七七| 久色资源| 人人操操| 日本久久婷婷| 最新久久网址| 久99久视频| 五月婷婷啪啪啪| 五月天伊人综合| 女人天堂久久| 婷婷丁香综合成人| 野外99热| 九九干视频| 99热亚洲精品| 五月丁香综合| 天天色天天爽| 日产精品久久久久久久蜜臀| 亚洲丁香五月深爱五月| 五月天激情图片| 自拍偷窥99热| 亚洲激情另类| 婷色综合| 99热在线观看| 123草逼网| 99视频久久| 五月香婷婷| 99热主页日本| 亚洲视99| 五月天婷婷色播综合在线| 五月丁香色婷婷基地| 日韩av在线播放综合网| 五月天啪啪啪| 午夜成人天堂久久无码日韩久久| 久久婷五月| 第2色五月婷| 亚洲第一成人无码A片| 色欲五月婷婷| 天堂网啪啪| 九九五月天| 99爱在线| 久久久噜噜噜操操操| 丁香五月天堂| 婷婷开心深爱五月天| 欧美色播综合在线观看| 99久久国产综合精品五月天喷水\| 天天综合色丁香| 99五月香婷婷丁香在线视频| 狠狠操狠狠操| 欧美噜噜久久久XXX| 婷色天堂| 天天做天天爱天天玩| 九九黄色网| 久久久久久久11111111111| 久久偷拍综合五月天| 色婷婷69| 亚洲中字AV电影在线网站| 丰满熟女人妻一区二区三| 爱久综合| 99re欧美精品| 亚洲AV成人无码电影| 欧洲亚洲激情五月天在线| 亚洲AV无码成人精品区电影网| 亚洲无码播放| 国产肥白大熟妇BBBB视频| 99热99在线| 久热久69| 婷婷色网站| 操逼在线视频| 大香蕉久久久久| 国产精品美女久久久久AV超清| 色日本五月天| 五月亚洲激情| 久青操| 久久久亚洲精品一区二区三区浴池 | 丁香五月天资源网| 人人玩人人橾| 色色五月天com| 99综合| 思思热在线| 狠狠狠激情网| 色色色色综合网| 97操碰在线97| 久久色情| 五月天婷婷綜合院| 天天草天天日| 噜综合| 五月丁香在线观看99| 亚洲精品V天堂中文字幕| 999激情视频| 久久九九蜜| 美女天天艹人人爽| 久久婷婷内射| 日韩AV在线免费| 婷婷亚洲综合| 男女99免费视频| 99成人精品| 都市激情久久| 色婷婷影音| 精品欧美一区二区三区久久久| 人人操五月天| 人妻精品久久久久久久| 亚洲五月婷婷在线| 欧美色色色| 国产午夜精品一区二区| 超碰无码老师| 综合色图婷婷| 99色综合| 日日夜夜干| 99精品免费视频| 丁香婷婷十月| 五月综合激情婷婷六月色窝| aa久久| 五月天婷婷丁香基地在线观看| 操嫩逼电影| 天天搞夜夜六| 欧洲激情网站| 久久丝丝热| 1024手机在线观看看片_日韩精品| 久久精品日| 伊人大香蕉毛片| 秋霞少妇AV网站| 婷婷五月色| 99精品在这里| 人妻内射视频| 丁香五月伊人| 色色色热热热| 色播五月丁香| 丁香五月婷久久| 九九色逼| 婷婷金品综合视频| 激情亚洲网| 久热这里只有精品99re | 婷婷五月欧美AA片免费| 久久五月天影院| 午夜婷婷| 99精品国产在热久久| 五月天婷婷色| 久操欧美在线观看97| 日韩一区二区A片免费观看| 九九亚洲视频| 婷婷五月天色播| 亚洲国产色婷婷| 五月丁香六月激情综合欧美| 色综合久久88色综合天天看| 欧美激情中文字幕| 97热在线精品| 婷婷综合精品| 亚洲免费在线观看岛国| 久久婷婷五月综合成人d啪| 大香蕉久久久| 久久天天天| 99久热这里有精品| WWW.夜夜操.com| 色五月婷婷五月久久| 内射丰满人妻| 人妻操逼| 99er视频在线| 婷婷综合五月天| 超碰免费成人| 色综合激情| 婷婷97狠狠成人网站| 色网五月婷婷| 亚洲乱啪| 欧美综合五月丁香六月婷| 这里只有精品视频222| 六月欧美综合色情| 亚洲五月婷| 综合狠狠干| 久操无码| 精品九九在线观看视频| 99热在线观看免费中文| 开心四月婷婷在线色播播| 亚洲第一色色色色| 四虎婷婷五月天| 婷婷五月天激情五月天网站| 婷婷五月天首页| 色A网| 日本欧美啪啪| 秋霞少妇AV网站| 五月综合激情| 婷婷五月天黄色小说| 成人视屏在线观看| 3www激情| 第四色五月婷婷| 综合色五月天| 欧美性生交XXXXX无码小说| 中文字幕高清av| 51XX午夜影福利| 这里只有精品99www| 激情五月天伊人影院| 丁香六月久久| 天天日天天肏天天奸| 婷婷在线综合| 亭亭五月天黑人2014| 欧美色99| av不卡网站| 99精品在线观看| 激情www| 超碰av在线| 色天堂97| 亚洲99在线视频| 色噜噜狠狠一区二区三区| Caoporn公开| 久久永久网址| www.婷婷五月| 成人国产欧美大片一区| 99婷婷五月天激情| 国产日韩欧美性生活| 久久这里99| 色五月大| 国产精品第一国产精品| www.五月天色色.com| Va另类视频| 久久久com| 在线sebiav精品视频| aaa丁香五月天| 丁香五月在线| 久久五月天综合| 99碰在线视频| 亚洲看av的网站| 99熟女| 久草热视频在线观看| 五月丁香六月婷婷在线播放| 玖玖资源站国产| 天天射天天干天插色综合| 国产精品美女久久久久AV超清| 天堂综合久| 九九久久综合网站| 日本色久| 爱婷婷久久视频| 俺也去色| 91一起操| 九月色婷婷| 香蕉五月婷婷| 午夜国产精品AV在线播放| 色婷婷99| 婷婷丁香六月五月天| 无码激情| 91色综合网| 99久热| 亚洲视频码| 日韩色色视频www| 超级碰碰97在线| 五月丁香网站在线播放| 久久综合婷婷| 欧美噜噜免费观看| 婷婷在线精品| 激情六月丁香综合| 色色色99| 99热精品10| 99热这里是精品| 五月天·www·com| 天天插天天插| 五月丁香六月婷婷亚洲激情综合| 欧美肉大捧一进一出免费视频| 激情五月图| 北京熟妇搡BBBB搡BBBB| 久久国产性爱A V| 国产成人+综合亚洲+天堂| 天天爽爽日日做做| 天天爽人人综合免费7799| 久久婷婷五月国产色综合激情| XX色综合| 六月婷婷俺也去| 丁香五月大香蕉| ji'qing'luan'ren'lun| 欧美大片免费观看| 欧美丁香五月天| 狠狠色噜噜狠狠狠狠狠色综合久久| 婷婷五月色亚洲| 99久久終合| 98永久精品| 中文字幕不卡+婷婷五月| 综合色播| 精品国产人人爱人人| 亚洲字幕AV一区二区三区四区| 天天综合色综合| 精品自拍99| 性爱久久| 日本色道视频网站| 97人妻碰碰中文无码久热丝袜| 五月丁香 久久久| 99色热综合| 久久婷婷五月综合成人d啪| 91精品无码| 开心婷婷五月激情网小说| 国产欧美性成人精品午夜| 五月婷AV| 无码橾| 久久久这里有精品| 天天摸日日舔狠狠添婷婷婷| 无毒黄色网址| 玖玖99免费视频| 五月丁香网av| 99爱在线| 免费啪啪亚州视频| 96人人操人人操人人| 五月婷视频| 日本九九视频| 精品视频99看在线视频| 第四色色色色色丁香五月天| 99亚洲视频| 九九热这里精品| 最新婷婷五月丁香| av网址在线| 甈吧vv| 超碰猛烈的性猛交| 亚洲操操操| xxx.色婷婷| 色色婷| 97综合视频在线| 99视频在线播放大全| 久久亚洲色导航| 91大神在线免费看视频全集男男一起操| 伊人www22综合色| 丁香五月婷婷丫| 丁香六月婷婷色播| www.婷婷| 午夜丁香综合婷婷| 日日噜噜久久婷婷五月天 | 伊人婷婷大香蕉| 久在线88综合| 8区视频在线| 久久久婷丁香五月| 久久婷婷欧美| 婷婷六月综合| 成人超碰网| 99九九视频精彩在线| 久久激情综合| 欧美三级黄色片久久| 大香蕉综合视频在线| 另类A片| 热99只有精品| 五月开心婷婷极品激情| 大香人妻| 久久99国产综合精品免费| 综合色色婷婷| 五月丁香六月婷综合成人综合| 九九热黄色| 五月天婷婷丁香人人操91| 俺去也婷婷| 啪啪 综合网| 色综合综合网| 热久久77777| 91AV婷婷| 性爱五月婷婷| 五月婷婷爽爽爽| 97人人射| 99精品视频在线观看| 欧美婷婷五月天综合| 性色欲情 网站| 第四色五月婷婷| 刘玥精品一区| 五月婷丁香| 婷婷精品在线| 五月天综合色| 狠狠色噜噜狠狠| 五月婷婷这里都是精品| 久久久中文| 婷婷伊人75| 久热在线观看视频9| 国产91资源在线| 六月丁香网| 爱操人妻| 婷婷操超碰| 色色色色网| 热99久| 丁香五月天操B| 日本天天色| 99视频只有精品| 碰碰91| 色五月婷婷操逼| 久久久噜噜噜久久人妻| 五月天激情视频五月天| 色五月aV| 色色色在线免费视频| 婷婷亚洲综合| 丁香婷婷色| 超碰成人av| 91色在线 | 日韩| 亚洲色综合色网| 色色色五月天激情资源| 第四色色六月色综合| 字幕网AV中文字幕| 亚洲字幕AV一区二区三区四区 | 婷婷六月色开| 久久东京热婷婷五月| 亚洲成人另类| 丁香五月婷婷偷拍| 69精品人妻不卡视频| 人人叉久| 亚洲av无码精品色午夜| 俺去婷婷 丁香| www.五月婷| 国产一区18| 99色五月| 黄网免费观看| 五月丁香色情| 色色色色热热| 九九综合精品| 五月婷无码| www.minyis.com【JT】国内CDN落地页保证转化QQ2101460746 | 色色网91| 狠狠色噜噜狠狠| 91九色精品| www.五月婷婷久久.com| 日本三级中国三级99人妇网站| 99热网站| 午夜丁香六月婷| 久色中文| 久热这里只有精品99re| 日本va欧美va国产激情| 97热在线精品| 丁香五月天堂网| 日日爽夜夜爽| 九九婷婷五月天| 色色色五月| 欧美性久| 五月丁香啪啪啪| 色婷婷五月天天天天天天天天天| 思思热在线精品视频网站| 五月综合色播播丁香婷婷| 99色视频在线| 激情五月丁香社区| www.激情五月| 激情五月婷婷| 色五月婷婷丁香凹凸| 欧美 日韩 成人| 99综合| 天天射影视综合网| 婷婷激情小说| 大香蕉五月丁香| 五月天婷婷影院| 激情五月最新网址| 9久热在线视频精品| 99re热视频这里只有综合亚洲| 开心五月天私房婷婷| 色婷婷六月开心中文字| 99热在线这里| 91精品婷婷国产综合久久| 色一情一乱一乱一区91Av| 操97在线观看| 婷婷精品综合| 色综合久久五月| 亚美欧色影院| 99热9| 久久人妻久久| 欧美日韩成人| 日韩在线观看网址| 综合99视频| 一级韩国产精品毛| A片试看120分钟做受图片| 五月丁香888| 一起草无码视频| 亚州操人在线视频| 久久五月丁香| 婷婷五月综合免费在线| 97亚洲精品| 婷婷五月中文字幕| 丁香五月天色综合| 久久99热这里只有精品| 色噜噜狠狠色综无码久久合欧美| 操97在线观看| 亚洲中文字幕AV| 五月丁香激情婷婷综合| 91久久99久久91熟女精品| 99色婷婷视频| 东北熟女高潮99综合99| 丁香五月香蕉在线| 久久综合丁香激情五月| 丁香五月影院| www.久久9| 丁香婷婷人妻综合网| 七七色色综合| 五月丁久久| 99天堂网| 婷婷久久色| 欧美成人AAA片一区国产精品| 六月婷婷久久| 99热精地址| 五月香婷婷| 亚洲无码成人网| 69er小视频| 色五月激情| 97热久久五月婷婷| 国产在线另类五月婷婷| 99热精品在线播放| 亚洲av无码影院| 五月天色综合服务平台| 大香蕉520| 免费成人中文字幕| 五月丁香六月停停| 日日爽夜夜爽| 99干日本| 啪啪小说五月天| 四LLL少妇BBBB槡BBBB| 国产一级片| 色噜噜五月天| 色色色色色色色色色色色色色色,网站| 婷婷五月成人有| 成人在线视频网| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色婷婷综合电影| 婷婷五月丁香五月天| 色婷婷六月| 五月丁香激情四射| 玖玖在线资源视频| 婷婷丁香社区网| 色婷婷综合亚洲| 久久九九99.www| 另类激情五月| 婷婷久久久| 亚洲成人免费在线| 色色色婷| www.色九月| 久久99网| 亚洲国产黄色电影| 五月激情综合深爱| 日韩成人不卡| 色五月婷婷激情五月| 欧美激情五月天| 99免费热在线精品| 五月天色社区| 粉嫩av懂色av蜜臀av熟妇| 五月丁香激| 操逼六区| A在线观看| www.97碰碰com| 99久精品视频| 91久久久久久久91| 丁香五月天亚洲视频| 色婷婷色| 中文字幕成人影视| 久久9热| 五月丁香婷婷深深爱| 99热在线看片| 亚洲综合在线播放| 激情综合在线观看| 欧美久久婷婷| 午夜大香蕉| 国内外色色色色色成人视频| 2015好吊操| 色五月激情网| 六月丁香婷婷天堂| 屁股翘好撅高迎合跪趴| 狠狠色激情综合| 最新无码专区| 激情五月婷婷老师| 91干网| 日韩在线观看亚洲| 色婷婷狠| 五月婷婷啪啪| 欧美性丁香色色五月天综合爱爱| 中文幕无线码中文字蜜桃| 激情亚洲色图片丁香综合| 综合福利网| 激情五月开心五月丁香五月| 超碰高清在线| 在线成人网站| wuyuedingxiang99| 亚洲日韩一页精品发布| 26uuu亚洲欧美| 2021日韩无码| 999精品乱码77777| 99久久婷婷国产综合精品青桔| 97久久超碰| 思思热在线视频99| 91干在线视频| 久久狠狠干| 久久婷婷五月国产激情综合片| 成人做爰A片免费看网站找不到了| 五月色丁香激情| 一起草aV| 欧美日韩999| 欧美色骚婷婷五月天| 91大屁股在线| 第四色大香蕉| 色婷婷婷av| 久久九九99视频| 99无码视频| 婷婷色在线| 国产性av| 日日日日日| 激情网战码亚洲A| 9九九久久精品无码专区| 丁香五月欧美| 狠狠看狠狠| 无语停婷丁香网| 久99久在线| 婷婷五月精品在线| 伊人婷婷色| 99热官网| 狠狠高潮精品亚洲1| 99操| 丁香六月婷婷激情| www.久久久.com| 久热这里精品免费| 日本久久人| 激情五月天网站| 噜噜吧天天爱| 激情五月图| 超碰AV成人| 中文字幕成人| 中文AV网站| 激情99热| www.久久久久久| 免费视频WWW在线观看网站|