99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜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激情| 久久婷婷五月天蜜桃| 久久九九热视频| 五月亭亭六月激情| 香蕉综合在线| 光棍影院日韩精品| 色逼综合网| 4399亚洲视频| 五月天色影院| 日日操夜夜爽白洁| 丁香婷婷五月色综合| 婷婷99狠狠躁天天| 天天爽天天爽天天爽天天爽天天爽| 91人在线观看| 97操操| 久久久婷婷| 国产在线网| 五月婷婷激情| 激情五月天综合| 久久婷婷青草五月天| www狠狠爱com| 婷婷欠久少妇| 草了bav视频在线观看| 99这里都是精品| 五月花婷婷最新| 99乱视频| 爆乳熟女一区二区三区爆乳| 狠狠搞狠狠操| 五月天久久综合婷婷丁香| 在线成人网站| 亚洲操精品| 国产一级黄色影片,| 婷婷91| 色欲久久久久| 婷婷色日本| 99色在线视频观看| 久久五月天激情美女| 激情色情五月天| 双性美人被调教到喷水A片| 影音先锋偷偷色男人站| 九九精品婷| 7777国产盗摄农村女人| j五月香在线| 色色五月天激情| 五月色婷婷综合| 东北婷婷五月天| 玖玖在线视频| 色色综合无码| 亚洲成人色五月婷婷综合| 丁香五月香蕉| 另类视频在线| 五月丁香 六月婷婷a| 亚洲六月色婷婷| 91干网| 69人人操人人爽| 丁香五月婷婷色综合| 亚洲日韩一页精品发布| 人人爽网| 激情婷婷五月在线合集| 狠狠色色色| 久久综合久色欧美综合狠狠 | 丁香五月婷婷呀| 99色天堂| 狠狠干2007| 日韩三级片一区二区| 久久女人天堂| 亚洲婷婷五月天综合| 99操视频| 丁香六月 人妻| 深爱激情九九五月天| 色色色在线免费视频| 99久久九九| 久久视频婷婷| 99精品免费视频| 激情五月天婷婷| 五月激情视频| 欧美S码亚洲码精品M码| 婷婷丁香五月天之开心少妇| 九九99热| 亚洲性爱99| 99精品视频在线6| 婷婷开心青青草| 五月天天丁香婷婷在线中| 久久综合激情五月天| 五月丁香在线视频观看| 亚洲色 视频| 婷婷五月激情视频在线| 香蕉视频91| 性爱久久| 色婷婷成人做爰A片免费看网站| 男男野外做爰全过程69| 99九九视频精彩在线| 9色在线视频| VA五月激情在线| 色婷婷激情小说网| 激情亭亭五月| 性色做爰片在线观看WW| 五月婷婷婷| 久久婷婷视频| 99热这里只有精品国产精品| 五月天色社区| 亚洲殴洲精品Av在线| 大香蕉免费9| 五月天色区| 久久在线视频免费观看| 9 99免费视频| 五月婷婷中文网| www激情五月天| 久久女人天堂| 最近免费中文字幕大全高清大全1 免费看欧美成人A片无码 | 五月天婷婷色小说| 婷婷丁香五另类网站| 亚洲五月婷婷| 色激情网| 深爱激情四射| 亚洲中文字幕av| 色五月亚洲| www.久久爱.com| 久久久久综合激动五月天| 婷婷基地爱| 狠狠干婷婷| 99人妻碰碰久久久禁片| 99色激| 丁香婷婷五月综合影院| 丁香五月综合| 丁香婷婷基地| 六月激情网| 另类视频在线| 九九色中文| 五月宗合激情网| 无码任你操| 五月天激情亚洲| 91精品91久久久中77777| 天天综合网网欲色| 丁香花大香蕉婷婷综合| 六月五月婷婷| 色色色香蕉五月婷| 欧美丁香六月激情视频| 99热| 激情五月综合视频| 五月色影院| 五月婷婷狠狠久久| 色五月婷婷五月丁香五月| 激情综合网五月| 狠狠爱婷婷色| 99爱在线精品视频免费观看| 九九九九热99超碰| 精品一区二区三区木瓜| 97在线观视频免费观看| 我爱大香蕉| 色婷婷www| 亚洲婷婷五月天| 亚洲综合婷婷五月| 少妇高潮一区二区三区99欧美| 色爆五月| 婷婷黄色五月天在线视频| 99在线热| 秋霞成人毛片一级A片| 夜夜操,天天撸| 国产婷婷色综合AV蜜臀AV| 9久久久久久久久久久| 婷婷色日本| 久久五月丁香| 开心久久xxx色| 日日撸夜夜操| 97电影99热| 五月婷婷网站| 一区操| 99激情视频热| 日韩成人精品中文字幕电影| 狠狠草综合网| 啪啪色激情五月天| 天天色域综合网| AA片在线观看视频在线播放| 婷婷丁香五月欧美人| 欧美大肥婆大肥BBBBB| 国产老熟妇亲子乱对白| 婷婷丁香人妻天天爽| 97超级啪啪在线观看| 超碰精品手机在线| 香蕉视频性爱BB做爱| 就要去操亚洲成人精品五月天丁香婷婷| 日韩av在线免费观看| 久久99日本精品视频免费观看| 这里只精品热在线18| 亚州男人天堂婷婷五月| www.婷婷五月| 九九热这里只有精品5| 五月婷婷色| 五月婷婷成人网首页| 一本色综合色| 色99在线| 丁香女人五月天| 国产一区二区三区影院| 天天天操天天天日| 日本久久婷| 激情综合网五月天| 色婷婷六月精品| 婷婷不卡基地| 影音先锋一区二区三区| 最新五月天婷婷影| 98永久精品| AV人人操| 五月丁香在线综合| 欧美性二区| 人妻熟人中文字幕一区二区| 日日干日日| 九九综合精品| 亚洲黄网在线| 五月婷婷无码| 996日日爱| 91九色熟女| 狠狠色噜噜狠狠狠888| 丁香狠狠| 96精品久久久久久久久| 五月激香蕉网| 五月婷色| 天天爽夜爽| 亚洲精久久| 五月开心播播网| 五月丁香六月综合激情无码软件亮点| 天天操天天爱天天日| 影音先锋91在线资源站| 色综合久久久久| 婷婷五月综合在线视频| 婷婷操逼| 人操人人| 久久久高清| 操人无码| 九九在线精点品| av婷婷丁香 六月| 色五月婷婷丁香凹凸| 九九亚洲视频| 激情深爱五月天| 激情五月天啪啪视频| 丁香五月激情五月| 大地9中文在线观看免费高清 | 六月婷婷色综合| 99 热| 狠狠色噜噜狠狠亚洲A∨| 久久久婷婷婷| 日本爆乳片手机在线播放| 99高级会所久久| h亚洲| 国产精产国品一二三在观看| 99热九九热| 日日爽日日爽| 森林影视大全,最好看的2019年视频 | 午夜69成人做爰视频| 丁香五月激情综合| 天天操天天操天天操天天操天天操天天操天天操天天操天天操 | 大香蕉人在线65| 五月天偷拍| 欧美色色色色色色| 久久久这里有精品| 久色欧美| 这里只有精品69| 日本va欧美va欧美va精品| www99xxxx五月丁| 偷偷与邻居做爰完整视频| 99国产精品久久久久久久久久久| 五月婷婷综合久久| 五月天综合影院| www.minyis.com【JT】实力收量可预付TG@LXSPSW8| www.91九色| 伊人激情网| 青草青草视频2免费观看| www,久久久| 色欧洲| 丁香五月婷婷激情视频播放| 2025最新亚洲激情在线| 女人天堂av| 色婷婷基地| 久婷婷五月综合欧美| 亚洲成AV人片在线观看| 懂色av粉嫩AV蜜臀AV| 午夜成人片400| www.91色| 五月天精品视频| 碰97久久| 色五月成人| 99只有这里有精品在线视频| 五月婷婷在线视频| 久久婷婷综合国产| 91seav| 日91高清无玛| 色婷婷狠狠爱| 91碰碰| 成人婷99最新| 婷婷丁香五月天激情| 免费V片在线| 人人播| 色婷婷AV在线| 国产成人网| 91九色在线| 亚洲综合婷婷| 这里只有精品久久| 色欲久久99精品久久久久久| 久久婷婷五月综合色天| 久久精品系列| 亚洲超碰在线| 五月丁香怕怕综合| aaa日韩| 丁香五月亚洲无码| 开心激情五月天网| 99天堂网| 1024在线一区| 婷婷欧美激情| 99久久丝| 26uuu另类| 怡红院一二三| caop在线视频| 六月婷婷五月丁香| 婷婷五月天亚洲综合网| 99热线观看9| 久婷婷色| 色频玖玖五月天| 五月丁香久久综合| 久久婷婷欧美| 色五月婷婷五月| 婷婷六月天天| 91热99| 色五月天在线观看| 成人美女网| 人人摸人人干| 大香蕉99| 97婷婷丁香五月天激情图片| Www.激情| 99自拍视频在线| 天天操夜夜操| 午夜不卡久久精品无码免费| 婷婷亚洲久久| 丁香五月激情六月欧亚激情综合导航| 五丁香激情综合| 五月天婷婷五月| 天天婷婷综合亚洲亚洲| 婷婷天天日婷婷| 欧美人与性动交CCOO| 91人人人人人| 九色 在线| 日韩欧美五月丁综合| 天天操天天爽天天爱| 婷婷射图五月天| 日日色综合| caop在线视频| www.玖玖婷婷在线| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 99超级碰免费视频| 欧在线一区| 99爽视频| 丁香五月天激情AV| 婷婷金品综合视频| 婷婷激情综合色五月久久91| 久这里只有精品99| 五月婷婷中文字幕AV| 大香蕉久| 亚洲啪啪网| 激情五月天婷婷激情| 色久综合天天做视频| 伊人色综合久久久| 精品国婬伦V无码久久久| 中文字幕AV在线播放| 日日操日日射| 丁香五月天婷婷激情| 无码成人AAAAA毛片AI换脸| 大香蕉人人人| 深爱激情五月天婷婷网| 夜夜骑夜夜撸| 五月天婷婷激情在线色图| 久1色色| 丁香六月欧美| 婷婷综合丁香| 99热在线里有精品| 噜噜五月天综合| 婷婷桃色网| AV激情五月| 六月综合婷婷开心伊人| 无码日本精品XXXXXXXXX| 五月婷婷激情久久| 激情综合网五月| 99热91| 天天操五月天| 五月婷婷激情综合网 | 97色婷婷成人综合在线观看| 色五月丁香婷婷在线观看| 欧美内射AAAAAAXXXXX| 五月久熟女| 国产玖玖资源| 九月丁香八月婷婷加勒比| 丁香五月天啪啪| 99热在线这里| 天堂伊人干| 色五月首页| 啪啪小说五月天| 超碰在线网站9| 激情四射五月天偷偷看婷婷| 人妻精品在线| 91综合色| 婷婷射图| 日本97在线视频| 亚洲精品激情| 婷婷酒色网| 99国产性感视频| 天天爱天天操| 精品国产va久| 国产毛片欧美毛片久久久| 亚洲综合另类| 久操福利| 变态另类9| 色丁香五月婷婷| 欧美69色| 色播五月综合网| 成人 九九九九| 丁香五月开心婷婷| 99人人干人人操| 俺去也五月| 大香蕉网 久久| 五月草影视| 久热99中文字幕| 九九性视频| 亚洲视频在线网| 人妻精品久久久久久| 男人大jjc女人免费视频| 久热最新视频| 日本nghangse中文字幕| 婷婷婷婷婷婷婷婷| 97干网站| 无码人妻少妇色欲AV一区二区| 久久在线视频只有这里有精品| 热99在线| 求可以看的AV网址| 亚洲视频在线观看| 深爱激情69热| 亚洲视频国产一区| 精品色| site:wpjngj.com| av大片在线| 天天色综合综合| 国产精品黑丝| www.91九色| 久久婷婷五月综合97色一本| 中文字幕在线免费看线人| 99色一| 色婷婷亚洲综合av| 欧洲亚洲免费视频9 | 色色色999| site:jszngf.com| 五月丁香婷婷综合| 99国产小视频| AV色婷婷| 中文字幕成人| 色狠狠色综合| 激情综合5| 亚洲国产精品VA在线看黑人 | 亚洲AV久久久久久久久久久久久久久久| 99热这里只有精品官网| 午夜成人网站在线观看| 日日操天天操| 天天干夜晚夜操| 91成人品| 五月婷婷久久大片| 综合久久9| 亚洲综合丁香五月| 婷婷自拍| 九色视频91| 狠狠五月综合在线| 思恩热国产视频右线观看| 国产精产国品一二三在观看| 色播五月综合网| 狠狠草天天草| 日本丁香久在线| 五月天另类激情在线| 开心五月丁香婷婷| 操逼视频一区| 五月丁香 狠狠爱| 免费啪啪亚州视频| 99热精品一| 九月激情综合| 婷婷丁香激情五月天色色色| 无码99| 亚洲婷婷开心五月| 欧美在线视频免费播放| 成人无码精品1区2区3区免费看| 九九热在线观看视频| 久热只有这里有精品| 日韩三级高清无码| 色婷婷丁香五月| 五月丁香六月花| 99啪啪视频| 超碰99热精品在线| 亚洲成人免费在线| 美女网黄| 激情五月天激情小说| 婷婷五月综合色中文字幕| 婷婷六月久久| 伊久大香蕉| 五月丁香成人网| 美女美女美女三级色天天天天天| site:xmssd.com| 国产免费av在线| 成人AV在线中文版| 夜夜操夜夜操| 婷婷丁香九月| 色婷婷亚洲婷婷在线观看| 五月婷婷播| 久草 天堂| 丰满少妇猛烈A片免费看观看| 91九色无码日韩| 五月丁香青草综合啪啪| 色五月婷婷丁香国产在线| 97碰在线免费观看| 五月天伊人久久| av操逼网| 国产精产国品一二三在观看| 久99久在线| 五月成人网站| 久久视频这里99| 婷婷黄色五月天在线视频| 亚州综合色| 噢美99| 人人噜天天上| 麻豆123区| 色婷丁香五月| 激情小说五月丁香在线视频观看视频| 久久五月激情综合| 影音先锋91| 五月婷婷www| 超碰cap| 国产精品久久久久久久久久| 亚洲AV人人操| 99综合久久| 色色综合激情| 超碰人人99| 99这里有精品| 精品99在线| 五月丁香综合激情| 思思热99热| 丁香婷婷六月男男| 天天天操天天天爰| 久1色色| 五月天色婷婷av| 99热精品网| 五月丁香怕啪啪| 亚洲综人色综网| 婷婷丁香视频在线观看免费| 国产激情综合五月| 99热99热在线观看| 激情五月六月丁香| 色婷婷色人人射| 婷婷五月天婷婷| 热99这里只有精品视频| 五月综合婷婷五月| 97影院一级片| 亚洲综合五月天婷婷| 六月丁香久久| 国产黄色在线| 人人97操| 一级性感黄色内射视频| 丁香五月天激情婷婷丁香六月| 国产中文亚洲欧美日韩性交| 天天天天天色| 天天狠狠六月婷丁香影院| 日本五月婷婷| 久久色天堂| 伊人激情| 97久久综合网| av激情在线| 色九网| 亚洲操操| 亚洲人妻一区二区 | 久久伊人五月天| 99综合网| 欧美成综合在线观看| 色五月欧美| 五月天色色激情综合| 婷婷色五月久久| 日日夜夜爽| 天天日天天插| 无码免费人妻A片AAA毛片西瓜| 国产麻豆视频| 亚洲综合另类| 色综合五月在线| 79色色色色| w婷婷五月婷婷w| 五月丁香六月激情综合| 久久99免费视频| 丁香婷婷性爱| 色天天综合成人网| 五月天啪啪| 风流少妇A片一区二区蜜桃 | 五月综合六月婷婷| 九色自拍| 亚洲精品第一色色色色色色| 啪啪六月婷婷| 天天cha成人综合网| 欧美丁香婷婷五月| 五月天婷婷成人网| 日本黄色精品| 亚洲99激情| 五月天婷婷激情在线色图| 99精品综合视频| 五月婷婷激情啪啪| 欧亚洲在线高清视频| 思思99re这里只有| 精品久久久人妻| 91干婷婷| 日木狠狠干| 99精品在这里| 中文字幕日产A片在线看| 日本三级片片| 久久er视频6| 99色视频在线| www.色五月| 亚洲六月婷婷| 五月天婷婷激情综合| 狠狠爱综合| 五月天丁香综合在线| 丁香激情合作五月| 婷婷久月| 日韩精品无码AV| 狠狠色丁香综合| 色五月色图| 丁香五月狠狠在线观看| 激情宗合哪里能看| 婷婷五月天色色| 久久玖玖99| 99爱免费在线观看| 九九视频在线观看| 亚洲综合在线播放| 色播五月| 国产精品A片在线| 视色网在线播放| 色九网| 欧美性猛交99久久久99| 天天做天天爱天天玩夜夜爽 | 丁香五月婷久久| 中文字幕日产A片在线看| 婷婷五月丁香六月| 久久久.COM| 狠狠色噜噜狠狠亚洲A∨| 丁香亚洲婷婷五月| 免费无码毛片一区二区A片| 日本在线视频www色| 这里只有精彩视频| 91打屁股免费看| 99久久国产宗和精品1上映| 久久久99视频| 日本97在线| 婷婷五月免费视频| 婷婷丁香五月天大香蕉| 99视频热| 亚洲国产黄色电影| 久久这里有精品视频在线免费观看| 五月天偷拍| 日本人妻丁香婷婷久久寝取熟女五月| 婷婷成人五月天| 婷婷丁香五月天婷婷| 日韩1区2区| 亚洲激情久久| 婷婷丁香77777| 久久XX| 婷婷五月天伊人在线| 五月天婷婷久久| 97色色-99久久| 国产亚洲在线| 激情五月天综合图片小说网站| 大香蕉久| 久久婷婷五月天激情| A片试看50分钟做受视频| 玖玖在线资源视频| 婷婷久综合| 99热777| 久婷婷久草| 九九热在线视频观看| 婷婷综合干| 高清无码视频网址| 日韩狠狠色| 日本九九九九| Av性爱网| 高清免费在线视频| 能看的av| 性爱综合网| 免费无码毛片一区二区A片| VA婷婷亚洲| 亚洲人成网站999综合| 播五月丁香六月| 亚洲综合无码| 亚洲成人综合在线| 国产成人精品一区二三区熟女在线| 激情五月婷婷色综合| www九九免费视频| www夜夜操comwww| 久久综合婷| 色五月琪琪| 天天操天天爽天天爱| 丁香五月色情av| 亚洲VA口| 99五月丁香丁| 秋霞少妇AV网站| 99视频在线精品免费观看2| 久久综合无| 婷婷色影院| 99思思热只有在这里看 | 99久久偷拍视频| 中文在线成人| 婷婷丁香午夜综合影视| 精品自拍97| 黄色三级日本| 丁香五月激情站| 激情性爱网站| 99热欧美| 激情六月丁| 久久视这里只有精品| 久久伊人大香蕉| Www.激情| 99热 这里只有精品 国产 日韩| 五月激情综合婷婷| 91色婷婷综合久久中文字幕二区| 色五月天天| www.久久99精品| 亚洲九区| 欧美人人草| 久久er这里只有精品| 欧美日韩一区二区三区四区| 久久精品99| 五月婷婷激情四月| 亚洲1区| 97成人丁香| 能看的AV| 99re6久热只有精品6在线直播| 久久99热这里只有| 色婷婷五月成人网| 国产古装妇女野外A片| 综合性爱网| 久热精品视频| 久久久久婷婷五月热综合| 丁香五月综合激情性爱| 婷婷丁香18| 热九九精品| 婷婷 月 丁香| ,99视频久久| 超碰人人操| 碰碰碰碰碰99| 麻豆WWWCOM内射软件| 婷婷99热| 欧美精品18| 99热这里只有精品1998| 五月天色导航婷婷资源婷婷| 久久大香免费| 久热99中文字幕| www.91久久| 久久精品五月天| 国产精品香蕉| 五月婷婷九| 综合激情五月丁香9999久久精| www一起操| 九九视频在线观看视频在线播放69| 天天拍天天操| 色婷婷先锋| 婷婷五月天电影网| 婷婷五亚洲| 甈你aaaaa| 九九热免费观看视频| 色99在线视频| 五月丁香激情综合啪啪| 丁香婷婷久久综合在线| 亚洲操逼网| 色五月AV| 色五月激情婷婷| 爆乳熟妇一区二区三区爆乳| 成人在线日韩欧美| 五月丁香婷婷综合网| 天天综合影院| 亚洲激情免费视频| 99热精品一| 狠狠色精品综合| 深爱五月亚洲| 欧美激情-区二区三区| 五月丁香成人版| 欧美日韩大黄| 五月熟妇婷婷久久| 婷丁香五月天| 天天曰夜夜爽| 欧日美女Va| 噜噜噜噜噜久| 五婷婷六月合| 影音先锋 91工厂| 丁香综合婷婷开心激情网| 9久久精品| 婷婷激情五月| 26UUU| 欧美日本综合网| 99 热| 丁香六月婷婷高清| 婷婷狠狠五月综合| 五月激情久久综合网| 天天插插天天| 99久久婷婷国产综合| 婷婷亚洲天堂| 综合五月天亚洲婷婷| 五月丁香婷婷激情久久| ZpRSw| 丁香九月激情在线视频| 97碰成超视频免费视频| 狠狠色丁香婷婷久久综合| 久久9热| 人妻精品在线| 激情综合播播| 五月丁香婷婷啪啪综合网| 色婷婷综合网站| 开心五月婷婷婷美女| 亚洲乱码在线观看| 99热这里只有精品99| 99视频| 婷婷五月娱乐在线| 综合激情在线| 激情五月综亚网| 五月六月激情| 五月丁香精品| 久久97| 五月婷婷影视| 色婷婷影| 99惹在线精品免费观看| 久久草婷婷丁香网站| 啪啪小说五月天| 思思99久久| BBWCUCKOLD精品熟妇| 午夜AV网| 色丁香婷婷| 色在线五月天免费| 五月色色激情网| www.minyis.com【JT】实力收量可预付QQ2101460746 | 亚洲视频色婷婷| 九九九热精品| 情久久综合五月天| 久热91精品| AV九九| 婷婷久久图片| 性色播| 日日爱699| 五月婷婷丁香俺日污视频| 成人亚洲精品| 婷婷五月丁香激情| 五月天丁香综合久久国产| 亚洲精品操一操、噜一噜、摸一摸、爽 | 丁香九色不卡aaa| 色综合综合色| 色狠狠色综合| 九九免费视频| 色综合色综合色综合| 九色婷婷| 4399无码视频| 欧美综合激情五月丁香| 开心激情网在线| 激情丁香九九五月综合网| 黄桃AV无码免费一区二区三区| 亚洲99一级无嗎特制在线| 婷婷五月天在线看| 99热6精品| 亚洲日本韩国| 4399在线日本A片| 丁香五月综合在线播放| 超碰在线免费| 狠狠色中色| 九九热色视频| 婷婷五月色激情欧美激情| 亚洲AV成人在线| 天天激情夜夜干| 久久婷婷六月综合综合| 大地9中文在线观看免费高清| 日91高清无玛| 久久欧洲综合网| 激情综合久久| 日噜噜色| renrencaoav| 精品久久99| 九九十99视频| 。久久久久久久久久久久久久人妻 | www.日本91| 潘金莲AAAAAAAAAA| 、激情六月天| 久99久热| 99这里有精品| 婷婷91| 亚洲天堂色色| 成人性生活免费观看。| 亚洲色情免费网| 久久激情五月| 婷婷激情五月视频| 这里只有精品在线免费视频| 午夜不卡久久精品无码免费| 99啪啪| 97人人操| 99.N在线视频| 色婷婷www| 婷婷久综合| 婷婷五月天色综合翘| 丁香成人五月天| 超碰99久久| www.久久久久久久| 久热久操久热久草国产91| 色爱终和网| 日韩成人精品中文字幕电影| 久草久青福利| www.超碰在线| 五月婷婷色色| 俺去也综合| 日韩九区| 天天干夜夜谢| 91九色精品熟女内射| 91无码高清| 亚洲人妻电影| 婷婷五月天无码| 亚洲视频久久| 五月婷婷 激情五月| 欧美碰碰| www.色婷婷.com| 久久99久久久| 天天日天天色| 91一起操| www.粉嫩av.com| www婷婷| 亚洲婷婷五月天在线激情综合网| 噜噜视频| 97碰成超视频免费视频| 亭亭五月丁香五月天激情| 日韩精品无码AV| 日婷婷| 玖玖99精品视频| 丁香五月社区| 久久久激情视频| 99视频精品| 欧美五月婷婷| 久婷五月| 狠狠干五月天婷婷网| 性综合网| 日韩一区二区三区无码| 日日操天天操| 五月久久亚洲| 成人在线观看一区| 91碰在线| 丁香九月久久| 色色色色综合网| 天天色伊人| 国产99久9在线+|+传媒| 亚洲成人五月| 99在线精品观看99| 国产精品18久久久| 久久人妻伦理| 欧美日韩国产一区| 五月丁香六月激情欧美综合| 99热久只有精品首页| 色欲AVV| 99精品免费视频| 99操中文视频| 一点色成人网| 激情五月婷婷六月丁香| 亚洲综合色色| 在线日韩视频| 伊人婷婷激情| 青青色com久久| 久久五月丁香| 思思久久99热| 九一牛视频探花| 亚洲操精品| 五月综合婷婷网| 4438亚洲欧美| 日日操天天操| 五月色婷婷在线观看| 婷色五月| 激情五月天小说网| 四色综合网| 一本狠婷婷综合| 色色五月婷| 婷婷五月天激情综合深爱| 1024你懂的欧美曰韩| 一起草Av| 台湾佬天天日丁香婷婷五月天 | 99九九综合久久九九| 3p日韩网站视频| 精品九九婷婷| 中文字幕丰满孑伦无码专区| 婷婷丁香18| 九九激情网| 五月婷婷黄| 狠狠狠狠狠| 五月天激情啪啪| 色色色激情| 91 久热| 综合久久97| 99精品无码网站| 91婷婷丁香五月亚洲| 99热这里只有精品66| 五月婷婷熟女| 丁香六月婷婷开心| 欧美色必爱| 五月丁香婷婷啪啪| 五月婷婷六月激情| 婷婷五月天视频小说| 日本免费91| 日本熟妇乱妇熟色A片蜜桃| 91久久电影| av免费人人| 天天插天天插天天操| www,超碰| 婷婷伊人欧美| 日韩成人电影AV| 色欲午夜无码久久久久久张津瑜 | 婷婷丁香五月综合激情小说| 操操操操操操婷婷五月天| 人妻五月天激情开心网| 蜜乳久AV| www九九热| 色五月综合激情| 丁香五月激情啪啪| 天天婷婷天天| www久久久| 大香蕉九九操| A片天天| 92久久精品一区二区| 99激情在线| 99热官网| 99re热免费观看视频精品| 99热这只有| 激情婷婷久久| 国产avapp 网| 99久久九九| 婷婷丁香五月天欧美| 91ncom.色| 超碰在线中文字幕| 天天揷综合网| 91久久久久久久| 泰州成人视频| 五月婷在线观看| 任你日视频| 激情五月小说婷婷| 另类视频丁香五月| 26UUU亚洲欧美| 人妻九九九九| 九九九九大香蕉| 69综合在线| 亚洲色图啪啪| 97香蕉人人在线观看| 男同色五月开心五月激情五月| 三年高清大片免费观看国语| 九月丁香| 国产成人网址| 亚洲综合1024| 激情五月天色色| 色久九| 五月婷婷基地| 五月激情视频| 99热最新| 精品久久这里热66| 99这里热| 久久在线大香蕉| 97欧美在线| 婷婷的久久网站| 大香蕉啪啪| 国产成人99久久亚洲综合精品| 91人人操.COM| 色色色图| 99热免费| 婷婷五月天激情四射| 狠狠操综合| 香蕉久久国产AV一区二区| 男男野外做爰全过程69| 最新无码专区| www日本熟妇99在线视频| www.亚洲激情.com| 99九九这里有免费视频| 九色亚洲| www.99热这里精品| 五月婷婷久久大香蕉| 伊人激情影院| 99久久久99久久91熟女| 久久一级AV| 无码碰碰| 日本3级片一区2区| 婷婷五月色影视先锋| 9久久久久| 色婷婷影院| 96性爱视频| 骚货艹网站视频| 99无码精品| 久9视频| 激情av| 91碰免费视频| 色涩影院六月丁香| 91黄址| 久久无码激情视频| 婷婷色五月情| 久热免费| 丁香五月天视频| 久久婷婷视频| 五月婷婷 激情按摩| 久久精品天| 丁香五月天激情四射网络不好| 亚洲不卡| 六月丁香射婷婷欧美色图片| 天天插天天很| 婷婷伊人五月天| a网站免费观看| 人妻熟人中文字幕一区二区| 午夜福利8055| 色吊丝永久访问网址| 噜噜噜噜婷婷五月天| 天天擼久久擼在线| 婷婷成人AV| 亚洲天堂热| av网站免费在线| 超碰91在线| 婷婷在线观看五月天在线视频| 人妻精品久久久久久| 中文字幕婷婷| 黄桃AV无码免费一区二区三区| 99噜噜噜| 激情综合自拍五月婷婷色五月| 丁香五月天BBw| 婷婷月综合| 婷婷婷狠狠| 丁香五月亚洲综合丝袜| 中文字幕综合| 秋霞影音91人妻久久| 97热这里只有精品| 天天干天天拍| 婷婷五月乱交换| 丁香五月天色综合| SESE无码AV| 大香蕉伊人久久| 丁香花综合永久入口| 精品久久99码| 激情五月天激情小说| a久久| 五月婷婷黄色毛片| 夜夜www| 久久综合影院 | 六月丁AV| 婷婷五月天在线观看| 狠爱婷色| 亚洲婷婷月丁香五月| 秋霞影音91人妻久久| 青草五月天| 色五月婷婷影视| 婷婷激情五月综合基地| 欧美三级欧美一级| 久久五月婷综合网| 91天天操天天干天天射| 五月天色裸体视频| 欧美大肥婆大肥BBBBB| 国产精品电影网| 丁香五月av在线| 九九無妻| 国产成人AV在线播放| aaaaaa片| 婷婷丁香九月| 性爱五月婷婷| av 一区三区四区| www久久艹| 日本色99网站| 91婷婷五月天综合视频| 99久re热视频精品98| www.色情五月天.com| 婷婷丁香激情五月天色色| 六月丁香网| 五月色网| 五月久久婷婷丁香| 精品欧美性爱超级爽| WWW五月婷婷| 99日本黄站| 久久大香蕉视频| 亚洲热久久| 丁香婷婷五月份| 激情婷婷五月天伊人在线观看 | 五月婷婷,六月丁香| 欧美槡BBBB槡BBB少妇| 久热这里只有精品3| www.久久99| 人人干99| 成人网在线视频| 激情丁香久久| 国产精品热搜丁香五月婷婷| 久久大国产香蕉| 五月丁香六月婷婷不卡免费无码| 亚洲婷婷五月天| 九九热这里只有精品556| 999热在线视频| 人妻视频在线| 丁香五月停停av| www99精品日韩| 五月综合激情综合久| 中国女人做爰A片| 婷婷丁香午夜综合影视| 综合网视频| 五月婷婷久久爱| 五月婷婷六月丁香色| 中文AV网站| 蜜臀嫩草| 婷婷五月天丁香综合网| 97色色色视频| 91九九九色在| 99色最新在线视频| 日韩精品AV一区二区三区| 五月婷婷视频啪啪美女| 狠狠综合| 五月丁香六月成人| 色婷亚洲五月丁香| 五月丁香六月婷婷色情| 爱狠射| 99热色精品| 99热大香蕉| 欧美熟女99| 亚洲五月婷| 色婷婷小说| 亚洲色婷婷激情| 96自拍视频九色在线观看| 天天久久综合| 久久久久九九九九视屏小说88| 深爱激情丁香| 亚洲AV无码影院| 99热99色| 性 色 婷婷| 亚洲婷婷性爱| 婷婷色激情五月天| 色综合网页| 情久久综合五月天| 99热www| 婷婷涩涩五月天| 丁香五月激情天AV无码| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 97中文在线| 天天做天天爱天天爽| 激情合网婷婷| 美女视频图片久久91| 丁香五月天综合| 99九九精品| 久久五月婷6 9| 色婷婷狠狠18| 欧美精品999| 老师的粉嫩小又紧水又多A片视频| 五月丁香伊人网| 久青草大香蕉| 综合网色| 国产探花AV在线| 久久九⑨| 激情无码网| 77799热| 丁香五月婷婷激情中文| 99玖玖免费视频| www.国产亚洲69ty.久久久久久久久久久久| 欧洲电影在线观看免费版英语版| 草逼大片| 婷婷综合| 九月丁香婷婷网| 五月丁香成人| 五月丁香av在线| 色玖玖综合| 日日夜夜狠狠| 婷婷五月天啪啪| 亚洲操逼网| 综合久久十三| 欧美人妻一区二区| 丁香五月色情| 激情四射网|