精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL 同步 ES 總崩?這四招直接封神!

數據庫 MySQL
在解決問題之前,咱得先搞清楚,MySQL 同步 ES 為啥總崩。這就跟處對象一樣,你得知道人家為啥吵架,才能對癥下藥不是?咱先看看常見的 "分手現場" 都啥樣。

兄弟們,咱今天來聊聊 MySQL 同步 ES 這事兒。不知道多少兄弟在生產環境里被這玩意兒折磨過,明明本地測試好好的,一上線上就跟中了邪似的,三天兩頭崩給你看。咱就說,這 MySQL 和 ES 咋就不能好好處對象呢?非得三天兩頭鬧分手,整得咱程序員跟個情感調解員似的,天天處理它們的 "感情糾紛"。別著急,今兒咱就來整整這四大招,讓這倆 "小情侶" 老老實實、穩穩當當地處對象,不再鬧幺蛾子。

第一招:吃透 "分手原因",別做糊涂調解員

在解決問題之前,咱得先搞清楚,MySQL 同步 ES 為啥總崩。這就跟處對象一樣,你得知道人家為啥吵架,才能對癥下藥不是?咱先看看常見的 "分手現場" 都啥樣。

數據不一致引發的 "信任危機"

最常見的就是數據同步過程中,MySQL 里的數據變了,ES 里的沒跟上,或者反過來。比如用戶更新了一條數據,MySQL 那邊成功了,結果同步到 ES 的時候報錯了,這時候兩邊數據就不一致了。要是這時候用戶剛好搜索到 ES 里的舊數據,那體驗可就太差了。更嚴重的是,要是這種不一致的情況積累多了,整個系統就跟個破了洞的水桶,到處漏風,遲早得崩。

性能瓶頸導致的 "累覺不愛"

還有一種情況是性能跟不上。比如說,業務高峰期的時候,MySQL 這邊突然來了一波大流量,增刪改操作特別多,這時候同步任務一下子處理不過來,就跟堵車似的,越堵越多,最后直接把系統給堵死了。ES 那邊也扛不住啊,大量的寫入請求涌過來,索引構建跟不上,CPU、內存占用飆升,最后只能罷工。

網絡波動造成的 "溝通障礙"

網絡這玩意兒,就跟天氣似的,說變就變。好好的同步過程,突然來個網絡抖動,數據包丟了,連接斷了,這同步任務可不就崩了嘛。而且,要是重試機制沒做好,這些失敗的任務就跟一堆爛攤子,沒人收拾,越積越多,最后把整個同步服務拖垮。

版本兼容引發的 "代溝問題"

MySQL 和 ES 都在不斷更新版本,每次更新都可能帶來一些兼容性問題。比如 MySQL 的 binlog 格式變了,ES 的 API 接口改了,這時候要是同步工具沒及時跟上,就跟兩個說不同語言的人交流,根本聊不到一塊兒去,可不就出問題了嘛。

為啥會出現這些問題?

咱再深入分析分析背后的原因。從技術層面來說,MySQL 是關系型數據庫,注重事務一致性,而 ES 是搜索引擎,更注重查詢性能和分布式架構。兩者的設計理念和數據模型本來就不一樣,這就好比一個是嚴謹的會計,一個是靈活的銷售,讓他們配合默契本來就不容易。

從同步機制來看,常見的同步方式有基于輪詢的全量同步、基于 binlog 的增量同步、通過中間件(比如 Canal)監聽數據庫變更等。每種方式都有自己的優缺點,要是沒選對合適的方式,或者在實現過程中沒處理好細節,比如重試策略、冪等性處理、事務監聽等,就容易出問題。

從系統架構來看,要是同步服務設計得不夠健壯,沒有做好限流、熔斷、降級等措施,在面對突發流量時就容易崩潰。而且,分布式系統里,各個組件之間的協調和容錯處理也很復雜,稍有不慎就會引發連鎖反應。

第二招:選對 "戀愛方式",讓同步穩如泰山

咱知道了問題所在,接下來就該選對同步方式了。不同的業務場景,適合不同的同步方式,就跟處對象一樣,有的人喜歡直來直去,有的人喜歡細水長流,得看具體情況。

全量同步:簡單直接,但別亂用

全量同步就是把 MySQL 里的數據全部拉取到 ES 里,簡單粗暴。比如說,當 ES 集群剛搭建好,或者數據初始化的時候,全量同步就很有用。但是,全量同步的缺點也很明顯,數據量太大的時候,耗時太長,而且在同步過程中,MySQL 的數據還在不斷變化,很容易導致數據不一致。

咱來看看全量同步的實現步驟。以 Java 為例,咱可以用 JDBC 從 MySQL 里查詢數據,然后通過 ES 的 Java 客戶端批量寫入。比如:

// 從 MySQL 全量查詢數據
String mysqlSql = "SELECT id, name, age, email FROM user";
PreparedStatement ps = connection.prepareStatement(mysqlSql);
ResultSet rs = ps.executeQuery();
// 批量寫入 ES
BulkRequest bulkRequest = new BulkRequest();
while (rs.next()) {
    User user = new User();
    user.setId(rs.getString("id"));
    user.setName(rs.getString("name"));
    // 其他字段賦值...
    IndexRequest indexRequest = new IndexRequest("user_index")
       .id(user.getId())
       .source(JSON.toJSONString(user), XContentType.JSON);
    bulkRequest.add(indexRequest);
}
BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);

不過,這里得注意分頁查詢,不然數據量太大,內存會扛不住。而且,全量同步最好選在業務低峰期進行,減少對數據庫的壓力。

增量同步:實時更新,細節為王

增量同步主要是捕獲 MySQL 的數據變更事件,比如插入、更新、刪除操作,然后實時同步到 ES 里。常用的方法有基于 binlog 的方式,比如通過 Canal 模擬 MySQL 主從復制,監聽 binlog 日志,獲取數據變更信息。

Canal 的工作原理是這樣的:Canal 偽裝成 MySQL 的從庫,向 MySQL 主庫發送 dump 請求,主庫會把 binlog 日志發送給 Canal,Canal 解析 binlog 日志,得到數據變更的具體內容,然后發送給下游的消費者,比如我們的同步服務。

咱來看看如何使用 Canal 進行增量同步。首先,需要在 MySQL 里開啟 binlog 功能,配置主庫允許從庫連接。然后,下載 Canal 服務端,啟動后配置連接 MySQL 的參數。接著,編寫客戶端代碼,監聽 Canal 的消息。

CanalConnector connector = CanalConnectors.newClusterConnector(
    "canal-server:11111", 
    "example", 
    "", 
    ""
);
connector.connect();
connector.subscribe(".*\\..*");
connector.rollback();
while (true) {
    Message message = connector.get(100);
    List<CanalEntry.Entry> entries = message.getEntries();
    for (CanalEntry.Entry entry : entries) {
        if (entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONBEGIN || 
            entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONEND) {
            continue;
        }
        CanalEntry.RowChange rowChange;
        try {
            rowChange = CanalEntry.RowChange.parseFrom(entry.getStoreValue());
        } catch (Exception e) {
            throw new RuntimeException("解析 rowChange 失敗", e);
        }
        for (CanalEntry.RowData rowData : rowChange.getRowDatasList()) {
            if (rowChange.getEventType() == CanalEntry.EventType.INSERT) {
                handleInsert(rowData);
            } else if (rowChange.getEventType() == CanalEntry.EventType.UPDATE) {
                handleUpdate(rowData);
            } else if (rowChange.getEventType() == CanalEntry.EventType.DELETE) {
                handleDelete(rowData);
            }
        }
    }
}

在處理數據變更的時候,得注意事務的完整性,確保同一個事務里的所有操作都被正確處理。而且,對于更新操作,要處理部分字段更新的情況,避免不必要的全量更新。

異步隊列:削峰填谷,應對流量洪峰

當業務高峰期到來時,大量的數據庫變更事件會瞬間涌來,這時候如果直接同步到 ES,很容易把 ES 給沖垮。這時候,咱可以引入消息隊列(比如 Kafka、RabbitMQ)作為中間層,先把變更事件發送到隊列里,然后同步服務再從隊列里慢慢消費,這樣就能起到削峰填谷的作用。

具體來說,當 MySQL 數據發生變更時,先把變更信息封裝成消息,發送到消息隊列中。同步服務作為消費者,從隊列中獲取消息,然后寫入 ES。這樣,即使短時間內有大量的變更事件,也不會直接壓到 ES 上,而是由隊列來緩沖。

// 發送變更事件到 Kafka
Producer<String, String> producer = new KafkaProducer<>(props);
String topic = "mysql_es_sync_topic";
String message = buildChangeMessage(rowData);
producer.send(new ProducerRecord<>(topic, message));
// 從 Kafka 消費消息并同步到 ES
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList(topic));
while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        String changeMessage = record.value();
        handleChangeMessage(changeMessage);
    }
    consumer.commitAsync();
}

這里需要注意消息的順序性和冪等性。對于有順序要求的變更事件,比如同一個數據的更新和刪除,要保證消費的順序和數據庫變更的順序一致。而冪等性處理則是為了避免重復消費導致的數據不一致,比如在寫入 ES 時,通過唯一標識(如 ID)進行去重處理。

事務監聽:保證一致性,拒絕 "半吊子" 同步

在數據庫事務中,數據的變更可能涉及多個表,這時候如果同步服務在事務還未提交時就獲取到變更事件,就會導致數據不一致。所以,咱需要監聽數據庫的事務提交事件,確保只有完整的事務中的變更才會被同步。

以 Spring 為例,可以利用 TransactionSynchronizationManager 來監聽事務的提交事件。在事務提交后,再觸發同步操作。

TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
    @Override
    public void afterCompletion(int status) {
        if (status == TransactionSynchronization.STATUS_COMMITTED) {
            // 執行同步操作
            syncToEs(entity);
        }
    }
});

這樣,就能保證只有在事務成功提交后,才會進行數據同步,避免了因事務回滾而導致的無效同步和數據不一致問題。

第三招:做好 "健康管理",讓系統百病不侵

選對了同步方式,咱還得做好系統的健康管理,就跟人一樣,定期體檢,及時發現和解決問題,才能保持良好的狀態。

重試機制:別輕易放棄,多試幾次

在同步過程中,難免會遇到一些臨時性的問題,比如網絡抖動、ES 短暫繁忙等。這時候,重試機制就很重要了。對于失敗的同步任務,咱不能直接放棄,而是要按照一定的策略進行重試。

可以設置重試次數,比如第一次失敗后,等待 1 秒重試,第二次等待 2 秒,第三次等待 4 秒,以此類推,呈指數級增長,避免頻繁重試對系統造成壓力。同時,要記錄重試的次數和失敗原因,當重試次數超過閾值時,將任務放入失敗隊列,后續人工處理。

public void syncData(String data, int retryCount) {
    try {
        // 執行同步操作
        esClient.index(data);
    } catch (Exception e) {
        if (retryCount > 0) {
            try {
                Thread.sleep(1000 * (1 << (maxRetry - retryCount)));
            } catch (InterruptedException ex) {
                Thread.currentThread().interrupt();
            }
            syncData(data, retryCount - 1);
        } else {
            // 放入失敗隊列
            failureQueue.add(data);
            // 記錄日志
            log.error("同步失敗,重試次數用盡,數據:{},原因:{}", data, e.getMessage());
        }
    }
}

限流與熔斷:保護系統,別被壓垮

當 ES 出現性能瓶頸或者網絡異常時,咱不能讓同步服務無限制地發送請求,這時候就需要限流和熔斷機制。限流可以控制同步服務發送請求的頻率,避免瞬間大量請求壓垮 ES。熔斷則是當 ES 服務不可用達到一定閾值時,暫時停止同步請求,防止故障擴散。

可以使用 Hystrix 等框架來實現熔斷和限流。比如,設置一個熔斷器,當失敗率超過 50%,且請求量超過 20 次時,觸發熔斷,在一段時間內拒絕所有請求,之后嘗試半開狀態,逐步恢復。

@HystrixCommand(
    fallbackMethod = "fallbackSync",
    commandProperties = {
        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "5000"),
        @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "20"),
        @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
        @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000")
    }
)
public void syncToEs(String data) {
    // 實際同步操作
    esClient.index(data);
}
public void fallbackSync(String data) {
    // 熔斷后的處理,比如記錄日志、放入重試隊列
    log.warn("同步熔斷,數據放入重試隊列:{}", data);
    retryQueue.add(data);
}

監控與報警:實時體檢,早發現早治療

咱得給同步系統裝上 "監控攝像頭",實時監控各項指標,比如同步延遲、成功率、ES 的寫入速率、CPU 使用率、內存占用等。一旦發現異常,及時報警,讓咱能第一時間處理。

可以使用 Prometheus + Grafana 搭建監控系統,收集同步服務和 ES 集群的指標數據,設置合理的報警閾值。比如,當同步延遲超過 10 秒時,發送報警郵件或釘釘消息;當 ES 的寫入失敗率超過 5% 時,觸發報警。

# Prometheus 配置示例
scrape_configs:
  - job_name: "mysql_es_sync"
    static_configs:
      - targets: ["sync-service:8080"]
  - job_name: "elasticsearch"
    static_configs:
      - targets: ["es-node1:9200", "es-node2:9200", "es-node3:9200"]

通過監控儀表盤,咱可以直觀地看到系統的運行狀態,及時發現潛在的問題,比如 ES 集群的分片分配不均、同步服務的線程池阻塞等,然后針對性地進行優化。

日志管理:留下 "破案線索",方便排查問題

詳細的日志是排查問題的關鍵。咱得記錄同步過程中的關鍵信息,比如數據變更的類型、數據內容、同步時間、成功與否、失敗原因等。而且,日志要分級記錄,比如 debug 級用于開發調試,info 級用于記錄正常流程,warn 和 error 級用于記錄異常情況。

可以使用 Logback 或 Log4j2 等日志框架,將日志輸出到文件或日志服務中。對于失敗的同步任務,要記錄完整的堆棧信息和上下文數據,方便后續排查。

<!-- Logback 配置示例 -->
<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>sync.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

第四招:解決 "版本代溝",讓新舊和諧共處

隨著技術的發展,MySQL 和 ES 都會不斷推出新的版本,帶來新的功能和改進,但也可能引入兼容性問題。咱得學會處理這些 "版本代溝",讓新舊版本和諧共處。

適配 MySQL 新版本的 binlog 格式

MySQL 5.6 之后引入了 row 格式的 binlog,相比之前的 statement 格式,能更準確地記錄數據變更。但不同版本的 row binlog 格式可能會有差異,比如 MySQL 8.0 引入了一些新的數據類型和特性。

咱在解析 binlog 時,需要根據 MySQL 的版本來適配不同的格式。比如,使用 Canal 時,要確保 Canal 的版本與 MySQL 的版本兼容,并且在解析代碼中處理新增的數據類型,比如 JSON 類型、二進制類型等。

應對 ES 接口變更

ES 每次大版本更新,比如從 6.x 升級到 7.x,再到 8.x,都會有一些 API 接口被廢棄或修改。比如,7.x 版本之后,類型(type)的概念被弱化,默認每個索引只有一個類型;8.x 版本引入了一些新的查詢語法和功能。

咱的同步代碼需要根據 ES 的版本進行調整。比如,在創建索引時,要注意映射(mapping)的定義方式;在寫入數據時,使用最新的客戶端庫和 API 方法。同時,要做好版本兼容測試,確保在不同版本的 ES 集群上都能正常同步。

版本升級策略

在升級 MySQL 或 ES 版本之前,一定要做好充分的測試。可以在預發布環境中模擬線上環境,進行全鏈路測試,包括數據同步、查詢性能、穩定性等方面。

對于同步服務本身,要保持代碼的可維護性和擴展性,通過抽象接口、使用配置化的方式,方便在不同版本之間切換。比如,定義一個 ES 操作接口,不同的 ES 版本實現不同的接口方法,通過工廠模式根據配置創建對應的實現類。

public interface EsOperation {
    void index(String id, String data);
    void update(String id, String data);
    void delete(String id);
}

publicclass Es7Operation implements EsOperation {
    // ES 7.x 實現
}

publicclass Es8Operation implements EsOperation {
    // ES 8.x 實現
}

publicclass EsOperationFactory {
    public static EsOperation createEsOperation(String esVersion) {
        if ("7.x".equals(esVersion)) {
            returnnew Es7Operation();
        } elseif ("8.x".equals(esVersion)) {
            returnnew Es8Operation();
        } else {
            thrownew IllegalArgumentException("不支持的 ES 版本:" + esVersion);
        }
    }
}


實戰案例:手把手教你搭建穩定的同步系統

咱以一個電商訂單系統為例,來看看如何綜合運用這四大招,搭建一個穩定的 MySQL 同步 ES 的系統。

業務場景

電商訂單系統中,訂單數據存儲在 MySQL 中,需要同步到 ES 中,供用戶搜索訂單使用。訂單數據量大,且頻繁更新(比如訂單狀態變更、物流信息更新等),同時要保證搜索的實時性和數據一致性。

方案設計

  1. 同步方式:采用 Canal 監聽 MySQL 的 binlog 進行增量同步,結合 Kafka 消息隊列削峰填谷。對于初始數據,先進行全量同步,之后通過增量同步保持實時更新。
  2. 事務處理:在訂單更新的業務代碼中,注冊事務監聽,確保只有事務提交后才發送變更事件到 Kafka。
  3. 重試與限流:同步服務從 Kafka 消費消息時,實現重試機制,對于暫時失敗的請求,按指數退避策略重試;同時,使用 Hystrix 對 ES 的寫入操作進行限流和熔斷,防止 ES 被壓垮。
  4. 監控與日志:搭建 Prometheus + Grafana 監控系統,監控同步延遲、Kafka 隊列積壓量、ES 寫入速率等指標;記錄詳細的日志,包括訂單變更詳情、同步狀態、錯誤信息等。
  5. 版本兼容:考慮到后續可能升級 MySQL 和 ES 版本,同步服務采用接口化設計,方便適配不同版本的 API。

實現步驟

  1. 初始化全量同步:在系統上線前,通過分頁查詢 MySQL 訂單表,批量寫入 ES,注意控制每次批量寫入的大小(比如 1000 條一批),避免對數據庫和 ES 造成太大壓力。
  2. 配置 Canal 和 Kafka:在 MySQL 中開啟 binlog,配置 Canal 連接 MySQL,解析訂單表的變更事件;創建 Kafka 主題,用于存儲訂單變更消息。
  3. 開發同步服務:編寫 Canal 客戶端代碼,監聽訂單表的 INSERT、UPDATE、DELETE 事件,將變更信息封裝成消息發送到 Kafka;編寫 Kafka 消費者代碼,從隊列中獲取消息,調用 ES 客戶端進行數據同步,實現重試、限流、熔斷等邏輯。
  4. 集成事務監聽:在訂單更新的業務邏輯中,使用 Spring 的 TransactionSynchronizationManager 監聽事務提交事件,確保只有成功提交的事務才會觸發同步。
  5. 部署監控系統:安裝 Prometheus 和 Grafana,配置數據源和儀表盤,添加報警規則,比如當 Kafka 隊列積壓量超過 10000 條時,發送報警通知。

效果驗證

通過壓測工具模擬大量訂單變更操作,觀察同步系統的運行情況。在正常流量下,同步延遲控制在 500ms 以內,數據一致性良好;在流量洪峰時,Kafka 隊列成功緩沖了大量請求,ES 寫入速率保持穩定,系統未出現崩潰現象;通過監控儀表盤,可以實時查看各項指標,及時發現并處理潛在問題。

總結:掌握這四招,告別 "崩潰噩夢"

咱今天聊了 MySQL 同步 ES 總崩的四大招,從吃透問題原因、選對同步方式、做好系統健康管理到解決版本兼容問題,每一招都有具體的實現方法和注意事項。其實,關鍵就在于咱得深入理解這兩個系統的特性,結合業務場景選擇合適的技術方案,同時把細節處理好,比如重試、限流、監控這些機制,缺一不可。

就像處對象一樣,MySQL 和 ES 要想處得好,咱得花心思去了解它們的 "脾氣秉性",給它們創造合適的 "相處環境",做好 "溝通協調"。只要咱把這一套組合拳打下來,這倆 "小情侶" 肯定能和和睦睦,讓咱的同步系統穩如泰山,再也不用半夜起來處理崩潰問題,安心睡個好覺。

責任編輯:武曉燕 來源: 石杉的架構筆記
相關推薦

2020-08-26 17:17:08

打印機電源卡紙

2023-05-30 08:38:25

MySQL數據庫日志

2021-10-21 22:56:56

Windows 11Windows微軟

2019-12-17 14:40:52

勒索軟件網絡攻擊黑客

2019-03-22 09:13:47

淘寶12306閑魚

2025-04-28 09:31:11

Springif 語句系統

2025-04-07 00:00:00

CaffeineJava數據存取

2016-07-05 08:49:13

LinuxNetflix視頻

2023-01-13 14:29:00

ESMySQL數據

2023-06-08 08:43:36

2025-09-16 00:00:25

2019-07-09 09:11:55

Wifi網絡電腦

2021-01-06 10:26:17

電腦WindowsWindows 10

2018-06-25 15:08:34

打印機處理打印

2025-05-06 00:00:05

MySQLES協同

2023-08-31 08:32:52

2018-05-12 16:26:17

互聯網VPC子網

2023-01-04 08:38:43

Spring異步線程

2009-02-05 10:14:00

局域網網絡參數設置

2020-09-07 08:42:13

宕機業務運維
點贊
收藏

51CTO技術棧公眾號

亚洲精品在线视频播放| 日本精品一区二区三区高清 久久| 亚洲 欧美 国产 另类| 成人综合日日夜夜| 亚洲国产成人91porn| 国产欧美一区二区三区另类精品| 国内精品福利视频| 99精品小视频| 亚洲精品一区二区三区四区高清 | mm131亚洲精品| 黄色片网站在线观看| heyzo一本久久综合| 国产精品久久久久久久电影| 久久久久成人网站| sdde在线播放一区二区| 精品久久一区二区| 91热这里只有精品| 成人性生交大片免费看在线播放| 久久精品亚洲一区二区三区浴池| 成人精品网站在线观看| 久久一级黄色片| 欧美午夜精品一区二区三区电影| 精品久久久网站| 日韩在线不卡一区| 一个人www视频在线免费观看| 成人免费在线播放视频| 欧美日韩在线观看一区| 成人激情四射网| 蜜桃传媒麻豆第一区在线观看| 久久理论片午夜琪琪电影网| 日本一级片免费| 九九久久婷婷| 亚洲精品wwww| 三大队在线观看| 男人亚洲天堂| 欧美色偷偷大香| 免费在线观看的av网站| 国产精品国精产品一二| 中文字幕一区二区三区不卡在线 | 精品视频黄色| 日韩精品在线视频观看| 丰满少妇xbxb毛片日本| 免费一级欧美在线大片| 欧美日本免费一区二区三区| 日韩一级片播放| 色戒汤唯在线观看| 一区二区三区中文字幕电影| 91免费视频黄| 天天影视久久综合| 中文字幕+乱码+中文字幕一区| 久久综合给合久久狠狠色| 高清毛片aaaaaaaaa片| 国产最新精品免费| 91精品中国老女人| 91中文字幕在线视频| 蜜臀av在线播放一区二区三区| 国产成人aa精品一区在线播放 | 日韩欧美小视频| 国产欧美一区二区精品久导航| 乱一区二区三区在线播放| 婷婷色在线视频| av一区二区三区| 国外成人免费视频| 欧美视频久久久| av网站免费线看精品| 国产精选在线观看91| 丰满少妇被猛烈进入| 国产不卡高清在线观看视频| 国产成人免费观看| 亚洲xxx在线| 成人性视频免费网站| 国产伦精品一区二区三区高清| 性猛交xxxx乱大交孕妇印度| 成人午夜视频免费看| 国产精品亚洲不卡a| 手机在线不卡av| 2021中文字幕一区亚洲| 欧美一区观看| 欧美激情二区| 一区二区三区四区中文字幕| 亚洲人成无码网站久久99热国产| caoprom在线| 日韩欧美国产黄色| 亚洲综合婷婷久久| 久久视频免费| 亚洲黄色在线看| 亚洲精品一区二区三区影院忠贞| 色综合久久一区二区三区| 超碰91人人草人人干| 国产午夜精品无码一区二区| 久久国产主播| 成人免费淫片aa视频免费| 亚洲国产精品欧美久久 | 懂色av蜜臀av粉嫩av永久| 亚洲不卡av不卡一区二区| 久久久久亚洲精品成人网小说| 91蜜桃视频在线观看| 日韩不卡一二三区| 亚洲综合av影视| 污污视频在线观看网站| 国产精品久久久久一区二区三区 | 欧美96在线| 亚洲永久免费视频| 久久人妻精品白浆国产| 日本一区二区三区视频在线看 | 国产精品免费视频久久久| 国产精品无码专区av免费播放| 成人动漫一区二区在线| 日本一区二区在线视频观看| 国产一二三区在线观看| 午夜精品一区二区三区免费视频 | 午夜精品电影在线观看| 爱看av在线入口| 欧美日韩日日摸| 人妻丰满熟妇av无码久久洗澡| 国产精品成人av| 欧美日韩国产二区| 中文字幕有码视频| 91日韩在线专区| 国产一二三区在线播放| 国产精品伦一区二区| 精品亚洲精品福利线在观看| 少妇久久久久久被弄高潮| 日韩精品91亚洲二区在线观看| 国产精品日韩欧美一区二区| 免费黄网站在线| 在线视频中文字幕一区二区| 日本黄色录像片| 欧美黄免费看| 成人黄色片网站| 成人免费高清在线播放| 精品福利免费观看| 日本wwwwwww| 亚洲国产精品成人| 国产精品看片资源| 免费a级毛片在线观看| 亚洲成a天堂v人片| 亚洲午夜精品在线观看| 国产精品久久久久久久久妇女 | 国产va免费精品观看精品| 亚洲三级黄色在线观看| 91美女免费看| 99re热这里只有精品视频| 人妻互换免费中文字幕| 日韩三级网址| 欧美精品一二区| av高清一区二区| 国产精品第13页| 色啦啦av综合| 亚洲mv大片欧洲mv大片| 91精品久久久久久久久久另类| av在线播放网| 91精品办公室少妇高潮对白| 人人妻人人澡人人爽人人精品| 亚洲激情一区| 九9re精品视频在线观看re6| www欧美xxxx| 亚洲成人av中文字幕| xxxx 国产| a亚洲天堂av| 少妇无码av无码专区在线观看| 第一区第二区在线| 韩国一区二区电影| 手机福利在线| 91国模大尺度私拍在线视频| 日本少妇高潮喷水xxxxxxx| 视频一区二区三区入口| 久久精品日产第一区二区三区精品版| sm捆绑调教国产免费网站在线观看 | 久久久www成人免费精品| 国产情侣激情自拍| 亚洲一级二级三级| 特黄特黄一级片| 欧美激情偷拍自拍| 亚洲自拍偷拍区| 国产盗摄——sm在线视频| 亚洲女人天堂网| 一区二区视频免费| 亚洲自拍偷拍欧美| 人妻少妇精品视频一区二区三区 | 57pao成人国产永久免费| 日本一区高清| 欧美日韩国产系列| 欧美精品久久久久性色| 91蜜桃免费观看视频| 欧美三级理论片| 欧美在线观看天堂一区二区三区| 国产精品香蕉视屏| 中文字幕系列一区| 欧美乱大交xxxxx| 午夜视频免费在线| 欧美三级视频在线| 国产真人真事毛片| 国产蜜臀97一区二区三区| 97人人爽人人| 亚洲免费精品| 中文字幕精品—区二区日日骚| 91亚洲无吗| 国产精品精品视频| 性欧美videos高清hd4k| 亚洲另类欧美自拍| 国产成人精品白浆久久69| 色综合天天天天做夜夜夜夜做| 日韩精品一区二区亚洲av性色| 91在线观看视频| 午夜视频在线网站| 久久精品导航| www.亚洲成人网| 日韩一区二区三区免费播放| 久久一区二区三区av| 国产在线不卡一区二区三区| 日本中文字幕成人| 色图在线观看| 日韩三级成人av网| 久久视频www| 亚洲成人久久一区| 国产乱码一区二区| 日韩欧美国产骚| 久久久久噜噜噜亚洲熟女综合| 中文字幕+乱码+中文字幕一区| 日本黄色片在线播放| 国产麻豆视频一区| 亚洲成人福利在线观看| 日韩亚洲国产欧美| 欧美日韩午夜爽爽| 欧美综合一区| 另类小说综合网| 草草视频在线一区二区| 成人中文字幕在线观看| 91大神在线观看线路一区| 91精品国产九九九久久久亚洲| 超碰免费公开在线| 中文字幕亚洲国产| 国产在线视频网址| 亚洲国产一区自拍| 蜜桃av中文字幕| 欧美大片一区二区| 国产男男gay体育生白袜| 精品视频一区三区九区| 91青青草视频| 色爱区综合激月婷婷| 97免费在线观看视频| 亚洲国产乱码最新视频| 男女羞羞免费视频| 一区二区三区四区中文字幕| 欧美三级 欧美一级| 亚洲日本在线观看| 免费精品在线视频| 中文字幕一区二区日韩精品绯色| 99精品全国免费观看| 国产日韩欧美精品综合| 亚洲第一综合网| 中文字幕不卡一区| 亚洲国产精品一区二区久久hs| 中文字幕av一区二区三区免费看 | 神马午夜一区二区| 亚洲激情视频在线| 亚洲欧美日韩精品永久在线| 国产视频久久网| 国产高清在线看| 日韩中文字幕在线视频| 国产在线高清视频| 欧美激情免费观看| bl在线肉h视频大尺度| 欧美自拍视频在线| 日韩电影大全网站| 国产精品中文字幕久久久| 成人在线日韩| 国产精品久久久久久免费观看| 久久99精品国产自在现线| 麻豆av福利av久久av| 黑丝美女一区二区| 在线观看国产一区| 欧美日韩精选| 国产超级av在线| 久久国产乱子精品免费女| 不用播放器的免费av| 国产不卡在线播放| 中文字幕xxx| 国产精品久久久久久久久免费桃花 | 少妇人妻互换不带套| 久久精品国产成人一区二区三区| 99中文字幕在线| av中文字幕亚洲| 欧美aaa级片| 亚洲综合色区另类av| 特级做a爱片免费69| 欧美日本一区二区三区四区| 精品免费久久久| 亚洲欧美日韩精品久久亚洲区| 色多多视频在线观看| 97精品国产97久久久久久| 色8久久影院午夜场| 2019国产精品视频| 中日韩免视频上线全都免费| 在线播放 亚洲| 亚洲欧美清纯在线制服| 久久撸在线视频| 成人黄色小视频在线观看| 日韩免费成人av| 亚洲国产视频网站| 正在播放亚洲精品| 亚洲精品一区二区三区99| 福利在线观看| 午夜精品一区二区三区在线视| 久久久久毛片| 久久99热只有频精品91密拍| 亚洲欧洲日韩| 日本999视频| av一二三不卡影片| 日本高清不卡免费| 色成年激情久久综合| 人妻少妇精品无码专区| 久久亚洲电影天堂| 日本少妇一区| 精品麻豆av| 欧美成人中文| 亚洲另类第一页| 久久久精品黄色| 国产成人亚洲精品自产在线| 欧美一区二区三区在线观看视频| 国产色a在线| 午夜精品一区二区三区av| 美女精品久久| 中文字幕一区二区三区四区五区六区 | 成人在线观看毛片| 老色鬼精品视频在线观看播放| 国产传媒第一页| 五月天丁香久久| 亚洲国产日韩在线观看| 久久夜色精品国产欧美乱| 国产成人免费| 婷婷五月色综合| 日日夜夜精品视频天天综合网| 欧美做受喷浆在线观看| 午夜影视日本亚洲欧洲精品| 国产刺激高潮av| 欧美黑人xxx| 911精品国产| 免费人成自慰网站| 成人免费视频视频| 动漫精品一区一码二码三码四码| 精品久久久久久综合日本欧美| 欧美videosex性极品hd| 波多野结衣精品久久| 欧美日韩国产高清| 美女被爆操网站| 亚洲网友自拍偷拍| 欧美亚洲精品在线观看| 中文字幕亚洲综合久久五月天色无吗'' | 成人免费一区二区三区视频| 中文字幕久久网| 最新的欧美黄色| 欧美视频第一| 在线播放豆国产99亚洲| 久久精品国产99国产| 情侣偷拍对白清晰饥渴难耐| 4hu四虎永久在线影院成人| 快射av在线播放一区| 亚洲r级在线观看| 欧美日韩精品免费观看视频完整| 91传媒理伦片在线观看| 亚洲国产日产av| 亚洲av成人精品一区二区三区在线播放| 97视频在线观看免费| 亚洲涩涩av| 三上悠亚在线一区| 日韩理论片在线| 亚洲精品无码专区| 97超碰色婷婷| 国产探花在线精品一区二区| 老司机午夜性大片| 亚洲欧美日韩国产成人精品影院| 性做久久久久久久| 57pao成人永久免费视频| 清纯唯美日韩| 黄色三级视频在线播放| 亚洲电影第三页| 国产91porn| 国产一区二区三区综合| 欧美精品xxxxx| 亚洲精品小视频| av成人在线网站| 免费看毛片的网址| 久久精品视频一区二区三区| 国产精品视频第一页| 欧美国产日韩精品| 亚洲人成精品久久久| 黄色aaaaaa| 欧美日韩在线免费| 婷婷在线视频| 精品国产一区二区三区免费| 奇米四色…亚洲| 久热这里只有精品在线| 亚洲色在线视频| 一区三区自拍| 别急慢慢来1978如如2| 亚洲永久精品国产| 天堂资源在线中文| 麻豆av一区二区三区|