精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

男女视频在线观看网站| 欧美日韩在线一区二区三区| 欧美成人精品欧美一级| 亚洲午夜免费| 欧美日韩亚洲国产一区| 水蜜桃亚洲精品| 精品国产99久久久久久宅男i| 亚洲午夜视频| 在线精品播放av| 影音先锋资源av| 欧美日韩五区| 亚洲在线中文字幕| 日本一区视频在线播放| 亚洲爱情岛论坛永久| 免费在线观看成人av| 久久久精品影院| 日韩中文字幕电影| 国产日本亚洲| 欧美在线观看视频一区二区| 欧美亚洲色图视频| 一级毛片视频在线| 91污在线观看| 波多野结衣成人在线| 中文人妻熟女乱又乱精品| 亚洲大胆在线| 美女999久久久精品视频| 免费在线观看你懂的| 亚洲高清999| 欧美乱妇15p| 国产裸体舞一区二区三区| 深夜国产在线播放| 国产精品三级在线观看| 噜噜噜噜噜久久久久久91| 色一区在线观看| 男女啪啪免费视频网站| 91福利国产在线观看菠萝蜜| 中文字幕av一区 二区| 久久99精品久久久久子伦| www.爱爱.com| 经典一区二区三区| 国产精品自拍小视频| 中文字幕在线观看视频网站| 欧美日韩亚洲国产精品| 久久精品视频在线| 毛片久久久久久| 精品国产a一区二区三区v免费| 日韩成人在线网站| 水蜜桃av无码| 麻豆精品av| 亚洲国产精久久久久久久| 精品伦一区二区三区| 国产精品亚洲欧美日韩一区在线| 欧美日韩国产一级| 日日噜噜噜噜久久久精品毛片| 欧美一级大黄| 在线观看亚洲成人| 国产天堂在线播放| 高清电影一区| 欧美三级蜜桃2在线观看| 午夜激情福利在线| 国产成人a视频高清在线观看| 日本久久精品电影| 999精品视频在线| av亚洲一区| 欧美日韩国产一级二级| 亚洲涩涩在线观看| 国产精品欧美一区二区三区不卡| 91精品啪在线观看国产60岁| ass极品水嫩小美女ass| 另类视频一区二区三区| 日韩精品一区二区三区中文精品| 美女扒开腿免费视频| 久久亚洲黄色| 亚洲欧美综合精品久久成人| 91成人精品一区二区| 国产精品久久占久久| 欧美日韩成人在线观看| 国产精品2020| 久久九九电影| 91精品视频在线免费观看| 国产高清在线观看视频| 成人免费视频播放| 欧洲在线视频一区| 素人av在线| 亚洲午夜免费电影| 国产综合免费视频| 伊人亚洲精品| 亚洲成人网av| 卡一卡二卡三在线观看| 亚洲最新色图| 日本久久久久亚洲中字幕| 中文在线a天堂| 丁香网亚洲国际| 欧美一区二区视频在线| 成人短视频在线| 精品久久中文字幕久久av| 五月婷婷六月丁香激情| 中文字幕区一区二区三| 亚洲欧美日韩精品| 九九这里只有精品视频| 亚洲深爱激情| 亚洲最大av在线| 国产视频精品久久| 亚洲自拍偷拍网站| 亚洲黄色小视频在线观看| 91麻豆精品激情在线观看最新 | 国产伦精品一区二区三区免.费| 国产suv精品一区二区三区| 欧美日韩综合另类| 美女尤物在线视频| 欧美日韩久久不卡| 少妇一级淫免费观看| 久久精品影视| 国产精品xxx视频| 午夜免费福利视频| 国产精品午夜免费| 亚洲自偷自拍熟女另类| 国产高清日韩| 色综合影院在线| av大片在线免费观看| 国产一区不卡精品| 污视频在线免费观看一区二区三区 | 国产亚洲人成网站在线观看| 久草视频精品在线| 精品在线你懂的| 无码免费一区二区三区免费播放| 欧美另类老肥妇| 日韩你懂的在线观看| 中文字幕欧美激情极品| 国产美女一区| 国产激情美女久久久久久吹潮| 在线观看的av| 91国模大尺度私拍在线视频| 国产精品久久久久久久无码| 国产精品大片| 成人一区二区三区四区| 国产二区三区在线| 欧美精品日韩一本| 欧美日韩国产一二三区| 石原莉奈在线亚洲三区| 免费电影一区| 欧美成人ⅴideosxxxxx| 日韩电影第一页| www.国产高清| 97精品电影院| 久草热视频在线观看| 超碰97久久| 久久久免费电影| www.国产麻豆| 一区二区三区中文免费| 超级砰砰砰97免费观看最新一期 | 精品国产不卡一区二区| 日韩在线视频国产| 在线观看国产精品入口男同| 国产色婷婷亚洲99精品小说| 欧美午夜性生活| 超碰成人久久| 国产又爽又黄的激情精品视频 | 欧美国产日韩一区| 丰满少妇高潮在线观看| 亚洲国产成人高清精品| 污污污www精品国产网站| 亚洲大胆视频| 日本一区二区高清视频| av成人在线看| 欧美大奶子在线| 欧美天堂在线视频| 黑人巨大精品欧美一区二区一视频| 中文字幕日韩三级片| 奶水喷射视频一区| 亚洲精品一区二区三区蜜桃久| 四虎精品永久免费| 欧美激情aaaa| 午夜黄色小视频| 欧美性猛交一区二区三区精品| 欧美一区二区三区观看| 国产成人8x视频一区二区| 日本在线xxx| 九九久久精品| 成人性生交大片免费看小说| 国模雨婷捆绑高清在线| 日韩精品视频在线观看免费| 少妇又紧又色又爽又刺激视频 | 伊人久久在线观看| 极品一区美女高清| 国产91在线播放九色快色| 三区四区在线视频| 精品国产乱码久久久久久蜜臀 | 日韩一级欧美一级| 西西44rtwww国产精品| 国产精品色婷婷| zjzjzjzjzj亚洲女人| 日韩综合一区二区| 国产尤物av一区二区三区| 日本一区福利在线| 成人www视频在线观看| 91超碰在线| 久久精品国产精品亚洲| 午夜视频在线播放| 91精品国产高清一区二区三区| www欧美在线| 亚洲乱码国产乱码精品精的特点| 鲁大师私人影院在线观看| 国产一区在线看| 国产黄色特级片| 一级欧洲+日本+国产| 奇米影视首页 狠狠色丁香婷婷久久综合 | 黑人精品xxx一区| 久久精品黄色片| 久久久久青草大香线综合精品| 性色av浪潮av| 老司机精品久久| 久久这里只有精品18| 色爱综合网欧美| 久久艳妇乳肉豪妇荡乳av| 精品视频在线观看免费观看 | 久久一区二区视频| 最好看的中文字幕| 老司机免费视频一区二区三区| 欧美网站免费观看| 欧美区国产区| 日本三日本三级少妇三级66| 亚洲裸色大胆大尺寸艺术写真| 亚洲最大福利网站| 欧美国产视频| 国产精品国产三级国产aⅴ浪潮| 高清毛片在线观看| 欧美裸体男粗大视频在线观看| 在线播放日本| 国产一区二区三区高清在线观看 | 中国china体内裑精亚洲片| 人妻va精品va欧美va| 日韩欧美中文字幕一区| 91精品国自产| 欧美日韩国产一级二级| av首页在线观看| 色综合久久综合网97色综合| 色婷婷在线观看视频| 亚洲福利一区二区| 国产一级视频在线观看| 亚洲伊人伊色伊影伊综合网| 国产精品国产精品88| 中文字幕一区在线观看| 99久久久无码国产精品不卡| 国产精品狼人久久影院观看方式| 蜜臀久久99精品久久久久久| 久久久精品免费网站| 在哪里可以看毛片| 久久久99久久| 久久精品三级视频| 日本一区二区免费在线观看视频 | 亚洲精品精品亚洲| www青青草原| 亚洲一区国产视频| 日韩av一二三区| 精品日韩中文字幕| 国产嫩bbwbbw高潮| 在线免费观看日韩欧美| 中文字幕第一页在线播放| 欧美日韩国产综合久久| 国产精品久久久久毛片| 欧美一卡二卡三卡| 亚洲国产精品久久久久久6q| 亚洲国产日韩欧美在线99| 四虎影视在线播放| 国产亚洲精品激情久久| 日本最新在线视频| 美日韩精品免费观看视频| 国语对白在线刺激| 668精品在线视频| 色老太综合网| 成人xxxx视频| 136国产福利精品导航网址应用| 国严精品久久久久久亚洲影视 | 亚洲区在线播放| 自拍视频在线| 色综合天天狠天天透天天伊人 | 欧美性xxxx极品hd欧美风情| 加勒比在线一区| 91精品国产91久久综合桃花| 人妻妺妺窝人体色www聚色窝| 亚洲片av在线| 午夜伦理在线视频| 5252色成人免费视频| 精品69视频一区二区三区| 99国精产品一二二线| 免费观看久久av| 国产一级大片免费看| 久久在线精品| 在线免费黄色小视频| 91麻豆精品在线观看| 国产福利在线导航| 亚洲成人av在线电影| 亚洲天堂中文字幕在线| 精品999在线播放| www在线播放| 国内精品久久久久久久| 黑人一区二区三区| 精品欧美一区二区在线观看视频| 久久国产小视频| 日本免费不卡一区二区| 狠狠久久亚洲欧美| 免费a级黄色片| 一区二区三区欧美日| 亚洲av人无码激艳猛片服务器| 欧美v日韩v国产v| av中文资源在线| 91av视频在线免费观看| 久久三级中文| 婷婷亚洲婷婷综合色香五月| 国产一区成人| 免费黄视频在线观看| 国产精品美女久久久久高潮| 日韩黄色a级片| 日韩一区二区三区四区五区六区| 极品美乳网红视频免费在线观看 | 天天久久人人| 欧美亚洲自偷自偷| av不卡中文字幕| 亚洲三级在线看| 中文字幕久久熟女蜜桃| 日韩精品在线视频| 91av久久| 国产精品对白一区二区三区| 51精产品一区一区三区| 精品日韩久久久| 国产欧美日韩不卡| 波多野结衣视频网站| 亚洲国产精品美女| 欧美videosex性极品hd| 91gao视频| 久久久久久久久久久妇女| 杨幂毛片午夜性生毛片| 久久精品亚洲精品国产欧美| 中文字幕超碰在线| 日韩av在线精品| 嗯~啊~轻一点视频日本在线观看| 51午夜精品| 欧美日韩免费观看一区=区三区| 色婷婷一区二区三区在线观看| 国产精品免费观看视频| 国产成人精品一区二区色戒| 亚洲图片欧美日产| 丁香六月综合| 日韩videos| 蜜桃91丨九色丨蝌蚪91桃色| 毛片aaaaaa| 欧美日韩久久久| 成人在线直播| 97中文在线观看| 伊人久久大香线蕉综合热线 | 久久久久久久久久久久久久久久久久av | 91国偷自产一区二区开放时间| 国产一区二区三区福利| 国产精品激情av在线播放| 成人写真视频| 999在线精品视频| 一区二区三区小说| 日本波多野结衣在线| 97欧美精品一区二区三区| 日本成人7777| 北条麻妃在线视频| 国产精品国产自产拍在线| 一区二区www| 久99久在线视频| 欧美a大片欧美片| 免费午夜视频在线观看| 亚洲国产高清不卡| 国产三级在线观看视频| 久久全球大尺度高清视频| 男人的天堂久久| 国产又大又黄又粗的视频| 国产精品传媒视频| 超碰在线播放97| 51色欧美片视频在线观看| 精品一级毛片| 亚洲三级在线视频| 精品成人在线视频| 国产高清视频在线播放| 91日本视频在线| 夜夜嗨网站十八久久| jizz18女人高潮| 精品国一区二区三区| 极品美女一区| 在线观看18视频网站| 99天天综合性| 中文字幕一区二区三区四区免费看 | 日本 欧美 国产| 亚洲国产精品视频在线观看| 国产综合色区在线观看| 国产女人18毛片| 久久久久国产精品麻豆ai换脸| 国产三级自拍视频| 国产不卡一区二区在线播放| 婷婷久久综合| 国产传媒第一页| 欧美一区永久视频免费观看| 625成人欧美午夜电影| 国产精品一二三在线观看| 久久久久久久一区|