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

深度解析 Raft 協議與 KRaft 實戰演示

網絡 網絡管理
Raft 協議是一種分布式一致性算法,它用于在分布式系統中的多個節點之間達成一致性。Raft 協議的目標是提供一種相對簡單、易于理解和實現的方法,以確保在網絡分區、節點故障等情況下,系統仍然能夠保持一致性和可用性。

一、Raft 協議是什么?

Raft 協議是一種分布式一致性算法,它用于在分布式系統中的多個節點之間達成一致性。Raft 協議的目標是提供一種相對簡單、易于理解和實現的方法,以確保在網絡分區、節點故障等情況下,系統仍然能夠保持一致性和可用性。

圖片圖片

應用服務對于請求的處理流程圖:

圖片圖片

以下是 Raft 協議的核心架構組件和流程:

1、節點角色:

  • Leader:負責管理整個集群,處理客戶端請求,發起日志復制,以及觸發新的選舉。
  • Follower:被動節點,接收并復制 Leader 的日志條目,響應 Leader 的心跳和日志復制請求。
  • Candidate:當 Follower 在選舉超時時間內未收到 Leader 的心跳時,它會變成 Candidate 并發起選舉。

圖片圖片

當一個節點啟動的時候,需要將自身節點信息注冊到集群中Leader節點

2、領導者選舉(Leader Election):

  • 當集群啟動或 Leader 失效時,Follower 會等待一段時間(隨機化超時時間)后變成 Candidate。
  • Candidate 發起選舉,向其他節點發送請求投票(RequestVote RPC)。
  • 如果 Candidate 獲得大多數節點的投票,它就成為新的 Leader。

3、日志復制(Log Replication):

  • Leader 處理客戶端請求,將每個請求作為新的日志條目追加到其日志中。
  • Leader 向其他節點發送 AppendEntries RPC 來復制日志條目。
  • 當日志條目被復制到大多數節點時,Leader 將這些條目標記為已提交,并通知 Follower 應用這些更改。

4、日志壓縮(Log Compaction):

  • 為了減少日志的大小,Raft 允許 Leader 刪除那些已經被大多數節點復制并提交的日志條目。

5、安全性和一致性:

  • Raft 確保在任何時候,只有當前任期的日志條目可以被提交。通過領導者的選舉機制和日志復制策略,Raft 保證了集群狀態的一致性。

6、成員變更(Membership Changes):

  • Raft 允許在不停機的情況下更改集群的成員。
  • Leader 可以向 Follower 發送配置更改的日志條目,這些更改在被復制和提交后生效。

7、心跳和超時:

  • Leader 定期向 Follower 發送心跳(Heartbeat)以維持其領導地位。
  • Follower 在未收到心跳的情況下會觸發新的選舉。

8、日志一致性:

  • Raft 通過確保所有已提交的日志條目在集群中的所有節點上都是一致的,來維護一致性。

Raft 協議的架構設計強調了簡單性和易于理解,同時提供了強大的一致性和容錯能力。這種設計使得 Raft 成為了許多分布式系統和數據庫的首選一致性算法。

角色轉換這幅圖是領袖、候選人和群眾的角色切換圖,我先簡單總結一下:

  • 群眾 -> 候選人:當開始選舉,或者“選舉超時”時
  • 候選人 -> 候選人:當“選舉超時”,或者開始新的“任期”
  • 候選人 -> 領袖:獲取大多數投票時
  • 候選人 -> 群眾:其它節點成為領袖,或者開始新的“任期”
  • 領袖 -> 群眾:發現自己的任期ID比其它節點分任期ID小時,會自動放棄領袖位置

圖片圖片

Raft 協議通過這些機制解決了分布式系統中的一致性問題,特別是在領導者選舉和日志復制方面。它被廣泛應用于各種分布式系統和服務中,例如 etcd(一個分布式鍵值存儲系統),它被用作 Kubernetes 的后端存儲。Raft 協議的設計使得它在實際應用中既高效又可靠。

二、Raft 協議應用場景

Raft 協議作為一種分布式一致性算法,被廣泛應用于需要在多個節點間保持數據一致性的分布式系統場景中。以下是一些典型的 Raft 協議應用場景:

1、分布式存儲系統:

Raft 協議被用于分布式存儲系統中,以確保數據在多個節點間的一致性和可用性。例如,分布式鍵值存儲(如 etcd、Consul)和分布式數據庫(如 TiKV)都采用了 Raft 協議。

2、配置管理服務:

在配置管理服務中,Raft 用于確保集群中的所有節點都能訪問到最新的配置信息。例如,Consul 提供了一個服務發現和配置的工具,它使用 Raft 來保證配置的一致性。

3、服務發現和注冊:

服務發現和注冊系統(如 etcd)使用 Raft 來維護服務實例的注冊信息,確??蛻舳四軌虬l現和連接到正確的服務實例。

4、分布式鎖服務:

分布式鎖服務需要在多個節點間協調資源的訪問,Raft 協議可以幫助實現一個高可用和一致性的分布式鎖。

5、分布式任務調度:

在分布式任務調度系統中,Raft 可以用來選舉任務調度器的領導者,確保任務分配的一致性和順序執行。

6、分布式狀態機:

Raft 協議可以用來構建分布式狀態機,其中每個節點都維護一個狀態機的副本,Raft 保證這些狀態機的狀態一致。

7、分布式日志系統:

分布式日志系統(如 Apache Kafka)可以使用 Raft 來保證日志數據在多個副本之間的一致性。

8、集群管理:

在集群管理工具中,Raft 可以用于選舉集群領導者,管理集群狀態,以及處理集群成員的加入和退出。

9、分布式事務:

雖然 Raft 本身不直接處理分布式事務,但它可以作為分布式事務協議的一部分,用于保證事務日志的一致性。

Raft 協議因其易于理解和實現,以及在實踐中的高效性和可靠性,成為了構建分布式系統時的首選一致性算法之一。在這些應用場景中,Raft 協議幫助系統在面對網絡分區、節點故障等分布式系統常見問題時,仍然能夠保持數據的一致性和系統的可用性。

三、Kafka Raft(KRaft)

Kafka Raft(KRaft)與 Apache ZooKeeper 是兩種不同的分布式協調服務,它們在 Kafka 集群中扮演著不同的角色。以下是 KRaft 與 ZooKeeper 的對比:

1、依賴性:

  • ZooKeeper:在 KRaft 出現之前,Kafka 嚴重依賴于 ZooKeeper 來管理集群的元數據,如 broker 注冊、主題分區、控制器選舉等。
  • KRaft:KRaft 是 Kafka 內部實現的一致性協議,它允許 Kafka 集群在不依賴 ZooKeeper 的情況下運行,從而簡化了 Kafka 的架構。

2、一致性協議:

  • ZooKeeper:使用 ZAB(ZooKeeper Atomic Broadcast)協議,它是一個為分布式系統提供一致性服務的協議。
  • KRaft:基于 Raft 一致性協議,它提供了一種更易于理解和實現的領導者選舉和日志復制機制。

3、性能和可伸縮性:

  • ZooKeeper:在大型集群中,ZooKeeper 可能會成為性能瓶頸,因為它需要處理大量的客戶端請求和維護復雜的會話狀態。
  • KRaft:KRaft 旨在提高 Kafka 的性能和可伸縮性,通過內部管理元數據,減少了對外部協調服務的依賴。

4、部署和管理:

  • ZooKeeper:部署和維護 ZooKeeper 集群需要額外的工作,包括配置、監控和故障恢復。
  • KRaft:由于 KRaft 集成在 Kafka 中,部署和管理 Kafka 集群變得更加簡單,不再需要單獨的 ZooKeeper 集群。

5、可靠性和可用性:

  • ZooKeeper:ZooKeeper 提供了強一致性保證,但在選舉過程中可能會有短暫的不可用性。
  • KRaft:KRaft 同樣提供了強一致性保證,并且通過內部的控制器集群(Controller Quorum)來提高系統的可靠性和可用性。

6、未來發展:

  • ZooKeeper:隨著 KRaft 的引入,Kafka 社區逐漸減少了對 ZooKeeper 的依賴,這可能會影響 ZooKeeper 在 Kafka 生態系統中的地位。
  • KRaft:KRaft 是 Kafka 未來發展的方向,它標志著 Kafka 朝著更輕量級、更易于管理的方向發展。

KRaft 模式的主要優勢包括:

  • 去中心化:Kafka 集群不再依賴于外部的 ZooKeeper 集群,簡化了部署和運維。
  • 性能提升:由于不再需要與 ZooKeeper 進行通信,Kafka 集群的性能得到了提升。
  • 擴展性:KRaft 模式允許 Kafka 集群更靈活地擴展,不再受到 ZooKeeper 集群規模的限制。
  • 一致性和可用性:Raft 協議確保了即使在部分控制器節點失敗的情況下,集群的元數據仍然能夠保持一致性和可用性。
  • 簡化的故障恢復:在 KRaft 模式下,Kafka 集群的故障恢復過程更加簡單和直接。

KRaft 模式在 Kafka 3.3.1 版本中被標記為可以在生產環境中使用。這意味著 Kafka 用戶現在可以選擇 KRaft 模式來部署他們的 Kafka 集群,以獲得更好的性能和更簡單的運維體驗。然而,需要注意的是,KRaft 模式目前仍然是一個相對較新的功能,因此在生產環境中使用時,建議密切關注 Kafka 社區的更新和最佳實踐。

四、基于KRaft 協議部署Kafka(不依賴與Zookeeper)

關于更多為啥會拋棄Zookeeper的原因可以參考我這篇文章:為何Kafka在2.8版本開始會“拋棄”Zookeeper?

首先來看一下KRaft在系統架構層面和之前的版本有什么區別。KRaft模式提出來去zookeeper后的kafka整體架構入下圖是前后架構圖對比:

圖片圖片

1)下載 Kafka

wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz

2)配置修改

修改kafka目錄下的config/kraft/server.properties文件。三個服務器都需要修改。特別注意:每個服務器(broker)上的配置里的node.id必須是數字,并且不能重復。

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# This configuration file is intended for use in KRaft mode, where
# Apache ZooKeeper is not present.  See config/kraft/README.md for details.
#

############################# Server Basics #############################

# The role of this server. Setting this puts us in KRaft mode
# 節點角色(修改)
process.roles=broker,controller

# The node id associated with this instance's roles
# 節點ID,和節點所承擔的角色想關聯(修改)
node.id=1

# The connect string for the controller quorum
# 配置標識有哪些節點是 **Quorum** 的投票者節點
controller.quorum.voters=1@192.168.182.110:9093,2@192.168.182.111:9093,3@192.168.182.112:9093

############################# Socket Server Settings #############################

# The address the socket server listens on.
# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum.
# If the broker listener is not defined, the default listener will use a host name that is equal to the value of java.net.InetAddress.getCanonicalHostName(),
# with PLAINTEXT listener name, and port 9092.
#   FORMAT:
#     listeners = listener_name://host_name:port
#   EXAMPLE:
#     listeners = PLAINTEXT://your.host.name:9092
listeners=PLAINTEXT://:9092,CONTROLLER://:9093

# Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT

# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=PLAINTEXT://:9092

# A comma-separated list of the names of the listeners used by the controller.
# If no explicit mapping set in `listener.security.protocol.map`, default will be using PLAINTEXT protocol
# This is required if running in KRaft mode.
controller.listener.names=CONTROLLER

# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

# The number of threads that the server uses for receiving requests from the network and sending responses to the network
num.network.threads=3

# The number of threads that the server uses for processing requests, which may include disk I/O
num.io.threads=8

# The send buffer (SO_SNDBUF) used by the socket server
socket.send.buffer.bytes=102400

# The receive buffer (SO_RCVBUF) used by the socket server
socket.receive.buffer.bytes=102400

# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=104857600


############################# Log Basics #############################

# A comma separated list of directories under which to store log files
# 這里我修改了日志文件的路徑,默認是在/tmp目錄下的
log.dirs=/data/kraft-combined-logs

# The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitinotallow=1

# The number of threads per data directory to be used for log recovery at startup and flushing at shutdown.
# This value is recommended to be increased for installations with data dirs located in RAID array.
num.recovery.threads.per.data.dir=1

############################# Internal Topic Settings  #############################
# The replication factor for the group metadata internal topics "__consumer_offsets" and "__transaction_state"
# For anything other than development testing, a value greater than 1 is recommended to ensure availability such as 3.
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1

############################# Log Flush Policy #############################

# Messages are immediately written to the filesystem but by default we only fsync() to sync
# the OS cache lazily. The following configurations control the flush of data to disk.
# There are a few important trade-offs here:
#    1. Durability: Unflushed data may be lost if you are not using replication.
#    2. Latency: Very large flush intervals may lead to latency spikes when the flush does occur as there will be a lot of data to flush.
#    3. Throughput: The flush is generally the most expensive operation, and a small flush interval may lead to excessive seeks.
# The settings below allow one to configure the flush policy to flush data after a period of time or
# every N messages (or both). This can be done globally and overridden on a per-topic basis.

# The number of messages to accept before forcing a flush of data to disk
#log.flush.interval.messages=10000

# The maximum amount of time a message can sit in a log before we force a flush
#log.flush.interval.ms=1000

############################# Log Retention Policy #############################

# The following configurations control the disposal of log segments. The policy can
# be set to delete segments after a period of time, or after a given size has accumulated.
# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
# from the end of the log.

# The minimum age of a log file to be eligible for deletion due to age
log.retention.hours=168

# A size-based retention policy for logs. Segments are pruned from the log unless the remaining
# segments drop below log.retention.bytes. Functions independently of log.retention.hours.
#log.retention.bytes=1073741824

# The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes=1073741824

# The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000

三個broker的配置基本都和上面的配置一樣,不同的地方就是node.id:

kraft1:node.id=1
kraft2:node.id=2
kraft3:node.id=3

另外還有兩處需要修改。

  • controller.quorum.voters=1@kraft1:9093,2@kraft2:9093,3@kraft3:9093【以逗號分隔的{id}@{host}:{port}投票者列表。例如:1@localhost:9092,2@localhost:9093,3@localhost:9094】
  • log.dirs=/home/vagrant/kraft-combined-logs【日志路徑,默認是/temp下的文件下,生產環境不要使用,因為linux會清理/tmp目錄下的文件,會造成數據丟失】

Process.Roles:

每個Kafka服務器現在都有一個新的配置項,叫做Process.Roles, 這個參數可以有以下值:

  • 如果Process.Roles = Broker, 服務器在KRaft模式中充當 Broker。
  • 如果Process.Roles = Controller, 服務器在KRaft模式下充當 Controller。
  • 如果Process.Roles = Broker,Controller,服務器在KRaft模式中同時充當 Broker 和Controller。
  • 如果process.roles 沒有設置。那么集群就假定是運行在ZooKeeper模式下。

如前所述,目前不能在不重新格式化目錄的情況下在ZooKeeper模式和KRaft模式之間來回轉換。同時充當Broker和Controller的節點稱為“組合”節點。

對于簡單的場景,組合節點更容易運行和部署,可以避免多進程運行時,JVM帶來的相關的固定內存開銷。關鍵的缺點是,控制器將較少地與系統的其余部分隔離。例如,如果代理上的活動導致內存不足,則服務器的控制器部分不會與該OOM條件隔離。

Quorum Voters

  • 系統中的所有節點都必須設置 controller.quorum.voters 配置。這個配置標識有哪些節點是 Quorum 的投票者節點。所有想成為控制器的節點都需要包含在這個配置里面。這類似于在使用ZooKeeper時,使用ZooKeeper.connect配置時必須包含所有的ZooKeeper服務器。
  • 然而,與ZooKeeper配置不同的是,controller.quorum.voters 配置需要包含每個節點的id。格式為: id1@host1:port1,id2@host2:port2。

3)生成集群ID

隨便找一個服務器,進入kafka目錄,使用kafka-storage.sh生成一個uuid,一個集群只能有一個uuid?。。?/p>

./bin/kafka-storage.sh random-uuid
# 這個ID就可以作為集群的ID
# AxAUvePAQ364y4mxggF35w

4)用 kafka-storage.sh 格式化存儲數據的目錄

三個機器上都需要執行

#./bin/kafka-storage.sh format -t <uuid> -c ./config/kraft/server.properties
./bin/kafka-storage.sh format -t AxAUvePAQ364y4mxggF35w -c config/kraft/server.properties

5)用bin/kafka-server-start.sh 啟動Kafka Server

./bin/kafka-server-start.sh -daemon  ./config/kraft/server.properties

6)測試驗證

./bin/kafka-topics.sh --create --topic kafkaraftTest --partitions 1 --replication-factor 1 --bootstrap-server 192.168.182.110:9092

查看topic

./bin/kafka-topics.sh --list --bootstrap-server 192.168.182.110:9092
./bin/kafka-topics.sh --describe --topic kafkaraftTest --bootstrap-server 192.168.182.110:9092

圖片圖片


責任編輯:武曉燕 來源: 大數據與云原生技術分享
相關推薦

2024-04-12 12:22:39

前端開發網絡請求

2023-03-02 07:37:53

2010-09-09 13:03:13

2023-12-14 13:28:00

Spring流程Web

2021-09-08 17:20:18

DockerDockerfile程序

2024-09-20 06:00:32

2024-08-13 08:27:24

PythonTCP協議網絡編程

2025-09-26 02:00:55

JDKCPU內存

2010-05-24 15:57:05

Linux SNMP

2020-01-16 14:43:15

Paxos算法分布式

2020-10-26 15:01:02

Spring Boot源碼參數

2012-07-09 14:04:54

802.11n

2013-11-14 10:27:54

2013-04-07 17:57:16

SDN網絡架構

2025-10-10 09:21:16

MCPHTTP協議Streamable

2025-02-27 08:50:00

RocketMQ開發代碼

2021-04-19 08:16:53

算法Raft 共識

2025-03-27 04:10:00

2013-01-22 09:44:57

OpenStackKVM

2025-02-03 16:58:39

點贊
收藏

51CTO技術棧公眾號

日韩 欧美一区二区三区| 欧美电影完整版在线观看| 日韩毛片视频在线看| 18成人在线| 国产一级久久久| 日韩精品免费一区二区三区竹菊| 欧美艳星brazzers| 青青视频免费在线观看| 深夜福利视频一区| 美女看a上一区| 久久久久久久久久久成人| 九色porny自拍视频| 91精品国产一区二区在线观看 | 91青草视频久久| 国产一级视频在线| 久久精品不卡| 日韩精品高清视频| 中文字幕第一页在线视频| 久草在线资源福利站| 国产精品天美传媒| 精选一区二区三区四区五区| 国产精品无码白浆高潮| 久久av一区二区三区| 欧美黑人国产人伦爽爽爽| 中文字幕一区二区三区人妻电影| 深夜激情久久| 欧美视频中文一区二区三区在线观看| 国产69精品久久久久999小说| 91最新在线| 26uuu国产一区二区三区| 亚洲自拍中文字幕| 一区不卡在线观看| 久久蜜桃精品| 68精品国产免费久久久久久婷婷| 四虎精品免费视频| 久久一区91| 亚洲色图校园春色| 亚洲色偷偷色噜噜狠狠99网| 99er精品视频| 欧美日韩国产精品成人| 国内外免费激情视频| 色戒汤唯在线| 天天操天天色综合| 大西瓜av在线| 日本在线视频网址| 伊人夜夜躁av伊人久久| 久久久成人精品一区二区三区| 国产二区视频在线观看| 久久久久久9999| 九色综合日本| 亚洲人在线观看视频| 成人国产一区二区三区精品| 99re视频在线观看| 亚洲av无码国产精品永久一区| 久久97超碰国产精品超碰| 国产精品青草久久久久福利99| 亚洲成人第一网站| 久久欧美肥婆一二区| 日韩av手机在线| 天天干天天操天天操| 久久精品一本| 国产精品久久久久久久久免费看| 青青国产在线视频| 日本人妖一区二区| 国产精品亚洲欧美导航| 曰批又黄又爽免费视频| 久久69国产一区二区蜜臀| 成人在线一区二区| 性生活视频软件| 成人性色生活片| 国产在线精品一区二区三区| 桃花色综合影院| 久久天天做天天爱综合色| 欧美日韩在线一二三| 成年人在线免费观看| 国产精品传媒入口麻豆| 午夜久久久久久久久久久| 污的网站在线观看| 性欧美大战久久久久久久久| 日韩av资源在线| 国产极品久久久久久久久波多结野| 欧美日韩精品福利| 日韩欧美中文在线视频| 欧美日韩麻豆| 伊人男人综合视频网| 国产午夜手机精彩视频| 在线亚洲观看| 国产精品欧美在线| 国产刺激高潮av| 久久综合九色综合97婷婷| 一区二区精品免费视频| 欧美黑人xx片| 色狠狠桃花综合| 91精品视频国产| 亚洲精品一级二级三级| 爱福利视频一区| 91蜜桃视频在线观看| 美腿丝袜亚洲综合| 国产一区二区中文字幕免费看| 成人福利在线| 亚洲v精品v日韩v欧美v专区| 午夜dv内射一区二区| 视频精品一区| 色综合伊人色综合网| 久久精品国产亚洲av麻豆色欲| 久久久久国产精品午夜一区| 亚洲精品日韩激情在线电影| 色就是色亚洲色图| 亚洲精品中文字幕在线观看| 日本一极黄色片| 91精品尤物| 色yeye香蕉凹凸一区二区av| 欧美一二三区视频| 国产一区二区三区在线观看免费视频 | 精品国产a毛片| 日本二区在线观看| 亚洲国产1区| 成人免费视频网| 日本私人网站在线观看| 一区二区三区在线视频免费观看| 日本熟妇人妻中出| 伦理一区二区| 欧美国产日韩中文字幕在线| 国产又粗又猛又爽又黄的| 91最新地址在线播放| 日韩精品免费一区| 91久久青草| 在线观看精品自拍私拍| 国内精品福利视频| 成人美女视频在线观看18| 一区二区三区四区久久| 在线一区视频观看| 亚洲嫩模很污视频| 日本一区二区网站| 风间由美性色一区二区三区| 日本三日本三级少妇三级66| 欧美高清xxx| 在线国产精品视频| 美女又爽又黄免费视频| 成人一道本在线| 久久久99精品视频| 日韩免费精品| 欧美精品生活片| 国产人妻精品一区二区三区| 中文字幕在线不卡国产视频| 天天操天天摸天天爽| 九一亚洲精品| 日本国产一区二区三区| 深夜福利视频在线免费观看| 日韩欧美999| 给我看免费高清在线观看| 亚洲美女黄色| 狠狠色综合欧美激情| 九九精品调教| 精品国产免费久久| 精品久久免费视频| 99国产精品国产精品毛片| 少妇人妻在线视频| 天堂资源在线亚洲| 国产精品96久久久久久又黄又硬| 青青视频在线观| 在线观看一区二区视频| 亚洲一级黄色录像| 极品少妇xxxx精品少妇偷拍| 青春草在线视频免费观看| 国产成人视屏| 欧美激情第三页| 婷婷色在线观看| 91高清在线观看| 又色又爽的视频| 国产麻豆精品在线观看| 国产精品jizz在线观看老狼| 国产在线一区不卡| 久久免费精品视频| 玖玖综合伊人| 在线电影院国产精品| 久视频在线观看| 97久久精品人人澡人人爽| 日韩视频在线免费看| 天天精品视频| 国产伦精品一区| 欧美艳星kaydenkross| 日韩在线观看精品| 乱色精品无码一区二区国产盗| 精品成人av一区| 女教师淫辱の教室蜜臀av软件| 国产精品一二三区在线| 日韩少妇内射免费播放18禁裸乳| 国产99亚洲| 亚洲一区二区三区四区在线播放 | 8x海外华人永久免费日韩内陆视频 | 黄色一级片在线免费观看| www.日本不卡| 91极品视频在线观看| 国产真实久久| 性欧美videosex高清少妇| 一区二区三区视频免费视频观看网站| 5278欧美一区二区三区| 操你啦在线视频| 精品亚洲va在线va天堂资源站| 中文字幕激情视频| 午夜精品一区在线观看| 一级片一级片一级片| 2023国产一二三区日本精品2022| 中文字幕国产高清| 久久综合图片| 国产玉足脚交久久欧美| 久久一级电影| 欧美日韩大片一区二区三区| 中文字幕一区二区三区四区久久 | 北条麻妃国产九九精品视频| 中文字幕国产传媒| 中文亚洲免费| 五月天激情图片| 成人久久综合| 免费久久99精品国产自| 2020最新国产精品| 成人欧美一区二区三区黑人| 都市激情亚洲一区| 久久久久久国产三级电影| 蜜桃视频网站在线| 一区二区成人av| 欧美在线观看在线观看| 精品捆绑美女sm三区| 99re只有精品| 欧美日韩小视频| 亚洲无码精品一区二区三区| 午夜亚洲福利老司机| 欧美国产日韩综合| **网站欧美大片在线观看| 国产精品久久免费观看| 91免费观看视频在线| av天堂一区二区| 国产成人亚洲综合a∨婷婷| 亚州精品一二三区| 日日夜夜精品视频天天综合网| 欧美变态另类刺激| 亚洲激情亚洲| www.射射射| 在线播放精品| 福利视频一区二区三区四区| 欧美日韩网址| www.九色.com| 亚洲午夜久久久久久尤物| 免费看污污视频| 欧美韩国一区| 国产在线观看欧美| 欧美午夜久久| 欧美一区二区激情| 亚洲麻豆av| 黄色国产精品视频| 日韩和欧美一区二区三区| 欧美在线观看视频网站| 日韩高清欧美激情| 国产日韩欧美久久| 久久国产尿小便嘘嘘| 一级做a爱视频| 国产一区二区视频在线播放| 伊人av在线播放| 粉嫩av一区二区三区| 91丝袜在线观看| 久久综合色鬼综合色| 亚洲性猛交xxxx乱大交| 欧美韩日一区二区三区四区| 网站永久看片免费| 一区二区三区在线视频观看58| 久久久久久久中文字幕| 午夜伊人狠狠久久| 五月激情丁香网| 欧美日韩夫妻久久| www.成人精品| 日韩毛片在线看| 超碰免费97在线观看| 免费99精品国产自在在线| av中文字幕在线观看第一页| 欧美伊久线香蕉线新在线| se69色成人网wwwsex| 亚洲一区国产精品| 亚欧日韩另类中文欧美| 亚洲国产一区二区精品视频| 你懂的亚洲视频| 国产女大学生av| 久久精品国产色蜜蜜麻豆| 国产又黄又嫩又滑又白| 2020国产精品自拍| 亚洲熟女毛茸茸| 午夜精品久久久久久久久| 少妇一级淫片日本| 日韩免费看网站| 福利视频在线看| 色综合老司机第九色激情| 成人免费看黄| 91在线视频一区| 亚洲精品国产精品粉嫩| 超碰10000| 噜噜噜91成人网| 99国产精品免费视频| 久久麻豆一区二区| 九九热精品在线观看| www.国产精品.com| 国产精品一区二区三区99| 日本人妻一区二区三区| 国产亚洲视频系列| 欧美毛片在线观看| 欧美主播一区二区三区| 亚洲欧美强伦一区二区| 亚洲网站在线观看| 丁香花在线影院| 国产在线观看精品| 免费黄色成人| 丁香花在线影院观看在线播放 | 免费无码不卡视频在线观看| 日本网站在线观看一区二区三区 | 日韩a∨精品日韩在线观看| 麻豆精品精品国产自在97香蕉| 亚洲av成人片无码| 亚洲人成精品久久久久| 无码人妻久久一区二区三区| 精品成人佐山爱一区二区| 免费黄色在线观看| 国产成一区二区| 欧美激情极品| 91成人综合网| 国产精品66部| 99成人在线观看| 在线精品视频一区二区| 日韩国产福利| 午夜精品一区二区三区在线| 秋霞午夜一区二区三区视频| 亚洲国产激情一区二区三区| 久久激情视频| 亚洲天堂资源在线| 一区二区三区四区不卡在线| 97免费观看视频| 在线国产精品视频| 91成人在线| 日日夜夜精品网站| 天使萌一区二区三区免费观看| 久久久午夜精品福利内容| 亚洲一区免费视频| 亚洲成人中文字幕在线| 欧美精品制服第一页| 国产精品一区二区三区av| 亚洲自拍偷拍二区| 久久99热这里只有精品| 精品视频第一页| 精品视频1区2区3区| av色图一区| 国产精品视频一| 欧美超碰在线| 人人爽人人爽av| 亚洲精选视频免费看| 成人午夜福利视频| 国模叶桐国产精品一区| 久久精品国产亚洲blacked| 日本a在线免费观看| 91天堂素人约啪| 美女又爽又黄免费视频| 国产午夜一区二区| 成人av集中营| 波多野结衣激情| 粉嫩在线一区二区三区视频| 日韩精品一区二区av| 亚洲欧美日韩中文在线制服| 在线成人视屏| 永久免费精品视频网站| 国产盗摄一区二区三区| 日本熟妇一区二区| 亚洲欧美www| 日本在线一区二区| 久久www视频| 91理论电影在线观看| 中文字幕 自拍偷拍| 久久综合五月天| 欧美亚洲色图校园春色| 99视频精品免费| 亚洲欧美日韩一区二区三区在线观看| www.黄色片| 青草成人免费视频| 香蕉久久网站| 波多野结衣视频播放| 91久久人澡人人添人人爽欧美 | 欧美激情啊啊啊| 国产精品亚洲二区| 中文字幕日韩综合| 亚洲高清免费在线| 春暖花开成人亚洲区| 99久久综合狠狠综合久久止| 久久高清免费观看| 一级片一级片一级片| 国产视频亚洲视频| 国产精品一区三区在线观看| 欧洲黄色一级视频| 亚洲免费观看视频| 黄色免费在线播放| 97se国产在线视频| 秋霞影院一区二区| 国产乡下妇女做爰| 日韩在线观看精品| 亚洲小说图片视频|