久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

zookeeper源码(04)leader选举流程

發布時間:2023/11/16 windows 39 coder
生活随笔 收集整理的這篇文章主要介紹了 zookeeper源码(04)leader选举流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在"zookeeper源碼(03)集群啟動流程"中介紹了leader選舉的入口,本文將詳細分析leader選舉組件和流程。

leader選舉流程(重要)

  1. quorumPeer的start階段使用startLeaderElection()方法啟動選舉
  2. LOOKING狀態,投自己一票
  3. createElectionAlgorithm - 創建選舉核心組件:QuorumCnxManager(管理連接)、FastLeaderElection(選舉)等
  4. quorumPeer的main loop根據當前狀態執行不同流程

狀態與流程:

  • LOOKING - 使用fastLeaderElection.lookForLeader選舉

    1. 遞增選舉epoch開啟新一輪選舉
    2. 使用自己的serverId、zxid、currentEpoch初始化投票決議
    3. 把選票發出去
    4. 循環接收其他server的選票:
      • LOOKING選票:對比選舉epoch、currentEpoch、zxid、serverId決定投給哪個server,若是超過半數節點同意該決議,則將該server確定為leader
      • FOLLOWING選票:對比選舉epoch后將選票投給當前leader
      • LEADING選票:對比選舉epoch后將選票投給當前leader
  • LEADING - 創建Leader對象執行lead邏輯

    1. zkServer加載數據
    2. 啟動quorum監聽
    3. 根據各個follower的當前epoch確定新的epoch和zxid
    4. 給follower同步數據
    5. 啟動zkServer
    6. 每間隔tick驗證多數follower同步狀態
  • FOLLOWING - 創建Follower對象指定followLeader邏輯

    1. connectToLeader - 連接leader服務器
    2. registerWithLeader - 向leader發送當前epoch,等待leader發送新一輪的epoch
    3. syncWithLeader - 接收leader同步的數據:txnlog、committedlog、snapshot
    4. 保持通信處理來自leader的數據包
  • OBSERVING - 創建Observer對象執行observeLeader邏輯,基本與FOLLOWING相同

啟動leader選舉

QuorumPeer的startLeaderElection方法是啟動選舉的入口:

public synchronized void startLeaderElection() {
    try {
        if (getPeerState() == ServerState.LOOKING) {
            // 投自己一票,封裝zxid和epoch
            currentVote = new Vote(myid, getLastLoggedZxid(), getCurrentEpoch());
        }
    } catch (IOException e) {
        RuntimeException re = new RuntimeException(e.getMessage());
        re.setStackTrace(e.getStackTrace());
        throw re;
    }
    // electionType總是3
    this.electionAlg = createElectionAlgorithm(electionType);
}

protected Election createElectionAlgorithm(int electionAlgorithm) {
    Election le = null;

    // TODO: use a factory rather than a switch
    // 可以使用策略模式替換switch語句
    switch (electionAlgorithm) {
    case 1:
        throw new UnsupportedOperationException("Election Algorithm 1 is not supported.");
    case 2:
        throw new UnsupportedOperationException("Election Algorithm 2 is not supported.");
    case 3:
        QuorumCnxManager qcm = createCnxnManager();
        QuorumCnxManager oldQcm = qcmRef.getAndSet(qcm);
        // 關閉oldQcm
        if (oldQcm != null) {
            oldQcm.halt();
        }
        // 用來啟動serverSocket監聽
        QuorumCnxManager.Listener listener = qcm.listener;
        if (listener != null) {
            listener.start();
            FastLeaderElection fle = new FastLeaderElection(this, qcm);
            fle.start();
            le = fle;
        }
        break;
    default:
        assert false;
    }
    return le;
}

public QuorumCnxManager createCnxnManager() {
    // socket超時設置使用,默認tickTime * syncLimit
    // 按照zoo_sample.cfg文件配置是2000 * 5
    int timeout = quorumCnxnTimeoutMs > 0 ? quorumCnxnTimeoutMs : this.tickTime * this.syncLimit;
    return new QuorumCnxManager(
        this,
        this.getMyId(),
        this.getView(), // serverId->quorumServer
        this.authServer,
        this.authLearner,
        timeout,
        this.getQuorumListenOnAllIPs(), // 是否監聽所有IP默認false
        this.quorumCnxnThreadsSize, // 默認20
        this.isQuorumSaslAuthEnabled());
}

QuorumCnxManager類

概述:

This class implements a connection manager for leader election using TCP.
It maintains one connection for every pair of servers. The tricky part is to guarantee that there is exactly one connection for every pair of servers that are operating correctly and that can communicate over the network. If two servers try to start a connection concurrently, then the connection manager uses a very simple tie-breaking mechanism to decide which connection to drop based on the IP addressed of the two parties.
For every peer, the manager maintains a queue of messages to send. If the connection to any particular peer drops, then the sender thread puts the message back on the list. As this implementation currently uses a queue implementation to maintain messages to send to another peer, we add the message to the tail of the queue, thus changing the order of messages. Although this is not a problem for the leader election, it could be a problem when consolidating peer communication. This is to be verified, though.
  1. 維護leader選舉時server之間的tcp連接
  2. 確保兩個server之間存在一個連接,如果兩個server同時建立連接,則始終保留id大的一方建立的連接
  3. 使用隊列緩存待發送的消息

主要字段

// 用于執行QuorumConnectionReqThread和QuorumConnectionReceiverThread
private ThreadPoolExecutor connectionExecutor;

// 管理sid -> SendWorker/BlockingQueue/ByteBuffer
final ConcurrentHashMap<Long, SendWorker> senderWorkerMap;
final ConcurrentHashMap<Long, BlockingQueue<ByteBuffer>> queueSendMap;
final ConcurrentHashMap<Long, ByteBuffer> lastMessageSent;

// 接收隊列
public final BlockingQueue<Message> recvQueue;

主要方法

public void initiateConnection(final MultipleAddresses electionAddr, final Long sid);
// 將initiateConnection方法放到了QuorumConnectionReqThread中然后提交給connectionExecutor異步執行
public boolean initiateConnectionAsync(final MultipleAddresses electionAddr, final Long sid);

private boolean startConnection(Socket sock, Long sid) throws IOException;

public void receiveConnection(final Socket sock);
// 將receiveConnection方法放到了QuorumConnectionReceiverThread中然后提交給connectionExecutor異步執行
public void receiveConnectionAsync(final Socket sock);

public void toSend(Long sid, ByteBuffer b);

boolean connectOne(long sid, MultipleAddresses electionAddr);
void connectOne(long sid);
public void connectAll();

其余工具方法不分析。

initiateConnection方法

創建Socket對象,如有必要則做ssl握手和認證,發送初始化數據包。如果自己id小則關閉連接,以確保兩個server之間存在一個連接。

public void initiateConnection(final MultipleAddresses electionAddr, final Long sid) {
    Socket sock = null;
    try {
        // 創建Socket
        if (self.isSslQuorum()) {
            sock = self.getX509Util().createSSLSocket();
        } else {
            sock = SOCKET_FACTORY.get();
        }
        setSockOpts(sock); // socket設置例如timeout
        // 連接目標peer
        sock.connect(electionAddr.getReachableOrOne(), cnxTO);
        // ssl握手
        if (sock instanceof SSLSocket) {
            SSLSocket sslSock = (SSLSocket) sock;
            sslSock.startHandshake();
        }
    } catch (X509Exception e) {
        closeSocket(sock);
        return;
    } catch (UnresolvedAddressException | IOException e) {
        closeSocket(sock);
        return;
    }

    try {
        // 發連接初始化數據包、sasl認證
        // 如果selfId小于對方,關閉連接
        // 創建SendWorker、RecvWorker并啟動
        // 創建對應sid的發送隊列
        startConnection(sock, sid);
    } catch (IOException e) {
        closeSocket(sock);
    }
}

startConnection方法

  1. 發連接初始化數據包、sasl認證
  2. 如果selfId小于對方,關閉連接
  3. 創建SendWorker、RecvWorker并啟動
  4. 創建對應sid的發送隊列
private boolean startConnection(Socket sock, Long sid) throws IOException {
    DataOutputStream dout = null;
    DataInputStream din = null;
    try {
        // 輸出流
        BufferedOutputStream buf = new BufferedOutputStream(sock.getOutputStream());
        dout = new DataOutputStream(buf);

        // 發協議版本、myid、address初始化數據包
        long protocolVersion = self.isMultiAddressEnabled() ? PROTOCOL_VERSION_V2 : PROTOCOL_VERSION_V1;
        dout.writeLong(protocolVersion);
        dout.writeLong(self.getMyId());

        // now we send our election address. For the new protocol version, we can send multiple addresses.
        Collection<InetSocketAddress> addressesToSend = protocolVersion == PROTOCOL_VERSION_V2
                ? self.getElectionAddress().getAllAddresses()
                : Arrays.asList(self.getElectionAddress().getOne());

        String addr = addressesToSend.stream()
                .map(NetUtils::formatInetAddr).collect(Collectors.joining("|"));
        byte[] addr_bytes = addr.getBytes();
        dout.writeInt(addr_bytes.length);
        dout.write(addr_bytes);
        dout.flush();

        din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
    } catch (IOException e) {
        closeSocket(sock);
        return false;
    }

    // authenticate learner
    QuorumPeer.QuorumServer qps = self.getVotingView().get(sid);
    if (qps != null) {
        authLearner.authenticate(sock, qps.hostname);
    }

    if (sid > self.getMyId()) { // If lost the challenge, then drop the new connection
        closeSocket(sock);
    } else {
        // 創建SendWorker、RecvWorker
        SendWorker sw = new SendWorker(sock, sid);
        RecvWorker rw = new RecvWorker(sock, din, sid, sw);
        sw.setRecv(rw);

        SendWorker vsw = senderWorkerMap.get(sid);

        if (vsw != null) {
            vsw.finish();
        }

        senderWorkerMap.put(sid, sw);

        // 創建發送隊列
        queueSendMap.putIfAbsent(sid, new CircularBlockingQueue<>(SEND_CAPACITY));

        sw.start();
        rw.start();

        return true;
    }
    return false;
}

receiveConnection方法

當server收到連接請求,如果change獲勝(selfId大于對方),將關閉該連接,由自己去連接對方。

public void receiveConnection(final Socket sock) {
    DataInputStream din = null;
    try {
        // 輸入流
        din = new DataInputStream(new BufferedInputStream(sock.getInputStream()));
        handleConnection(sock, din);
    } catch (IOException e) {
        closeSocket(sock);
    }
}

private void handleConnection(Socket sock, DataInputStream din) throws IOException {
    Long sid = null, protocolVersion = null;
    MultipleAddresses electionAddr = null;

    try {
        protocolVersion = din.readLong();
        if (protocolVersion >= 0) { // this is a server id and not a protocol version
            sid = protocolVersion;
        } else {
            try {
                InitialMessage init = InitialMessage.parse(protocolVersion, din);
                sid = init.sid;
                if (!init.electionAddr.isEmpty()) {
                    electionAddr = new MultipleAddresses(init.electionAddr,
                            Duration.ofMillis(self.getMultiAddressReachabilityCheckTimeoutMs()));
                }
            } catch (InitialMessage.InitialMessageException ex) {
                closeSocket(sock);
                return;
            }
        }

        if (sid == QuorumPeer.OBSERVER_ID) {
            // Choose identifier at random. We need a value to identify the connection.
            sid = observerCounter.getAndDecrement();
        }
    } catch (IOException e) {
        closeSocket(sock);
        return;
    }

    // do authenticating learner
    authServer.authenticate(sock, din);
    // If wins the challenge, then close the new connection.
    if (sid < self.getMyId()) { // 對方比自己id小,需要關閉當前連接,由自己去連接對方
        SendWorker sw = senderWorkerMap.get(sid);
        if (sw != null) {
            sw.finish();
        }

        // 關閉連接
        closeSocket(sock);

        if (electionAddr != null) {
            connectOne(sid, electionAddr); // 連接對方
        } else {
            connectOne(sid);
        }
    } else if (sid == self.getMyId()) {
    } else { // 創建SendWorker、RecvWorker和發送隊列
        SendWorker sw = new SendWorker(sock, sid);
        RecvWorker rw = new RecvWorker(sock, din, sid, sw);
        sw.setRecv(rw);

        SendWorker vsw = senderWorkerMap.get(sid);

        if (vsw != null) {
            vsw.finish();
        }

        senderWorkerMap.put(sid, sw);

        queueSendMap.putIfAbsent(sid, new CircularBlockingQueue<>(SEND_CAPACITY));

        sw.start();
        rw.start();
    }
}

toSend方法

發消息。

public void toSend(Long sid, ByteBuffer b) {
    // 如果是給自己的消息,直接發給recvQueue
    if (this.mySid == sid) {
        b.position(0);
        addToRecvQueue(new Message(b.duplicate(), sid));
    } else {
        // 將消息發給sid對應的發送隊列
        BlockingQueue<ByteBuffer> bq =
            queueSendMap.computeIfAbsent(sid, serverId -> new CircularBlockingQueue<>(SEND_CAPACITY));
        addToSendQueue(bq, b);
        // 檢查是否建立了連接
        connectOne(sid);
    }
}

connectOne方法

synchronized boolean connectOne(long sid, MultipleAddresses electionAddr) {
    // 已經建立過連接
    if (senderWorkerMap.get(sid) != null) {
        if (self.isMultiAddressEnabled() && electionAddr.size() > 1 &&
            self.isMultiAddressReachabilityCheckEnabled()) {
            // check是否可達
            senderWorkerMap.get(sid).asyncValidateIfSocketIsStillReachable();
        }
        return true;
    }
    // 異步建立新連接
    return initiateConnectionAsync(electionAddr, sid);
}

synchronized void connectOne(long sid) {
    if (senderWorkerMap.get(sid) != null) {
        if (self.isMultiAddressEnabled() && self.isMultiAddressReachabilityCheckEnabled()) {
            senderWorkerMap.get(sid).asyncValidateIfSocketIsStillReachable();
        }
        return;
    }
    // 使用sid從lastCommittedView、lastProposedView中解析address之后在建立連接
    synchronized (self.QV_LOCK) {
        boolean knownId = false;
        // Resolve hostname for the remote server before attempting to
        // connect in case the underlying ip address has changed.
        self.recreateSocketAddresses(sid);
        Map<Long, QuorumPeer.QuorumServer> lastCommittedView = self.getView();
        QuorumVerifier lastSeenQV = self.getLastSeenQuorumVerifier();
        Map<Long, QuorumPeer.QuorumServer> lastProposedView = lastSeenQV.getAllMembers();
        if (lastCommittedView.containsKey(sid)) {
            knownId = true;
            if (connectOne(sid, lastCommittedView.get(sid).electionAddr)) {
                return;
            }
        }
        if (lastSeenQV != null
            && lastProposedView.containsKey(sid)
            && (!knownId ||
                !lastProposedView.get(sid).electionAddr.equals(lastCommittedView.get(sid).electionAddr))) {
            knownId = true;
            if (connectOne(sid, lastProposedView.get(sid).electionAddr)) {
                return;
            }
        }
    }
}

connectAll方法

Try to establish a connection with each server if one doesn't exist.

public void connectAll() {
    long sid;
    for (Enumeration<Long> en = queueSendMap.keys(); en.hasMoreElements(); ) {
        sid = en.nextElement();
        connectOne(sid);
    }
}

Listener類

用來啟動serverSocket監聽,一個線程類,在run方法啟動監聽:

public void run() {
    if (!shutdown) {
        Set<InetSocketAddress> addresses;

        // 獲取需要監聽的地址
        if (self.getQuorumListenOnAllIPs()) {
            addresses = self.getElectionAddress().getWildcardAddresses();
        } else {
            addresses = self.getElectionAddress().getAllAddresses();
        }
        // 用于阻塞等待
        CountDownLatch latch = new CountDownLatch(addresses.size());
        // 為每一個監聽地址創建ListenerHandler
        listenerHandlers = addresses.stream().map(address ->
                        new ListenerHandler(address,self.shouldUsePortUnification(),
                                            self.isSslQuorum(), latch))
                .collect(Collectors.toList());

        final ExecutorService executor = Executors.newFixedThreadPool(addresses.size());
        try {
            // 啟動ListenerHandler
            listenerHandlers.forEach(executor::submit);
        } finally {
            executor.shutdown();
        }

        try {
            // 阻塞等待,ListenerHandler結束之后會countdown
            latch.await();
        } catch (InterruptedException ie) {
        } finally {
            // Clean up for shutdown 略
        }
    }
    // 略
}

ListenerHandler run方法:

public void run() {
    try {
        // 接受連接
        acceptConnections();
        try {
            close();
        } catch (IOException e) {}
    } catch (Exception e) {
    } finally {
        latch.countDown();
    }
}

private void acceptConnections() {
    int numRetries = 0;
    Socket client = null;

    while ((!shutdown) && (portBindMaxRetry == 0 || numRetries < portBindMaxRetry)) {
        try {
            // 創建ServerSocket并bind端口
            serverSocket = createNewServerSocket();
            while (!shutdown) {
                try {
                    // 接受客戶端Socket
                    client = serverSocket.accept();
                    setSockOpts(client); // socket設置如timeout
                    // 使用receiveConnection處理新的連接
                    if (quorumSaslAuthEnabled) {
                        receiveConnectionAsync(client);
                    } else {
                        receiveConnection(client);
                    }
                    numRetries = 0;
                } catch (SocketTimeoutException e) {}
            }
        } catch (IOException e) {
            // 略
        }
    }
    // 略
}

QuorumConnectionReqThread類

用于異步連接其他peer服務,run方法調用initiateConnection方法建立連接。

QuorumConnectionReceiverThread類

用于異步接受連接,run方法調用receiveConnection方法處理新建立的連接。

SendWorker類

Thread to send messages. Instance waits on a queue, and send a message as soon as there is one available. If connection breaks, then opens a new one.

用來發送消息的線程:

  • 封裝sid、socket、連接輸出流
  • 從發送隊列取消息,通過輸出流發送

RecvWorker類

Thread to receive messages. Instance waits on a socket read. If the channel breaks, then removes itself from the pool of receivers.

用來讀取消息的線程:

public void run() {
    threadCnt.incrementAndGet();
    try {
        while (running && !shutdown && sock != null) {
            // 讀取消息長度
            int length = din.readInt();
            if (length <= 0 || length > PACKETMAXSIZE) {
                throw new IOException("Received packet with invalid packet: " + length);
            }
            // 讀取數據
            final byte[] msgArray = new byte[length];
            din.readFully(msgArray, 0, length);
            // 保存到接收隊列
            addToRecvQueue(new Message(ByteBuffer.wrap(msgArray), sid));
        }
    } catch (Exception e) {
    } finally {
        sw.finish();
        closeSocket(sock);
    }
}

FastLeaderElection類

文檔說明:

Implementation of leader election using TCP. It uses an object of the class QuorumCnxManager to manage connections. Otherwise, the algorithm is push-based as with the other UDP implementations. There are a few parameters that can be tuned to change its behavior. First, finalizeWait determines the amount of time to wait until deciding upon a leader. This is part of the leader election algorithm.
  1. 使用tcp實現leader選舉,基于推送模式
  2. 使用QuorumCnxManager對象管理連接

構造方法

public FastLeaderElection(QuorumPeer self, QuorumCnxManager manager) {
    this.stop = false;
    this.manager = manager;
    starter(self, manager);
}

private void starter(QuorumPeer self, QuorumCnxManager manager) {
    this.self = self;
    proposedLeader = -1;
    proposedZxid = -1;

    sendqueue = new LinkedBlockingQueue<>();
    recvqueue = new LinkedBlockingQueue<>();
    // 用來啟動WorkerSender和WorkerReceiver
    this.messenger = new Messenger(manager);
}

主要字段

// 在leader最終確定之前嘗試拉取變化選票的時長
static final int finalizeWait = 200;

// 投票箱,用于保存一輪選舉的結果、統計選舉結果
private SyncedLearnerTracker leadingVoteSet;

// 發送隊列
LinkedBlockingQueue<ToSend> sendqueue;
// 接收隊列
LinkedBlockingQueue<Notification> recvqueue;

// 用來啟動WorkerSender和WorkerReceiver
Messenger messenger;

// 決議leaderId
long proposedLeader;
// 決議zxid
long proposedZxid;
// 決議epoch
long proposedEpoch;

start方法啟動選舉

public void start() {
    this.messenger.start(); // 會啟動WorkerSender和WorkerReceiver兩個線程
}

Messenger類

WorkerSender線程

  1. 從sendqueue取ToSend消息
  2. 通過QuorumCnxManager的toSend方法發送消息

WorkerReceiver線程

  1. 通過QuorumCnxManager的pollRecvQueue取接收的消息
  2. 封裝Notification對象,推送到recvqueue隊列

主要方法

// 創建發送消息
static ByteBuffer buildMsg(
    int state, long leader, long zxid, long electionEpoch, long epoch, byte[] configData);

// 給所有節點發Notification投票
private void sendNotifications();

// 對比serverId、zxid、currentEpoch決定將票投給哪個server
protected boolean totalOrderPredicate(
    long newId, long newZxid, long newEpoch, long curId, long curZxid, long curEpoch);

// 給定一個Vote集,返回SyncedLearnerTracker對象,用來確定是否有足夠的選票確定選舉結束
protected SyncedLearnerTracker getVoteTracker(Map<Long, Vote> votes, Vote vote);

// 如果有leader當選,并且有足夠的選票,必須檢查該leader是否投票并確認其處于領先地位
// 需要進行這種檢查,以避免peers一次又一次地選舉一個已經崩潰且不再領先的peer
protected boolean checkLeader(Map<Long, Vote> votes, long leader, long electionEpoch);

// 更新proposedLeader、proposedZxid、proposedEpoch
// 確定leader或者為下一輪投票做準備
synchronized void updateProposal(long leader, long zxid, long epoch);

// 使用當前proposedLeader、proposedZxid、proposedEpoch創建Vote(選票)
public synchronized Vote getVote();

// 通過zkDb獲取lastLoggedZxid
private long getInitLastLoggedZxid();

// 獲取currentEpoch
private long getPeerEpoch();

// 根據參數proposedLeader更新peer狀態
// 如果已經是leader會使用voteSet更新leadingVoteSet
private void setPeerState(long proposedLeader, SyncedLearnerTracker voteSet);

// 啟動一輪leader選舉
// 當狀態變為LOOKING該方法就會被調用,會給其他peer發投票notification
public Vote lookForLeader() throws InterruptedException;

// 收到FOLLOWING狀態notification
private Vote receivedFollowingNotification(
    Map<Long, Vote> recvset, Map<Long, Vote> outofelection,
    SyncedLearnerTracker voteSet, Notification n);

// 收到LEADING狀態notification
private Vote receivedLeadingNotification(
    Map<Long, Vote> recvset, Map<Long, Vote> outofelection,
    SyncedLearnerTracker voteSet, Notification n);

buildMsg方法

static ByteBuffer buildMsg(int state, long leader, long zxid,
                           long electionEpoch, long epoch, byte[] configData) {
    byte[] requestBytes = new byte[44 + configData.length];
    ByteBuffer requestBuffer = ByteBuffer.wrap(requestBytes);

    requestBuffer.clear();
    requestBuffer.putInt(state); // 當前狀態
    requestBuffer.putLong(leader); // 投票的leaderId
    requestBuffer.putLong(zxid); // zxid
    requestBuffer.putLong(electionEpoch); // 選舉epoch
    requestBuffer.putLong(epoch); // 數據epoch
    requestBuffer.putInt(Notification.CURRENTVERSION); // 0x2
    requestBuffer.putInt(configData.length); // 數據長度
    requestBuffer.put(configData); // quorumVerifier數據

    return requestBuffer;
}

totalOrderPredicate方法

對比serverId、zxid、currentEpoch決定將票投給哪個server:

protected boolean totalOrderPredicate(
    long newId, long newZxid, long newEpoch, long curId, long curZxid, long curEpoch) {

    if (self.getQuorumVerifier().getWeight(newId) == 0) {
        return false;
    }

    /*
     * Return true if one of the following three cases hold:
     * 1- New epoch is higher
     * 2- New epoch is the same as current epoch, but new zxid is higher
     * 3- New epoch is the same as current epoch, new zxid is the same
     *  as current zxid, but server id is higher.
     */
    return ((newEpoch > curEpoch)
            || ((newEpoch == curEpoch)
                && ((newZxid > curZxid)
                    || ((newZxid == curZxid)
                        && (newId > curId)))));
}

getVoteTracker方法

給定一個Vote集,返回SyncedLearnerTracker對象,用來確定是否有足夠的選票宣布選舉結束:

protected SyncedLearnerTracker getVoteTracker(Map<Long, Vote> votes, Vote vote) {
    SyncedLearnerTracker voteSet = new SyncedLearnerTracker();
    voteSet.addQuorumVerifier(self.getQuorumVerifier());
    if (self.getLastSeenQuorumVerifier() != null
        && self.getLastSeenQuorumVerifier().getVersion() > self.getQuorumVerifier().getVersion()) {
        voteSet.addQuorumVerifier(self.getLastSeenQuorumVerifier());
    }

    // 比對其他server響應的選票和本地的選票,決定是否將選票sid放入ack集
    for (Map.Entry<Long, Vote> entry : votes.entrySet()) {
        if (vote.equals(entry.getValue())) {
            voteSet.addAck(entry.getKey()); // key是sid
        }
    }

    return voteSet;
}

checkLeader方法

protected boolean checkLeader(Map<Long, Vote> votes, long leader, long electionEpoch) {

    boolean predicate = true;

    if (leader != self.getMyId()) {
        if (votes.get(leader) == null) { // leader服務器必須投票,否則次輪投票也無效
            predicate = false;
        } else if (votes.get(leader).getState() != ServerState.LEADING) {
            // leader服務器的狀態必須是LEADING,否則次輪投票也無效
            predicate = false;
        }
    } else if (logicalclock.get() != electionEpoch) { // 選舉epoch必須一致
        predicate = false;
    }

    return predicate;
}

lookForLeader方法

啟動一輪leader選舉,當狀態變為LOOKING該方法就會被調用,會給其他peer發投票notification通知:

public Vote lookForLeader() throws InterruptedException {
    // 略
    try {
        // 存儲當前選舉周期的sid -> vote選票數據
        Map<Long, Vote> recvset = new HashMap<>();

        // 存儲之前選舉周期的sid -> vote選票數據
        Map<Long, Vote> outofelection = new HashMap<>();

        int notTimeout = minNotificationInterval;

        synchronized (this) {
            logicalclock.incrementAndGet(); // 遞增選舉epoch開始新一輪選舉
            // 初始化選舉"決議",最開始都是投票給自己
            updateProposal(getInitId(), getInitLastLoggedZxid(), getPeerEpoch());
        }
        // 給所有節點發通知
        sendNotifications();
        // 投票箱
        SyncedLearnerTracker voteSet = null;

        // 正常情況下直到選出leader才會退出
        while ((self.getPeerState() == ServerState.LOOKING) && (!stop)) {
            Notification n = recvqueue.poll(notTimeout, TimeUnit.MILLISECONDS);

            if (n == null) {
                // 重發或者重連
                if (manager.haveDelivered()) {
                    sendNotifications();
                } else {
                    manager.connectAll();
                }

                notTimeout = Math.min(notTimeout << 1, maxNotificationInterval);

                // 略

            } else if (validVoter(n.sid) && validVoter(n.leader)) {
                switch (n.state) {
                case LOOKING:
                    // 略
                    // 對方的選舉epoch比自己大
                    if (n.electionEpoch > logicalclock.get()) {
                        logicalclock.set(n.electionEpoch); // 同步為新的epoch
                        recvset.clear(); // 清空投票集
                        // 比對選票,如果對方贏了,則使用對方的選票更新到本地
                        if (totalOrderPredicate(n.leader, n.zxid, n.peerEpoch,
                                                getInitId(), getInitLastLoggedZxid(), getPeerEpoch())) {
                            updateProposal(n.leader, n.zxid, n.peerEpoch);
                        } else {
                            updateProposal(getInitId(), getInitLastLoggedZxid(), getPeerEpoch());
                        }
                        // 把最新的選票發出去
                        sendNotifications();
                    } else if (n.electionEpoch < logicalclock.get()) {
                        // 對方的選舉epoch比自己小
                        break;
                    } else if (totalOrderPredicate(n.leader, n.zxid, n.peerEpoch,
                                                   proposedLeader, proposedZxid, proposedEpoch)) {
                        updateProposal(n.leader, n.zxid, n.peerEpoch);
                        sendNotifications();
                    }

                    // 保存到選票集
                    recvset.put(n.sid, new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch));
                    // 創建投票箱
                    voteSet = getVoteTracker(
                        recvset, new Vote(proposedLeader, proposedZxid, logicalclock.get(), proposedEpoch));
                    // 判斷acks>half表示已經選舉出了leader
                    if (voteSet.hasAllQuorums()) {

                        // 等待拉取變化的選票
                        while ((n = recvqueue.poll(finalizeWait, TimeUnit.MILLISECONDS)) != null) {
                            if (totalOrderPredicate(n.leader, n.zxid, n.peerEpoch, 
                                                    proposedLeader, proposedZxid, proposedEpoch)) {
                                recvqueue.put(n);
                                break;
                            }
                        }

                        // 設置peer狀態
                        if (n == null) {
                            setPeerState(proposedLeader, voteSet);
                            Vote endVote = new Vote(
                                proposedLeader, proposedZxid, logicalclock.get(), proposedEpoch);
                            leaveInstance(endVote);
                            return endVote;
                        }
                    }
                    break;
                case OBSERVING:
                    break;
                case FOLLOWING:
                    // 收到FOLLOWING通知
                    Vote resultFN = receivedFollowingNotification(recvset, outofelection, voteSet, n);
                    if (resultFN == null) {
                        break;
                    } else {
                        return resultFN;
                    }
                case LEADING:
                    // 收到LEADING通知
                    Vote resultLN = receivedLeadingNotification(recvset, outofelection, voteSet, n);
                    if (resultLN == null) {
                        break;
                    } else {
                        return resultLN;
                    }
                default:
                    break;
                }
            } else {
                // 略
            }
        }
        return null;
    } finally {
        // 略
    }
}

receivedFollowingNotification方法

收到FOLLOWING狀態notification。

private Vote receivedFollowingNotification(
    Map<Long, Vote> recvset, Map<Long, Vote> outofelection, SyncedLearnerTracker voteSet, Notification n) {
    // 也會將選票投給當前leader
    // 之后會進行quorum驗證和leaderCheck驗證
    if (n.electionEpoch == logicalclock.get()) {
        // 創建投票箱
        recvset.put(n.sid, new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch, n.state));
        voteSet = getVoteTracker(
            recvset, new Vote(n.version, n.leader, n.zxid, n.electionEpoch, n.peerEpoch, n.state));
        // acks>half和leaderCheck
        if (voteSet.hasAllQuorums() && checkLeader(recvset, n.leader, n.electionEpoch)) {
            // 更新節點狀態
            setPeerState(n.leader, voteSet);
            Vote endVote = new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch);
            leaveInstance(endVote);
            return endVote;
        }
    }

    // 當本節點較晚進入集群,集群已經有了leader時,會進入下面邏輯
    // 與前面的代碼基本相同
    outofelection.put(n.sid, new Vote(n.version, n.leader, n.zxid, n.electionEpoch, n.peerEpoch, n.state));
    voteSet = getVoteTracker(
        outofelection, new Vote(n.version, n.leader, n.zxid, n.electionEpoch, n.peerEpoch, n.state));

    if (voteSet.hasAllQuorums() && checkLeader(outofelection, n.leader, n.electionEpoch)) {
        synchronized (this) {
            logicalclock.set(n.electionEpoch);
            setPeerState(n.leader, voteSet);
        }
        Vote endVote = new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch);
        leaveInstance(endVote);
        return endVote;
    }

    return null;
}

receivedLeadingNotification方法

收到LEADING狀態notification。

private Vote receivedLeadingNotification(Map<Long, Vote> recvset, Map<Long, Vote> outofelection,
                                         SyncedLearnerTracker voteSet, Notification n) {
    Vote result = receivedFollowingNotification(recvset, outofelection, voteSet, n);
    if (result == null) {
        if (self.getQuorumVerifier().getNeedOracle() && !self.getQuorumVerifier().askOracle()) {
            // 略
        } else {
            return null;
        }
    } else {
        return result;
    }
}

QuorumPeer類

管理quorum協議,服務器可能處于以下三種狀態:

  • Leader選舉 - 每個服務器將選出一個leader,最初都會選自己
  • Follower節點 - 將與Leader同步并復制所有事務
  • Leader節點 - 處理請求并將其轉發給Follower節點,大多數Follower節點必須同步,該請求才能被提交

run方法main loop

run方法main loop判斷當前peer狀態,執行選舉、lead、follow等邏輯:

public void run() {
    // 略

    try {
        // Main loop
        while (running) {
            switch (getPeerState()) {
            case LOOKING:
                ServerMetrics.getMetrics().LOOKING_COUNT.add(1);
                if (Boolean.getBoolean("readonlymode.enabled")) {
                    // 略
                } else {
                    try {
                        reconfigFlagClear();
                        if (shuttingDownLE) {
                            shuttingDownLE = false;
                            startLeaderElection();
                        }
                        setCurrentVote(makeLEStrategy().lookForLeader());
                    } catch (Exception e) {
                        setPeerState(ServerState.LOOKING);
                    }
                }
                break;
            case OBSERVING:
                try {
                    setObserver(makeObserver(logFactory));
                    observer.observeLeader();
                } catch (Exception e) {
                } finally {
                    observer.shutdown();
                    setObserver(null);
                    updateServerState();

                    // Add delay jitter before we switch to LOOKING
                    // state to reduce the load of ObserverMaster
                    if (isRunning()) {
                        Observer.waitForObserverElectionDelay();
                    }
                }
                break;
            case FOLLOWING:
                try {
                    setFollower(makeFollower(logFactory));
                    follower.followLeader();
                } catch (Exception e) {
                } finally {
                    follower.shutdown();
                    setFollower(null);
                    updateServerState();
                }
                break;
            case LEADING:
                try {
                    setLeader(makeLeader(logFactory));
                    leader.lead();
                    setLeader(null);
                } catch (Exception e) {
                } finally {
                    if (leader != null) {
                        leader.shutdown("Forcing shutdown");
                        setLeader(null);
                    }
                    updateServerState();
                }
                break;
            }
        }
    } finally {
        // 略
    }
}

LOOKING分支

try {
    reconfigFlagClear();
    if (shuttingDownLE) {
        shuttingDownLE = false;
        startLeaderElection();
    }
    // 使用FastLeaderElection選舉
    setCurrentVote(makeLEStrategy().lookForLeader());
} catch (Exception e) {
    setPeerState(ServerState.LOOKING); // 重置為LOOKING狀態
}

FOLLOWING分支

try {
    setFollower(makeFollower(logFactory));
    follower.followLeader(); // 啟動follower
} catch (Exception e) {
} finally {
    follower.shutdown();
    setFollower(null);
    updateServerState(); // 更新服務狀態
}

創建Follower對象:

protected Follower makeFollower(FileTxnSnapLog logFactory) throws IOException {
    return new Follower(this, new FollowerZooKeeperServer(logFactory, this, this.zkDb));
}

LEADING分支

try {
    setLeader(makeLeader(logFactory));
    leader.lead(); // 啟動leader
    setLeader(null);
} catch (Exception e) {
} finally {
    if (leader != null) {
        leader.shutdown("Forcing shutdown");
        setLeader(null);
    }
    updateServerState(); // 更新服務狀態
}

創建Leader對象:

protected Leader makeLeader(FileTxnSnapLog logFactory) throws IOException, X509Exception {
    return new Leader(this, new LeaderZooKeeperServer(logFactory, this, this.zkDb));
}

OBSERVING分支

try {
    setObserver(makeObserver(logFactory));
    observer.observeLeader();
} catch (Exception e) {
} finally {
    observer.shutdown();
    setObserver(null);
    updateServerState();

    // Add delay jitter before we switch to LOOKING
    // state to reduce the load of ObserverMaster
    if (isRunning()) {
        Observer.waitForObserverElectionDelay();
    }
}

創建Observer對象:

protected Observer makeObserver(FileTxnSnapLog logFactory) throws IOException {
    return new Observer(this, new ObserverZooKeeperServer(logFactory, this, this.zkDb));
}

總結

以上是生活随笔為你收集整理的zookeeper源码(04)leader选举流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

日日天干夜夜狠狠爱 | 亚洲国产成人av在线观看 | 在线精品亚洲一区二区 | 日产精品高潮呻吟av久久 | 永久黄网站色视频免费直播 | 久久精品国产精品国产精品污 | 一本大道伊人av久久综合 | 亚洲国产av美女网站 | 双乳奶水饱满少妇呻吟 | aa片在线观看视频在线播放 | 精品一二三区久久aaa片 | 18禁黄网站男男禁片免费观看 | 亚洲国产av精品一区二区蜜芽 | 久久亚洲精品中文字幕无男同 | 强伦人妻一区二区三区视频18 | 成熟女人特级毛片www免费 | 奇米影视7777久久精品 | 亚洲色无码一区二区三区 | 久久综合久久自在自线精品自 | 婷婷综合久久中文字幕蜜桃三电影 | 精品无码国产自产拍在线观看蜜 | 精品无码一区二区三区爱欲 | 国产人妖乱国产精品人妖 | 亚洲精品欧美二区三区中文字幕 | 国产内射老熟女aaaa | 亚洲理论电影在线观看 | 俄罗斯老熟妇色xxxx | 欧美成人家庭影院 | 亚洲a无码综合a国产av中文 | 日韩精品无码一本二本三本色 | 久久99精品久久久久久动态图 | 天堂亚洲免费视频 | 国产极品视觉盛宴 | 亚洲欧洲中文日韩av乱码 | 亚洲国产精品无码久久久久高潮 | 精品亚洲成av人在线观看 | 国产莉萝无码av在线播放 | 天堂а√在线中文在线 | 麻豆人妻少妇精品无码专区 | av人摸人人人澡人人超碰下载 | 久久久久免费精品国产 | 纯爱无遮挡h肉动漫在线播放 | 男女猛烈xx00免费视频试看 | 国产97人人超碰caoprom | 性色av无码免费一区二区三区 | 国产成人亚洲综合无码 | 亚洲成av人在线观看网址 | 少妇无码吹潮 | 野外少妇愉情中文字幕 | 国产一区二区不卡老阿姨 | 动漫av网站免费观看 | 97精品国产97久久久久久免费 | 中文精品无码中文字幕无码专区 | 国产亚洲精品久久久久久久 | 无码人妻少妇伦在线电影 | 人妻与老人中文字幕 | 18无码粉嫩小泬无套在线观看 | 日韩无套无码精品 | 精品国产青草久久久久福利 | 99精品无人区乱码1区2区3区 | 亚洲精品国产a久久久久久 | 中文字幕无码av激情不卡 | 99久久精品无码一区二区毛片 | 玩弄少妇高潮ⅹxxxyw | 精品厕所偷拍各类美女tp嘘嘘 | 精品久久久久久亚洲精品 | 午夜福利一区二区三区在线观看 | 在线天堂新版最新版在线8 | 丰满人妻精品国产99aⅴ | 麻豆果冻传媒2021精品传媒一区下载 | 久久精品中文字幕一区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 日本精品人妻无码免费大全 | 欧美刺激性大交 | 小鲜肉自慰网站xnxx | 国精产品一区二区三区 | 国产av一区二区三区最新精品 | 精品aⅴ一区二区三区 | 中文亚洲成a人片在线观看 | 男女下面进入的视频免费午夜 | 大肉大捧一进一出好爽视频 | 日本饥渴人妻欲求不满 | 人妻有码中文字幕在线 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲gv猛男gv无码男同 | 精品乱子伦一区二区三区 | 熟妇女人妻丰满少妇中文字幕 | 天天摸天天透天天添 | 欧美人与禽zoz0性伦交 | 任你躁在线精品免费 | 国产国语老龄妇女a片 | 特级做a爰片毛片免费69 | 女人被男人爽到呻吟的视频 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲高清偷拍一区二区三区 | 丰满人妻被黑人猛烈进入 | 国产精品第一区揄拍无码 | 亚洲自偷精品视频自拍 | 日韩精品无码免费一区二区三区 | 国产精品无码一区二区桃花视频 | 大肉大捧一进一出好爽视频 | 国产农村乱对白刺激视频 | 无码人妻丰满熟妇区毛片18 | 国产成人精品一区二区在线小狼 | 国产精品久久久久久无码 | 亚洲成av人综合在线观看 | 人妻少妇精品无码专区二区 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | аⅴ资源天堂资源库在线 | 人妻熟女一区 | 国产内射爽爽大片视频社区在线 | 欧美肥老太牲交大战 | 日本xxxx色视频在线观看免费 | 欧美人与动性行为视频 | 久久精品国产99久久6动漫 | 亚洲一区二区三区含羞草 | 国产精品无码一区二区桃花视频 | 久久成人a毛片免费观看网站 | 成人精品天堂一区二区三区 | 99国产精品白浆在线观看免费 | 自拍偷自拍亚洲精品10p | 精品乱子伦一区二区三区 | 国产一区二区三区精品视频 | 日日麻批免费40分钟无码 | 国产在线aaa片一区二区99 | 国产欧美熟妇另类久久久 | 国产精品成人av在线观看 | 久久人人爽人人人人片 | 无码纯肉视频在线观看 | 国产人妻久久精品二区三区老狼 | 成人精品天堂一区二区三区 | 丝袜足控一区二区三区 | 亚洲精品久久久久久一区二区 | 精品国产一区二区三区av 性色 | 又粗又大又硬毛片免费看 | 成人无码精品1区2区3区免费看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 天天av天天av天天透 | 无码任你躁久久久久久久 | 中文字幕无码免费久久9一区9 | 欧美日韩人成综合在线播放 | 亚洲中文字幕无码一久久区 | 伊人久久大香线蕉亚洲 | 性欧美videos高清精品 | 亚洲日韩一区二区 | 久久99精品国产.久久久久 | 大色综合色综合网站 | 国产精品久久久久无码av色戒 | 久久精品国产精品国产精品污 | 免费观看激色视频网站 | 国产香蕉97碰碰久久人人 | 欧美刺激性大交 | 久久精品国产一区二区三区 | 国内少妇偷人精品视频免费 | 国产亚洲视频中文字幕97精品 | 扒开双腿疯狂进出爽爽爽视频 | 暴力强奷在线播放无码 | 夜夜影院未满十八勿进 | 对白脏话肉麻粗话av | 国产农村乱对白刺激视频 | 亚洲 另类 在线 欧美 制服 | 日韩人妻无码中文字幕视频 | 精品无码一区二区三区的天堂 | 国产国语老龄妇女a片 | 中文久久乱码一区二区 | 久久精品国产一区二区三区肥胖 | 5858s亚洲色大成网站www | 欧美激情综合亚洲一二区 | 久久精品人人做人人综合试看 | 扒开双腿疯狂进出爽爽爽视频 | 熟妇激情内射com | 暴力强奷在线播放无码 | 欧美 丝袜 自拍 制服 另类 | 国产精品-区区久久久狼 | 久久久中文久久久无码 | 久久国产自偷自偷免费一区调 | 亚洲精品国产精品乱码不卡 | 成人免费视频在线观看 | 1000部夫妻午夜免费 | 久精品国产欧美亚洲色aⅴ大片 | 国精产品一区二区三区 | 久久综合九色综合欧美狠狠 | 国产两女互慰高潮视频在线观看 | 成熟人妻av无码专区 | 人人妻人人澡人人爽欧美精品 | 成熟女人特级毛片www免费 | 久久熟妇人妻午夜寂寞影院 | 麻豆果冻传媒2021精品传媒一区下载 | 国产午夜精品一区二区三区嫩草 | 中文字幕久久久久人妻 | 少妇激情av一区二区 | 成熟女人特级毛片www免费 | 国产av人人夜夜澡人人爽麻豆 | 丰满诱人的人妻3 | 亚洲乱码中文字幕在线 | 国产艳妇av在线观看果冻传媒 | 亚洲第一网站男人都懂 | 水蜜桃av无码 | 欧美一区二区三区 | 色综合久久久久综合一本到桃花网 | 波多野结衣av在线观看 | 欧美老人巨大xxxx做受 | 亚洲乱码国产乱码精品精 | 蜜臀aⅴ国产精品久久久国产老师 | 国产精品无码一区二区三区不卡 | 无码午夜成人1000部免费视频 | 奇米影视7777久久精品 | 亚洲小说图区综合在线 | 丝袜足控一区二区三区 | 欧美阿v高清资源不卡在线播放 | 国产精品福利视频导航 | 中文字幕乱码中文乱码51精品 | 久久久国产精品无码免费专区 | 久久综合九色综合97网 | aa片在线观看视频在线播放 | 蜜桃视频插满18在线观看 | 国产真实乱对白精彩久久 | 国产成人精品一区二区在线小狼 | 女人高潮内射99精品 | 对白脏话肉麻粗话av | 久久亚洲精品成人无码 | 国产免费久久久久久无码 | 精品欧洲av无码一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 日日碰狠狠躁久久躁蜜桃 | 国产麻豆精品精东影业av网站 | 亚洲国产欧美国产综合一区 | 亚洲热妇无码av在线播放 | 麻豆国产丝袜白领秘书在线观看 | 国内精品九九久久久精品 | 性欧美videos高清精品 | 伊在人天堂亚洲香蕉精品区 | 亚洲日韩中文字幕在线播放 | 图片区 小说区 区 亚洲五月 | 久久 国产 尿 小便 嘘嘘 | 国产美女精品一区二区三区 | 人妻互换免费中文字幕 | 国产成人无码av片在线观看不卡 | 国产人妻精品午夜福利免费 | 久久精品成人欧美大片 | 日韩欧美中文字幕在线三区 | 欧美人与禽猛交狂配 | 亚洲国产成人av在线观看 | 性欧美大战久久久久久久 | 人人爽人人澡人人高潮 | 中文无码伦av中文字幕 | 欧美激情综合亚洲一二区 | 欧美国产日产一区二区 | 日日夜夜撸啊撸 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久国产36精品色熟妇 | 国产成人综合在线女婷五月99播放 | 久久久久久亚洲精品a片成人 | 欧美野外疯狂做受xxxx高潮 | 女人被男人躁得好爽免费视频 | 色综合久久中文娱乐网 | 精品偷拍一区二区三区在线看 | 亚洲午夜福利在线观看 | 中文字幕日韩精品一区二区三区 | 亚洲小说图区综合在线 | 欧美日本免费一区二区三区 | 少妇无码av无码专区在线观看 | 噜噜噜亚洲色成人网站 | 亚洲国产午夜精品理论片 | 水蜜桃亚洲一二三四在线 | 中文字幕无码免费久久99 | 九九久久精品国产免费看小说 | 欧美日韩精品 | 日韩精品久久久肉伦网站 | 中文毛片无遮挡高清免费 | 日韩精品成人一区二区三区 | 夫妻免费无码v看片 | 狠狠色欧美亚洲狠狠色www | 亚洲人亚洲人成电影网站色 | 中文字幕无码视频专区 | 爽爽影院免费观看 | 亚洲中文字幕va福利 | 久久久中文字幕日本无吗 | 国精产品一品二品国精品69xx | 欧洲欧美人成视频在线 | 天堂亚洲2017在线观看 | 男人扒开女人内裤强吻桶进去 | 国内精品人妻无码久久久影院 | 在线观看国产一区二区三区 | 国产香蕉97碰碰久久人人 | 国产猛烈高潮尖叫视频免费 | 蜜臀av无码人妻精品 | 无遮挡啪啪摇乳动态图 | 国产成人一区二区三区在线观看 | 无人区乱码一区二区三区 | 亚洲日韩中文字幕在线播放 | 男女爱爱好爽视频免费看 | 国产sm调教视频在线观看 | 小泽玛莉亚一区二区视频在线 | 成人无码视频在线观看网站 | 久久成人a毛片免费观看网站 | 日本高清一区免费中文视频 | 天海翼激烈高潮到腰振不止 | 国产三级精品三级男人的天堂 | 色婷婷av一区二区三区之红樱桃 | 国产激情一区二区三区 | 久久午夜无码鲁丝片秋霞 | 大乳丰满人妻中文字幕日本 | 天天av天天av天天透 | 国产精品嫩草久久久久 | 国产精品久久久久久久9999 | 国产精品福利视频导航 | 成 人 免费观看网站 | 国产高潮视频在线观看 | 久久久无码中文字幕久... | 久热国产vs视频在线观看 | 日韩人妻系列无码专区 | 97精品国产97久久久久久免费 | 午夜理论片yy44880影院 | 日韩av无码中文无码电影 | 精品偷拍一区二区三区在线看 | 亚洲精品久久久久avwww潮水 | 亚洲日韩精品欧美一区二区 | 欧美成人高清在线播放 | 日韩少妇内射免费播放 | 丰满少妇人妻久久久久久 | 国产卡一卡二卡三 | 中文字幕无码免费久久9一区9 | 夜夜高潮次次欢爽av女 | 久久国产36精品色熟妇 | 性开放的女人aaa片 | 精品人妻中文字幕有码在线 | 蜜臀av在线播放 久久综合激激的五月天 | 日本一卡二卡不卡视频查询 | 亚洲成av人片天堂网无码】 | 亚洲精品一区三区三区在线观看 | 无码吃奶揉捏奶头高潮视频 | 狂野欧美性猛交免费视频 | 午夜福利电影 | 国产亚洲精品精品国产亚洲综合 | 精品国产成人一区二区三区 | 国产激情综合五月久久 | 亚洲人成网站在线播放942 | 欧美日本日韩 | 国产精品多人p群无码 | 国产成人精品视频ⅴa片软件竹菊 | 国产成人无码一二三区视频 | 中文字幕日韩精品一区二区三区 | 亚洲中文字幕在线无码一区二区 | 国产精品久久国产精品99 | 亚洲小说春色综合另类 | 久久久久久久人妻无码中文字幕爆 | 国产三级久久久精品麻豆三级 | 亚洲熟熟妇xxxx | 欧美 丝袜 自拍 制服 另类 | 日日躁夜夜躁狠狠躁 | 99麻豆久久久国产精品免费 | 日本精品人妻无码77777 天堂一区人妻无码 | 午夜熟女插插xx免费视频 | 亚洲一区二区观看播放 | 亚洲欧洲无卡二区视頻 | 久久人人97超碰a片精品 | 熟女俱乐部五十路六十路av | 精品国精品国产自在久国产87 | 久久精品国产亚洲精品 | 国产无套内射久久久国产 | 成在人线av无码免观看麻豆 | 免费国产成人高清在线观看网站 | 国产精品.xx视频.xxtv | 亚洲精品久久久久久久久久久 | 狂野欧美性猛交免费视频 | 成人av无码一区二区三区 | 国产精品久久国产精品99 | 亚洲国产精品成人久久蜜臀 | 国内少妇偷人精品视频免费 | 国产综合在线观看 | 97久久国产亚洲精品超碰热 | 97色伦图片97综合影院 | 午夜丰满少妇性开放视频 | 性生交片免费无码看人 | 无码纯肉视频在线观看 | 人妻插b视频一区二区三区 | 99麻豆久久久国产精品免费 | 性欧美大战久久久久久久 | 天天综合网天天综合色 | 丰满妇女强制高潮18xxxx | 亚洲经典千人经典日产 | 成人aaa片一区国产精品 | 国产欧美熟妇另类久久久 | 在教室伦流澡到高潮hnp视频 | 欧美肥老太牲交大战 | 妺妺窝人体色www婷婷 | 国产精品丝袜黑色高跟鞋 | 欧美黑人巨大xxxxx | 99精品国产综合久久久久五月天 | 欧美黑人巨大xxxxx | 好男人www社区 | 久久久久av无码免费网 | 国产97人人超碰caoprom | 无码乱肉视频免费大全合集 | 成人性做爰aaa片免费看不忠 | 性欧美videos高清精品 | 久久久久久久久蜜桃 | 精品国产麻豆免费人成网站 | 在线观看欧美一区二区三区 | 国产精品美女久久久久av爽李琼 | 青青草原综合久久大伊人精品 | 蜜桃臀无码内射一区二区三区 | 国产乱人伦av在线无码 | 国产偷国产偷精品高清尤物 | 熟女体下毛毛黑森林 | 免费无码av一区二区 | 国产成人精品必看 | 久精品国产欧美亚洲色aⅴ大片 | 在线播放无码字幕亚洲 | 97无码免费人妻超级碰碰夜夜 | 奇米影视888欧美在线观看 | 丰满人妻一区二区三区免费视频 | 999久久久国产精品消防器材 | 一本无码人妻在中文字幕免费 | 强开小婷嫩苞又嫩又紧视频 | 色五月丁香五月综合五月 | 亚洲小说图区综合在线 | 日韩精品乱码av一区二区 | 麻豆精产国品 | 蜜臀aⅴ国产精品久久久国产老师 | 中文字幕人妻无码一区二区三区 | 国产精品人人爽人人做我的可爱 | 精品夜夜澡人妻无码av蜜桃 | 国产精品怡红院永久免费 | 无码吃奶揉捏奶头高潮视频 | 领导边摸边吃奶边做爽在线观看 | 亚洲区小说区激情区图片区 | 99久久精品日本一区二区免费 | 婷婷五月综合缴情在线视频 | 在教室伦流澡到高潮hnp视频 | 久久无码专区国产精品s | 亚洲一区二区三区偷拍女厕 | 国产明星裸体无码xxxx视频 | 无码人妻久久一区二区三区不卡 | 宝宝好涨水快流出来免费视频 | 天堂无码人妻精品一区二区三区 | 精品久久8x国产免费观看 | 日本大香伊一区二区三区 | 精品一区二区三区波多野结衣 | 青青久在线视频免费观看 | 亚洲国产日韩a在线播放 | 国产激情综合五月久久 | aⅴ在线视频男人的天堂 | 好男人www社区 | 青青青手机频在线观看 | 国产人妻人伦精品 | 国产亚洲精品久久久久久大师 | 欧洲熟妇色 欧美 | 无码人妻丰满熟妇区毛片18 | 久久久亚洲欧洲日产国码αv | 高清无码午夜福利视频 | 激情人妻另类人妻伦 | 在线欧美精品一区二区三区 | 又粗又大又硬又长又爽 | 亚无码乱人伦一区二区 | 人人澡人人透人人爽 | 黄网在线观看免费网站 | 亚洲欧洲无卡二区视頻 | 精品一二三区久久aaa片 | 领导边摸边吃奶边做爽在线观看 | 天天拍夜夜添久久精品大 | 国产精品亚洲综合色区韩国 | 亚洲精品久久久久久久久久久 | 无人区乱码一区二区三区 | 国产无套内射久久久国产 | 国产成人无码av片在线观看不卡 | 国产精品久免费的黄网站 | 大乳丰满人妻中文字幕日本 | 国产在线精品一区二区三区直播 | 蜜臀av无码人妻精品 | 台湾无码一区二区 | 国产精品va在线观看无码 | 国内精品久久毛片一区二区 | 无码人妻精品一区二区三区不卡 | 亚洲一区二区三区偷拍女厕 | 激情爆乳一区二区三区 | 日韩亚洲欧美中文高清在线 | 久久久久99精品国产片 | 精品国产一区二区三区四区 | 野外少妇愉情中文字幕 | 国产成人综合色在线观看网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲精品无码国产 | 日本一本二本三区免费 | 色一情一乱一伦一视频免费看 | 婷婷五月综合缴情在线视频 | 国产精品人人妻人人爽 | 国产午夜视频在线观看 | 乌克兰少妇xxxx做受 | 99久久99久久免费精品蜜桃 | 久久精品人人做人人综合试看 | 99久久久无码国产aaa精品 | 妺妺窝人体色www在线小说 | 亚洲日韩中文字幕在线播放 | 蜜桃视频插满18在线观看 | 久久久久se色偷偷亚洲精品av | 午夜福利试看120秒体验区 | 欧美日本日韩 | 久久精品99久久香蕉国产色戒 | 国产av无码专区亚洲a∨毛片 | 成人欧美一区二区三区 | 99精品国产综合久久久久五月天 | 装睡被陌生人摸出水好爽 | 日本成熟视频免费视频 | 国产又爽又猛又粗的视频a片 | 成熟女人特级毛片www免费 | 图片小说视频一区二区 | 初尝人妻少妇中文字幕 | 亚洲 欧美 激情 小说 另类 | 亚洲精品久久久久中文第一幕 | 夫妻免费无码v看片 | 极品嫩模高潮叫床 | 东京热一精品无码av | 日日鲁鲁鲁夜夜爽爽狠狠 | 色婷婷综合激情综在线播放 | 我要看www免费看插插视频 | 18禁黄网站男男禁片免费观看 | 丰满人妻精品国产99aⅴ | 久久综合狠狠综合久久综合88 | 两性色午夜视频免费播放 | 国产成人精品优优av | 亚洲一区二区三区国产精华液 | 成人片黄网站色大片免费观看 | 国产超级va在线观看视频 | 精品一区二区三区无码免费视频 | 国产va免费精品观看 | 亚洲第一无码av无码专区 | 无码一区二区三区在线观看 | 成年美女黄网站色大免费视频 | 色婷婷av一区二区三区之红樱桃 | 97夜夜澡人人爽人人喊中国片 | 精品国产青草久久久久福利 | 特大黑人娇小亚洲女 | 色婷婷综合激情综在线播放 | 中文久久乱码一区二区 | 乌克兰少妇性做爰 | 亚洲国产成人a精品不卡在线 | 少妇性l交大片欧洲热妇乱xxx | 免费网站看v片在线18禁无码 | 国产成人亚洲综合无码 | 俺去俺来也www色官网 | 午夜精品一区二区三区的区别 | 人人妻人人澡人人爽欧美一区九九 | 免费观看又污又黄的网站 | 亚洲熟妇色xxxxx亚洲 | 任你躁国产自任一区二区三区 | 伊在人天堂亚洲香蕉精品区 | 久久无码人妻影院 | 久久这里只有精品视频9 | 国产内射老熟女aaaa | 波多野结衣高清一区二区三区 | 欧美人与善在线com | 中文亚洲成a人片在线观看 | 国产麻豆精品一区二区三区v视界 | 国产明星裸体无码xxxx视频 | 丰满人妻一区二区三区免费视频 | 性色欲情网站iwww九文堂 | 久久国产36精品色熟妇 | 国产 精品 自在自线 | www国产精品内射老师 | 牲欲强的熟妇农村老妇女 | 美女张开腿让人桶 | 300部国产真实乱 | 青青久在线视频免费观看 | 中文精品久久久久人妻不卡 | 日本成熟视频免费视频 | 久久人妻内射无码一区三区 | 亚洲色大成网站www国产 | 精品久久久久久人妻无码中文字幕 | 亚洲成av人综合在线观看 | 国产人成高清在线视频99最全资源 | 俺去俺来也在线www色官网 | 欧美性黑人极品hd | 77777熟女视频在线观看 а天堂中文在线官网 | 久久午夜夜伦鲁鲁片无码免费 | 性开放的女人aaa片 | 永久黄网站色视频免费直播 | 18无码粉嫩小泬无套在线观看 | 久久久久久亚洲精品a片成人 | www成人国产高清内射 | 任你躁国产自任一区二区三区 | 欧美成人午夜精品久久久 | 欧洲vodafone精品性 | 亚洲国产精品美女久久久久 | 正在播放老肥熟妇露脸 | 亚洲娇小与黑人巨大交 | 一个人免费观看的www视频 | 精品一区二区不卡无码av | 久9re热视频这里只有精品 | 对白脏话肉麻粗话av | 精品无码一区二区三区的天堂 | 日韩无码专区 | 精品无码av一区二区三区 | 牲交欧美兽交欧美 | 亚洲一区二区观看播放 | 国产人妻久久精品二区三区老狼 | 国产精品久久久 | 中文字幕中文有码在线 | 99久久精品日本一区二区免费 | 亚洲人成人无码网www国产 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | aⅴ亚洲 日韩 色 图网站 播放 | 成人性做爰aaa片免费看不忠 | 午夜理论片yy44880影院 | 无码纯肉视频在线观看 | 中文字幕无码视频专区 | 国产亚洲精品久久久久久久 | 国内精品久久久久久中文字幕 | 四虎国产精品一区二区 | 久激情内射婷内射蜜桃人妖 | 亚洲精品鲁一鲁一区二区三区 | 国产va免费精品观看 | 国产农村乱对白刺激视频 | 无码一区二区三区在线观看 | 啦啦啦www在线观看免费视频 | 福利一区二区三区视频在线观看 | 亚洲日本在线电影 | 国产精品第一国产精品 | 亚洲 激情 小说 另类 欧美 | 中文字幕无码视频专区 | 国产精品鲁鲁鲁 | 免费网站看v片在线18禁无码 | 亚洲中文字幕在线观看 | 国产亚洲精品久久久ai换 | 国产绳艺sm调教室论坛 | 蜜桃视频插满18在线观看 | 久久99精品久久久久久 | 牲欲强的熟妇农村老妇女视频 | 亚洲精品鲁一鲁一区二区三区 | 欧美性猛交内射兽交老熟妇 | a片免费视频在线观看 | 麻花豆传媒剧国产免费mv在线 | 大肉大捧一进一出好爽视频 | 天干天干啦夜天干天2017 | 国产精品亚洲五月天高清 | 久久久久久久久蜜桃 | 久久久av男人的天堂 | 丁香花在线影院观看在线播放 | 国产疯狂伦交大片 | 欧美日韩人成综合在线播放 | 亚洲熟妇色xxxxx欧美老妇y | 欧美人与牲动交xxxx | 亚洲一区av无码专区在线观看 | 人人爽人人澡人人人妻 | 国产成人精品久久亚洲高清不卡 | 中文字幕中文有码在线 | 福利一区二区三区视频在线观看 | 人人爽人人澡人人人妻 | 九一九色国产 | 99国产精品白浆在线观看免费 | 一本久久a久久精品亚洲 | 日本一卡2卡3卡四卡精品网站 | 黑人巨大精品欧美一区二区 | 亚洲中文字幕无码中字 | 99国产欧美久久久精品 | 久久国内精品自在自线 | 日韩成人一区二区三区在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 爱做久久久久久 | 精品 日韩 国产 欧美 视频 | 亚洲熟妇色xxxxx欧美老妇 | 日日噜噜噜噜夜夜爽亚洲精品 | 蜜桃臀无码内射一区二区三区 | 日韩欧美中文字幕公布 | 精品无码国产一区二区三区av | 国产乱码精品一品二品 | 在线播放无码字幕亚洲 | 男女性色大片免费网站 | 精品久久久久香蕉网 | 亚洲精品久久久久久久久久久 | 最新国产麻豆aⅴ精品无码 | 中文字幕日产无线码一区 | 国产又爽又猛又粗的视频a片 | 真人与拘做受免费视频一 | 日日橹狠狠爱欧美视频 | 国产激情艳情在线看视频 | 国产成人精品无码播放 | 亚洲精品综合五月久久小说 | 中文字幕av伊人av无码av | 久久久久人妻一区精品色欧美 | 精品夜夜澡人妻无码av蜜桃 | 免费看男女做好爽好硬视频 | 国产热a欧美热a在线视频 | 国产亚洲日韩欧美另类第八页 | 国模大胆一区二区三区 | 特大黑人娇小亚洲女 | 人人爽人人澡人人高潮 | 久久午夜夜伦鲁鲁片无码免费 | 无码人妻精品一区二区三区不卡 | 2019午夜福利不卡片在线 | 东京热男人av天堂 | 荫蒂被男人添的好舒服爽免费视频 | 九九热爱视频精品 | 网友自拍区视频精品 | 麻豆精品国产精华精华液好用吗 | 狂野欧美性猛交免费视频 | 在线播放免费人成毛片乱码 | 天堂无码人妻精品一区二区三区 | 国产sm调教视频在线观看 | 日本护士xxxxhd少妇 | 少女韩国电视剧在线观看完整 | 国产精品18久久久久久麻辣 | 国产卡一卡二卡三 | 中文字幕无码日韩欧毛 | 成人精品一区二区三区中文字幕 | 国产精品毛片一区二区 | 亚洲成a人片在线观看日本 | 高中生自慰www网站 | 久久人人爽人人爽人人片av高清 | 国产精品无码成人午夜电影 | 图片小说视频一区二区 | 激情亚洲一区国产精品 | 在教室伦流澡到高潮hnp视频 | 久久综合九色综合97网 | 久久天天躁夜夜躁狠狠 | 久久精品国产精品国产精品污 | 波多野结衣av在线观看 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美午夜特黄aaaaaa片 | 国产无遮挡又黄又爽免费视频 | 亚洲综合精品香蕉久久网 | 久久综合香蕉国产蜜臀av | 国内精品久久久久久中文字幕 | 日本大香伊一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 欧美黑人巨大xxxxx | 自拍偷自拍亚洲精品被多人伦好爽 | 久久97精品久久久久久久不卡 | 给我免费的视频在线观看 | 日韩欧美中文字幕公布 | 最新版天堂资源中文官网 | 欧洲熟妇精品视频 | 亚洲色大成网站www | yw尤物av无码国产在线观看 | 在线 国产 欧美 亚洲 天堂 | 无码人妻精品一区二区三区不卡 | 欧美黑人性暴力猛交喷水 | 正在播放东北夫妻内射 | 国产明星裸体无码xxxx视频 | 亚洲欧洲日本无在线码 | 色婷婷综合中文久久一本 | 日本精品人妻无码免费大全 | 美女黄网站人色视频免费国产 | 精品熟女少妇av免费观看 | 7777奇米四色成人眼影 | 1000部夫妻午夜免费 | 亚洲精品国产精品乱码视色 | 久久亚洲a片com人成 | 成人精品一区二区三区中文字幕 | 婷婷六月久久综合丁香 | www一区二区www免费 | 久久99精品久久久久久动态图 | 正在播放东北夫妻内射 | 少妇性俱乐部纵欲狂欢电影 | 久久熟妇人妻午夜寂寞影院 | 国产精品无码久久av | 日产国产精品亚洲系列 | 精品日本一区二区三区在线观看 | 欧美精品一区二区精品久久 | 又粗又大又硬又长又爽 | 美女黄网站人色视频免费国产 | 婷婷丁香五月天综合东京热 | 丰腴饱满的极品熟妇 | 俺去俺来也在线www色官网 | 国产香蕉97碰碰久久人人 | 天海翼激烈高潮到腰振不止 | 亚洲成av人在线观看网址 | 国产性生大片免费观看性 | 无遮无挡爽爽免费视频 | 亚洲娇小与黑人巨大交 | 极品尤物被啪到呻吟喷水 | 亚洲国产精品一区二区美利坚 | 国产美女极度色诱视频www | 久久国产劲爆∧v内射 | 亚洲熟妇色xxxxx欧美老妇y | 欧美激情内射喷水高潮 | 清纯唯美经典一区二区 | 成人一区二区免费视频 | 国产农村乱对白刺激视频 | 四虎国产精品免费久久 | 久久久久亚洲精品中文字幕 | 国产内射老熟女aaaa | 99久久久国产精品无码免费 | 图片小说视频一区二区 | 牲交欧美兽交欧美 | 亚洲精品一区二区三区在线观看 | 亚洲日本va午夜在线电影 | 久久久久亚洲精品男人的天堂 | 中文字幕无线码免费人妻 | 亚洲人成网站免费播放 | 国产成人午夜福利在线播放 | 少妇无码一区二区二三区 | 欧洲美熟女乱又伦 | 欧美成人免费全部网站 | 99视频精品全部免费免费观看 | 男女作爱免费网站 | 亚洲成a人片在线观看无码 | 大肉大捧一进一出视频出来呀 | 天堂а√在线中文在线 | 精品国精品国产自在久国产87 | 国产精品久久久久久久影院 | 日本又色又爽又黄的a片18禁 | 麻豆国产人妻欲求不满谁演的 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 一本久道久久综合婷婷五月 | 久久精品国产日本波多野结衣 | 国产三级久久久精品麻豆三级 | 成年女人永久免费看片 | 国产精品欧美成人 | 精品一区二区三区无码免费视频 | 久久精品中文字幕大胸 | 国产黄在线观看免费观看不卡 | 东京热一精品无码av | 午夜精品久久久内射近拍高清 | 亚洲色欲久久久综合网东京热 | 婷婷六月久久综合丁香 | 中文字幕 人妻熟女 | 国产成人av免费观看 | 免费看男女做好爽好硬视频 | 国产麻豆精品精东影业av网站 | 男女超爽视频免费播放 | 强奷人妻日本中文字幕 | 日本又色又爽又黄的a片18禁 | 国产乱人伦偷精品视频 | 亚洲欧美中文字幕5发布 | 成人精品视频一区二区 | 伊人久久大香线蕉av一区二区 | 亚洲精品一区三区三区在线观看 | 亚洲人成网站色7799 | 欧美成人午夜精品久久久 | 天堂无码人妻精品一区二区三区 | 女人色极品影院 | 亚洲国产欧美日韩精品一区二区三区 | 精品无码一区二区三区的天堂 | 国产超碰人人爽人人做人人添 | 伊人久久大香线蕉亚洲 | 国产乱人伦av在线无码 | 国产又爽又黄又刺激的视频 | 亚洲综合色区中文字幕 | 九九久久精品国产免费看小说 | 强伦人妻一区二区三区视频18 | 无码人妻精品一区二区三区不卡 | 色综合久久久无码网中文 | 久久精品国产一区二区三区 | 内射欧美老妇wbb | 无码av最新清无码专区吞精 | 国产午夜精品一区二区三区嫩草 | 中文字幕无码免费久久9一区9 | 图片区 小说区 区 亚洲五月 | 成人欧美一区二区三区黑人免费 | 久久午夜无码鲁丝片秋霞 | 国产9 9在线 | 中文 | 久久精品女人天堂av免费观看 | 青青草原综合久久大伊人精品 | 中文字幕乱妇无码av在线 | 88国产精品欧美一区二区三区 | 国产9 9在线 | 中文 | 少妇性l交大片 | 98国产精品综合一区二区三区 | 国产精品久久久久久久影院 | 一本色道久久综合狠狠躁 | 水蜜桃av无码 | 少妇性俱乐部纵欲狂欢电影 | 色婷婷久久一区二区三区麻豆 | 亚洲天堂2017无码中文 | 中文字幕乱妇无码av在线 | 国产精华av午夜在线观看 | 亚洲呦女专区 | 一个人看的www免费视频在线观看 | 久精品国产欧美亚洲色aⅴ大片 | 色窝窝无码一区二区三区色欲 | 成人无码视频在线观看网站 | 在教室伦流澡到高潮hnp视频 | 国产综合久久久久鬼色 | 日本大香伊一区二区三区 | 岛国片人妻三上悠亚 | 蜜桃臀无码内射一区二区三区 | 中文久久乱码一区二区 | 欧美日本免费一区二区三区 | 久久国产精品二国产精品 | 日本免费一区二区三区最新 | yw尤物av无码国产在线观看 | 免费观看激色视频网站 | 丰满人妻翻云覆雨呻吟视频 | 欧美成人家庭影院 | 99久久人妻精品免费一区 | 久久天天躁夜夜躁狠狠 | 国产特级毛片aaaaaa高潮流水 | 国产又爽又黄又刺激的视频 | 精品国产一区二区三区四区在线看 | 小泽玛莉亚一区二区视频在线 | 99视频精品全部免费免费观看 | 中文精品无码中文字幕无码专区 | 亚洲成av人综合在线观看 | 久久精品成人欧美大片 | 精品 日韩 国产 欧美 视频 | 亚洲第一网站男人都懂 | 特大黑人娇小亚洲女 | 色诱久久久久综合网ywww | 强伦人妻一区二区三区视频18 | 亚洲精品无码人妻无码 | 国产精品国产三级国产专播 | 67194成是人免费无码 | 色欲久久久天天天综合网精品 | 国产香蕉尹人视频在线 | 欧美精品免费观看二区 | 久久久久久久人妻无码中文字幕爆 | 精品国产国产综合精品 | 久久久久99精品国产片 | 午夜精品久久久内射近拍高清 | 精品久久久无码人妻字幂 | 中文字幕无码乱人伦 | 国产亚洲精品久久久闺蜜 | 亚洲一区二区三区香蕉 | 久久久精品国产sm最大网站 | 亚洲人成影院在线无码按摩店 | 无码毛片视频一区二区本码 | 四十如虎的丰满熟妇啪啪 | 亚洲国产精品一区二区美利坚 | 亚洲午夜无码久久 | 亚洲va欧美va天堂v国产综合 | 久久国产精品二国产精品 | av无码久久久久不卡免费网站 | 国产精品人人爽人人做我的可爱 | 性欧美牲交在线视频 | 少妇太爽了在线观看 | 中文字幕人成乱码熟女app | 婷婷色婷婷开心五月四房播播 | 国产成人人人97超碰超爽8 | 国产农村妇女高潮大叫 | 高潮毛片无遮挡高清免费视频 | 久久久av男人的天堂 | 无码人中文字幕 | 色 综合 欧美 亚洲 国产 | 黑森林福利视频导航 | 又大又硬又黄的免费视频 | 精品 日韩 国产 欧美 视频 | 国产精品亚洲一区二区三区喷水 | 国产va免费精品观看 | 少妇一晚三次一区二区三区 | 欧美xxxx黑人又粗又长 | 亚洲熟悉妇女xxx妇女av | 欧美性猛交内射兽交老熟妇 | 午夜性刺激在线视频免费 | 欧美精品国产综合久久 | www国产亚洲精品久久久日本 | 亚洲中文字幕av在天堂 | 国产成人亚洲综合无码 | 中文字幕av无码一区二区三区电影 | 人人妻人人澡人人爽精品欧美 | 国产精品久久精品三级 | 精品国产一区二区三区av 性色 | 熟妇激情内射com | 精品国产一区二区三区四区在线看 | 欧洲欧美人成视频在线 | 久久久精品国产sm最大网站 | 国产亚洲美女精品久久久2020 | 内射巨臀欧美在线视频 | 久久久久久a亚洲欧洲av冫 | 欧美三级不卡在线观看 | 日日躁夜夜躁狠狠躁 | 亚洲成a人片在线观看无码3d | 午夜时刻免费入口 | 99久久久无码国产aaa精品 | 丰满诱人的人妻3 | 麻豆精品国产精华精华液好用吗 | 国产精品人妻一区二区三区四 | 最新国产乱人伦偷精品免费网站 | 中文字幕无码免费久久99 | 国产精品人人爽人人做我的可爱 | 久久久精品欧美一区二区免费 | 丰满肥臀大屁股熟妇激情视频 | 国产乱人无码伦av在线a | 国产va免费精品观看 | 精品日本一区二区三区在线观看 | 欧美日韩久久久精品a片 | 国产午夜视频在线观看 | 欧美黑人性暴力猛交喷水 | 欧洲精品码一区二区三区免费看 | 国产人妻精品一区二区三区不卡 | 欧美三级a做爰在线观看 | 国产特级毛片aaaaaaa高清 | 天堂在线观看www | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产精品毛多多水多 | 日韩人妻无码一区二区三区久久99 | 久热国产vs视频在线观看 | 波多野结衣高清一区二区三区 | av无码不卡在线观看免费 | 亚洲乱码国产乱码精品精 | 日本精品高清一区二区 | 色一情一乱一伦一视频免费看 | 在线播放免费人成毛片乱码 | 精品 日韩 国产 欧美 视频 | 网友自拍区视频精品 | 国产一区二区不卡老阿姨 | 亚洲午夜福利在线观看 | 丰满人妻精品国产99aⅴ | 激情内射日本一区二区三区 | 国产三级精品三级男人的天堂 | 人人爽人人澡人人高潮 | 亚洲日韩av一区二区三区四区 | 午夜精品久久久内射近拍高清 | 欧洲熟妇精品视频 | 国产成人无码a区在线观看视频app | 成人免费无码大片a毛片 | 99久久久无码国产aaa精品 | 激情人妻另类人妻伦 | 永久免费观看美女裸体的网站 | 激情内射亚州一区二区三区爱妻 | 成在人线av无码免费 | 天堂一区人妻无码 | 午夜不卡av免费 一本久久a久久精品vr综合 | 日本肉体xxxx裸交 | 黑人大群体交免费视频 | 亚洲第一网站男人都懂 | 亚洲 日韩 欧美 成人 在线观看 | 国产高潮视频在线观看 | 中国大陆精品视频xxxx | 免费人成在线视频无码 | 久久久久久久久888 | 日韩人妻系列无码专区 | 97人妻精品一区二区三区 | 六月丁香婷婷色狠狠久久 | 久久久久久av无码免费看大片 | 国产亚洲人成在线播放 | 图片小说视频一区二区 | 日本成熟视频免费视频 | 亚洲第一网站男人都懂 | 欧美人妻一区二区三区 | 台湾无码一区二区 | 国产黑色丝袜在线播放 | 国产超碰人人爽人人做人人添 | 九月婷婷人人澡人人添人人爽 | 成人精品视频一区二区 | 性欧美疯狂xxxxbbbb | 美女黄网站人色视频免费国产 | 亚洲の无码国产の无码影院 | 人人妻人人澡人人爽欧美一区九九 | 黑人玩弄人妻中文在线 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产午夜手机精彩视频 | 国产激情一区二区三区 | 曰韩少妇内射免费播放 | www一区二区www免费 | 白嫩日本少妇做爰 | 国产综合在线观看 | 久久久久亚洲精品男人的天堂 | 婷婷六月久久综合丁香 | 亚洲午夜久久久影院 | 十八禁视频网站在线观看 | 欧美激情一区二区三区成人 | 色婷婷综合中文久久一本 | 欧洲欧美人成视频在线 | 黑人巨大精品欧美一区二区 | 国产av一区二区精品久久凹凸 | 国产超碰人人爽人人做人人添 | 成 人 免费观看网站 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 欧美激情综合亚洲一二区 | 无码人妻精品一区二区三区不卡 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产精品久久久久无码av色戒 | 国产精品国产三级国产专播 | 国产精品多人p群无码 | 久久精品国产一区二区三区 | 大肉大捧一进一出好爽视频 | 国产精品99久久精品爆乳 | 国产激情综合五月久久 | 国产亚洲精品精品国产亚洲综合 | 亚洲七七久久桃花影院 | 东京一本一道一二三区 | 成人亚洲精品久久久久 | 狠狠噜狠狠狠狠丁香五月 | 日本一区二区三区免费播放 | 97久久超碰中文字幕 | 精品无码成人片一区二区98 | 亚洲欧美日韩综合久久久 | 正在播放老肥熟妇露脸 | 国产亚洲精品精品国产亚洲综合 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产xxx69麻豆国语对白 | 亚洲精品综合五月久久小说 | 日韩人妻少妇一区二区三区 | 国产精品久久久久影院嫩草 | 亚洲日韩中文字幕在线播放 | 亚洲毛片av日韩av无码 | 一本久道久久综合狠狠爱 | 中文字幕无码免费久久99 | 国产人妻大战黑人第1集 | 国产真实夫妇视频 | 西西人体www44rt大胆高清 | 国产av一区二区三区最新精品 | 啦啦啦www在线观看免费视频 | 久久久久国色av免费观看性色 | 东京热无码av男人的天堂 | 国内精品久久毛片一区二区 | 福利一区二区三区视频在线观看 | 国产尤物精品视频 | 亚洲日本一区二区三区在线 | 荫蒂添的好舒服视频囗交 | 一本色道婷婷久久欧美 | 国产乱人伦av在线无码 | 国产色精品久久人妻 | 人妻体内射精一区二区三四 | 国产小呦泬泬99精品 | 男人和女人高潮免费网站 | 国产真实夫妇视频 | 欧美日韩人成综合在线播放 | 一本久道久久综合狠狠爱 | 久久久中文久久久无码 | 国产人妻人伦精品 | 欧美日本免费一区二区三区 | 国产疯狂伦交大片 | 亚洲欧美日韩国产精品一区二区 | 久久久无码中文字幕久... | 国产高清av在线播放 | 人妻少妇精品无码专区动漫 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产香蕉尹人视频在线 | 亚洲国产午夜精品理论片 | 无码国内精品人妻少妇 | a国产一区二区免费入口 | 欧美肥老太牲交大战 | 亚洲精品国产精品乱码视色 | 在线天堂新版最新版在线8 | 丰腴饱满的极品熟妇 | 亚洲精品一区二区三区四区五区 | 天堂а√在线中文在线 | 樱花草在线社区www | 国产黑色丝袜在线播放 | 欧洲欧美人成视频在线 | 麻豆国产人妻欲求不满谁演的 | 综合人妻久久一区二区精品 | 国产电影无码午夜在线播放 | 国产人妻精品一区二区三区不卡 | 免费视频欧美无人区码 | 少妇无码av无码专区在线观看 | 日韩亚洲欧美中文高清在线 | 红桃av一区二区三区在线无码av | 狠狠cao日日穞夜夜穞av | 国产精品办公室沙发 | 又色又爽又黄的美女裸体网站 | 中文字幕无码热在线视频 | 88国产精品欧美一区二区三区 | 欧美丰满熟妇xxxx | 亚欧洲精品在线视频免费观看 | 欧美黑人性暴力猛交喷水 | 免费视频欧美无人区码 | 成人动漫在线观看 | 国产成人无码av在线影院 | 色欲人妻aaaaaaa无码 | 久久精品无码一区二区三区 | 福利一区二区三区视频在线观看 | 色 综合 欧美 亚洲 国产 | 国产人妻精品一区二区三区不卡 | 国产偷自视频区视频 | 99久久精品日本一区二区免费 | 亚洲日本一区二区三区在线 | 内射巨臀欧美在线视频 | 中文字幕无码日韩专区 | 国产精品久久久久久久9999 | 亚洲精品国产第一综合99久久 | 久青草影院在线观看国产 | 天下第一社区视频www日本 | 国产特级毛片aaaaaaa高清 | 正在播放东北夫妻内射 | 色婷婷综合激情综在线播放 | 粗大的内捧猛烈进出视频 | 十八禁视频网站在线观看 | 三上悠亚人妻中文字幕在线 | 99久久99久久免费精品蜜桃 | 亚洲精品一区二区三区在线 | 天堂久久天堂av色综合 | 国产真实伦对白全集 | 国产精品.xx视频.xxtv | 国产无遮挡又黄又爽免费视频 | 亚洲熟妇色xxxxx欧美老妇y | 久久亚洲a片com人成 | 色婷婷综合激情综在线播放 | 波多野结衣一区二区三区av免费 | 亚洲大尺度无码无码专区 | 午夜无码区在线观看 | 亚洲精品国产精品乱码视色 | 亚洲成a人一区二区三区 | 牲欲强的熟妇农村老妇女视频 | 亚洲中文无码av永久不收费 | 99久久久无码国产aaa精品 | 亚洲人成网站在线播放942 | 日本精品久久久久中文字幕 | 日韩欧美中文字幕在线三区 | 国产特级毛片aaaaaa高潮流水 | 国产又爽又猛又粗的视频a片 | 双乳奶水饱满少妇呻吟 | 亚洲人亚洲人成电影网站色 | 300部国产真实乱 | 99久久亚洲精品无码毛片 | 欧美性生交活xxxxxdddd | 中国女人内谢69xxxx | 久久久久久久久蜜桃 | 久久久精品欧美一区二区免费 | 国产黄在线观看免费观看不卡 | 精品国产一区av天美传媒 | 亚洲精品国产精品乱码视色 | 天堂а√在线中文在线 | 性欧美videos高清精品 | 伊人久久大香线焦av综合影院 | 亚洲天堂2017无码 | 欧美肥老太牲交大战 | 在线а√天堂中文官网 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美性猛交xxxx富婆 | 久久久久亚洲精品中文字幕 | 日韩 欧美 动漫 国产 制服 | 成人av无码一区二区三区 | 国产精品高潮呻吟av久久4虎 | 久久亚洲a片com人成 | 四虎国产精品免费久久 | 精品乱码久久久久久久 | 国产办公室秘书无码精品99 | 中文字幕人成乱码熟女app | 兔费看少妇性l交大片免费 | 粉嫩少妇内射浓精videos | 国色天香社区在线视频 | 国产香蕉97碰碰久久人人 | 中文字幕av无码一区二区三区电影 | 亚洲精品美女久久久久久久 | 中文字幕乱妇无码av在线 | 精品无码国产自产拍在线观看蜜 | 色婷婷久久一区二区三区麻豆 | 日本在线高清不卡免费播放 | 欧美激情内射喷水高潮 | 国产精品亚洲专区无码不卡 | 人人澡人人透人人爽 | 亚洲阿v天堂在线 | 99麻豆久久久国产精品免费 | 黄网在线观看免费网站 | 最新版天堂资源中文官网 | 人人爽人人爽人人片av亚洲 | 久久精品国产99久久6动漫 | 国产无遮挡吃胸膜奶免费看 | 亚洲七七久久桃花影院 | 国产精品久久久一区二区三区 | 麻豆国产人妻欲求不满谁演的 | 亚洲色欲色欲欲www在线 | 国产在线aaa片一区二区99 | 波多野结衣 黑人 | 99re在线播放 | 亚洲人成人无码网www国产 | 国产精品免费大片 | 国产精品igao视频网 | 蜜桃av抽搐高潮一区二区 | 精品亚洲韩国一区二区三区 | 中文字幕av伊人av无码av | 麻豆精产国品 | 一个人免费观看的www视频 | 婷婷五月综合激情中文字幕 | 欧美亚洲日韩国产人成在线播放 | 精品国产精品久久一区免费式 | 亚洲国产欧美在线成人 | 99精品无人区乱码1区2区3区 | 男人扒开女人内裤强吻桶进去 | 亚洲中文无码av永久不收费 | 国产精品久久久久9999小说 | 色偷偷人人澡人人爽人人模 | 综合激情五月综合激情五月激情1 | 水蜜桃av无码 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲午夜福利在线观看 | 扒开双腿吃奶呻吟做受视频 | 午夜无码区在线观看 | 国产三级久久久精品麻豆三级 | 特级做a爰片毛片免费69 | 免费国产黄网站在线观看 | 欧美成人高清在线播放 | 中文字幕精品av一区二区五区 | 日韩av无码一区二区三区 | 免费观看又污又黄的网站 | 最近免费中文字幕中文高清百度 | 日本精品高清一区二区 | 99久久精品无码一区二区毛片 | 欧美老妇交乱视频在线观看 | 亚洲第一无码av无码专区 | 蜜桃无码一区二区三区 | 丰满少妇弄高潮了www | 国产熟妇另类久久久久 | 色欲av亚洲一区无码少妇 | 日日天日日夜日日摸 | 成熟妇人a片免费看网站 | 久久亚洲中文字幕无码 | 乱人伦中文视频在线观看 | 国产精品嫩草久久久久 | 日日碰狠狠躁久久躁蜜桃 | 欧美丰满老熟妇xxxxx性 | 无套内谢老熟女 | 国产精品爱久久久久久久 | 婷婷六月久久综合丁香 | 图片小说视频一区二区 | 色综合视频一区二区三区 | 久久伊人色av天堂九九小黄鸭 | 国产真人无遮挡作爱免费视频 | 乱码av麻豆丝袜熟女系列 | 一本久道久久综合婷婷五月 | 少妇一晚三次一区二区三区 | 正在播放老肥熟妇露脸 | 乌克兰少妇xxxx做受 | 无码播放一区二区三区 | 真人与拘做受免费视频一 | 中文字幕av伊人av无码av | 亚洲码国产精品高潮在线 | 国产亚洲精品久久久闺蜜 | 国内丰满熟女出轨videos | 成人无码精品1区2区3区免费看 | 又大又硬又黄的免费视频 | 精品无码成人片一区二区98 | 婷婷五月综合缴情在线视频 | 波多野结衣高清一区二区三区 | 欧美性生交活xxxxxdddd | 欧美 丝袜 自拍 制服 另类 | 亚洲一区av无码专区在线观看 | 亚洲精品国产第一综合99久久 | 九九综合va免费看 | 色欲人妻aaaaaaa无码 | аⅴ资源天堂资源库在线 | 国产av一区二区精品久久凹凸 | 九九久久精品国产免费看小说 | 四虎4hu永久免费 | 欧美 日韩 亚洲 在线 | 国产成人无码午夜视频在线观看 | 俄罗斯老熟妇色xxxx | 特级做a爰片毛片免费69 | 人人妻人人澡人人爽人人精品浪潮 | 久久99精品国产麻豆 | 国产成人无码av一区二区 | 欧美色就是色 | 久久99久久99精品中文字幕 | 国产激情一区二区三区 | 夜精品a片一区二区三区无码白浆 | 国产精品第一区揄拍无码 | 国产在线aaa片一区二区99 | 窝窝午夜理论片影院 | 亚洲精品久久久久久久久久久 | 99久久精品国产一区二区蜜芽 | 国产疯狂伦交大片 | 国产午夜无码视频在线观看 | 国产69精品久久久久app下载 | 无套内射视频囯产 | 亚洲一区二区三区偷拍女厕 | 丰满岳乱妇在线观看中字无码 | 九九热爱视频精品 | 欧美人与禽zoz0性伦交 | 无码av免费一区二区三区试看 | 夜夜高潮次次欢爽av女 | 亚洲春色在线视频 | 对白脏话肉麻粗话av | √天堂资源地址中文在线 | 久久久久99精品成人片 | 波多野结衣av一区二区全免费观看 | 久久久精品456亚洲影院 | 亚洲成a人片在线观看无码3d | 一本久道高清无码视频 | 国产绳艺sm调教室论坛 | 久久久精品人妻久久影视 | 久久综合给合久久狠狠狠97色 | 国产激情无码一区二区 | 蜜臀av无码人妻精品 | 国产午夜精品一区二区三区嫩草 | 无套内谢的新婚少妇国语播放 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲阿v天堂在线 | 九一九色国产 | 国产在线精品一区二区高清不卡 | 中文字幕无码日韩欧毛 | 天堂久久天堂av色综合 | v一区无码内射国产 | 日韩人妻无码中文字幕视频 | 亚洲国产欧美日韩精品一区二区三区 | 99精品无人区乱码1区2区3区 | 久久人人爽人人爽人人片ⅴ | 亚洲色www成人永久网址 | 亚洲日韩av一区二区三区四区 | 水蜜桃亚洲一二三四在线 | 国产人妻久久精品二区三区老狼 | 精品无码国产一区二区三区av | 色综合久久久久综合一本到桃花网 | 成人免费无码大片a毛片 | 巨爆乳无码视频在线观看 | 乱人伦人妻中文字幕无码久久网 | 亚洲男女内射在线播放 | 国产尤物精品视频 | 欧美日韩人成综合在线播放 | 欧美精品无码一区二区三区 | 国语自产偷拍精品视频偷 | 丰满岳乱妇在线观看中字无码 | 思思久久99热只有频精品66 | 中文字幕av无码一区二区三区电影 | 久久精品中文字幕大胸 | 中文字幕无码人妻少妇免费 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美丰满少妇xxxx性 | 日韩av无码一区二区三区不卡 | 久久 国产 尿 小便 嘘嘘 | 欧美丰满少妇xxxx性 | 欧美乱妇无乱码大黄a片 | 国产真实乱对白精彩久久 | 久久综合香蕉国产蜜臀av | 国产免费无码一区二区视频 | 人妻人人添人妻人人爱 | 国产欧美熟妇另类久久久 | 性史性农村dvd毛片 | 未满小14洗澡无码视频网站 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲熟妇色xxxxx欧美老妇 | 撕开奶罩揉吮奶头视频 | 国产亚洲欧美在线专区 | 欧美亚洲国产一区二区三区 | 国产乡下妇女做爰 | 国产精品无码一区二区桃花视频 | 一本久久a久久精品亚洲 | 久久国产精品二国产精品 | 欧美日韩在线亚洲综合国产人 | 99久久亚洲精品无码毛片 | 99久久精品无码一区二区毛片 | 少妇无套内谢久久久久 | 草草网站影院白丝内射 | 亚洲精品中文字幕 | 午夜熟女插插xx免费视频 | av无码久久久久不卡免费网站 | 国产熟妇另类久久久久 | 日韩精品无码一区二区中文字幕 | 国产精品办公室沙发 | 国产免费无码一区二区视频 | 亚洲日韩中文字幕在线播放 | 久久亚洲中文字幕精品一区 | 亚洲自偷精品视频自拍 | 亚洲一区二区三区播放 | 老熟妇乱子伦牲交视频 | 亚洲aⅴ无码成人网站国产app | 日本熟妇浓毛 | 色情久久久av熟女人妻网站 | 国产成人精品优优av | 5858s亚洲色大成网站www | 波多野结衣乳巨码无在线观看 | 伊人久久大香线蕉av一区二区 | 亚洲精品欧美二区三区中文字幕 | 欧美熟妇另类久久久久久多毛 | 久久精品丝袜高跟鞋 | 狠狠色噜噜狠狠狠7777奇米 | 99久久久国产精品无码免费 | 好屌草这里只有精品 | 欧美一区二区三区 | 国产精品无码成人午夜电影 | 日本熟妇浓毛 | 又大又紧又粉嫩18p少妇 | 亚洲va中文字幕无码久久不卡 | 人人妻人人澡人人爽人人精品浪潮 | 99视频精品全部免费免费观看 | 日本va欧美va欧美va精品 | 影音先锋中文字幕无码 | 无码毛片视频一区二区本码 | 亚洲一区二区三区播放 | 丰满少妇女裸体bbw | 亚洲男人av香蕉爽爽爽爽 | 午夜精品久久久久久久久 | 日本精品久久久久中文字幕 | 狂野欧美激情性xxxx | 国产精品美女久久久久av爽李琼 | 婷婷丁香六月激情综合啪 | 在线观看国产午夜福利片 | 国产精品手机免费 | 亚洲精品国产a久久久久久 | 国产精品永久免费视频 | 水蜜桃亚洲一二三四在线 | 麻花豆传媒剧国产免费mv在线 | 亚洲国产欧美国产综合一区 | 99久久久无码国产精品免费 | 一本色道久久综合亚洲精品不卡 | 女人被男人爽到呻吟的视频 | 人妻少妇精品无码专区二区 | 麻豆果冻传媒2021精品传媒一区下载 | 国产又粗又硬又大爽黄老大爷视 | 亚洲七七久久桃花影院 | 久久国产精品_国产精品 | 粉嫩少妇内射浓精videos | 久久久久久av无码免费看大片 | 欧美人与牲动交xxxx | 无码成人精品区在线观看 | 无码人妻精品一区二区三区不卡 | 青草视频在线播放 | 精品无码一区二区三区爱欲 | 熟女少妇人妻中文字幕 | 国产高清不卡无码视频 | 夜先锋av资源网站 | 少妇性l交大片 | 骚片av蜜桃精品一区 | 国产精品亚洲综合色区韩国 | 色综合久久久无码网中文 | 日韩人妻无码中文字幕视频 | 欧美性猛交内射兽交老熟妇 | 欧美 亚洲 国产 另类 | 麻豆人妻少妇精品无码专区 | 丝袜美腿亚洲一区二区 | 中文亚洲成a人片在线观看 | 久久久久成人片免费观看蜜芽 | 国产亚洲欧美日韩亚洲中文色 | 国产三级精品三级男人的天堂 | 乌克兰少妇xxxx做受 | √天堂中文官网8在线 | 一本色道婷婷久久欧美 | 任你躁国产自任一区二区三区 | 乱人伦人妻中文字幕无码久久网 | 人人爽人人爽人人片av亚洲 | 亚洲熟悉妇女xxx妇女av | 国产三级精品三级男人的天堂 | 四虎影视成人永久免费观看视频 | 高潮毛片无遮挡高清免费 | 久久亚洲国产成人精品性色 | 无人区乱码一区二区三区 | 日韩av激情在线观看 | av无码久久久久不卡免费网站 | 欧美35页视频在线观看 | 中文字幕人妻无码一区二区三区 | 免费无码一区二区三区蜜桃大 | 国内精品久久毛片一区二区 | 久久精品一区二区三区四区 | 青青久在线视频免费观看 | 久久久久久九九精品久 | 18精品久久久无码午夜福利 | 一本久久伊人热热精品中文字幕 | 天天躁日日躁狠狠躁免费麻豆 | 免费人成在线视频无码 | 欧美性猛交内射兽交老熟妇 | 蜜桃无码一区二区三区 | 中文无码伦av中文字幕 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲日韩av一区二区三区四区 | 亚洲日韩乱码中文无码蜜桃臀网站 | 丰满岳乱妇在线观看中字无码 | 国产亚洲精品久久久久久久久动漫 | 久久国产自偷自偷免费一区调 | 高潮喷水的毛片 | 国产成人综合色在线观看网站 | 97久久精品无码一区二区 | 一二三四在线观看免费视频 | 国产精品亚洲专区无码不卡 | 亚洲乱亚洲乱妇50p | 亚洲国产精品久久人人爱 | 老熟妇乱子伦牲交视频 | 久久无码中文字幕免费影院蜜桃 | 久久亚洲国产成人精品性色 | 秋霞成人午夜鲁丝一区二区三区 | 国内精品人妻无码久久久影院蜜桃 | 人人妻在人人 | 色婷婷久久一区二区三区麻豆 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品丝袜黑色高跟鞋 | 性生交大片免费看女人按摩摩 | 亚洲国产av精品一区二区蜜芽 | 色婷婷香蕉在线一区二区 | 久久精品国产99久久6动漫 | 久久99精品国产麻豆 | 最近免费中文字幕中文高清百度 | 亚洲国产精品久久久久久 | 色一情一乱一伦一区二区三欧美 | 人妻熟女一区 | 国产精品人人妻人人爽 | 国产精品无套呻吟在线 | 国产精品久久久 | 亚洲精品一区二区三区在线 | 国产精品二区一区二区aⅴ污介绍 | 色诱久久久久综合网ywww | 国产激情无码一区二区 | 一本精品99久久精品77 | 久久综合色之久久综合 | 国产人妖乱国产精品人妖 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 夜夜躁日日躁狠狠久久av | 亚洲欧洲日本无在线码 | 98国产精品综合一区二区三区 | 人妻少妇精品无码专区动漫 | 无码人妻出轨黑人中文字幕 | 亚洲国产午夜精品理论片 | 亚洲熟妇色xxxxx欧美老妇 | 内射巨臀欧美在线视频 | 国产精品久久久久9999小说 | 无码人妻精品一区二区三区下载 | 久久精品成人欧美大片 | 久久精品无码一区二区三区 | 久久精品国产99久久6动漫 | 四虎国产精品一区二区 | 老熟女重囗味hdxx69 | 国产人妻大战黑人第1集 | 亚洲 a v无 码免 费 成 人 a v | 日韩av无码中文无码电影 | 久久婷婷五月综合色国产香蕉 | 影音先锋中文字幕无码 | 亚洲aⅴ无码成人网站国产app | 熟妇人妻激情偷爽文 | 国产莉萝无码av在线播放 | 国产肉丝袜在线观看 | 日日碰狠狠躁久久躁蜜桃 | 任你躁国产自任一区二区三区 | 亚洲成a人一区二区三区 | 好爽又高潮了毛片免费下载 | 131美女爱做视频 | 小泽玛莉亚一区二区视频在线 | 欧美刺激性大交 | 大肉大捧一进一出视频出来呀 | 麻豆成人精品国产免费 | 亚洲综合色区中文字幕 | 亚洲国产精品久久久天堂 | 97久久国产亚洲精品超碰热 | 一本无码人妻在中文字幕免费 | 99久久精品无码一区二区毛片 | 久久久久人妻一区精品色欧美 | 午夜男女很黄的视频 | 国内精品一区二区三区不卡 | 少女韩国电视剧在线观看完整 | а√资源新版在线天堂 | 丰满少妇高潮惨叫视频 | 久久久久99精品国产片 | 任你躁在线精品免费 | 国产成人av免费观看 | 老司机亚洲精品影院 | 帮老师解开蕾丝奶罩吸乳网站 | 天堂无码人妻精品一区二区三区 | 亚洲欧美国产精品专区久久 | 日本熟妇乱子伦xxxx | 国産精品久久久久久久 | a在线观看免费网站大全 | 一本大道久久东京热无码av | 又色又爽又黄的美女裸体网站 | 色五月五月丁香亚洲综合网 | aⅴ在线视频男人的天堂 | 波多野结衣av在线观看 | 奇米影视888欧美在线观看 | 精品久久久无码中文字幕 | 强奷人妻日本中文字幕 | 免费看少妇作爱视频 | 动漫av网站免费观看 | 成熟女人特级毛片www免费 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲日韩中文字幕在线播放 | 99麻豆久久久国产精品免费 | 动漫av一区二区在线观看 | 欧美丰满老熟妇xxxxx性 | 午夜精品一区二区三区的区别 | 亚洲精品国产a久久久久久 | 国产无遮挡吃胸膜奶免费看 | 欧美亚洲国产一区二区三区 | 国产亚洲精品久久久久久国模美 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲精品无码人妻无码 | 熟女体下毛毛黑森林 | 亚欧洲精品在线视频免费观看 | 少妇性荡欲午夜性开放视频剧场 | 奇米影视888欧美在线观看 | 美女黄网站人色视频免费国产 | 亚洲国产成人av在线观看 | 国产美女精品一区二区三区 | 国产精品亚洲综合色区韩国 | 国产精品国产自线拍免费软件 | 欧美精品无码一区二区三区 | 综合人妻久久一区二区精品 | 亚洲の无码国产の无码影院 | 精品人妻中文字幕有码在线 | 丁香花在线影院观看在线播放 | 精品国产一区二区三区四区在线看 | 久久99精品国产.久久久久 | 国产精品久久久久影院嫩草 | 在线欧美精品一区二区三区 | 天堂亚洲2017在线观看 | 又色又爽又黄的美女裸体网站 | 亚洲色大成网站www国产 | 乱人伦人妻中文字幕无码久久网 |