午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > Go操作etcd的實現(xiàn)示例

Go操作etcd的實現(xiàn)示例

熱門標簽:揚州電銷外呼系統(tǒng)軟件 武漢百應(yīng)人工智能電銷機器人 400手機電話免費辦理 百度地圖標注位置網(wǎng)站 開通400電話申請流程 智能語音電銷的機器人 電腦外呼系統(tǒng)輻射大嗎 如何利用高德地圖標注家 上海企業(yè)外呼系統(tǒng)排名

etcd是近幾年比較火熱的一個開源的、分布式的鍵值對數(shù)據(jù)存儲系統(tǒng),提供共享配置、服務(wù)的注冊和發(fā)現(xiàn),本文主要介紹etcd的安裝和使用。

etcdetcd介紹

etcd是使用Go語言開發(fā)的一個開源的、高可用的分布式key-value存儲系統(tǒng),可以用于配置共享和服務(wù)的注冊和發(fā)現(xiàn)。

類似項目有zookeeper和consul。

etcd具有以下特點:

  • 完全復(fù)制:集群中的每個節(jié)點都可以使用完整的存檔
  • 高可用性:Etcd可用于避免硬件的單點故障或網(wǎng)絡(luò)問題
  • 一致性:每次讀取都會返回跨多主機的最新寫入
  • 簡單:包括一個定義良好、面向用戶的API(gRPC)
  • 安全:實現(xiàn)了帶有可選的客戶端證書身份驗證的自動化TLS
  • 快速:每秒10000次寫入的基準速度
  • 可靠:使用Raft算法實現(xiàn)了強一致、高可用的服務(wù)存儲目錄

etcd應(yīng)用場景

服務(wù)發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)要解決的也是分布式系統(tǒng)中最常見的問題之一,即在同一個分布式集群中的進程或服務(wù),要如何才能找到對方并建立連接。本質(zhì)上來說,服務(wù)發(fā)現(xiàn)就是想要了解集群中是否有進程在監(jiān)聽 udp 或 tcp 端口,并且通過名字就可以查找和連接。

配置中心

將一些配置信息放到 etcd 上進行集中管理。

這類場景的使用方式通常是這樣:應(yīng)用在啟動的時候主動從 etcd 獲取一次配置信息,同時,在 etcd 節(jié)點上注冊一個 Watcher 并等待,以后每次配置有更新的時候,etcd 都會實時通知訂閱者,以此達到獲取最新配置信息的目的。

分布式鎖

因為 etcd 使用 Raft 算法保持了數(shù)據(jù)的強一致性,某次操作存儲到集群中的值必然是全局一致的,所以很容易實現(xiàn)分布式鎖。鎖服務(wù)有兩種使用方式,一是保持獨占,二是控制時序。

保持獨占即所有獲取鎖的用戶最終只有一個可以得到。etcd 為此提供了一套實現(xiàn)分布式鎖原子操作 CAS(CompareAndSwap)的 API。通過設(shè)置prevExist值,可以保證在多個節(jié)點同時去創(chuàng)建某個目錄時,只有一個成功。而創(chuàng)建成功的用戶就可以認為是獲得了鎖。

控制時序,即所有想要獲得鎖的用戶都會被安排執(zhí)行,但是獲得鎖的順序也是全局唯一的,同時決定了執(zhí)行順序。etcd 為此也提供了一套 API(自動創(chuàng)建有序鍵),對一個目錄建值時指定為POST動作,這樣 etcd 會自動在目錄下生成一個當(dāng)前最大的值為鍵,存儲這個新的值(客戶端編號)。同時還可以使用 API 按順序列出所有當(dāng)前目錄下的鍵值。此時這些鍵的值就是客戶端的時序,而這些鍵中存儲的值可以是代表客戶端的編號。

為什么用 etcd 而不用ZooKeeper?

etcd 實現(xiàn)的這些功能,ZooKeeper都能實現(xiàn)。那么為什么要用 etcd 而非直接使用ZooKeeper呢?

為什么不選擇ZooKeeper?

  • 部署維護復(fù)雜,其使用的Paxos強一致性算法復(fù)雜難懂。官方只提供了JavaC兩種語言的接口。
  • 使用Java編寫引入大量的依賴。運維人員維護起來比較麻煩。
  • 最近幾年發(fā)展緩慢,不如etcdconsul等后起之秀。

為什么選擇etcd?

  • 簡單。使用 Go 語言編寫部署簡單;支持HTTP/JSON API,使用簡單;使用 Raft 算法保證強一致性讓用戶易于理解。
  • etcd 默認數(shù)據(jù)一更新就進行持久化。
  • etcd 支持 SSL 客戶端安全認證。

最后,etcd 作為一個年輕的項目,正在高速迭代和開發(fā)中,這既是一個優(yōu)點,也是一個缺點。優(yōu)點是它的未來具有無限的可能性,缺點是無法得到大項目長時間使用的檢驗。然而,目前 CoreOSKubernetesCloudFoundry等知名項目均在生產(chǎn)環(huán)境中使用了etcd,所以總的來說,etcd值得你去嘗試。

etcd集群

etcd 作為一個高可用鍵值存儲系統(tǒng),天生就是為集群化而設(shè)計的。由于 Raft 算法在做決策時需要多數(shù)節(jié)點的投票,所以 etcd 一般部署集群推薦奇數(shù)個節(jié)點,推薦的數(shù)量為 3、5 或者 7 個節(jié)點構(gòu)成一個集群。

搭建一個3節(jié)點集群示例:

在每個etcd節(jié)點指定集群成員,為了區(qū)分不同的集群最好同時配置一個獨一無二的token。

下面是提前定義好的集群信息,其中n1n2n3表示3個不同的etcd節(jié)點。

TOKEN=token-01
CLUSTER_STATE=new
CLUSTER=n1=http://10.240.0.17:2380,n2=http://10.240.0.18:2380,n3=http://10.240.0.19:2380

n1這臺機器上執(zhí)行以下命令來啟動etcd:

etcd --data-dir=data.etcd --name n1 \

    --initial-advertise-peer-urls http://10.240.0.17:2380 --listen-peer-urls http://10.240.0.17:2380 \

    --advertise-client-urls http://10.240.0.17:2379 --listen-client-urls http://10.240.0.17:2379 \

    --initial-cluster ${CLUSTER} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

n2這臺機器上執(zhí)行以下命令啟動etcd:

etcd --data-dir=data.etcd --name n2 \

    --initial-advertise-peer-urls http://10.240.0.18:2380 --listen-peer-urls http://10.240.0.18:2380 \

    --advertise-client-urls http://10.240.0.18:2379 --listen-client-urls http://10.240.0.18:2379 \

    --initial-cluster ${CLUSTER} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

n3這臺機器上執(zhí)行以下命令啟動etcd:

etcd --data-dir=data.etcd --name n3 \

    --initial-advertise-peer-urls http://10.240.0.19:2380 --listen-peer-urls http://10.240.0.19:2380 \

    --advertise-client-urls http://10.240.0.19:2379 --listen-client-urls http://10.240.0.19:2379 \

    --initial-cluster ${CLUSTER} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

etcd 官網(wǎng)提供了一個可以公網(wǎng)訪問的 etcd 存儲地址。你可以通過如下命令得到 etcd 服務(wù)的目錄,并把它作為-discovery參數(shù)使用。

curl https://discovery.etcd.io/new?size=3
https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
 
# grab this token
TOKEN=token-01
CLUSTER_STATE=new
DISCOVERY=https://discovery.etcd.io/a81b5818e67a6ea83e9d4daea5ecbc92
 
 
etcd --data-dir=data.etcd --name n1 \

    --initial-advertise-peer-urls http://10.240.0.17:2380 --listen-peer-urls http://10.240.0.17:2380 \

    --advertise-client-urls http://10.240.0.17:2379 --listen-client-urls http://10.240.0.17:2379 \

    --discovery ${DISCOVERY} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
 
 
etcd --data-dir=data.etcd --name n2 \

    --initial-advertise-peer-urls http://10.240.0.18:2380 --listen-peer-urls http://10.240.0.18:2380 \

    --advertise-client-urls http://10.240.0.18:2379 --listen-client-urls http://10.240.0.18:2379 \

    --discovery ${DISCOVERY} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}
 
 
etcd --data-dir=data.etcd --name n3 \

    --initial-advertise-peer-urls http://10.240.0.19:2380 --listen-peer-urls http://10.240.0.19:2380 \

    --advertise-client-urls http://10.240.0.19:2379 --listen-client-urls http:/10.240.0.19:2379 \

    --discovery ${DISCOVERY} \

    --initial-cluster-state ${CLUSTER_STATE} --initial-cluster-token ${TOKEN}

到此etcd集群就搭建起來了,可以使用etcdctl來連接etcd。

export ETCDCTL_API=3
HOST_1=10.240.0.17
HOST_2=10.240.0.18
HOST_3=10.240.0.19
ENDPOINTS=$HOST_1:2379,$HOST_2:2379,$HOST_3:2379
 
etcdctl --endpoints=$ENDPOINTS member lis

Go語言操作etcd

這里使用官方的etcd/clientv3包來連接etcd并進行相關(guān)操作。

安裝

go get go.etcd.io/etcd/clientv3

put和get操作

put命令用來設(shè)置鍵值對數(shù)據(jù),get命令用來根據(jù)key獲取值。

package main
 
import (
    "context"
    "fmt"
    "time"
 
    "go.etcd.io/etcd/clientv3"
)
 
// etcd client put/get demo
// use etcd/clientv3
 
func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"127.0.0.1:2379"},
        DialTimeout: 5 * time.Second,
    })
    if err != nil {
        // handle error!
        fmt.Printf("connect to etcd failed, err:%v\n", err)
        return
    }
    fmt.Println("connect to etcd success")
    defer cli.Close()
    // put
    ctx, cancel := context.WithTimeout(context.Background(), time.Second)
    _, err = cli.Put(ctx, "q1mi", "dsb")
    cancel()
    if err != nil {
        fmt.Printf("put to etcd failed, err:%v\n", err)
        return
    }
    // get
    ctx, cancel = context.WithTimeout(context.Background(), time.Second)
    resp, err := cli.Get(ctx, "q1mi")
    cancel()
    if err != nil {
        fmt.Printf("get from etcd failed, err:%v\n", err)
        return
    }
    for _, ev := range resp.Kvs {
        fmt.Printf("%s:%s\n", ev.Key, ev.Value)
    }
}

watch操作

watch用來獲取未來更改的通知。

package main
 
import (
    "context"
    "fmt"
    "time"
 
    "go.etcd.io/etcd/clientv3"
)
 
// watch demo
 
func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"127.0.0.1:2379"},
        DialTimeout: 5 * time.Second,
    })
    if err != nil {
        fmt.Printf("connect to etcd failed, err:%v\n", err)
        return
    }
    fmt.Println("connect to etcd success")
    defer cli.Close()
    // watch key:q1mi change
    rch := cli.Watch(context.Background(), "q1mi") // -chan WatchResponse
    for wresp := range rch {
        for _, ev := range wresp.Events {
            fmt.Printf("Type: %s Key:%s Value:%s\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
        }
    }
}

將上面的代碼保存編譯執(zhí)行,此時程序就會等待etcd中q1mi這個key的變化。

例如:我們打開終端執(zhí)行以下命令修改、刪除、設(shè)置q1mi這個key。

etcd> etcdctl.exe --endpoints=http://127.0.0.1:2379 put q1mi "dsb2"
OK
 
etcd> etcdctl.exe --endpoints=http://127.0.0.1:2379 del q1mi
1
 
etcd> etcdctl.exe --endpoints=http://127.0.0.1:2379 put q1mi "dsb3"
OK

上面的程序都能收到如下通知。

watch>watch.exe
connect to etcd success
Type: PUT Key:q1mi Value:dsb2
Type: DELETE Key:q1mi Value:
Type: PUT Key:q1mi Value:dsb3

lease租約

package main
 
import (
    "fmt"
    "time"
)
 
// etcd lease
 
import (
    "context"
    "log"
 
    "go.etcd.io/etcd/clientv3"
)
 
func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"127.0.0.1:2379"},
        DialTimeout: time.Second * 5,
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("connect to etcd success.")
    defer cli.Close()
 
    // 創(chuàng)建一個5秒的租約
    resp, err := cli.Grant(context.TODO(), 5)
    if err != nil {
        log.Fatal(err)
    }
 
    // 5秒鐘之后, /nazha/ 這個key就會被移除
    _, err = cli.Put(context.TODO(), "/nazha/", "dsb", clientv3.WithLease(resp.ID))
    if err != nil {
        log.Fatal(err)
    }
}

keepAlive

package main
 
import (
    "context"
    "fmt"
    "log"
    "time"
 
    "go.etcd.io/etcd/clientv3"
)
 
// etcd keepAlive
 
func main() {
    cli, err := clientv3.New(clientv3.Config{
        Endpoints:   []string{"127.0.0.1:2379"},
        DialTimeout: time.Second * 5,
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println("connect to etcd success.")
    defer cli.Close()
 
    resp, err := cli.Grant(context.TODO(), 5)
    if err != nil {
        log.Fatal(err)
    }
 
    _, err = cli.Put(context.TODO(), "/nazha/", "dsb", clientv3.WithLease(resp.ID))
    if err != nil {
        log.Fatal(err)
    }
 
    // the key 'foo' will be kept forever
    ch, kaerr := cli.KeepAlive(context.TODO(), resp.ID)
    if kaerr != nil {
        log.Fatal(kaerr)
    }
    for {
        ka := -ch
        fmt.Println("ttl:", ka.TTL)
    }
}

基于etcd實現(xiàn)分布式鎖

go.etcd.io/etcd/clientv3/concurrency在etcd之上實現(xiàn)并發(fā)操作,如分布式鎖、屏障和選舉。

導(dǎo)入該包:

import "go.etcd.io/etcd/clientv3/concurrency"

基于etcd實現(xiàn)的分布式鎖示例:

cli, err := clientv3.New(clientv3.Config{Endpoints: endpoints})
if err != nil {
    log.Fatal(err)
}
defer cli.Close()
 
// 創(chuàng)建兩個單獨的會話用來演示鎖競爭
s1, err := concurrency.NewSession(cli)
if err != nil {
    log.Fatal(err)
}
defer s1.Close()
m1 := concurrency.NewMutex(s1, "/my-lock/")
 
s2, err := concurrency.NewSession(cli)
if err != nil {
    log.Fatal(err)
}
defer s2.Close()
m2 := concurrency.NewMutex(s2, "/my-lock/")
 
// 會話s1獲取鎖
if err := m1.Lock(context.TODO()); err != nil {
    log.Fatal(err)
}
fmt.Println("acquired lock for s1")
 
m2Locked := make(chan struct{})
go func() {
    defer close(m2Locked)
    // 等待直到會話s1釋放了/my-lock/的鎖
    if err := m2.Lock(context.TODO()); err != nil {
        log.Fatal(err)
    }
}()
 
if err := m1.Unlock(context.TODO()); err != nil {
    log.Fatal(err)
}
fmt.Println("released lock for s1")
 
-m2Locked
fmt.Println("acquired lock for s2")

輸出:

acquired lock for s1
released lock for s1
acquired lock for s2

查看文檔了解更多

其他操作

其他操作請查看etcd/clientv3官方文檔。

參考鏈接:

https://etcd.io/docs/v3.3.12/demo/

https://www.infoq.cn/article/etcd-interpretation-application-scenario-implement-principle/ 代碼改變世界,腳踏實地,python、Golang。

到此這篇關(guān)于Go操作etcd的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Go操作etcd內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標簽:武漢 延邊 江西 黑龍江 張掖 宜賓 嘉峪關(guān) 新余

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Go操作etcd的實現(xiàn)示例》,本文關(guān)鍵詞  操作,etcd,的,實現(xiàn),示例,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go操作etcd的實現(xiàn)示例》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go操作etcd的實現(xiàn)示例的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日韩亚洲一区在线播放| 亚洲一区三区视频在线观看| 日韩av手机版| 中文字幕av免费观看| 亚洲视频一区二区免费在线观看 | 香蕉久久夜色| 国产免费美女视频| 久久蜜臀精品av| 久久精品小视频| 国产原创中文在线观看| 激情五月婷婷网| 天天色综合天天| 成人有码在线播放| 高潮毛片无遮挡| 成人91在线观看| 久久国产精品久久久久久久久久| 国产在线观看福利| 全国男人的天堂网| 日韩欧美一区二区不卡| 最新欧美日韩亚洲| 国产高潮久久久| 天天操天天干天天综合网| 91在线观看欧美日韩| 日本激情小视频| 久久女同互慰一区二区三区| 久久久久久久久久亚洲| 亚洲精品无码久久久久久久| 国产一区二区久久| 久久久999国产| 日本成人中文字幕在线| 天堂蜜桃91精品| 亚洲欧洲av一区二区| 久久成人福利视频| 性感美女一级片| 亚洲欧美在线x视频| 成人毛片视频网站| 久热精品视频| 久久精品一本久久99精品| 57pao国产成永久免费视频| 青青草国产成人av片免费| 国产一区二区免费| 色www免费视频| 国产不卡免费视频| 久久人91精品久久久久久不卡| 1314成人网| 337p粉嫩大胆色噜噜噜噜亚洲| 性色av一区二区三区免费| 国产精品成人99一区无码| 久久免费电影网| 成人在线播放av| 国产成人无码精品久在线观看| 欧美色网一区二区| 女人被男人躁得好爽免费视频| 午夜福利视频一区二区| 日日狠狠久久偷偷四色综合免费| 91插插插影院| 欧美经典一区二区三区| 亚洲伊人一本大道中文字幕| 国产无码精品在线观看| 在线观看国产精品网站| 欧日韩免费视频| 国产毛片精品视频| 日韩美女视频免费看| а天堂中文在线资源| 午夜电影久久久| 91九色国产ts另类人妖| 日韩av二区在线播放| 性欧美xxxx交| 久久久久99精品| 3d成人h动漫网站入口| 成人免费aaa| 懂色一区二区三区免费观看| 国产在线久久久| 免费看av在线| 深夜福利一区二区| 偷拍夫妻性生活| 色综合久久久久综合体桃花网| 最新视频 - x88av| 久久99精品久久久久久| 国产成人福利网站| 国产精品乱码一区二区视频| 国产亚洲视频在线观看| 日本二区在线观看| 欧美日韩在线播放一区| jizz欧美激情18| 国产精品无圣光一区二区| 日韩动漫在线观看| 麻豆91在线观看| 成人久久18免费网站图片| 国产一区二区三区四区视频| 久久久91精品国产一区不卡| 欧美日韩亚洲国产另类| 亚洲国产小视频| 醉酒壮男gay强迫野外xx| 天天av天天翘天天综合网色鬼国产 | 日本欧美在线观看| 国产精品一二三在线| 亚洲综合精品视频| 欧美黄色片视频| 九九九在线观看| 久久久国产精彩视频美女艺术照福利| 日韩视频中文字幕在线观看| 亚洲精品久久久久中文字幕二区 | 亚洲欧美视频在线| 91精品少妇一区二区三区蜜桃臀| 欧美r级电影在线观看| 一卡二卡三卡四卡| 日韩精品一区二区三区老鸭窝| 国产不卡一二三| 欧美日韩精品高清| 久久久久久久穴| 欧美视频在线一区| 亚洲调教欧美在线| 日韩精品在线一区| 小早川怜子一区二区的演员表| 亚洲国产精品电影在线观看| 日韩欧美综合视频| 中文字幕av一区中文字幕天堂| 久久精品www人人爽人人| 中文字幕无线精品亚洲乱码一区 | 国产一区二区三区18| 免费在线观看黄色av| 中文字幕av一区二区| 在线观看日本视频| 欧美在线亚洲在线| 亚洲美女福利视频| 99热在线播放| 国产99久久久国产精品免费看 | ijzzijzzij亚洲大全| 欧美国产激情一区二区三区蜜月| 福利视频一二区| 天天爽夜夜爽夜夜爽精品视频| 精品无码av一区二区三区不卡| 在线不卡中文字幕播放| 免费成人深夜蜜桃视频| 色婷婷综合成人| 亚洲在线精品视频| 亚洲一区二区三区视频| 丁香五精品蜜臀久久久久99网站 | jizz亚洲少妇| 欧美大片网站在线观看| 亚洲免费黄色片| 乱色588欧美| 国产精品网站在线播放| 亚洲美女性囗交| 日韩精品在线一区二区| 久久久久久久极品| 国产精品老女人精品视频| 九一久久久久久| 激情六月天婷婷| 五月天中文字幕一区二区| 麻豆精品国产传媒av| 亚洲美女av在线| 中文字幕人成人乱码亚洲电影| 亚洲一区二区三区视频播放| 99re这里都是精品| 无需播放器的av| 亚洲精品在线三区| 亚洲永久精品在线观看| 国产美女精品视频| 高清不卡一二三区| 亚洲一区二区三区四区五区xx| 日韩亚洲国产中文字幕欧美| 日本熟女一区二区| 国产精品综合不卡av| www.亚洲免费av| 日韩在线不卡一区| 精品无人区太爽高潮在线播放 | 久久精品国语| 妞干网视频在线观看| 色综合天天综合狠狠| 久草视频免费播放| 91精品视频一区| 中文字幕av一区 二区| 日本黄色录像片| 欧美高清不卡在线| 国产美女在线观看一区| 三上悠亚在线一区二区| 国产亚洲欧美一区| 奇米888四色在线精品| 干日本少妇首页| 亚洲深夜福利网站| 蜜臀精品一区二区三区在线观看| 黑人糟蹋人妻hd中文字幕| 亚洲第一男人av| 成人免费一级视频| 手机在线免费观看毛片| 中文字幕高清在线免费播放| 99久久精品免费看国产一区二区三区| 久久久不卡网国产精品二区| 熟妇人妻久久中文字幕| 国产成人精品在线播放| 久久亚洲综合色| 国产偷人妻精品一区| 日本欧美中文字幕| 欧美经典一区二区| 欧美三级视频网站| 国产主播精品在线| 一区二区视频在线| 国产精品99无码一区二区| 国产欧美一区二区三区另类精品 | 欧美r级在线观看| 国产人妻精品一区二区三区| 成人性生活视频免费看| 日韩精品在线影院| 麻豆成人久久精品二区三区红 | 亚洲欧美小视频| 国内一区二区三区在线视频| 在线免费不卡电影| 日韩美女在线视频| 国产88在线观看入口| 欧美一区二区视频免费观看| 国产浮力第一页| 国产毛片视频网站| 日韩在线观看免费高清完整版| 国产成人av电影在线| 黄色a一级视频| 成人欧美视频在线| 在线电影国产精品| 日韩精品福利网| 极品白嫩少妇无套内谢| 国产精品黄色影片导航在线观看| 亚洲乱码国产乱码精品精可以看 | 国产午夜精品美女毛片视频| 国产人与禽zoz0性伦| 噜噜噜噜噜久久久久久91| 日韩午夜激情电影| 蜜臀久久99精品久久久久久9| 黑人玩弄人妻一区二区三区| 亚洲一区二区三区在线视频| 欧美午夜在线一二页| 亚洲一区av在线播放| 日本乱人伦a精品| 最近免费中文字幕视频2019| 日韩免费看网站| 久久久www成人免费精品| 日本a级片在线观看| 亚洲精品视频三区| 亚洲人人夜夜澡人人爽| 久久先锋影音av| 4p变态网欧美系列| 今天免费高清在线观看国语| 中文字幕激情小说| 亚洲午夜激情av| 精品国产制服丝袜高跟| 久久久久久尹人网香蕉| www.99av.com| 精品国产av鲁一鲁一区| 欧美高清dvd| 秋霞无码一区二区| 久久免费激情视频| 中文字幕中文字幕在线一区| 亚洲欧洲国产伦综合| 久久综合九色综合88i| 波多野结衣高清视频| 天天色综合天天| 日韩中文在线中文网三级| 热这里只有精品| 在线观看视频二区| 亚洲色在线视频| 亚洲丝袜在线观看| 精品人妻一区二区三区免费看 | 天堂av一区二区| 欧美特黄aaa| 亚洲精品久久久久久久久久| 亚洲色图校园春色| 国产高潮免费视频| 成人手机在线视频| 国产精品国模在线| 中文字幕一区二区人妻在线不卡| 国产一区二区中文字幕| 欧洲色大大久久| 国产高清精品一区二区| 欧美日韩精品在线观看视频| 午夜不卡av在线| 日本成熟性欧美| 北条麻妃69av| 国产露脸无套对白在线播放| 日韩中文在线不卡| 久久黄色精品视频| 色狠狠av一区二区三区香蕉蜜桃| www.av91| av电影在线观看一区| 国产成人免费观看| 久久久午夜精品福利内容| 天天干天天爽天天操| 欧美一级视频免费在线观看| 中文字幕亚洲精品一区| 久久久精品久久久| 日韩国产高清在线| 日韩av一区二区三区在线| 99久久精品久久久久久清纯| 上原亚衣av一区二区三区| 天天干天天操天天爱| 91在线观看欧美日韩| 韩国v欧美v亚洲v日本v| 男人c女人视频| 亚洲高清在线视频| 妖精视频在线观看免费| 亚洲午夜av久久乱码| 男人女人拔萝卜视频| 成人免费视频在线观看| 最新不卡av| 国产精品久久久一区麻豆最新章节| 精品欧美一区二区久久久伦| 国产视频在线观看免费| 国产乱对白刺激视频不卡| 国产成人中文字幕| 久久久久久亚洲av无码专区| 久久精品亚洲一区| 亚洲精品自拍网| 国产拍欧美日韩视频二区| 亚洲欧洲日夜超级视频| av在线播放成人| 超碰免费在线公开| 亚洲国产精品久久一线不卡| 99久久久久久久久久| 亚洲午夜久久久久久久久红桃 | 91网免费观看| 天天干视频在线观看| 国产伦精品一区| 美女视频一区二区三区| 国产精品免费小视频| 久88久久88久久久| 亚洲精品视频一二三| 国产精品美女久久久久久久| 在线视频一二三区| 99久久免费视频.com| 成人久久18免费网站漫画| 国产精品一区二区在线播放 | 中文字幕精品一区| 波多野结衣作品集| 欧美日韩国产三级| 成人午夜剧场视频网站| 亚洲性无码av在线| 中文国产在线观看| 欧美性xxxxx极品娇小| 欧美多人猛交狂配| 久久激情视频免费观看| 天天躁日日躁狠狠躁喷水| 久久精品色欧美aⅴ一区二区| 成人免费看片98| 久久av一区二区三区亚洲| 亚洲欧美aⅴ...| 男人的天堂久久久| 日韩极品视频在线观看| www.xxxx精品| 亚洲乱码中文字幕综合| 中文字幕人妻色偷偷久久| 99re8这里只有精品| 最新69国产成人精品视频免费| 国产日韩欧美不卡| 午夜精产品一区二区在线观看的| 亚洲电影av在线| 日本中文字幕第一页| 97精品一区二区三区| 国产成人在线观看| 一个人看的视频www| 欧美电影免费观看完整版| 天堂网av2014| 日韩色妇久久av| 一区二区三区高清在线| 精品国产成人亚洲午夜福利| 日韩国产一区三区| 久久久精品日韩| 性欧美成人播放77777| 国产精品久久国产三级国电话系列| 国产成人免费av在线| 绯色av蜜臀vs少妇| www日韩中文字幕在线看| 国产麻豆一精品一av一免费| 熟女少妇精品一区二区| 国产精品久久久久久久久久免费看| 亚洲一级中文字幕| 国产精选一区二区| 一本久久精品一区二区| 国产一区二区视频免费| 99re8这里只有精品| 亚洲欧美日韩精品| 久久一留热品黄| 久久久一区二区三区四区| 在线观看亚洲一区| 精品处破女学生| 国产精品v欧美精品v日韩| 亚洲国产精品欧美一二99| 日本一二三区视频| 天天人人精品| 欧美一区二区精品在线| 天堂精品中文字幕在线| 国产午夜大地久久| 精品国产髙清在线看国产毛片 | 一区二区三区在线影院| 精品少妇久久久| 国产成人av一区二区三区| 日本精品一区二区三区四区的功能| 亚洲网站在线免费观看| www.超碰com| 国产精品福利观看| 26uuu欧美日本| 国产在线拍揄自揄拍| 热久久精品国产| 国产91精品久久久久久久| 色香蕉成人二区免费| 一区二区免费视频| 91免费观看视频| 国产激情一区二区三区| 可以免费看不卡的av网站| 涩涩视频在线观看| 天天干天天操天天拍| 亚洲欧美日韩一级|