日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于consul实现微服务的服务发现和负载均衡

發布時間:2025/3/21 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于consul实现微服务的服务发现和负载均衡 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一. 背景


隨著2018年年初國務院辦公廳聯合多個部委共同發布了《國務院辦公廳關于促進“互聯網+醫療健康”發展的意見(國辦發〔2018〕26號)》,國內醫療IT領域又迎來了一波互聯網醫院建設的高潮。不過互聯網醫院多基于實體醫院建設,雖說掛了一個“互聯網”的名號,但互聯網醫院系統也多與傳統的院內系統,比如:HIS、LIS、PACS、EMR等共享院內的IT基礎設施。

如果你略微了解過國內醫院院內IT系統的現狀,你就知道目前的多數醫院的IT系統相比于互聯網行業、電信等行業來說是相對“落伍”的,這種落伍不僅體現在IT基礎設施的專業性和數量上,更體現在對新概念、新技術、新設計理念等應用上。雖然國內醫院IT系統在技術層面呈現出“多樣性”的特征,但整體上偏陳舊和保守 – - 你可以在全國范圍內找到10-15年前的各種主流語言(VB、delphi、c#等實現的IT系統,并且系統架構多為兩層C/S結構的。

近幾年“互聯網+醫療”的興起的確在一些方面提升了醫院的服務效率和水平,但這些互聯網醫療系統多部署于院外,并主要集中在“做入口”。它們并不算是醫院的核心系統:即沒有這些互聯網系統,醫院的業務也是照常進行的(患者可以在傳統的窗口辦理所有院內業務,就是效率低罷了)。因此,雖然這些互聯網醫療系統采用了先進的互聯網系統設計理念和技術,但并沒有真正提升院內系統的技術水平,它們也只能與院內那些“陳舊”的、難于擴展的系統做對接。

不過互聯網醫院與這些系統有所不同,雖然它依然“可有可無”,但它卻是部署在院內IT基礎設施上的系統,同時也受到了院內IT基礎設施條件的限制。在我們即將上線的一個針對醫院集團的互聯網醫院版本中,我們就遇到了“被限制”的問題。我們本想上線的Kubernetes集群因為院方提供的硬件“不足”而無法實施,只能“降級”為手工打造的基于consul的微服務服務發現和負載均衡平臺,初步滿足我們的系統需要。而從k8s到consul的實踐過程,總是讓我有一種從工業時代回到的農業時代或是“消費降級”的趕腳^_^。

本文就來說說基于當前較新版本的consul實現微服務的服務發現和負載均衡的過程。

?

二. 實驗環境


這里有三臺阿里云的ECS,即用作部署consul集群,也用來承載工作負載的節點(這點與真實生產環境還是蠻像的,醫院也僅能提供類似的這點兒可憐的設備):

  • consul-1: 192.168.0.129
  • consul-2: 192.168.0.130
  • consul-3: 192.168.0.131

操作系統:Ubuntu?server 16.04.4 LTS
內核版本:4.4.0-117-generic

實驗環境安裝有:

  • Docker 17.03.3-ce
  • consul v1.1.0
  • consul-template 0.19.5
  • nginx 1.10.3
  • registrator master版本
  • Go 1.11版本

實驗所用的樣例程序鏡像:

  • httpfrontservice
  • httpbackendservice
  • tcpfrontservice

?

三. 目標及方案原理


本次實驗的最基礎、最樸素的兩個目標:

  • 所有業務應用均基于容器運行
  • 某業務服務容器啟動后,會被自動注冊服務,同時其他服務可以自動發現該服務并調用,并且到達這個服務的請求會負載均衡到服務的多個實例。

這里選擇了與編程語言技術棧無關的、可搭建微服務的服務發現和負載均衡的Hashicorp的consul。關于consul是什么以及其基本原理和應用,可以參見我多年前寫的這篇有關consul的文章。

但是光有consul還不夠,我們還需要結合consul-template、gliderlab的registrator以及nginx共同來實現上述目標,原理示意圖如下:

原理說明:

  • 對于每個biz node上啟動的容器,位于每個node上的Registrator實例會監聽到該節點上容器的創建和停止的event,并將容器的信息以consul service的形式寫入consul或從consul刪除。
  • 位于每個nginx node上的consul-template實例會watch consul集群,監聽到consul service的相關event,并將需要expose到external的service信息獲取,按照事先定義好的nginx conf template重新生成nginx.conf并reload本節點的nginx,使得nginx的新配置生效。
  • 對于內部服務來說(不通過nginx暴露到外部),在被registrator寫入consul的同時,也完成了在consul DNS的注冊,其他服務可以通過特定域名的方式獲取該內部服務的IP列表(A地址)和其他信息,比如端口(SRV),并進而實現與這些內部服務的通信。

參考該原理,落地到我們實驗環境的部署示意圖如下:

四. 步驟


下面說說詳細的實驗步驟。

1. 安裝consul集群

首先我們先來安裝consul集群。consul既支持二進制程序直接部署,也支持Docker容器化部署。如果consul集群單獨部署在幾個專用節點上,那么consul可以使用二種方式的任何一種。但是如果consul所在節點還承載工作負載,考慮consul作為整個分布式平臺的核心,降低它與docker engine引擎的耦合(docker engine可能會因各種情況經常restart),還是建議以二進制程序形式直接部署在物理機或vm上。這里的實驗環境資源有限,我們采用的是以二進制程序形式直接部署的方式。

consul最新版本是1.2.2(截至發稿時),consul 1.2.x版本與consul 1.1.x版本最大的不同在于consul 1.2.x支持service mesh了,這對于consul來說可是革新性的變化,因此這里擔心其初期的穩定性,因此我們選擇consul 1.1.0版本。

我們下載consul 1.1.0安裝包后,將其解壓到/usr/local/bin下。

在$HOME下建立consul-install目錄,并在其下面存放consul集群的運行目錄consul-data。在consul-install目錄下,執行命令啟動節點consul-1上的consul:

consul-1 node:# nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=/root/consul-install/consul-data -node=consul-1 -client=0.0.0.0 -bind=192.168.0.129 -datacenter=dc1 > consul-1.log & 2>&1# tail -100f consul-1.log bootstrap_expect > 0: expecting 3 servers ==> Starting Consul agent... ==> Consul agent running!Version: 'v1.1.0'Node ID: 'd23b9495-4caa-9ef2-a1d5-7f20aa39fd15'Node name: 'consul-1'Datacenter: 'dc1' (Segment: '<all>')Server: true (Bootstrap: false)Client Addr: [0.0.0.0] (HTTP: 8500, HTTPS: -1, DNS: 53)Cluster Addr: 192.168.0.129 (LAN: 8301, WAN: 8302)Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false==> Log data will now stream in as it occurs:2018/09/10 10:21:09 [INFO] raft: Initial configuration (index=0): []2018/09/10 10:21:09 [INFO] raft: Node at 192.168.0.129:8300 [Follower] entering Follower state (Leader: "")2018/09/10 10:21:09 [INFO] serf: EventMemberJoin: consul-1.dc1 192.168.0.1292018/09/10 10:21:09 [INFO] serf: EventMemberJoin: consul-1 192.168.0.1292018/09/10 10:21:09 [INFO] consul: Adding LAN server consul-1 (Addr: tcp/192.168.0.129:8300) (DC: dc1)2018/09/10 10:21:09 [INFO] consul: Handled member-join event for server "consul-1.dc1" in area "wan"2018/09/10 10:21:09 [INFO] agent: Started DNS server 0.0.0.0:53 (tcp)2018/09/10 10:21:09 [INFO] agent: Started DNS server 0.0.0.0:53 (udp)2018/09/10 10:21:09 [INFO] agent: Started HTTP server on [::]:8500 (tcp)2018/09/10 10:21:09 [INFO] agent: started state syncer ==> Newer Consul version available: 1.2.2 (currently running: 1.1.0)2018/09/10 10:21:15 [WARN] raft: no known peers, aborting election2018/09/10 10:21:17 [ERR] agent: failed to sync remote state: No cluster leader

我們的三個節點的consul都以server角色啟動(consul agent -server),consul集群初始有三個node( -bootstrap-expect=3),均位于dc1 datacenter(-datacenter=dc1),服務bind地址為192.168.0.129(-bind=192.168.0.129 ),允許任意client連接( -client=0.0.0.0)。我們啟動了consul ui(-ui),便于以圖形化的方式查看consul集群的狀態。我們設置了consul DNS服務的端口號為53(-dns-port=53),這個后續會起到重要作用,這里先埋下小伏筆。

這里我們使用nohup+&符號的方式將consul運行于后臺。生產環境建議使用systemd這樣的init系統對consul的啟停和配置更新進行管理。

從consul-1的輸出日志來看,單節點并沒有選出leader。我們需要繼續在consul-2和consul-3兩個節點上也重復consul-1上的操作,啟動consul:

consul-2 node:#nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=/root/consul-install/consul-data -node=consul-2 -client=0.0.0.0 -bind=192.168.0.130 -datacenter=dc1 -join 192.168.0.129 > consul-2.log & 2>&1consul-3 node:# nohup consul agent -server -ui -dns-port=53 -bootstrap-expect=3 -data-dir=/root/consul-install/consul-data -node=consul-3 -client=0.0.0.0 -bind=192.168.0.131 -datacenter=dc1 -join 192.168.0.129 > consul-3.log & 2>&1

啟動后,我們查看到consul-3.log中的日志:

2018/09/10 10:24:01 [INFO] consul: New leader elected: consul-32018/09/10 10:24:01 [WARN] raft: AppendEntries to {Voter a215865f-dba7-5caa-cfb3-6850316199a3 192.168.0.130:8300} rejected, sending older logs (next: 1)2018/09/10 10:24:01 [INFO] raft: pipelining replication to peer {Voter a215865f-dba7-5caa-cfb3-6850316199a3 192.168.0.130:8300}2018/09/10 10:24:01 [WARN] raft: AppendEntries to {Voter d23b9495-4caa-9ef2-a1d5-7f20aa39fd15 192.168.0.129:8300} rejected, sending older logs (next: 1)2018/09/10 10:24:01 [INFO] raft: pipelining replication to peer {Voter d23b9495-4caa-9ef2-a1d5-7f20aa39fd15 192.168.0.129:8300}2018/09/10 10:24:01 [INFO] consul: member 'consul-1' joined, marking health alive2018/09/10 10:24:01 [INFO] consul: member 'consul-2' joined, marking health alive2018/09/10 10:24:01 [INFO] consul: member 'consul-3' joined, marking health alive2018/09/10 10:24:01 [INFO] agent: Synced node info ==> Newer Consul version available: 1.2.2 (currently running: 1.1.0)

consul-3 node上的consul被選為初始leader了。我們可以通過consul提供的子命令查看集群狀態:

# consul operator raft list-peers Node ID Address State Voter RaftProtocol consul-3 0020b7aa-486a-5b44-b5fd-be000a380a89 192.168.0.131:8300 leader true 3 consul-1 d23b9495-4caa-9ef2-a1d5-7f20aa39fd15 192.168.0.129:8300 follower true 3 consul-2 a215865f-dba7-5caa-cfb3-6850316199a3 192.168.0.130:8300 follower true 3

我們還可以通過consul ui以圖形化方式查看集群狀態和集群內存儲的各種配置信息:

至此,consul集群就搭建ok了。

2. 安裝Nginx、consul-template和Registrator

根據前面的“部署示意圖”,我們在consul-1和consul-2上安裝nginx、consul-template和Registrator,在consul-3上安裝Registrator。

a) Nginx的安裝

我們使用ubuntu 16.04.4默認源中的nginx版本:1.10.3,通過apt-get install nginx安裝nginx,這個無須贅述了。

b) consul-template的安裝

consul-template是一個將consul集群中存儲的信息轉換為文件形式的工具。常用的場景是監聽consul集群中數據的變化,并結合模板將數據持久化到某個文件中,再執行某一關聯的action。比如我們這里通過consul-template監聽consul集群中service信息的變化,并將service信息數據與nginx的配置模板結合,生成nginx可用的nginx.conf配置文件,并驅動nginx重新reload配置文件,使得nginx的配置更新生效。因此一般來說,哪里部署有nginx,我們就應該有一個配對的consul-template部署。

在我們的實驗環境中consul-1和consul-2兩個節點部署了nginx,因此我們需要在consul-1和consul-2兩個節點上部署consul-template。我們直接安裝comsul-template的二進制程序(我們使用0.19.5版本),下載安裝包并解壓后,將consul-template放入/usr/local/bin目錄下:

# wget -c https://releases.hashicorp.com/consul-template/0.19.5/consul-template_0.19.5_linux_amd64.zip# unzip consul-template_0.19.5_linux_amd64.zip # mv consul-tempate /usr/local/bin # consul-template -v consul-template v0.19.5 (57b6c71)

這里先不啟動consul-template,后續在注冊不同服務的場景中,我們再啟動consul-template。

c) Registrator的安裝

Registrator是另外一種工具,它監聽Docker引擎上發生的容器創建和停止事件,并將啟動的容器信息以consul service的形式存儲在consul集群中。因此,Registrator和node上的docker engine對應,有docker engine部署的節點上都應該安裝有對應的Registator。因此我們要在實驗環境的三個節點上都部署Registrator。

Registrator官方推薦的就是以Docker容器方式運行,但這里我并不使用lastest版本,而是用master版本,因為只有最新的master版本才支持service meta數據的寫入,而當前的latest版本是v7版本,年頭較長,并不支持service meta數據寫入。

在所有實驗環境節點上執行:

# docker run --restart=always -d \--name=registrator \--net=host \--volume=/var/run/docker.sock:/tmp/docker.sock \gliderlabs/registrator:master\consul://localhost:8500

我們看到registrator將node節點上的/var/run/docker.sock映射到容器內部的/tmp/docker.sock上,通過這種方式registrator可以監聽到node上docker引擎上的事件變化。registrator的另外一個參數:consul://localhost:8500則是Registrator要寫入信息的consul地址(當然Registrator不僅僅支持consul,還支持etcd、zookeeper等),這里傳入的是本node上consul server的地址和服務端口。

Registrator的啟動日志如下:

# docker logs -f registrator 2018/09/10 05:56:39 Starting registrator v7 ... 2018/09/10 05:56:39 Using consul adapter: consul://localhost:8500 2018/09/10 05:56:39 Connecting to backend (0/0) 2018/09/10 05:56:39 consul: current leader 192.168.0.130:8300 2018/09/10 05:56:39 Listening for Docker events ... 2018/09/10 05:56:39 Syncing services on 1 containers 2018/09/10 05:56:39 ignored: 6ef6ae966ee5 no published ports

在所有節點都啟動完Registrator后,我們來先查看一下當前consul集群中service的catelog以及每個catelog下的service的詳細信息:

// consul-1:# curl http://localhost:8500/v1/catalog/services {"consul":[]}

目前只有consul自己內置的consul service catelog,我們查看一下consul這個catelog service的詳細信息:

// consul-1:# curl localhost:8500/v1/catalog/service/consul|jq% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed 100 1189 100 1189 0 0 180k 0 --:--:-- --:--:-- --:--:-- 193k [{"ID": "d23b9495-4caa-9ef2-a1d5-7f20aa39fd15","Node": "consul-1","Address": "192.168.0.129","Datacenter": "dc1","TaggedAddresses": {"lan": "192.168.0.129","wan": "192.168.0.129"},"NodeMeta": {"consul-network-segment": ""},"ServiceID": "consul","ServiceName": "consul","ServiceTags": [],"ServiceAddress": "","ServiceMeta": {},"ServicePort": 8300,"ServiceEnableTagOverride": false,"CreateIndex": 5,"ModifyIndex": 5},{"ID": "a215865f-dba7-5caa-cfb3-6850316199a3","Node": "consul-2","Address": "192.168.0.130","Datacenter": "dc1","TaggedAddresses": {"lan": "192.168.0.130","wan": "192.168.0.130"},"NodeMeta": {"consul-network-segment": ""},"ServiceID": "consul","ServiceName": "consul","ServiceTags": [],"ServiceAddress": "","ServiceMeta": {},"ServicePort": 8300,"ServiceEnableTagOverride": false,"CreateIndex": 6,"ModifyIndex": 6},{"ID": "0020b7aa-486a-5b44-b5fd-be000a380a89","Node": "consul-3","Address": "192.168.0.131","Datacenter": "dc1","TaggedAddresses": {"lan": "192.168.0.131","wan": "192.168.0.131"},"NodeMeta": {"consul-network-segment": ""},"ServiceID": "consul","ServiceName": "consul","ServiceTags": [],"ServiceAddress": "","ServiceMeta": {},"ServicePort": 8300,"ServiceEnableTagOverride": false,"CreateIndex": 7,"ModifyIndex": 7} ]

3. 內部http服務的注冊和發現

對于微服務而言,有暴露到外面的,也有僅運行在內部,被內部服務調用的。我們先來看看內部服務,這里以一個http服務為例。

對于暴露到外部的微服務而言,可以通過域名、路徑、端口等來發現。但是對于內部服務,我們怎么發現呢?k8s中我們可以通過k8s集群的DNS插件進行自動域名解析實現,每個pod中container的DNS server指向的就是k8s dns server。這樣service之間可以通過使用固定規則的域名(比如:your_svc.default.svc.cluster.local)來訪問到另外一個service(僅需配置一個service name),再通過service實現該服務請求負載均衡到service關聯的后端endpoint(pod container)上。consul集群也可以做到這點,并使用consul提供的DNS服務來實現內部服務的發現。

我們需要對三個節點的DNS配置進行update,將consul DNS server加入到主機DNS resolver(這也是之前在啟動consul時將consul DNS的默認監聽端口從8600改為53的原因),步驟如下:

  • 編輯/etc/resolvconf/resolv.conf.d/base,加入一行:
nameserver 127.0.0.1
  • 重啟resolveconf服務
/etc/init.d/resolvconf restart

再查看/etc/resolve.conf文件:

# cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 100.100.2.136 nameserver 100.100.2.138 nameserver 127.0.0.1 options timeout:2 attempts:3 rotate single-request-reopen

我們發現127.0.0.1這個DNS server地址已經被加入到/etc/resolv.conf中了(切記:不要直接手工修改/etc/resolve.conf)。

好了!有了consul DNS,我們就可以發現consul中的服務了。consul給其集群內部的service一個默認的域名:your_svc.service.{data-center}.consul. 之前我們查看了cluster中只有一個consul catelog service,我們就來訪問一下該consul service:

# ping -c 3 consul.service.dc1.consul PING consul.service.dc1.consul (192.168.0.129) 56(84) bytes of data. 64 bytes from iZbp15tvx7it019hvy750tZ (192.168.0.129): icmp_seq=1 ttl=64 time=0.029 ms 64 bytes from iZbp15tvx7it019hvy750tZ (192.168.0.129): icmp_seq=2 ttl=64 time=0.025 ms 64 bytes from iZbp15tvx7it019hvy750tZ (192.168.0.129): icmp_seq=3 ttl=64 time=0.031 ms# ping -c 3 consul.service.dc1.consul PING consul.service.dc1.consul (192.168.0.130) 56(84) bytes of data. 64 bytes from 192.168.0.130: icmp_seq=1 ttl=64 time=0.186 ms 64 bytes from 192.168.0.130: icmp_seq=2 ttl=64 time=0.136 ms 64 bytes from 192.168.0.130: icmp_seq=3 ttl=64 time=0.195 ms# ping -c 3 consul.service.dc1.consul PING consul.service.dc1.consul (192.168.0.131) 56(84) bytes of data. 64 bytes from 192.168.0.131: icmp_seq=1 ttl=64 time=0.149 ms 64 bytes from 192.168.0.131: icmp_seq=2 ttl=64 time=0.184 ms 64 bytes from 192.168.0.131: icmp_seq=3 ttl=64 time=0.179 ms

我們看到consul服務有三個實例,因此DNS輪詢在不同ping命令執行時返回了不同的地址。

現在在主機層面上,我們可以發現consul中的service了。如果我們的服務調用者跑在docker container中,我們還能找到consul服務么?

# docker run busybox ping consul.service.dc1.consul ping: bad address 'consul.service.dc1.consul'

事實告訴我們:不行!

那么我們如何讓運行于docker container中的服務調用者也能發現consul中的service呢?我們需要給docker引擎指定DNS:

在/etc/docker/daemon.json中添加下面配置:

{"dns": ["node_ip", "8.8.8.8"] //node_ip: consul_1為192.168.0.129、consul_2為192.168.0.130、consul_3為192.168.0.131 }

重啟docker引擎后,再嘗試在容器內發現consul服務:

# docker run busybox ping consul.service.dc1.consul PING consul.service.dc1.consul (192.168.0.131): 56 data bytes 64 bytes from 192.168.0.131: seq=0 ttl=63 time=0.268 ms 64 bytes from 192.168.0.131: seq=1 ttl=63 time=0.245 ms 64 bytes from 192.168.0.131: seq=2 ttl=63 time=0.235 ms

這次就ok了!

接下來我們在三個節點上以容器方式啟動我們的一個內部http服務demo httpbackend:

# docker run --restart=always -d -l "SERVICE_NAME=httpbackend" -p 8081:8081 bigwhite/httpbackendservice:v1.0.0

我們查看一下consul集群內的httpbackend service信息:

# curl localhost:8500/v1/catalog/service/httpbackend|jq% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed 100 1374 100 1374 0 0 519k 0 --:--:-- --:--:-- --:--:-- 670k [{"ID": "d23b9495-4caa-9ef2-a1d5-7f20aa39fd15","Node": "consul-1","Address": "192.168.0.129",...},{"ID": "a215865f-dba7-5caa-cfb3-6850316199a3","Node": "consul-2","Address": "192.168.0.130",...},{"ID": "0020b7aa-486a-5b44-b5fd-be000a380a89","Node": "consul-3","Address": "192.168.0.131",...} ]

再訪問一下該服務:

# curl httpbackend.service.dc1.consul:8081 this is httpbackendservice, version: v1.0.0

內部服務發現成功!

4. 暴露外部http服務

說完了內部服務,我們再來說說那些要暴露到外部的服務,這個環節就輪到consul-template登場了!在我們的實驗中,consul-template讀取consul中service信息,并結合模板生成nginx配置文件。我們基于默認安裝的/etc/nginx/nginx.conf文件內容來編寫我們的模板。我們先實驗暴露http服務到外面。下面是模板樣例:

//nginx.conf.template.... ...http {... ...### Virtual Host Configs##include /etc/nginx/conf.d/*.conf;include /etc/nginx/sites-enabled/*;## http server config#{{range services -}}{{$name := .Name}}{{$service := service .Name}}{{- if in .Tags "http" -}}upstream {{$name}} {zone upstream-{{$name}} 64k;{{range $service}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;{{end}}}{{end}}{{end}}{{- range services -}} {{$name := .Name}}{{- if in .Tags "http" -}}server {listen 80;server_name {{$name}}.tonybai.com;location / {proxy_pass http://{{$name}};}}{{end}}{{end}}}

consul-template使用的模板采用的是go template的語法。我們看到在http block中,我們要為consul中的每個要expose到外部的catelog service定義一個server block(對應的域名為your_svc.tonybai.com)和一個upstream block。

對上面的模板做簡單的解析,弄明白三點,模板基本就全明白了:

  • {{- range services -}}: 標準的{{ range pipeline }}模板語法,services這個pipeline的調用相當于: curl localhost:8500/v1/catalog/services,即獲取catelog services列表。這個列表中的每項僅有Name和Tags兩個字段可用。
  • {{- if in .Tags “http” -}}:判斷語句,即如果Tags字段中有http這個tag,那么則暴露該catelog service。
  • {{range $service}}: 也是標準的{{ range pipeline }}模板語法,$service這個pipeline調用相當于curl localhost:8500/v1/catalog/service/xxxx,即獲取某個service xxx的詳細信息,包括Address、Port、Tag、Meta等。

接下來,我們在consul-1和consul-2上啟動consul-template:

consul-1: # nohup consul-template -template "/root/consul-install/templates/nginx.conf.template:/etc/nginx/nginx.conf:nginx -s reload" > consul-template.log & 2>&1consul-2: # nohup consul-template -template "/root/consul-install/templates/nginx.conf.template:/etc/nginx/nginx.conf:nginx -s reload" > consul-template.log & 2>&1

查看/etc/nginx/nginx.conf,你會發現http server config下面并沒有生成任何配置,因為consul集群中還沒有滿足Tag條件的service(包含tag “http”)。現在我們就來在三個node上創建httpfront services。

# docker run --restart=always -d -l "SERVICE_NAME=httpfront" -l "SERVICE_TAGS=http" -P bigwhite/httpfrontservice:v1.0.0

查看生成的nginx.conf:

upstream httpfront {zone upstream-httpfront 64k;server 192.168.0.129:32769 max_fails=3 fail_timeout=60 weight=1;server 192.168.0.130:32768 max_fails=3 fail_timeout=60 weight=1;server 192.168.0.131:32768 max_fails=3 fail_timeout=60 weight=1;}server {listen 80;server_name httpfront.tonybai.com;location / {proxy_pass http://httpfront;}}

測試一下httpfront.tonybai.com(可通過修改/etc/hosts),httpfront service會調用內部服務httpbackend(通過httpbackend.service.dc1.consul:8081訪問):

# curl httpfront.tonybai.com this is httpfrontservice, version: v1.0.0, calling backendservice ok, its resp: [this is httpbackendservice, version: v1.0.0 ]

可以在各個節點上查看httpfront的日志:(通過docker logs),你會發現到httpfront.tonybai.com的請求被均衡到了各個節點上的httpfront service上了:

{GET / HTTP/1.0 1 0 map[Connection:[close] User-Agent:[curl/7.47.0] Accept:[*/*]] {} <nil> 0 [] true httpfront map[] map[] <nil> map[] 192.168.0.129:35184 / <nil> <nil> <nil> 0xc0000524c0} calling backendservice... {200 OK 200 HTTP/1.1 1 1 map[Date:[Mon, 10 Sep 2018 08:23:33 GMT] Content-Length:[44] Content-Type:[text/plain; charset=utf-8]] 0xc0000808c0 44 [] false false map[] 0xc000132600 <nil>} this is httpbackendservice, version: v1.0.0

5. 暴露外部tcp服務

我們的微服務可不僅僅有http服務的,還有直接暴露tcp socket服務的。nginx對tcp的支持是通過stream block支持的。在stream block中,我們來為每個要暴露在外面的tcp service生成server block和upstream block,這部分模板內容如下:

stream {{{- range services -}}{{$name := .Name}}{{$service := service .Name}}{{- if in .Tags "tcp" -}}upstream {{$name}} {least_conn;{{- range $service}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=30s weight=5;{{ end }}}{{end}}{{end}}{{- range services -}}{{$name := .Name}}{{$nameAndPort := $name | split "-"}}{{- if in .Tags "tcp" -}}server {listen {{ index $nameAndPort 1 }};proxy_pass {{$name}};}{{end}}{{end}} }

和之前的http服務模板相比,這里的Tag過濾詞換為了“tcp”,并且由于端口具有排他性,這里用”名字-端口”串來作為service的name以及upstream block的標識。用一個例子來演示會更加清晰。由于修改了nginx模板,在演示demo前,需要重啟一下各個consul-template。

然后我們在各個節點上啟動tcpfront service(注意服務名為tcpfront-9999,9999是tcpfrontservice expose到外部的端口):

# docker run -d --restart=always -l "SERVICE_TAGS=tcp" -l "SERVICE_NAME=tcpfront-9999" -P bigwhite/tcpfrontservice:v1.0.0

啟動后,我們查看一下生成的nginx.conf:

stream {upstream tcpfront-9999 {least_conn;server 192.168.0.129:32770 max_fails=3 fail_timeout=30s weight=5;server 192.168.0.130:32769 max_fails=3 fail_timeout=30s weight=5;server 192.168.0.131:32769 max_fails=3 fail_timeout=30s weight=5;}server {listen 9999;proxy_pass tcpfront-9999;}}

nginx對外的9999端口對應到集群內的tcpfront服務!這個tcpfront是一個echo服務,我們來測試一下:

# telnet localhost 9999 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. hello [v1.0.0]2018-09-10 08:56:15.791728641 +0000 UTC m=+531.620462772 [hello ] tonybai [v1.0.0]2018-09-10 08:56:17.658482957 +0000 UTC m=+533.487217127 [tonybai ]

基于暴露tcp服務,我們還可以實現將全透傳的https服務暴露到外部。所謂全透傳的https服務,即ssl證書配置在服務自身,而不是nginx上面。其實現方式與暴露tcp服務相似,這里就不舉例了。

?

五. 小結


以上基于consul+consul-template+registrator+nginx實現了一個基本的微服務服務發現和負載均衡框架,但要應用到生產環境還需一些進一步的考量。

關于服務治理的一些功能,consul 1.2.x版本已經加入了service mesh的support,后續在成熟后可以考慮upgrade consul cluster。

consul-template在v0.19.5中還不支持servicemeta的,但在master版本中已經支持,后續利用新版本的consul-template可以實現功能更為豐富的模板,比如實現灰度發布等。

總結

以上是生活随笔為你收集整理的基于consul实现微服务的服务发现和负载均衡的全部內容,希望文章能夠幫你解決所遇到的問題。

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

天堂av在线 | 一区二区欧美日韩 | 亚洲天堂网在线视频观看 | 五月婷婷视频 | 丝袜美腿亚洲 | 99中文字幕| 久久久久久久99精品免费观看 | 国产成人一区三区 | 一区二区中文字幕在线播放 | 国产精品孕妇 | 欧美成人xxxxx | 国产免费亚洲高清 | 中文乱幕日产无线码1区 | 婷婷丁香综合 | 久久艹久久| 精品国内自产拍在线观看视频 | 日韩av高潮 | 在线观看亚洲a | 欧美精品一区在线 | 这里只有精品视频在线观看 | 中文字幕在线播出 | 亚洲 精品在线视频 | 麻花豆传媒一二三产区 | 日韩有码欧美 | 激情深爱.com | 国产视频美女 | 日韩欧美网站 | 国产一区二区三区在线免费观看 | 人人插人人爱 | 天堂av免费在线 | 夜色资源站wwwcom | 亚洲精品xxxx | 久久国产热视频 | 久久国产美女视频 | 在线观看av大片 | 亚洲黄色区 | 特级免费毛片 | 欧美在线1区 | 国产99久久精品一区二区300 | 成人黄在线观看 | 国产日产精品一区二区三区四区的观看方式 | 欧洲精品二区 | 欧美久久久久久久久久久久久 | 99国内精品 | 亚州欧美视频 | 欧美三级在线播放 | 久久久久国产精品一区二区 | 国产精品福利无圣光在线一区 | 中文字幕麻豆 | 美女在线免费视频 | 成人精品99 | 99久久久久久久 | www婷婷 | 欧美日韩中文视频 | 久久视了| 国产真实精品久久二三区 | 国产免费久久久久 | 香蕉91视频 | 日韩精品一区二区三区免费视频观看 | 在线视频一区二区 | 干av在线| 高清中文字幕 | 99爱视频 | 成年人视频在线免费 | av电影 一区二区 | 日韩免费播放 | 免费黄色在线播放 | 日韩电影一区二区三区在线观看 | 久久夜色精品国产欧美乱极品 | 97视频在线播放 | www夜夜操| 在线观看国产成人av片 | 日韩成年视频 | 国产精品美女久久久久久久久久久 | 国产精品久久久久久久毛片 | 久久电影色 | 99免费在线观看 | 97香蕉久久超级碰碰高清版 | 人人爽人人爽人人片 | 久久久久久久久久久久久国产精品 | 日日操天天操狠狠操 | 亚州中文av | 欧美精品一区二区在线观看 | 黄p网站在线观看 | 国产精品嫩草影院99网站 | 91精品国产99久久久久久红楼 | 欧美日韩一区二区久久 | 免费观看av| 欧美精品一二三 | 亚洲高清久久久 | www.99在线观看 | 91亚洲视频在线观看 | 亚洲视频一区二区三区在线观看 | 亚洲人av免费网站 | 欧美男同视频网站 | 天天干天天草天天爽 | 国产91在线播放 | 免费av小说 | 国产精品一区二区中文字幕 | 亚洲91av| 国产精品久久久久久电影 | 欧美最猛性xxxx| 国产免费一区二区三区网站免费 | 日本激情视频中文字幕 | 成人av免费在线播放 | 中文字幕有码在线 | 狠狠干天天射 | 国产香蕉97碰碰久久人人 | 免费在线观看国产黄 | 亚洲黄色精品 | 九九热在线观看视频 | 91精品对白一区国产伦 | 色婷婷伊人 | 日本少妇久久久 | 色中色综合| 少妇自拍av| 一区二区电影在线观看 | 在线视频中文字幕一区 | 最新久久免费视频 | 99免费在线视频 | 六月丁香色婷婷 | 国产精品一区二区久久精品爱涩 | 免费av影视 | 三上悠亚一区二区在线观看 | 欧美日韩在线免费观看 | 亚洲国产精彩中文乱码av | 国产精品久免费的黄网站 | 国产精品福利久久久 | 国产蜜臀av | 亚洲综合成人专区片 | mm1313亚洲精品国产 | 99精品视频免费全部在线 | 国产精品免费在线观看视频 | 国产va精品免费观看 | 色婷婷播放 | 丁香高清视频在线看看 | 国产h在线播放 | 国产网红在线观看 | 免费观看91 | 中文av资源站 | 99视频在线精品国自产拍免费观看 | 四虎成人精品在永久免费 | 国产精品一区二区三区在线看 | 亚洲一区二区三区四区精品 | 深爱激情久久 | av中文字幕日韩 | 大荫蒂欧美视频另类xxxx | 婷婷激情五月 | 99色 | 久久美女精品 | 97热久久免费频精品99 | 福利电影久久 | 国模精品在线 | a黄色一级片 | 久久久高清 | 国产视频一区二区在线观看 | 欧美做受69| 亚洲免费精品一区二区 | 黄色在线看网站 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 欧美尹人 | 在线视频18在线视频4k | 四虎成人精品在永久免费 | 免费在线一区二区 | 波多野结衣一区三区 | av韩国在线 | 黄色片网站免费 | 韩国av电影网 | 亚洲婷婷丁香 | 久久涩涩网站 | 久久精选视频 | 国产视频一区二区三区在线 | 亚洲一区日韩在线 | 在线观看av中文字幕 | 精品国产99国产精品 | 偷拍区另类综合在线 | 国产一区观看 | h动漫中文字幕 | 久久久久久精 | 免费av在线 | 激情欧美一区二区免费视频 | 欧美激情第八页 | 亚洲蜜桃在线 | 天天干天天玩天天操 | 欧美一区在线看 | 500部大龄熟乱视频使用方法 | www久久精品 | www色com| 久久无码av一区二区三区电影网 | 亚洲国产影院av久久久久 | 欧美日韩精品网站 | 在线观看视频97 | 久久国产手机看片 | 欧美精彩视频在线观看 | 97超碰中文 | 日本公乱妇视频 | 色播激情五月 | 亚洲激情网站免费观看 | a在线视频v视频 | 热99在线| 国产高清精品在线观看 | www.91国产| 操操操日日 | 韩国三级av在线 | 天天天天天天操 | 成人天堂网 | 欧美亚洲三级 | 久久久久综合精品福利啪啪 | 一区二区三区视频在线 | 免费在线观看成年人视频 | 夜夜婷婷 | 国产一区二区在线影院 | 国产成人在线观看免费 | 免费日韩 精品中文字幕视频在线 | 精品国产一区二区三区在线观看 | 成人xxxx| 丁香5月婷婷久久 | 国产在线毛片 | 久久av网址| 国产一级淫片在线观看 | 国产三级午夜理伦三级 | 欧美老女人xx | 亚洲三级性片 | 成人免费看视频 | 在线成人免费 | 午夜丁香视频在线观看 | 色a在线观看 | 99精品免费久久久久久久久日本 | 日韩在线色 | 久av在线 | 亚洲一区二区观看 | 一级电影免费在线观看 | 久久99国产精品久久99 | 国产在线日韩 | 中文字幕久久精品亚洲乱码 | 国产在线观看 | 中文字幕日韩电影 | 国产日韩中文在线 | 亚洲一区二区天堂 | 亚洲国产电影在线观看 | 国产精品自拍在线 | 国产精品麻豆视频 | 91成人网在线播放 | 日本中文字幕一二区观 | 五月激情丁香婷婷 | 国产成人精品久久 | 午夜视频在线观看一区二区三区 | 中文字幕一区二区三区四区视频 | 欧美国产日韩一区二区三区 | 国产精品免费不卡 | 国产成人性色生活片 | 超级碰碰免费视频 | 99精品在线直播 | 亚洲天堂香蕉 | 91亚洲视频在线观看 | 国产精品视频不卡 | 91手机电影 | 亚洲国产欧美在线人成大黄瓜 | 在线免费性生活片 | 一二区电影 | av888av.com| 国产一区二区三区午夜 | 午夜婷婷综合 | 欧美天天综合网 | 在线看黄色的网站 | 精品久久久久久久久亚洲 | 色中色亚洲 | 精品你懂的 | 国产毛片在线 | 天天操综合网 | 91久久影院 | 久草成人在线 | 国产一区在线视频观看 | 91porny九色在线播放 | 色99在线| 91日韩精品一区 | 久久成人精品电影 | 99免费观看视频 | 色中色综合 | aⅴ视频在线 | 色婷婷综合久久久久 | 日韩免费福利 | 中文字幕在线不卡国产视频 | 一级黄色大片在线观看 | 亚洲精品777 | 午夜色站 | 激情伊人五月天久久综合 | 色激情在线 | 亚洲精品在线观 | 国产精品久久婷婷六月丁香 | 精品美女在线视频 | 99精品视频精品精品视频 | 在线日韩一区 | 精品国产乱码久久久久久1区2匹 | 日韩在线电影 | 黄色小网站在线观看 | 99热99| 亚洲免费精品视频 | 免费看一级特黄a大片 | 日韩欧美大片免费观看 | 国产成人一级 | 在线97 | 国产经典三级 | 色综合天天色综合 | 九九视频精品免费 | www.久久爱.cn | 蜜臀91丨九色丨蝌蚪老版 | 久久99在线 | 久久亚洲影院 | 欧美一级片在线免费观看 | 91最新视频 | 特级a老妇做爰全过程 | 久久这里精品视频 | 国产高清一 | 中文字幕免费观看 | 亚洲资源在线网 | 国产剧情亚洲 | 亚洲精品在线视频 | 91av成人 | 在线成人一区 | 婷婷丁香导航 | 国产美女网站视频 | 亚洲国产精品视频在线观看 | 精品亚洲男同gayvideo网站 | 精品九九久久 | 国产在线观看地址 | 成人国产精品av | 欧美日韩视频 | 又色又爽又黄高潮的免费视频 | 久久九九精品久久 | 精品久久久久亚洲 | 一级做a爱片性色毛片www | 欧美999| 日本在线观看视频一区 | 午夜精品久久久久久99热明星 | 国产精品 美女 | 7777xxxx | 日韩av片无码一区二区不卡电影 | 久草免费在线观看视频 | 五月天色中色 | 亚洲 欧美变态 另类 综合 | 日韩欧美网址 | 久久人人爽av | 激情图片qvod | 久久综合久色欧美综合狠狠 | 欧美另类xxx | 久久男人中文字幕资源站 | 国内精品久久久久影院男同志 | aaa毛片视频 | 日日干天天射 | 午夜影院三级 | 在线视频成人 | 久久久久伦理电影 | 国语精品久久 | 国产精品成人国产乱 | 色天天综合网 | 欧美亚洲国产一卡 | 国产资源在线免费观看 | 国产婷婷视频在线 | 欧美久久久久 | 久久久久久97三级 | 国产精品网站一区二区三区 | 国产精品久久久精品 | 在线国产中文字幕 | 一区二区久久 | 色视频网站在线 | 国产精品免费久久久久 | 国产精品一区二区果冻传媒 | 欧美日一级片 | www.xxx.性狂虐| 81国产精品久久久久久久久久 | 西西4444www大胆无视频 | 中文字幕在线专区 | 色欧美综合 | 日韩av不卡在线 | 波多野结衣综合网 | 黄色毛片视频 | 欧美先锋影音 | 在线韩国电影免费观影完整版 | 国产视频高清 | 亚洲精品在线免费观看视频 | 久久精品韩国 | 精品国产乱码久久久久久久 | 欧美精品久久久久久久久久久 | www,黄视频 | 亚洲人人精品 | 91日韩精品视频 | 亚洲精品国产精品国自产在线 | www.久久免费 | 91香蕉国产 | 国产视频精品免费播放 | 国内精品免费 | 91九色成人| 亚洲精品久久在线 | 天天色天天操天天爽 | 在线中文字幕视频 | 日本在线视频网址 | 国产精品久久久久免费观看 | 天天操天天综合网 | 久久精品91视频 | 五月天婷婷在线观看视频 | 91av蜜桃| 国产精品不卡视频 | 久久久免费高清视频 | 激情开心网站 | 91成年人视频 | 天天摸天天操天天爽 | 婷婷六月丁香激情 | 亚洲四虎在线 | 欧美大片第1页 | 日韩欧美视频在线 | 日韩精品在线免费观看 | 99久久99久久精品 | 操操碰 | 国产精品 美女 | 97精品一区二区三区 | 99久高清在线观看视频99精品热在线观看视频 | 国产成人香蕉 | 在线视频欧美日韩 | 天天久久综合 | 欧美日韩一区二区久久 | 日韩av片无码一区二区不卡电影 | 久久久久久高潮国产精品视 | 97国产在线播放 | 亚洲成av片人久久久 | 国产精品久久久久永久免费观看 | 九九免费在线视频 | 五月激情婷婷丁香 | 欧美a级片网站 | 97天天综合网 | 黄色中文字幕 | 日韩大陆欧美高清视频区 | 久久久国产一区 | 超碰在线观看99 | 91av视频在线播放 | 福利电影一区二区 | 97精品在线 | 成人在线免费av | 看片黄网站| 男女视频久久久 | 麻豆一区在线观看 | 99视频在线免费 | 久久久在线视频 | 爱干视频 | 久久99爱视频 | 999精品在线 | 中文在线8资源库 | 中文字幕 在线 一 二 | 日韩激情影院 | av性网站| 免费看污片 | 久久天天躁夜夜躁狠狠躁2022 | 日韩欧美国产激情在线播放 | 91高清视频免费 | 中文字幕在线视频精品 | 国产黄色免费在线观看 | 欧美成人影音 | 激情av在线资源 | 国产精品国产三级国产专区53 | 国产中文字幕视频在线观看 | 91人人澡人人爽 | 成人免费精品 | 国产99久久九九精品免费 | 亚洲天天摸日日摸天天欢 | a视频免费| 亚洲最大av网| 一本一道久久a久久精品蜜桃 | 成人av电影免费在线观看 | 一区二区三区四区五区在线视频 | 精品国产乱码一区二区三区在线 | 999热视频 | 在线日韩中文 | 91香蕉嫩草| 久久综合电影 | 国产亚洲视频在线观看 | 久久夜夜操| 国产亚洲视频中文字幕视频 | sesese图片 | 婷婷色婷婷 | 在线观看你懂的网站 | 日韩视频一区二区在线 | www亚洲精品 | 日韩av成人 | 欧美极品xxxx | 在线观看av国产 | 国产成人在线一区 | 日本狠狠色| 69久久夜色精品国产69 | 综合久色 | 狠狠狠狠狠狠 | 懂色av一区二区三区蜜臀 | 国产97视频 | 人人爽人人乐 | 韩日三级在线 | 亚洲精品国产自产拍在线观看 | 99精品免费久久久久久久久日本 | 久久99精品久久久久久久久久久久 | 精品女同一区二区三区在线观看 | 精品在线观看视频 | 91av蜜桃| 亚洲自拍偷拍色图 | 色妞色视频一区二区三区四区 | 高清免费在线视频 | 亚洲第一区精品 | 日韩在线视频一区二区三区 | 在线免费观看黄色 | 午夜精品久久 | 午夜精品久久久久久久久久久久久久 | 456成人精品影院 | www九九热 | 超碰午夜| 99久久婷婷国产综合精品 | 色网av| av在线色 | 国产五码一区 | 91精品在线免费视频 | 免费看的黄色小视频 | 超碰在线资源 | 国产精品入口66mio女同 | 在线电影日韩 | 日韩激情一二三区 | 毛片1000部免费看 | 中文字幕黄网 | 在线欧美a | 高潮毛片无遮挡高清免费 | 精品国产免费一区二区三区五区 | 日韩高清精品一区二区 | 黄色在线看网站 | 国产午夜精品av一区二区 | 久久一区二区三区超碰国产精品 | 亚洲精品国产欧美在线观看 | 亚洲精品毛片一级91精品 | 亚洲三级在线 | 国产精品久久久毛片 | 天天天在线综合网 | 激情av资源网 | 奇人奇案qvod | 成年人视频在线免费播放 | www.久久久com | 日韩成人av在线 | www99精品 | 91传媒视频在线观看 | 日韩福利在线观看 | 国产日韩欧美网站 | 欧美精品黑人性xxxx | 亚洲视频在线免费观看 | 中文字幕电影网 | 综合色中文 | 日韩视频图片 | 亚洲激情在线观看 | 天天操天天射天天舔 | 黄色视屏免费在线观看 | 黄色电影网站在线观看 | 婷婷丁香激情综合 | 天天干.com| 国产精品99精品久久免费 | 欧美成人亚洲成人 | 日韩天天干| 国产精品网红福利 | 狠狠色丁香婷综合久久 | 精品视频专区 | 久久久久久久综合色一本 | 亚洲精品在线视频观看 | 日韩网站在线免费观看 | 国产91免费看 | 国产999精品久久久久久麻豆 | 午夜av免费| 国产成人av网站 | 激情丁香在线 | 激情五月婷婷综合网 | 日韩在线国产精品 | 日韩中文字幕a | 色婷婷天天干 | 一区二区三区在线观看免费视频 | 精品一区三区 | 999久久久久久久久6666 | 亚洲人成影院在线 | 欧洲精品亚洲精品 | 手机在线观看国产精品 | 二区三区视频 | av免费看网站 | 免费在线色 | 在线 成人 | 麻豆国产视频下载 | 免费日韩一级片 | 国产精品久久精品 | 在线观看中文av | 日韩一区在线免费观看 | 久久黄色网页 | 久久免费高清视频 | 久久久免费观看完整版 | 91成版人在线观看入口 | 中文字幕一区二区三区在线播放 | 二区在线播放 | 国产精品美女网站 | 在线观看日本高清mv视频 | 91久久影院 | 婷婷丁香社区 | 国产精品久久婷婷六月丁香 | 久久久久久免费视频 | 国产欧美精品在线观看 | 久久精品国产v日韩v亚洲 | 中文字幕在线观看免费观看 | 亚洲欧美日韩国产一区二区 | 国产成人久久77777精品 | 一区免费在线 | 在线观看不卡视频 | 97色在线观看免费视频 | 国产成人精品一区二区在线 | 免费看色网站 | 久久久久国产精品午夜一区 | 91看片一区二区三区 | 久久婷婷五月综合色丁香 | 天天插日日射 | 成年美女黄网站色大片免费看 | 国产一级视屏 | 97精品超碰一区二区三区 | 日韩三级视频 | 国产成人免费观看 | 亚洲三级av | 国产精品刺激对白麻豆99 | 久久久久久久久久伊人 | 国产精品久久久久久久久久久久午夜片 | 伊人网综合在线观看 | 九九热在线精品视频 | 五月香婷| 日韩一区二区三区免费电影 | 91重口视频 | 婷婷综合伊人 | 久草在线在线精品观看 | 久久精美视频 | 最新av中文字幕 | 日韩一区二区三免费高清在线观看 | 久久精品视频免费播放 | 日日插日日干 | 久久精品影视 | www.久久com| 麻豆av一区二区三区在线观看 | 99热精品国产 | 成年人在线看视频 | 人人干人人模 | 中文字幕网站 | 久久天天操 | 国产福利精品一区二区 | 九九在线视频免费观看 | 九九爱免费视频在线观看 | 欧美日本一区 | 免费黄色网止 | 久久99国产精品免费网站 | 探花视频在线观看免费版 | 精品主播网红福利资源观看 | 激情综合五月 | 精品人妖videos欧美人妖 | av直接看| 人人澡人人舔 | 精品99在线 | 久久艹人人 | 美国av片在线观看 | 91视频链接| 久久超碰97 | 日韩大片在线 | 99久久er热在这里只有精品66 | 超碰国产在线播放 | 午夜123 | 亚洲精品视频在线看 | 久久手机视频 | 九九免费视频 | 国产精品一区二区中文字幕 | 久久tv视频 | 午夜成人影视 | 91黄色免费网站 | 999电影免费在线观看 | 久久视频国产精品免费视频在线 | 国产精品免费成人 | 中文字幕国产一区 | 麻豆影视在线播放 | 久久成视频 | 欧美视频不卡 | 国产精品视频地址 | 午夜精品久久久久久久久久久久久久 | 91成人精品一区在线播放69 | 中文字幕资源在线观看 | 色999五月色 | 久久在线免费观看 | 91午夜精品 | 成人午夜黄色 | 99人成在线观看视频 | 黄视频网站大全 | 久久久免费在线观看 | 中文字幕在线观看免费高清电影 | 日韩欧美久久 | bbbbb女女女女女bbbbb国产 | 日韩美女av在线 | 日本丶国产丶欧美色综合 | 丁香av| 最近中文字幕视频网 | 久久久久久免费 | 久久精品小视频 | 国精产品一二三线999 | 在线看国产精品 | 99欧美| 国产中文字幕国产 | 在线亚洲观看 | 久久精品综合一区 | 99麻豆久久久国产精品免费 | 欧美日韩一级视频 | 婷婷5月激情5月 | 婷婷色九月 | 视频国产在线观看18 | 天天操综合 | 亚洲免费精品一区二区 | 五月天久久激情 | 青草视频在线 | 欧美老女人xx | 香蕉视频免费在线播放 | 欧美日韩三级在线观看 | 国产一区二区观看 | 亚洲精品视频免费看 | 人人干在线观看 | 91精品国自产在线观看欧美 | 久久黄网站 | 日韩av线观看 | 国内三级在线观看 | 国产精品欧美日韩在线观看 | 久久精品79国产精品 | 97精品国产97久久久久久 | 婷婷亚洲综合 | 永久精品视频 | 天天操天天干天天操天天干 | 综合色综合色 | 三三级黄色片之日韩 | 久99视频| 国产精品视频在线看 | 亚洲黄色成人 | 91高清免费看 | 久一久久 | 超碰97在线人人 | 美国人与动物xxxx | 日韩三级久久 | 一级精品视频在线观看宜春院 | 最近中文字幕完整高清 | 精品毛片一区二区免费看 | 91在线九色 | 国产精品久久久久久久久久久不卡 | 麻豆91精品 | 久久永久视频 | 日韩激情av在线 | 亚洲国产黄色片 | 国产精品久久久久久久久久东京 | 免费福利小视频 | 亚洲午夜精品电影 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国产日韩欧美在线影视 | 久草在线91 | 亚洲视频网站在线观看 | 99精品国自产在线 | 爱av在线网| 亚洲理论电影网 | 一区二区三区久久精品 | 欧美一进一出抽搐大尺度视频 | 国产无遮挡又黄又爽馒头漫画 | 免费观看一级视频 | 玖玖视频免费在线 | 欧美性受极品xxxx喷水 | 国产精品99精品 | 成人午夜在线电影 | 久久96国产精品久久99漫画 | 国产福利一区二区三区在线观看 | 精品一区二区三区在线播放 | 精品人人人人 | 丁香视频五月 | 99热精品免费观看 | 五月婷色 | 日韩精品视频在线观看免费 | 日韩午夜在线 | 国产精品一区免费观看 | 9草在线 | 成年美女黄网站色大片免费看 | 日韩高清dvd | 国产精品久久99精品毛片三a | 高潮久久久久久 | 日韩电影在线观看一区 | 97麻豆视频| 色综合久久88色综合天天6 | 日韩天堂在线观看 | 欧美精品小视频 | 狠狠色伊人亚洲综合成人 | 一级a性色生活片久久毛片波多野 | 亚洲天堂自拍视频 | 黄网站污 | 人人爽人人爽人人片av | 天天插伊人 | 中文区中文字幕免费看 | 国产精品视频在线观看 | 亚洲精品黄色片 | 久久婷亚洲五月一区天天躁 | 天天爽天天爽天天爽 | 91日韩精品视频 | 最近中文字幕视频网 | 超碰在线cao| 91香蕉视频在线 | 亚洲在线精品 | 97影视 | 亚洲精品456在线播放 | 91视频88av | 久久久99国产精品免费 | 国产中的精品av小宝探花 | 欧美日韩精品在线播放 | 免费日韩电影 | 久草在线资源观看 | 国产一区国产二区在线观看 | 91传媒在线| 欧美日韩精品在线观看视频 | 精品视频资源站 | 国产精品黑丝在线观看 | 91精品久久久久久粉嫩 | 日韩高清网站 | 亚洲日韩欧美一区二区在线 | 操碰av| 99久久www免费 | 91视频免费国产 | av看片网址 | 国产欧美最新羞羞视频在线观看 | 久久免费国产精品 | 日韩成人在线一区二区 | www.99久久.com | 欧美韩国日本在线观看 | 欧美日韩一区二区三区在线观看视频 | 91精品久久久久久久久久入口 | 欧美做受高潮1 | 久久99国产精品免费网站 | av青草 | 久久永久视频 | 久久久精品国产一区二区 | 国产一级二级视频 | 日韩欧美极品 | 亚洲欧美国产精品 | 三级性生活视频 | 一区二区三区四区五区六区 | 国产第一页在线播放 | 国产精品99久久久久久宅男 | 免费99视频 | 国产一区二区在线观看免费 | 国产精品一二三 | 久久久影院官网 | 婷婷丁香在线视频 | av免费在线免费观看 | 日韩视频一区二区三区在线播放免费观看 | 久久九九久久精品 | 香蕉一区 | 日本少妇久久久 | 欧美一区在线观看视频 | 五月天.com | 欧美精品三级 | 最近更新中文字幕 | 亚洲a成人v | 久久av一区二区三区亚洲 | 一二区精品 | 99在线视频观看 | 中文在线中文a | 久久久久日本精品一区二区三区 | av福利电影 | 天天干天天拍天天操 | 亚洲一区美女视频在线观看免费 | 日本久久不卡视频 | 在线国产激情视频 | 亚洲精品www久久久久久 | zzijzzij亚洲日本少妇熟睡 | 久久五月婷婷丁香社区 | 麻豆观看 | 亚洲成a人片在线www | 久久国产免费看 | 激情喷水 | 国产精品美女久久久网av | 国产精品午夜8888 | 久草视频播放 | 91大神视频网站 | 美女视频黄色免费 | 亚洲精品视频在线观看网站 | 91在线看片 | 天堂中文在线播放 | 999久久久免费精品国产 | 欧美日韩另类在线 | 久久综合电影 | 国产精品久久久久久久久久东京 | 99久久99久久精品国产片 | 国产99区| 亚洲91中文字幕无线码三区 | 亚洲最大激情中文字幕 | 欧美午夜精品久久久久久浪潮 | 特级西西444www大精品视频免费看 | 最新av免费在线观看 | 午夜在线观看影院 | 亚洲国产精品va在线看黑人动漫 | 精品久久久久久久久久久久久久久久 | 精品福利片 | 日韩综合精品 | 久久国产色 | 亚洲在线激情 | 中国成人一区 | 天天人人 | 激情综合网色播五月 | 97超碰在线久草超碰在线观看 | av一级片| 麻豆视频免费入口 | 视频在线观看一区 | 久久字幕 | 久久精品免费观看 | 探花系列在线 | 黄色网在线播放 | 欧美地下肉体性派对 | 午夜国产成人 | 91精品国产三级a在线观看 | 92国产精品久久久久首页 | 天天天色 | 亚洲天堂网在线视频 | 日本精品一区二区三区在线播放视频 | av黄色免费看 | 91麻豆精品国产91久久久更新时间 | 久久再线视频 | 99色亚洲 | 超碰97在线资源站 | 国产精品久久久久免费 | 少妇bbbb | 中文字幕日韩电影 | 欧美在线aaa | 99国产精品| 免费av高清 | 日韩a在线 | 天天干天天干天天 | 亚洲综合在线播放 | 99精彩视频在线观看免费 | 成人aⅴ视频 | 欧美成人免费在线 | 激情视频一区二区三区 | 久草视频一区 | 一区二区三区手机在线观看 | 久草视频免费 | 国产精品午夜av | 久久av中文字幕片 | 国产一级二级在线播放 | 国内三级在线 | 欧美日韩性生活 | 国内精品视频久久 | 你操综合| 最新真实国产在线视频 | 欧美成人a在线 | 最近能播放的中文字幕 | 国产涩涩在线观看 | 久久女同性恋中文字幕 | 亚洲国产日韩欧美 | 日韩av播放在线 | 欧美一级爽| 中国一级片在线观看 | 91香蕉国产 | 免费av网址大全 | 九色精品在线 | 四虎影视成人永久免费观看亚洲欧美 | 国产高清永久免费 | 日韩在线视频二区 | 欧美日韩在线播放一区 | 婷婷激情综合网 | 天天干天天操av | 中文十次啦 | 欧美另类重口 | 91精彩在线视频 | 久久se视频 | 在线有码中文字幕 | 久久国产视屏 | 精品国产一区二区三区男人吃奶 | 久久久在线免费观看 | 国产精品不卡av | 久久国产电影 | 91黄视频在线观看 | 久久人91精品久久久久久不卡 | 亚洲小视频在线观看 | 超碰97免费观看 | 亚洲综合小说 | 免费看色网站 | 久久久伦理 | 超碰精品在线观看 | 成年人看片网站 | 日本少妇久久久 | 国产在线看一区 | 久久久久久高清 | 美女视频久久黄 | 亚洲黄色av | 亚洲国产中文字幕在线 | 伊人精品在线 | 美女视频免费精品 | 国内精品亚洲 | 欧美日韩精品在线观看 | 国产成人a亚洲精品 | 久久久久久久久久久免费 | 亚洲成人精品在线观看 | 久久精选| 超碰人人干人人 | 十八岁免进欧美 |