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

集群中節(jié)點(diǎn)之間健康檢查

開發(fā) 前端
當(dāng)新的節(jié)點(diǎn)加入集群或者集群中有節(jié)點(diǎn)下線了,集群之間可以通過健康檢查發(fā)現(xiàn)。健康檢查的頻率是怎么樣的?節(jié)點(diǎn)的狀態(tài)又是如何變動(dòng)的?狀態(tài)的變動(dòng)又會(huì)觸發(fā)什么動(dòng)作。帶著這些問題本文捋一捋。

[[411449]]

引言

當(dāng)新的節(jié)點(diǎn)加入集群或者集群中有節(jié)點(diǎn)下線了,集群之間可以通過健康檢查發(fā)現(xiàn)。健康檢查的頻率是怎么樣的?節(jié)點(diǎn)的狀態(tài)又是如何變動(dòng)的?狀態(tài)的變動(dòng)又會(huì)觸發(fā)什么動(dòng)作。帶著這些問題本文捋一捋。

一、內(nèi)容提要

內(nèi)容提要

健康檢查

  • Nacos節(jié)點(diǎn)會(huì)向集群其他節(jié)點(diǎn)發(fā)送健康檢查心跳,每一輪頻率為2秒
  • 當(dāng)健康檢查異常時(shí)設(shè)置為不信任「SUSPICIOUS」?fàn)顟B(tài),超過失敗最大次數(shù)3次設(shè)置為下線「DOWN」?fàn)顟B(tài)
  • 健康檢查成功設(shè)置該節(jié)點(diǎn)為科通信「UP」?fàn)顟B(tài)
  • 無論成功還是失敗當(dāng)節(jié)點(diǎn)狀態(tài)變更時(shí)均發(fā)布MembersChangeEvent事件

成員變更事件

當(dāng)集群節(jié)點(diǎn)成員變更時(shí),MemberChangeListener會(huì)收到該事件

例如回調(diào)ClusterRpcClientProxy#onEvent觸發(fā)refresh

刷新本節(jié)點(diǎn)與集群中其他節(jié)點(diǎn)的RPC狀態(tài),關(guān)閉無效的或者增加新的RPC連接

二、健康檢查

代碼翻到ServerMemberManager#onApplicationEvent,在Nacos啟動(dòng)的時(shí)候會(huì)啟動(dòng)一個(gè)定時(shí)任務(wù),第一次延遲5秒執(zhí)行,該定時(shí)任務(wù)即負(fù)責(zé)節(jié)點(diǎn)之間的心跳。

  1. @Override 
  2. public void onApplicationEvent(WebServerInitializedEvent event) { 
  3.     getSelf().setState(NodeState.UP); 
  4.     if (!EnvUtil.getStandaloneMode()) { // 注解@1 
  5.         GlobalExecutor.scheduleByCommon(this.infoReportTask, 5_000L); 
  6.     } 
  7.     EnvUtil.setPort(event.getWebServer().getPort()); 
  8.     EnvUtil.setLocalAddress(this.localAddress); 
  9.     Loggers.CLUSTER.info("This node is ready to provide external services"); 

注解@1 非單機(jī)模式延遲5秒執(zhí)行,執(zhí)行的infoReportTask為MemberInfoReportTask。

  1. public abstract class Task implements Runnable { 
  2.      
  3.     protected volatile boolean shutdown = false
  4.      
  5.     @Override 
  6.     public void run() { // 注解@2 
  7.         if (shutdown) { 
  8.             return
  9.         } 
  10.         try { 
  11.             executeBody(); 
  12.         } catch (Throwable t) { 
  13.             Loggers.CORE.error("this task execute has error : {}", ExceptionUtil.getStackTrace(t)); 
  14.         } finally { 
  15.             if (!shutdown) { 
  16.                 after(); 
  17.             } 
  18.         } 
  19.     } 
  20.    

注解@2 看下這個(gè)Task執(zhí)行邏輯,先執(zhí)行 executeBody(),執(zhí)行結(jié)束后執(zhí)行after()。

  1. class MemberInfoReportTask extends Task { 
  2.  
  3.     private final GenericType<RestResult<String>> reference = new GenericType<RestResult<String>>() { 
  4.     }; 
  5.  
  6.     private int cursor = 0; 
  7.  
  8.     @Override 
  9.     protected void executeBody() { 
  10.         // ----------注解@1 start--------------- 
  11.        // 獲取集群中除了自身以外的其他節(jié)點(diǎn)列表 
  12.         List<Member> members = ServerMemberManager.this.allMembersWithoutSelf(); 
  13.         if (members.isEmpty()) { 
  14.             return
  15.         } 
  16.         // 定義一個(gè)游標(biāo) 
  17.         this.cursor = (this.cursor + 1) % members.size(); 
  18.         // 獲取每個(gè)節(jié)信息 
  19.         Member target = members.get(cursor); 
  20.     //-----------注解@1 end----------------- 
  21.         Loggers.CLUSTER.debug("report the metadata to the node : {}", target.getAddress()); 
  22.         // 注解@2 
  23.         final String url = HttpUtils 
  24.                 .buildUrl(false, target.getAddress(), EnvUtil.getContextPath(), Commons.NACOS_CORE_CONTEXT, 
  25.                         "/cluster/report"); 
  26.         try { 
  27.            // 注解@3 
  28.             asyncRestTemplate 
  29.                     .post(url, Header.newInstance().addParam(Constants.NACOS_SERVER_HEADER, VersionUtils.version), 
  30.                             Query.EMPTY, getSelf(), reference.getType(), new Callback<String>() {  
  31.                                 @Override 
  32.                                 public void onReceive(RestResult<String> result) { // 注解@4 
  33.                                     // 注解@5 返回版本不一致 
  34.                                     if (result.getCode() == HttpStatus.NOT_IMPLEMENTED.value() 
  35.                                             || result.getCode() == HttpStatus.NOT_FOUND.value()) { 
  36.                                         // ... 
  37.                                         Member memberNew = target.copy(); 
  38.                                         if (memberNew.getAbilities() != null 
  39.                                                 && memberNew.getAbilities().getRemoteAbility() != null && memberNew 
  40.                                                 .getAbilities().getRemoteAbility().isSupportRemoteConnection()) { 
  41.                                             memberNew.getAbilities().getRemoteAbility() 
  42.                                                     .setSupportRemoteConnection(false); 
  43.                                             update(memberNew); // 更新節(jié)點(diǎn)屬性 
  44.                                         } 
  45.                                         return
  46.                                     } 
  47.                                     // 注解@6 
  48.                                     if (result.ok()) { 
  49.                                         MemberUtil.onSuccess(ServerMemberManager.this, target); 
  50.                                     } else { 
  51.                                      // 注解@7 處理失敗上報(bào) 
  52.                                         MemberUtil.onFail(ServerMemberManager.this, target); 
  53.                                     } 
  54.                                 } 
  55.  
  56.                                 @Override 
  57.                                 public void onError(Throwable throwable) { 
  58.                                    // 注解@8 處理失敗上報(bào) 
  59.                                      MemberUtil.onFail(ServerMemberManager.this, target, throwable); 
  60.                                 } 
  61.  
  62.                                 @Override 
  63.                                 public void onCancel() { 
  64.  
  65.                                 } 
  66.                             }); 
  67.         } catch (Throwable ex) { 
  68.             // ... 
  69.         } 
  70.     } 
  71.  
  72.     @Override 
  73.     protected void after() { 
  74.         GlobalExecutor.scheduleByCommon(this, 2_000L); // 注解@9 
  75.     } 

注解@1 獲取集群中除了自身以外的其他節(jié)點(diǎn)列表,通過游標(biāo)循環(huán)每個(gè)節(jié)點(diǎn)。

注解@2 構(gòu)造每個(gè)節(jié)點(diǎn)的上報(bào)url請(qǐng)求路徑為「/cluster/report」

注解@3 發(fā)起Post健康檢查請(qǐng)求,請(qǐng)求內(nèi)容為自身信息Member

注解@4 處理健康檢查返回結(jié)果,有以下三種類型

注解@5 版本過低錯(cuò)誤,這個(gè)可能在集群中版本不一致出現(xiàn)

注解@6 處理成功上報(bào),更新該節(jié)點(diǎn)member的狀態(tài)為UP表示科通信,設(shè)置失敗次數(shù)為0,并發(fā)布成員變更事件

  1. public static void onSuccess(final ServerMemberManager manager, final Member member) { 
  2.     final NodeState old = member.getState(); 
  3.     manager.getMemberAddressInfos().add(member.getAddress()); 
  4.     member.setState(NodeState.UP); // 狀態(tài)為UP可通信狀態(tài) 
  5.     member.setFailAccessCnt(0); // 失敗次數(shù)為0 
  6.     if (!Objects.equals(old, member.getState())) { 
  7.         manager.notifyMemberChange(); // 發(fā)布成員變更事件 
  8.     } 

注解@7&注解@8 均為處理失敗的上報(bào),例如:集群中一個(gè)節(jié)點(diǎn)被kill -9 殺掉后。在nacos-cluster.log日志文件中會(huì)打印如下日志,并發(fā)布成員變更事件

  1. 2021-07-0x 16:30:24,994 ERROR failed to report new info to target node : x.x.x.x:8848, error : caused: Connection refused; 
  2.  
  3. :2021-07-0x 16:30:30,995 ERROR failed to report new info to target node : x.x.x.x:8848, error : caused: Connection refused; 
  1. public static void onFail(final ServerMemberManager manager, final Member member, Throwable ex) { 
  2.     manager.getMemberAddressInfos().remove(member.getAddress()); 
  3.     final NodeState old = member.getState(); 
  4.  
  5.     // 設(shè)置該節(jié)點(diǎn)為「不信任」 
  6.     member.setState(NodeState.SUSPICIOUS); 
  7.     // 失敗次數(shù)遞增+1 
  8.     member.setFailAccessCnt(member.getFailAccessCnt() + 1); 
  9.     // 默認(rèn)最大失敗重試次數(shù)為3 
  10.     int maxFailAccessCnt = EnvUtil.getProperty("nacos.core.member.fail-access-cnt"Integer.class, 3); 
  11.  
  12.     // If the number of consecutive failures to access the target node reaches 
  13.     // a maximum, or the link request is rejected, the state is directly down 
  14.     // 超過重試次數(shù)設(shè)置節(jié)點(diǎn)狀態(tài)為「下線」 
  15.     if (member.getFailAccessCnt() > maxFailAccessCnt || StringUtils 
  16.             .containsIgnoreCase(ex.getMessage(), TARGET_MEMBER_CONNECT_REFUSE_ERRMSG)) { 
  17.         member.setState(NodeState.DOWN); 
  18.     } 
  19.  
  20.     if (!Objects.equals(old, member.getState())) { 
  21.         manager.notifyMemberChange(); // 發(fā)布成員變更事件 
  22.     } 

被kill -9 殺掉的節(jié)點(diǎn)顯示狀態(tài)為下線DOWN

注解@9 執(zhí)行完executeBody后延遲2秒繼續(xù)執(zhí)行executeBody,也就是檢查健康檢查的心跳頻率為2秒,一輪全部節(jié)點(diǎn)檢查結(jié)束后延遲2秒接著下一輪

無論檢查成功還是失敗,當(dāng)節(jié)點(diǎn)狀態(tài)變更時(shí),發(fā)布成員變更事件。

  1. if (!Objects.equals(old, member.getState())) { 
  2.     manager.notifyMemberChange(); 
  3.  
  4. void notifyMemberChange() { 
  5.     NotifyCenter.publishEvent(MembersChangeEvent.builder().members(allMembers()).build()); 

小結(jié): Nacos節(jié)點(diǎn)會(huì)向集群其他節(jié)點(diǎn)發(fā)送健康檢查心跳,每一輪頻率為2秒;當(dāng)健康檢查異常時(shí)設(shè)置為不信任「SUSPICIOUS」?fàn)顟B(tài),超過失敗最大次數(shù)3次設(shè)置為下線「DOWN」?fàn)顟B(tài);健康檢查成功設(shè)置該節(jié)點(diǎn)為科通信「UP」?fàn)顟B(tài);無論成功還是失敗當(dāng)節(jié)點(diǎn)狀態(tài)變更時(shí)均發(fā)布MembersChangeEvent事件。

三、成員變更事件

當(dāng)集群中有節(jié)點(diǎn)下線或者新節(jié)點(diǎn)上線都會(huì)通過心跳健康檢查探測(cè)對(duì)節(jié)點(diǎn)狀態(tài)進(jìn)行改變。而狀態(tài)的變更均會(huì)觸發(fā)成員變更事件MembersChangeEvent。那訂閱到這個(gè)事件干啥呢?

ClusterRpcClientProxy繼承了MemberChangeListener,當(dāng)有MembersChangeEvent事件時(shí)會(huì)回調(diào)其onEvent方法。

  1. @Override 
  2. public void onEvent(MembersChangeEvent event) { 
  3.     try { 
  4.         List<Member> members = serverMemberManager.allMembersWithoutSelf(); 
  5.         refresh(members); 
  6.     } catch (NacosException e) { 
  7.         // ... 
  8.     } 

那接著看refresh方法。

  1. private void refresh(List<Member> members) throws NacosException { 
  2.  
  3.     for (Member member : members) { 
  4.         if (MemberUtil.isSupportedLongCon(member)) { 
  5.             // 注解@10 
  6.             createRpcClientAndStart(member, ConnectionType.GRPC); 
  7.         } 
  8.     } 
  9.     Set<Map.Entry<String, RpcClient>> allClientEntrys = RpcClientFactory.getAllClientEntries(); 
  10.     Iterator<Map.Entry<String, RpcClient>> iterator = allClientEntrys.iterator(); 
  11.     List<String> newMemberKeys = members.stream().filter(a -> MemberUtil.isSupportedLongCon(a)) 
  12.             .map(a -> memberClientKey(a)).collect(Collectors.toList()); 
  13.     // 關(guān)閉舊的grpc連接 
  14.     while (iterator.hasNext()) { 
  15.         Map.Entry<String, RpcClient> next1 = iterator.next(); 
  16.         if (next1.getKey().startsWith("Cluster-") && !newMemberKeys.contains(next1.getKey())) { 
  17.             Loggers.CLUSTER.info("member leave,destroy client of member - > : {}", next1.getKey()); 
  18.             RpcClientFactory.getClient(next1.getKey()).shutdown(); 
  19.             iterator.remove(); 
  20.         } 
  21.     } 
  22.  

注解@10 為集群中每個(gè)節(jié)點(diǎn)member創(chuàng)建rcp client,在client啟動(dòng)時(shí)會(huì)先目標(biāo)節(jié)點(diǎn)發(fā)送HealthCheckRequest,如果非健康節(jié)點(diǎn)將會(huì)被移除。見RpcClient類部分代碼。

  1. boolean isHealthy = healthCheck(); 
  2. // 非健康節(jié)點(diǎn) 
  3. if (!isHealthy) { 
  4.     if (currentConnection == null) { 
  5.         continue
  6.     } 
  7.     LoggerUtils.printIfInfoEnabled(LOGGER, 
  8.             "[{}]Server healthy check fail,currentConnection={}"name
  9.             currentConnection.getConnectionId()); 
  10.     // 標(biāo)記客戶端狀態(tài)為unhealthy 
  11.     rpcClientStatus.set(RpcClientStatus.UNHEALTHY); 
  12.     // 重置ReconnectContext移除serverInfo 
  13.     reconnectContext = new ReconnectContext(nullfalse); 

這個(gè)意味著如果集群中有節(jié)點(diǎn)下線,與下線節(jié)點(diǎn)的rpc將會(huì)失效;同樣如果集群中有新節(jié)點(diǎn)加入將會(huì)建立新的rpc通道。

小結(jié): 當(dāng)集群節(jié)點(diǎn)成員變更時(shí),MemberChangeListener會(huì)收到該事件。例如回調(diào)ClusterRpcClientProxy#onEvent觸發(fā)refresh。刷新本節(jié)點(diǎn)與集群中其他節(jié)點(diǎn)的RPC狀態(tài),關(guān)閉無效的或者增加新的RPC連接。

本文轉(zhuǎn)載自微信公眾號(hào)「瓜農(nóng)老梁」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系瓜農(nóng)老梁公眾號(hào)。

 

 

責(zé)任編輯:武曉燕 來源: 瓜農(nóng)老梁
相關(guān)推薦

2023-03-03 08:19:35

KubernetesgRPC

2023-03-02 07:20:10

GRPC服務(wù)健康檢查協(xié)議

2023-03-01 08:33:37

gRPC健康檢查代碼

2017-08-25 10:20:46

Docker容器機(jī)制

2020-12-07 06:29:13

SpringBoot

2023-05-09 07:34:25

Docker健康檢查方式

2023-10-14 15:36:14

PodKubernetes

2024-02-27 17:30:11

2021-01-15 05:38:28

ASPHttp端口

2025-07-18 08:13:37

2022-09-07 09:19:49

Docker健康檢查

2021-04-18 10:34:28

Spring Clou郵件釘釘

2021-09-18 16:10:48

Spring BootJava微服務(wù)

2022-02-28 07:40:23

Nacos注冊(cè)中心客戶端

2021-08-02 07:57:03

注冊(cè)Nacos源碼

2021-07-05 06:51:41

Nacos微服務(wù)源碼

2021-09-21 16:31:56

Windows 11微軟PC健康檢查工具

2015-07-17 10:25:43

kubernetesDocker集群系統(tǒng)

2024-10-31 15:16:35

2012-08-03 11:21:50

應(yīng)用交付深信服
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲国产av一区二区三区| 久久美女免费视频| 国产精品一二三产区| 久久色在线视频| 91视频-88av| 成年人午夜视频| 99久久www免费| 亚洲精品成人久久电影| 青青草原国产在线视频| 黄页网站在线| 最新欧美精品一区二区三区| 精品国产一区二区三区免费| 国产永久免费视频| 欧美专区18| 欧美理论电影在线观看| 国产真实乱人偷精品人妻| 欧洲大片精品免费永久看nba| 色系网站成人免费| 高清欧美精品xxxxx| 日本蜜桃在线观看| 91免费看`日韩一区二区| 91欧美日韩一区| 中日韩在线观看视频| 亚洲人人精品| 久久99国产精品自在自在app| 欧美偷拍一区二区三区| 免费福利视频一区| 日韩欧美成人午夜| 日日干夜夜操s8| 超碰aⅴ人人做人人爽欧美| 亚洲综合一二三区| 在线无限看免费粉色视频| 国产资源在线观看| 99re成人在线| 国产亚洲一区二区三区在线播放| 亚洲视频在线观看免费视频| 久久国产精品久久久久久电车| 欧美大码xxxx| 国产精品精品软件男同| 精品色999| 亚洲精品自拍第一页| 亚洲午夜久久久久久久久| 亚洲一区有码| 欧美日韩激情一区| 一区二区xxx| 亚洲电影有码| 欧美日韩视频在线第一区| 免费高清在线观看免费| 最近高清中文在线字幕在线观看1| 亚洲一区二区欧美激情| 无码人妻精品一区二区蜜桃百度| 欧美jizz18性欧美| 综合av第一页| 男女啪啪的视频| 高h视频在线观看| 亚洲人成亚洲人成在线观看图片 | 国产精品免费人成网站| 色999日韩自偷自拍美女| 国产午夜在线视频| 中文文精品字幕一区二区| 亚洲v国产v| 午夜视频在线看| 国产精品国模大尺度视频| 亚洲一区高清| www视频在线看| 亚洲一二三区在线观看| 蜜臀av无码一区二区三区| 999av小视频在线| 欧美丝袜一区二区三区| 人妻无码视频一区二区三区| 精品视频在线一区二区在线| 欧美日韩和欧美的一区二区| 亚洲av无一区二区三区久久| 国产厕拍一区| 亚洲一区二区福利| 懂色av粉嫩av蜜臀av一区二区三区| 四季av一区二区三区免费观看| 久久综合免费视频| 国产香蕉在线视频| 狂野欧美一区| 91久久精品久久国产性色也91| www.国产黄色| 91在线视频网址| 亚洲国产精品一区在线观看不卡| 老司机福利在线视频| 亚洲午夜成aⅴ人片| 国产精品丝袜久久久久久消防器材| 亚洲欧美在线成人| 欧美一区二区三区免费观看视频| 中文字幕一区二区三区乱码不卡| 免费久久久久久久久| 色爱精品视频一区| 99免费在线观看| 日本色综合中文字幕| 97久久夜色精品国产九色| 日韩电影网址| 亚洲天堂精品视频| 欧美a在线视频| 国产在线一区不卡| 亚洲美女激情视频| 日韩在线观看视频一区二区| 国产精品免费看| 91精品综合视频| 黄色在线免费观看大全| 亚洲女同女同女同女同女同69| 黄色影院一级片| 国产电影一区| 亚洲欧美日韩精品久久| 久久黄色小视频| 免费日韩av| 国产二区不卡| 日本三级在线视频| 色婷婷精品久久二区二区蜜臂av| 日本中文字幕精品| 日韩电影一区| 日韩美女av在线免费观看| 亚洲成人精品女人久久久| 亚洲国产精品高清| 日本免费不卡一区二区| 欧美大片91| 自拍偷拍亚洲一区| 亚洲黄色激情视频| 国产69精品一区二区亚洲孕妇| 亚洲韩国在线| 国产精品一区二区av影院萌芽| 欧美成人bangbros| 卡通动漫亚洲综合| 美女一区二区久久| 色噜噜狠狠色综合网| 一本大道亚洲视频| 精品日韩欧美一区二区| 天天综合网久久| 九九在线高清精品视频| 性欧美亚洲xxxx乳在线观看| jizz中国少妇| 中文字幕一区不卡| 一路向西2在线观看| 亚洲盗摄视频| 欧美亚洲视频一区二区| 日本高清视频免费观看| 亚洲综合一区二区三区| 麻豆免费在线观看视频| 一区二区中文字| 国产日韩欧美在线| 国产在线观看免费| 91久久精品午夜一区二区| 不卡一区二区在线观看| 国产精品免费看| 久久久综合亚洲91久久98| 24小时免费看片在线观看| 欧美精品一区二区三区高清aⅴ | 日韩一区二区在线| 国产精品亚洲自拍| 91精彩视频在线播放| 色先锋资源久久综合| 国产av自拍一区| 日日欢夜夜爽一区| 日韩理论片在线观看| 成人深夜福利| 北条麻妃99精品青青久久| 国产精品国产三级国产普通话对白 | 成人春色激情网| 久久黄色美女电影| 日韩欧美一级特黄在线播放| 国产亚洲欧美精品久久久久久| 国产成人免费av在线| 免费成人午夜视频| 国产九一精品| 91免费精品视频| 国产蜜臀在线| 亚洲精品一区二区网址| 中文字幕精品在线观看| 亚洲天堂a在线| 国产精品亚洲一区二区无码| 亚洲一区不卡| 亚洲人成人77777线观看| 99精品视频在线免费播放| 欧美国产日韩一区| 青青草在线免费观看| 欧美三级蜜桃2在线观看| 中文字幕五月天| 94色蜜桃网一区二区三区| 天天操天天爽天天射| 亚洲乱码精品| 国产一区二区在线观看免费播放| 欧美极品免费| 欧美成人免费大片| 亚洲欧美日韩成人在线| 欧美三区在线视频| 国产一卡二卡在线播放| 久久精品亚洲国产奇米99| 亚洲男人天堂2021| 一区二区三区国产在线| 一区二区日本伦理| 伦理一区二区| 91在线高清免费观看| 国产一二三在线| www.日韩视频| 日韩电影网址| 日韩一级二级三级精品视频| 久久久久99精品成人片我成大片| 亚洲欧美福利一区二区| 69视频在线观看免费| 国产91精品一区二区麻豆网站 | 欧美大电影免费观看| 美女av一区二区三区 | 国产亚洲欧美在线视频| 一区二区三区四区在线观看国产日韩| 欧美日韩在线观看一区| 亚洲网一区二区三区| 国产精品高潮视频| 九色porny丨国产首页在线| 久久夜色精品国产欧美乱| 阿v免费在线观看| 日韩成人激情在线| 99久久亚洲精品日本无码| 在线看日韩精品电影| 国产一级中文字幕| 亚洲激情自拍偷拍| 刘亦菲国产毛片bd| 久久午夜电影网| 亚洲成av人片在线观看无| 九九九久久久精品| wwwwxxxx日韩| 天堂一区二区在线| www黄色av| 性xx色xx综合久久久xx| av免费观看国产| 欧美在线首页| 国产卡一卡二在线| 久久激情电影| 亚洲国产精品www| 成人综合一区| 日韩欧美电影一区二区| 日本韩国欧美超级黄在线观看| 99精品国产高清在线观看| www欧美在线观看| 国产深夜精品福利| 欧美一级做a| 国产精品无码专区在线观看| 欧美日韩国产网站| 国产精品第3页| 在线看欧美视频| 国产精品99久久久久久www| 国产日韩电影| 秋霞午夜一区二区| 女生影院久久| 国产精品成av人在线视午夜片| 日韩精品专区| 国产精品久久久久久久久借妻| 中文字幕日本一区二区| 国产成人免费av| 成人福利片在线| 国产专区精品视频| 欧美黄视频在线观看| 99免费在线观看视频| 玖玖玖免费嫩草在线影院一区| 精品国产免费人成电影在线观... 精品国产免费久久久久久尖叫 | 久久国产电影| 麻豆一区二区三区在线观看| 亚洲欧洲中文字幕| 国产精品视频网站在线观看 | 中文字幕一区二区日韩精品绯色| 免费看特级毛片| 亚洲一区av在线| 影音先锋在线国产| 欧美日韩久久一区| 国产毛片毛片毛片毛片毛片| 精品欧美乱码久久久久久1区2区| 免费看日韩av| 国产一区二区美女视频| 秋霞影院午夜丰满少妇在线视频| 欧美日韩成人在线视频| 久草在线中文最新视频| 国产精品第二页| 日韩视频一区二区三区四区| 久久精品国产美女| 91亚洲国产| 91免费黄视频| 青青青伊人色综合久久| 精产国品一区二区三区| 91免费观看在线| 欧美日韩黄色网| 婷婷久久综合九色综合伊人色| 国产一区二区视频免费| 91精品国产乱| 四虎影院在线域名免费观看| 少妇久久久久久| 高清视频在线观看三级| 国产精品一区av| 国产亚洲成av人片在线观黄桃| 日韩免费毛片| 好看不卡的中文字幕| 欧美一级黄色影院| 国产不卡视频在线观看| x88av在线| 一区二区欧美精品| 欧美在线视频精品| 亚洲成人黄色在线观看| 中文日本在线观看| 3344国产精品免费看| 亚洲二区av| 欧美主播一区二区三区美女 久久精品人 | 亚洲激情视频网站| 九七电影韩国女主播在线观看| 欧美在线免费视频| 精品国产不卡一区二区| 日本一区精品| 在线午夜精品| 性生活一级大片| 国产精品美女一区二区三区| 五月婷婷视频在线| 欧美videos大乳护士334| 午夜伦理在线| 国产精品高清在线观看| 婷婷成人在线| 秋霞无码一区二区| 国产精品99久久久久久宅男| av免费播放网站| 欧美性xxxxhd| 熟妇人妻一区二区三区四区| 欧美精品在线极品| 欧美亚洲二区| 相泽南亚洲一区二区在线播放| 亚洲欧美大片| 亚洲少妇18p| 亚洲国产综合91精品麻豆| 精品二区在线观看| www.亚洲男人天堂| 免费一级欧美在线观看视频| 欧美在线一二三区| 日日欢夜夜爽一区| 一区二区三区四区免费| 欧美视频国产精品| 日韩亚洲视频在线观看| 韩国三级日本三级少妇99| 国产成人夜色高潮福利影视| 黄色片免费在线观看视频| 国产精品中文字幕欧美| 国产激情无码一区二区三区| 91超碰这里只有精品国产| 尤物在线视频| 成人春色激情网| **女人18毛片一区二区| 国产又粗又猛大又黄又爽| 亚洲精品视频在线| 午夜精品久久久久久久爽| 欧美激情一区二区三区成人| www.国产精品一区| 被灌满精子的波多野结衣| 成人动漫av在线| 中日韩精品视频在线观看| 日韩精品亚洲视频| 亚洲1234区| 日韩久久久久久久| 久久电影网站中文字幕| 国产中文av在线| 日韩一本二本av| 成人免费网站观看| 久久偷窥视频| 日韩av中文在线观看| 林心如三级全黄裸体| 正在播放亚洲一区| 色婷婷视频在线观看| 韩国成人av| 久久人人超碰| 99热在线观看精品| 欧美成人三级在线| 亚洲涩涩在线| 亚洲精品永久www嫩草| 国产精品系列在线观看| 日韩大片免费在线观看| 亚洲人成网站999久久久综合| 国产亚洲精彩久久| 天堂а√在线中文在线| 91天堂素人约啪| 又骚又黄的视频| 欧美高跟鞋交xxxxxhd| 亚洲欧洲色图| 亚洲av无日韩毛片久久| 午夜一区二区三区视频| 国产日韩精品在线看| 91一区二区三区| 日韩电影免费一区| 免费麻豆国产一区二区三区四区| 日韩精品免费观看| 亚洲高清影院| 黄色影院一级片| 亚洲精品国产第一综合99久久| 亚洲欧洲国产综合| 成人乱人伦精品视频在线观看| 亚洲激情视频| 中文字幕观看av| 日韩精品视频在线观看网址| 热久久久久久| 欧美亚洲国产成人| 一区二区三区四区蜜桃| 福利在线午夜| 精品国产一二| 国产精品一区二区视频|