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

Docker 圖形化界面工具 Portainer 優秀實踐

開發
本文以一個比較簡單哨兵架構的部署和應用服務接入演示了一下如何基于docker portainer管理和操作docker容器。

為了方便管理docker容器,本片文章筆者就來推薦一個筆者最常用的docker圖形化管理工具——Portainer。

一、安裝Portainer

1. 編寫docker-compose文件

Portainer部署的步驟比較簡單,我們還是以docker-compose文件的形式完成Portainer的安裝,首先我們需要需要編寫的名為portainer.yml的文件,內容如下:

version: "3"
services:
  portainer:
    image: portainer/portainer:latest
    container_name: portainer
    ports:
    - "9000:9000"
    volumes:
    - /app/portainer/data:/data
    - /var/run/docker.sock:/var/run/docker.sock

完成后,我們將這個文件上傳到我們的服務器即。

2. 初始化并配置容器

將配置文件上傳之后我們就可以嘗試啟動了,為了方便查看服務是否可以正常啟動,我們還先以前臺運行的方式啟動,到達portainer.yml文件位置,鍵入前臺啟動命令

docker-compose -f portainer.yml up

當控制臺沒有輸出錯誤,并顯示正常啟動后,我們分開服務器的9000端口,瀏覽器輸入服務器ip:9000,j即可進入Portainer初始化界面,它會要求我們配置用戶名密碼:

完成賬戶密碼初始化之后,我們點擊local進行服務器本地容器管理

此時我們就會看到local中docker的基本信息了

在步入local,我們就可以按需管理容器、鏡像、網絡等配置信息。我們不妨點擊containers查看我們服務器中當前運行的docker容器。

可以看到我們docker中容器的運行情況,由于portainer涉及操作很多,筆者這里就不一一演示了,感興趣的讀者可以自行查閱portainer官方文檔https://www.portainer.io/take-5

到上述步驟我們已經可以確定portainer安裝基本成功了,我們可以回到服務器將portainer后臺啟動,正式使用portainer了。

docker-compose -f portainer.yml up -d

二、基于Portainer演示redis-sentinel部署

1. 詳解redis應用架構

讀完上述的介紹可能讀者們對Portainer還沒有一個比較清晰的了解,所以筆者在這里就基于一個redis-sentinel的部署介紹一下Portainer的日常操作步驟。

首先我們來介紹一下本次部署架構,我們會基于一臺服務器完成一主二從+三個哨兵的部署架構,最終效果是:

  • 當主節點更新數據之后,從節點數據也會進行同步。
  • 當我們將主節點手動停止之后,哨兵就會選舉出新的master繼續進行工作。

2. 安裝步驟

(1) 主從復制部署

首先我們先進性主從結構的部署,我們還是基于docker-compose創建一個名為redis-cluster.yml的文件配置一下主從信息,配置內容如下,筆者已將配置的含義都一一注釋,讀者可自行參考修改。需要注意以下兩點:

安全起見,建議讀者盡可能不要使用6379作為對外暴露的端口號,就算使用6379也盡可能設置一個安全的密碼,避免被人下挖礦程序。

當讀者復制下面的文件在服務器啟動時可能會報各種語法錯誤,所以筆者推薦的yaml格式化在地址,讀者完成配置后可以將配置粘貼到這個網站完成自動格式化。,這樣可以避免啟動時報一些沒必要的錯誤YAML格式化/美化

version: '3'
services:
  # 主節點
  master:
    image: redis
    # 主節點名稱
    container_name: redis-master
    # 設置redis登錄密碼、從節點連接主節點的密碼
    command: redis-server --requirepass xxxx--masterauth xxxx
    ports:
    # 對外暴露端口號為16379
    - 16379:6379
  # 從節點
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
    # 對外暴露端口號為16380
    - 16380:6379
    # 啟動redis 從屬于容器名為 redis-master的redis,端口號為容器端口號而不是對外映射端口號,設置連接密碼,連接主節點的密碼
    command:  redis-server --slaveof redis-master 6379 --requirepass xxxx--masterauth xxxxx
  # 從節點2
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
    - 16381:6379
    command: redis-server --slaveof redis-master 6379 --requirepass xxxxx --masterauth xxxxx

完成后我們即可將配置上傳到服務器并啟動:

docker-compose -f redis-cluster.yml up

啟動完成后就可以在portainer中看到一主二從出現在containers列表中

以master為例,我們不妨點擊log查看master節點的運行情況:

從輸出可以看到master沒有輸出任何錯誤,說明master正常運行了。

在確認每個容器都能正常啟動之后,我們不妨嘗試在master節點寫入一些數據測試一下主從節點同步功能是否正常。 在沒有portainer之前,我們進入docker容器內容用的都是使用docker exec -it 容器id bash/sh命令,有了portainer之后,我們進入容器的操作就變得非常簡單了。

回到容器列表,點擊redis-master進入容器管理界面:

點擊console,進入容器終端連接界面:

點擊connect連接進入容器:

然后我們就進入的容器內部,嘗試使用redis-cli認證并設置一個kv值。

完成上述步驟后,我們到達從節點的容器內部查閱數據可以發現,主節點數據確實同步過來了,自此我們主從復制部署基本完成。

(2) 創建redis-sentinel專用網絡驅動

為了確保redis-sentinel可以統一管理且和其他容器隔離,我們在部署sentinel之前需要基于Portainer創建一個自定義的brige網絡。

什么是brige網絡呢?其實docker容器中有以下幾種網絡驅動類型,不同的網絡驅動類型可以使得容器和宿主機有著不同的網絡關聯:

  • host: 使用docker宿主機網絡
  • bridge: 該網絡支持在同一個宿主機上的各個容器實例之間的通信。bridge網絡是一個獨立的網絡空間,在網絡空間內部的各個容器實例能夠直接通信。
  • none: 是一個完全隔離的自治網絡,甚至與Docker宿主機的網絡都不通,必須手工配置網卡后才能夠使用。加入到該網絡的容器實例,往往要在后續設置中加入到其他的第三方網絡。
  • overlay:該類型的網絡適用于Docker宿主機集群中的各個獨立的容器實例之間通信。
  • macvlan:該類型的網絡適用于容器實例需要與宿主機的MAC地址直接通信,無需端口映射,也無需NAT,容器實例的eth0直接與宿主機的物理網卡通信。容器實例可以被賦予公共IP,并從宿主機外部直接訪問。

所以我們這里就希望創建一個名為redis-sentinel的bridge網絡將主從和哨兵節點關聯起來,并且和docker中的其他容器隔離開:

所以我們按照點擊network,選擇add network進行自定義網絡創建:

輸入名稱為redis-sentinel,其余默認,然后直接點擊:

然后直接點擊create the network:

然后我們就可以在network列表中看到我們配置的network,自此網絡redis專用橋接網絡配置完成。

重點來了,我們的redis主從節點現在都處于默認的網絡驅動中,我們必須手動將其配置到redis-sentinel網絡中,當然有了portainer,這種操作也不會很難。 我們只需要點擊容器列表,找到我們的主動節點容器,然后分別進入他們的管理列表最下方,找到network選項,在network列表中找到redis-sentinel選擇join network即可。

(3) 創建哨兵

接下來就可以配置哨兵節點了,首先自然是創建一個名為redis-sentinel.yml的docker-compose文件配置3個哨兵:

version: '3'
services:
  sentinel1:
    image: redis
    # 容器名稱
    container_name: redis-sentinel-1
    ports:
      # 端口映射
    - 26379:26379
    # 啟動redis哨兵
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    # 哨兵1的sentinel.conf和宿主文件位置映射
    - /app/cloud/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - /app/cloud/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
    - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - /app/cloud/redis/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
# 重點,將3個哨兵加入到redis-sentinel和主從節點建立聯系
networks:
default:
    external:
      name: redis-sentinel

從配置文件中可以看出筆者將哨兵文件和宿主文件進行關聯,所以我們需要按照上面配置在app/cloud/redis/sentinel/文件夾下創建3個哨兵的配置文件sentinel.conf。

哨兵1的配置文件如下,其余哨兵配置同理,只需按需修改ip和端口號即可:

port 26379
dir /tmp
# master節點在bridge網絡中的ip值
sentinel monitor redis-master 172.20.0.2 6379 2
# master節點密碼
sentinel auth-pass redis-master xxxxx
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes

可以看到筆者將master節點命名為redis-master,然后網絡配置為172.20.0.2這個值是從哪里來的呢?很簡單,我們點擊redis-master即redis主節點那個容器管理界面,到達最下方,就可以在ip address一欄看到master節點的容器ip地址,因為哨兵節點和主從節點都處于redis-sentinel這個網絡中,所以170.20.0.x這個網絡是互通的,在bridge模式下配置這個ip地址是完全沒有問題的。

完成上述步驟后我們就可以將哨兵啟動:

docker-compose -f  redis-sentinel.yml up

此時我們點擊任意一個哨兵節點都可以看到,哨兵的狀態信息,自此哨兵也部署完成了。

(4) 測試可用性

此時我們就可以測試哨兵是否正常工作了,我們的測試用例很簡單,我們將master關閉掉,查看哨兵是否會選舉出新的master頂上。

在測試前我們首先進入master容器輸入info replication查看master容器中的redis是否為主節點:

再查看另外兩個幾點是否身份是否確屬從節點。

從節點1控制臺輸出,確實屬于從節點:

從節點2控制臺信息:

我們通過portainer圖形界面將redis-master關閉。

點入任意一個哨兵日志,可以看到它監控到主節點下線,并快速選舉出一個新的節點作為master上線:

我們根據ip地址172.20.0.3定位到是slave2這個redis,我們進入容器查看其身份,確實變為master。

自此我們的redis-sentinel部署完成了。

三、基于java應用操作容器內部的redis實例

為了保證docker環境下部署的完整性,接下來我們就希望本地的web應用可以通過Redis Sentinel架構操作redis。

在Sentinel架構下我們操作redis集群可直接通過sentinel節點操作master,通過訪問sentinel獲取可用的master地址,然后就可以把操作提交到master中。

1. 修改哨兵配置文件

由于操作master節點需要經歷: 向sentinel詢問master地址->根據sentinel返回信息操作master,這就意味的哨兵返回的master地址信息必須是可訪問的。而我們上文中的sentinel.conf配置的都是docker容器的內網地址,我們的web服務是外網訪問,是無法和內網容器連接的。

所以我們必須修改上文關于哨兵的配置文件sentinel1.conf、sentinel2.conf、sentinel3.conf。

以sentinel1.conf為例,將redis-master的ip地址改為docker配置映射的外網ip,確保返回的master地址信息,對我們本地服務是可以訪問的。

port 26379
dir /tmp
# master節點ip
sentinel monitor redis-master 外網ip 16379 2
# master節點密碼
sentinel auth-pass redis-master 密碼
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes

完成后到portainer中重啟哨兵:

2. Spring Boot應用集成依賴

我們引入Spring Boot關于Redis的腳手架以及lettuce連接池。這里擴展一下我們為什么添加lettuce連接池的依賴,Lettuce 和 Jedis 的都是連接Redis Server的客戶端程序。但是Jedis在實現上是直連redis server,多線程環境下非線程安全,除非使用連接池,為每個Jedis實例增加物理連接。而Lettuce基于Netty的連接實例,可以在多個線程間并發訪問,且線程安全,滿足多線程環境下的并發訪問,同時它是可伸縮的設計,一個連接實例不夠的情況也可以按需增加連接實例。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- lettuce pool 緩存連接池 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.5.0</version>
        </dependency>

3. 注冊中心配置redis參數

引入redis-starter配置之后,我們就可以配置Redis了。大部分讀者配置這些參數可能都是直接cv網上配置進行修改,其實在spring boot項目中,由于starter的自動裝配機制,我們完全可以通過源碼得出需要配置的內容。

從上文依賴中已經表明筆者需要用到lettuce 操作Redis客戶端,所以我們可以到spring boot自動配置包中找到關于lettuce pool的配置類LettuceConnectionConfiguration。

在LettuceConnectionConfiguration找到關于客戶端連接配置的Bean方法,可以看到其配置獲取順序是:sentinel(哨兵)->cluster(集群)->Standalone(單機)

@Bean
 @ConditionalOnMissingBean(RedisConnectionFactory.class)
 public LettuceConnectionFactory redisConnectionFactory(ClientResources clientResources)
   throws UnknownHostException {
  ....略

//創建連接工廠
return createLettuceConnectionFactory(clientConfig);
 }

private LettuceConnectionFactory createLettuceConnectionFactory(LettuceClientConfiguration clientConfiguration) {
//有sentinel則創建sentinel配置工廠
if (getSentinelConfig() != null) {
   returnnew LettuceConnectionFactory(getSentinelConfig(), clientConfiguration);
  }
//有cluster配置則取cluster創建cluster連接工廠
if (getClusterConfiguration() != null) {
   returnnew LettuceConnectionFactory(getClusterConfiguration(), clientConfiguration);
  }
//默認配置
returnnew LettuceConnectionFactory(getStandaloneConfig(), clientConfiguration);
 }

我們不如getSentinelConfig()方法細節中即可定位到sentinel配置的對象RedisSentinelConfiguration,然后就可以根據每個成員變量的調用定位到該配置文件文件的配置格式:

以master為例,通過對RedisSentinelConfiguration全局搜索master的引用處定位到了下面這段代碼,由此可知redis配置中的master與配置文件中的spring.redis.sentinel.master相關聯。

private static Map<String, Object> asMap(String master, Set<String> sentinelHostAndPorts) {
 ........略

  Map<String, Object> map = new HashMap<>();
  //spring.redis.sentinel.master 決定master的值
  map.put(REDIS_SENTINEL_MASTER_CONFIG_PROPERTY, master);
 ........略

  return map;
 }

經過分析總結得出下面這段配置,筆者這里為了測試方便就配置了一個哨兵,需要注意的是如果哨兵和主從節點有密碼則配置中必須添加關于password的配置。

spring:
  redis:
 # master有密碼則需要配置master認證面膜
    password: xxxxx
    sentinel:
      master: redis-master
      # 多個節點用,分開,例如節點1ip:26379,節點2ip:26379
      nodes: 節點ip:26379
      password: xxxx
     # lettuce連接池配置信息
    lettuce:
      pool:
        max-idle: 10
        max-active: 20
        min-idle: 5
        max-wait: 10000ms

4. 編碼測試

我們在Controller中注入RedisTemplate 。

@Autowired
    private RedisTemplate redisTemplate;

然后編寫寫入和讀取的類,接下來就可以將服務啟動測試了,這里筆者為了測試為了能夠快速測試可用性,編寫了一個簡單的RedisStrDto 對象用于存儲string類型。

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class RedisStrDto {
    String key;
    String value;
}

然后在controller中編寫存取兩個接口。

@PostMapping("setKey")
    public ResultData<String> setKey(@RequestBody RedisStrDto redisStrDto) {
        redisTemplate.opsForValue().set(redisStrDto.getKey(),redisStrDto.getValue());
        return ResultData.success("success");
    }


    @GetMapping("getKey/{key}")
    public ResultData<Object> getKey(@PathVariable(value = "key") String key) {
        return ResultData.success(redisTemplate.opsForValue().get(key));
    }

然后我們就可以基于自己的測試工具進行請求測試了,首先先通過setKey插入數據到redis中。

為了查看數據是否成功插入,這里筆者直接通過接口查詢,可以看到上一個接口插入的數據確實返回了,由此可知服務集成redis成功。

小結

本文以一個比較簡單哨兵架構的部署和應用服務接入演示了一下如何基于docker portainer管理和操作docker容器,希望對你有幫助。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2020-12-07 10:10:06

圖形化工具Portai運維

2023-03-05 16:23:15

MySQL工具

2012-09-28 10:19:32

IBMdw

2021-12-14 15:50:43

Gaphor建模工具開源

2022-02-15 09:19:55

Ubuntu 20.Grub2Linux

2010-03-05 13:31:32

Ubuntu圖形界面

2022-08-01 07:27:36

JavaDocker容器

2020-07-16 14:20:12

Docker管理工具Linux

2010-05-25 08:56:41

ubuntu Grub

2012-06-07 10:00:45

Blockly編程語言

2021-06-23 15:52:17

Docker圖形工具

2021-02-02 08:03:51

Linux圖形工具

2019-10-14 16:25:54

MySQLSQL數據庫

2019-11-27 14:00:32

MySQLphpMyAdmin電腦

2021-07-03 08:30:16

工具KongaK8S

2010-10-12 09:19:29

Navicat

2019-11-08 08:50:06

工具代碼開發

2019-12-16 12:11:53

Docker容器Kubernetes

2011-05-10 13:30:07

2019-07-21 20:08:50

工具代碼開發
點贊
收藏

51CTO技術棧公眾號

成人av电影在线观看| 免费黄色成人| 精品久久久久国产| 日本在线高清视频一区| 国产精品探花视频| 黑人一区二区| 在线视频中文亚洲| 久久久久久久久久影视| 欧美激情喷水| 亚洲影视资源网| 亚洲免费精品视频| 天天干天天插天天操| 久久国产精品99久久久久久老狼| 久久久天堂国产精品女人| 人人人妻人人澡人人爽欧美一区| 精品中文在线| 欧亚一区二区三区| 日本手机在线视频| 成人日韩欧美| 国产日韩欧美不卡在线| 国产成人精品日本亚洲11| 中文天堂在线播放| 亚洲另类自拍| 欧美精品制服第一页| 一级片视频免费看| 国产欧美三级电影| 日韩欧美另类在线| 中文字幕1234区| 日本精品在线中文字幕| 精品国产精品自拍| av在线观看地址| 韩国中文字幕在线| 9i在线看片成人免费| 99视频免费观看| 国产sm主人调教女m视频| 天堂va蜜桃一区二区三区 | 成人日韩av在线| 中文字幕一区二区人妻视频| 99精品免费视频| 欧美激情第一页xxx| 娇小11一12╳yⅹ╳毛片| 欧美男男gaytwinkfreevideos| 亚洲精品国产精品久久清纯直播| 无码国产精品一区二区高潮| 精品国产黄a∨片高清在线| 色婷婷精品大在线视频| 成人在线观看a| 日韩伦理在线| 午夜电影网亚洲视频| 欧美狂野激情性xxxx在线观| 国产剧情在线| 亚洲欧美另类小说视频| 老汉色影院首页| 日本片在线看| 亚洲午夜久久久久久久久电影院 | 最新av在线播放| 日韩美女视频19| 18视频在线观看娇喘| 呦呦在线视频| 五月天激情综合| 日韩免费视频播放| 韩国三级一区| 欧美视频自拍偷拍| 日韩成人精品视频在线观看| 国产精品一区二区三区四区在线观看| 欧美日本不卡视频| 韩国三级丰满少妇高潮| 伊人精品综合| 亚洲国产成人一区| 91激情视频在线观看| 久久综合国产| 欧美激情小视频| 天天爽夜夜爽夜夜爽精品| 乱人伦精品视频在线观看| 国产精品国内视频| 国产裸体无遮挡| 粉嫩av亚洲一区二区图片| 精品蜜桃传媒| 1pondo在线播放免费| 亚洲品质自拍视频网站| 国产96在线 | 亚洲| 欧美日韩五码| 91麻豆精品国产自产在线 | 91美女精品网站| 国产成人精品免费视频网站| 裸体丰满少妇做受久久99精品| 深夜福利在线看| 国产日韩欧美不卡| 国产一区 在线播放| 欧美va在线观看| 日韩精品一区二区三区swag| 亚洲久久久久久| 婷婷中文字幕一区| 韩剧1988在线观看免费完整版| 久久精品偷拍视频| 国产黑丝在线一区二区三区| 欧美日韩国产综合在线| 日本在线www| 午夜不卡av免费| 中文字幕第38页| 精品淫伦v久久水蜜桃| 亚洲天堂av网| 久久国产精品波多野结衣| 久久免费国产| 99影视tv| av电影在线观看| 亚洲电影激情视频网站| 欧美午夜aaaaaa免费视频| 超碰97久久国产精品牛牛| 在线观看91久久久久久| 天天操天天射天天爽| 看片的网站亚洲| 欧美亚州在线观看| 第一av在线| 欧美一级理论片| 调教驯服丰满美艳麻麻在线视频| 国产欧美日本| 成人三级在线| а√天堂官网中文在线| 精品视频在线免费看| av直播在线观看| 亚洲高清自拍| av成人免费观看| av官网在线播放| 欧美嫩在线观看| 99久久99久久精品免费看小说.| 国产视频亚洲| 国产精品伊人日日| 青青在线视频| 日韩欧美自拍偷拍| 动漫性做爰视频| 久久99最新地址| 特级西西444www大精品视频| 欧美韩国亚洲| 欧美日韩在线精品一区二区三区激情综合 | 日本在线观看| 色天使久久综合网天天| 亚洲av无码专区在线播放中文| 天天综合网网欲色| 国产精品成人久久久久| 精品推荐蜜桃传媒| 疯狂做受xxxx欧美肥白少妇 | 免费精品一区二区| 91蜜桃在线观看| 欧美丰满熟妇bbbbbb百度| **爰片久久毛片| 欧美大片免费观看| www香蕉视频| 一区二区三区日韩欧美| 中文字幕第10页| 一区二区三区在线电影| 91免费欧美精品| 黄色的视频在线免费观看| 欧美性猛交xxxx偷拍洗澡| 欧美性xxxx图片| 宅男噜噜噜66一区二区| 欧美日韩高清免费| 深夜视频一区二区| 日韩最新中文字幕电影免费看| 91精品国自产| 亚洲欧美日韩综合aⅴ视频| 麻豆网站免费观看| 国语对白精品一区二区| 国产乱码一区| 最新日韩精品| 一本一道久久a久久精品逆3p| 国产一级精品毛片| 亚洲桃色在线一区| 国产亚洲精品成人a| 伊人久久大香线蕉av超碰演员| 国产私拍一区| 国产成人精品一区二三区在线观看 | 精品久久久久久久| 成人黄色中文字幕| 伦理在线一区| 亚洲色图偷窥自拍| 国产又大又黑又粗| 亚洲一区二区三区不卡国产欧美| 奇米777第四色| 久久伊人亚洲| 在线观看成人免费| 巨人精品**| 国产精品自拍偷拍| 91制片在线观看| 国产亚洲综合久久| 精品国产九九九| 婷婷综合久久一区二区三区| 欧美巨胸大乳hitomi| 国产精品一区二区久久精品爱涩| 国产3p露脸普通话对白| 欧美亚洲国产一区| wwwxx欧美| 99久久婷婷国产综合精品首页| 欧美成人精品激情在线观看| 青青久在线视频| 欧美一区二区黄| 日韩精品久久久久久免费| 亚洲免费在线视频| 中文人妻一区二区三区| 久久国产精品99精品国产 | 精品国一区二区三区| 秋霞av一区二区三区| 亚洲精选视频免费看| 成人片黄网站色大片免费毛片| 激情欧美一区二区三区在线观看| 久久久999免费视频| 亚洲理论电影网| 日本一区美女| 欧美人妖在线观看| 亚洲一区二区三区香蕉 | 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 久久九九热免费视频| 天堂v在线观看| 69成人精品免费视频| jizz国产在线观看| 黑人极品videos精品欧美裸| 欧美精品一区二区成人| 国产精品福利电影一区二区三区四区| free性中国hd国语露脸| 国产成人精品在线看| av亚洲天堂网| 免费观看在线综合| 成人性视频欧美一区二区三区| 在线成人黄色| 成人午夜视频在线观看免费| 亚洲精品在线观看91| 在线丝袜欧美日韩制服| 成人免费a**址| 性欧美精品一区二区三区在线播放 | www.日本精品| 亚洲国产成人av| 久久久久黄色片| 一区二区三区日本| 91高清免费观看| 亚洲天堂2016| 国产大片免费看| 亚洲欧美一区二区三区国产精品 | 国产精品欧美久久久| 亚洲wwww| 国产精品v片在线观看不卡| 在线精品亚洲欧美日韩国产| 97超级碰在线看视频免费在线看| 波多野结衣在线播放| 久久久久免费精品国产| 国产桃色电影在线播放| 欧美激情一区二区久久久| 日韩欧美一起| 欧美激情一区二区三区在线视频观看 | 国产婷婷色一区二区三区四区| 欧美深性狂猛ⅹxxx深喉 | 久久综合精品一区| 中国av一区| 小说区图片区图片区另类灬| 久久中文字幕av| 六月婷婷激情网| 在线看片欧美| 美女福利视频在线| 免费在线一区观看| 99久久99精品| 国产成人在线免费观看| 成熟妇人a片免费看网站| 99re热这里只有精品免费视频| www.超碰97| 欧美激情一二三区| 日本福利片在线观看| 亚洲资源在线观看| 天天干天天干天天干天天| 色噜噜久久综合| 国产乱人乱偷精品视频| 欧美mv和日韩mv的网站| 无码国精品一区二区免费蜜桃| 亚洲欧美国产日韩中文字幕| 在线观看麻豆| 欧美激情按摩在线| 成人开心激情| 亚洲free嫩bbb| 色先锋久久影院av| 亚洲区一区二区三区| 欧美高清一区| 久久久精品在线视频| 久久99精品国产.久久久久久| 中文字幕无码毛片免费看| 91香蕉视频mp4| 免费看特级毛片| 日韩人体视频一二区| 国产精品日韩无码| 亚洲精品99999| 日本中文字幕伦在线观看| 久久久亚洲天堂| 成人国产激情| 国产精品一区二区a| 欧美一区二区性| 国产在线xxxx| 久久99日本精品| 免费看黄色aaaaaa 片| 18成人在线观看| 一级片视频在线观看| 欧美一区二区福利视频| 久热av在线| 欧美夫妻性生活xx| 欧美在线va视频| 久久精品国产精品青草色艺| 久久中文字幕av| 欧美xxxxx在线视频| 国产黄色成人av| 99久久精品久久亚洲精品| 欧美日韩在线视频一区| 精品国自产在线观看| 亚洲天堂第二页| 免费毛片b在线观看| 不卡一卡2卡3卡4卡精品在| 日本一区二区三区视频| 国内自拍在线观看| 成人一区二区三区在线观看| 欧美日韩色视频| 欧美色中文字幕| 邻家有女韩剧在线观看国语| 国模gogo一区二区大胆私拍| www999久久| 亚洲一区二区三区免费看| 久久婷婷久久| 国产黄色三级网站| 亚洲一区二区精品久久av| 国产农村老头老太视频| 色哟哟网站入口亚洲精品| 偷拍自拍在线看| 国产尤物99| 宅男噜噜噜66一区二区| www.啪啪.com| 亚洲一区二区三区四区五区黄| aaa一区二区三区| 久久亚洲国产精品| 99视频有精品高清视频| 一区二区三区四区视频在线观看| 久热综合在线亚洲精品| 免费黄色在线视频| 日韩人体视频一二区| 邻家有女韩剧在线观看国语| 欧美一乱一性一交一视频| 四虎5151久久欧美毛片| 无码播放一区二区三区| av色综合久久天堂av综合| 日本天堂网在线观看| 精品国产三级a在线观看| 第四色日韩影片| 精品一区二区三区视频日产| 一区在线免费| 右手影院亚洲欧美| 色综合av在线| 日本综合在线| 亚洲自拍偷拍色片视频| 午夜久久福利| 污污内射在线观看一区二区少妇 | 久久精品影视| 日韩小视频在线观看| 偷拍精品精品一区二区三区| 欧美日韩在线高清| 日日骚欧美日韩| 中文字幕第69页| 欧美一区二区三区在线| 日本性爱视频在线观看| 精品无人乱码一区二区三区的优势| 国产日韩精品视频一区二区三区| 伊人网在线视频观看| 欧美唯美清纯偷拍| 黄色一级片在线观看| 成人综合电影| 欧美一级二区| 日本少妇aaa| 精品少妇一区二区三区视频免付费 | 好吊视频一区二区三区| 91禁国产网站| 成人在线免费观看网站| 日本一二三四区视频| 午夜精品aaa| 1pondo在线播放免费| 国产精品成人观看视频免费| 国产欧美另类| √天堂中文官网8在线| 亚洲第一福利在线观看| 草民电影神马电影一区二区| 亚洲精品天堂成人片av在线播放| 99久久精品国产导航| 夜夜爽8888| 91精品国产777在线观看| 99久久精品费精品国产| 久久性爱视频网站| 欧美精品自拍偷拍| 日本三级一区| 国产欧美综合一区| 国产性做久久久久久| а√天堂资源在线| 国产成人高清激情视频在线观看| 亚洲天堂免费| av网站免费在线看| 日韩免费电影网站| 国产精品美女午夜爽爽| av免费看网址| 中文字幕欧美一| 男人的天堂在线视频|