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

Mongodb源碼分析之Mongos分析

數據庫 其他數據庫 MongoDB
MongoDB提供了auto-sharding 功能。因為其是auto-sharding,即mongodb通過mongos(一個自動分片模塊,用于構建一個大規模的可擴展的數據庫集群,這個集群可以并入動態增加的機器)自動建立一個水平擴展的數據庫集群系統,將數據庫分表存儲在sharding的各個節點上。

MongoDB提供了auto-sharding 功能。因為其是auto-sharding,即mongodb通過mongos(一個自動分片模塊,用于構建一個大規模的可擴展的數據庫集群,這個集群可以并入動態增加的機器)自動建立一個水平擴展的數據庫集群系統,將數據庫分表存儲在sharding的各個節點上。

一個mongodb集群包括一些shards(包括一些mongod進程),mongos路由進程,一個或多個config服務器

下面是一些相關詞匯說明:

Shards : 每一個shard包括一個或多個服務和存儲數據的mongod進程(mongod是MongoDB數據的核心進程)典型的每個shard開啟多個服務來提高服務的可用性。這些服務/mongod進程在shard中組成一個復制集

Chunks: Chunk是一個來自特殊集合中的一個數據范圍,(collection,minKey,maxKey)描敘一個chunk,它介于minKey和maxKey范圍之間。例如chunks 的maxsize大小是100M,如果一個文件達到或超過這個范圍時,會被切分到2個新的chunks中。當一個shard的數據過量時,chunks將會被遷移到其他的shards上。同樣,chunks也可以遷移到其他的shards上

Config Servers : Config服務器存儲著集群的metadata信息,包括每個服務器,每個shard的基本信息和chunk信息Config服務器主要存儲的是chunk信息。每一個config服務器都復制了完整的chunk信息。

今天要介紹的源碼主要是Mongos的主入口函數的執行流程,首先我們打開Mongos的項目(可通過打開源碼db\db_10.sln加載所有項目),如下圖:

 

注:如果要調試mongos,需要設置一個mongod進程和一個Config Server,形如:

d:\mongodb>bin>mongod --dbpath d:\mongodb\db\ --port 27012

d:\mongodb>bin>mongod --configsvr --dbpath d:\mongodb\db\ --port 27022

然后在vs2010中配置相應的boost路徑信息及啟動參數信息,如下圖:

 

 

 

#p#

下面開始正文。首先打開mongos項目中的server.cpp文件,找到下面方法:

  1. int main(int argc, char* argv[]) {  
  2.     try {  
  3.         return _main(argc, argv);  
  4.     }  
  5.     catch(DBException& e) {  
  6.         cout << "uncaught exception in mongos main:" << endl;  
  7.         cout << e.toString() << endl;  
  8.     }  
  9.     catch(std::exception& e) {  
  10.         cout << "uncaught exception in mongos main:" << endl;  
  11.         cout << e.what() << endl;  
  12.     }  
  13.     catch(...) {  
  14.         cout << "uncaught exception in mongos main" << endl;  
  15.     }  
  16.     return 20;  

該方法是mongos的主函數,代碼很簡,它主要是try方式執行_main方法,下面是_main的執行流程:

  1. int _main(int argc, char* argv[]) {  
  2.     static StaticObserver staticObserver;  
  3.     mongosCommand = argv[0];  
  4.     //聲明options信息描述對象  
  5.     po::options_description options("General options");  
  6.     po::options_description sharding_options("Sharding options");  
  7.     po::options_description hidden("Hidden options");  
  8.     po::positional_options_description positional;  
  9.     CmdLine::addGlobalOptions( options , hidden );  
  10.     //添加sharding選項描述信息  
  11.     sharding_options.add_options()  
  12.     ( "configdb" , po::value() , "1 or 3 comma separated config servers" )  
  13.     ( "test" , "just run unit tests" )  
  14.     ( "upgrade" , "upgrade meta data version" )  
  15.     ( "chunkSize" , po::value(), "maximum amount of data per chunk" )  
  16.     ( "ipv6""enable IPv6 support (disabled by default)" )  
  17.     ( "jsonp","allow JSONP access via http (has security implications)" )  
  18.     ;  
  19.     options.add(sharding_options);  
  20.     ..... 

在完成option描述信息的初始化操作之后,下面就開始對啟動命令行參數進行分析和執行了,如下:

  1. .....  
  2.     // parse options  
  3.     po::variables_map params;  
  4.     //對argc,argv進行分析并轉換成params,以便下面使用  
  5.     if ( ! CmdLine::store( argc , argv , options , hidden , positional , params ) )  
  6.         return 0;  
  7.     // The default value may vary depending on compile options, but for mongos  
  8.     // we want durability to be disabled.  
  9.     cmdLine.dur = false;  
  10.     //如果是help  
  11.     if ( params.count( "help" ) ) {  
  12.         cout << options << endl;  
  13.         return 0;  
  14.     }  
  15.     //如果是版本信息  
  16.     if ( params.count( "version" ) ) {  
  17.         printShardingVersionInfo();  
  18.         return 0;  
  19.     }  
  20.     //如要設置chunkSize  
  21.     if ( params.count( "chunkSize" ) ) {  
  22.         Chunk::MaxChunkSize = params["chunkSize"].as() * 1024 * 1024;  
  23.     }  
  24.     ......  
  25.     //必選項,設置configdb信息  
  26.     if ( ! params.count( "configdb" ) ) {  
  27.        out() << "error: no args for --configdb" << endl;  
  28.        return 4;  
  29.     }  
  30.     vector configdbs;  
  31.     //對參數configdb進行分割 (以','分割 )  
  32.     splitStringDelim( params["configdb"].as() , &configdbs , ',' );  
  33.     //mongodb強制為1或3,具體原因不明  
  34.     if ( configdbs.size() != 1 && configdbs.size() != 3 ) {  
  35.         out() << "need either 1 or 3 configdbs" << endl;  
  36.         return 5;  
  37.     }  
  38.     // we either have a seeting were all process are in localhost or none is  
  39.     for ( vector::const_iterator it = configdbs.begin() ; it != configdbs.end() ; ++it ) {  
  40.         try {  
  41.             // 根據地址參數實例化HostAndPort對象,如地址不合法則拋出異常  
  42.             HostAndPort configAddr( *it );  
  43.             if ( it == configdbs.begin() ) {  
  44.                 grid.setAllowLocalHost( configAddr.isLocalHost() );  
  45.             }  
  46.             //不允許在configdbs出現本地地址,注:如果configdb中全部為本地地址  
  47.             //(實際用處不大)時不會執行下面if邏輯  
  48.             if ( configAddr.isLocalHost() != grid.allowLocalHost() ) {  
  49.                 out() << "cannot mix localhost and ip addresses in configdbs" << endl;  
  50.                 return 10;  
  51.             }  
  52.         }  
  53.         catch ( DBException& e) {  
  54.             out() << "configdb: " << e.what() << endl;  
  55.             return 9;  
  56.         }  
  57.     } 

上面完成了對命令行參數分析之后,接下來mongos要加載綁定幾個hook:

  1. // set some global state  
  2. //添加對鏈接池hook的綁定(shardingConnectionHook對象引用),以最終調用其onHandedOut方法  
  3. pool.addHook( &shardingConnectionHook );  
  4. //設置鏈接池名稱  
  5. pool.setName( "mongos connectionpool" );  
  6. //不設置“延遲kill游標”  
  7. DBClientConnection::setLazyKillCursor( false );  
  8. //設置當replicaSet配置修改時的hook對象(replicaSetChangey方法會更新鏈接對象信息  
  9. ReplicaSetMonitor::setConfigChangeHook( boost::bind( &ConfigServer::replicaSetChange , &configServer , _1 ) ); 

上面的hook主要是在mongos主程序啟動完成后,在運行期間執行一些數據操作時執行某些額外操作。從代碼可以看出,mongos使用了鏈接池功能以提升獲取鏈接的效率,具體實現機制我會在后緒章節中加以闡述。代碼中的ReplicaSetMonitor類為一個維護和獲取有效復制集的監視類,它提供了獲取有效master,slave 的方法。完成這一步綁定后,接著mongos就會對config server信息進行初始化和升級操作了,如下:

  1. //顯示sharding版本信息  
  2. printShardingVersionInfo();  
  3. //實始化configServer  
  4. if ( ! configServer.init( configdbs ) ) {  
  5.     cout << "couldn't resolve config db address" << endl;  
  6.     return 7;  
  7. }  
  8. if ( ! configServer.ok( true ) ) {  
  9.     cout << "configServer startup check failed" << endl;  
  10.     return 8;  
  11. }  
  12. //檢查Config版本信息(必要時進行升級操作)  
  13. int configError = configServer.checkConfigVersion( params.count( "upgrade" ) );  
  14. if ( configError ) {  
  15.     if ( configError > 0 ) {  
  16.         cout << "upgrade success!" << endl;  
  17.     }  
  18.     else {  
  19.         cout << "config server error: " << configError << endl;  
  20.     }  
  21.     return configError;  
  22. }  
  23. //重新設置config db信息(包括shard中chunk的min,lastmod信息)  
  24. configServer.reloadSettings(); 

***就是啟動偵聽服務,這里mongos啟動了兩個偵聽服務器,一個是以線程方式啟動,用于接收授權的用戶操作信息,另一個則是普遍的循環偵聽服務,用于偵聽客戶端message如下:

  1. //初始化一些Signals信息,用于處理程序退出,中斷等情況  
  2. init();  
  3. //以線程方式啟動webserver,循環偵聽授權訪問的 message信息,詳見dbwebserver.cpp文件中allowed方法  
  4. boost::thread web( boost::bind(&webServerThread, new NoAdminAccess() /* takes ownership */) );  
  5. MessageServer::Options opts;  
  6. opts.port = cmdLine.port;  
  7. opts.ipList = cmdLine.bind_ip;  
  8. start(opts);//啟動message服務器,偵聽客戶端message  
  9. dbexit( EXIT_CLEAN );  
  10. return 0; 

到這里,main代碼就介紹完了,但上面代碼段中的start才是啟動balancer來均衡各個shard間chunk的操作,所以我們接著再看一下該方法的實現:

  1. void start( const MessageServer::Options& opts ) {  
  2.     setThreadName( "mongosMain" );//設置線程名稱  
  3.     installChunkShardVersioning();//綁定chunk shard版本控制信息  
  4.     balancer.go();//均衡shard 中chunk(節點)信息,詳情參見 balance.cpp的run()方法  
  5.     cursorCache.startTimeoutThread();//對空閑(過期)游標進行清除操作  
  6.     log() << "waiting for connections on port " << cmdLine.port << endl;  
  7.     ShardedMessageHandler handler;  
  8.     MessageServer * server = createServer( opts , &handler );//構造server對象  
  9.     server->setAsTimeTracker();  
  10.     server->run();//啟動message服務  

好了,今天的內容到這里就告一段落了,在接下來的文章中,將會介紹balancer的實現方式和操作流程。

原文鏈接:http://www.cnblogs.com/daizhj/archive/2011/05/16/2022041.html

【編輯推薦】

  1. Mongodb源碼分析--內存文件映射(MMAP)
  2. 走進MongoDB的世界 展開MongoDB的學習之旅
  3. 淺析Mongodb源碼之游標Cursor
  4. 野心勃勃的NoSQL新貴 MongoDB應用實戰
  5. MongoDB與CouchDB全方位對比
責任編輯:艾婧 來源: 博客園
相關推薦

2011-05-26 16:18:51

Mongodb

2011-04-29 13:40:37

MongoDBCommand

2021-07-06 09:29:38

Cobar源碼AST

2024-06-13 07:55:19

2021-03-23 09:17:58

SpringMVCHttpServletJavaEE

2023-02-26 08:42:10

源碼demouseEffect

2012-09-20 10:07:29

Nginx源碼分析Web服務器

2011-04-25 17:15:39

MongodbMMAP

2020-07-28 08:54:39

內核通信Netlink

2022-01-06 07:06:52

KubernetesResourceAPI

2017-01-12 14:52:03

JVMFinalRefere源碼

2022-08-27 08:02:09

SQL函數語法

2009-07-08 13:22:30

JDK源碼分析Set

2022-05-30 07:36:54

vmstoragevmselect

2021-09-05 07:35:58

lifecycleAndroid組件原理

2012-09-06 10:07:26

jQuery

2014-08-26 11:11:57

AsyncHttpCl源碼分析

2011-03-15 11:33:18

iptables

2019-09-09 06:30:06

Springboot程序員開發

2023-03-17 07:53:20

K8sAPIServerKubernetes
點贊
收藏

51CTO技術棧公眾號

免费黄色av片| 亚洲精品乱码久久久久久9色| 免费在线性爱视频| 日韩av午夜在线观看| 日韩在线视频导航| 真实乱偷全部视频| 欧美黑人巨大xxxxx| 亚洲欧美一区二区三区极速播放 | 国产日韩三级在线| 96久久精品| 少妇高潮av久久久久久| 亚洲91中文字幕无线码三区| 亚洲国产成人av在线| 91九色在线观看视频| 欧美成人二区| 91麻豆国产精品久久| 成人免费av| 欧美疯狂性受xxxxx喷水图片| 国产av人人夜夜澡人人爽麻豆| 大片免费播放在线视频| 成人性生交大片| 国产综合视频在线观看| 亚洲欧美偷拍一区| 亚洲网址在线| 久久伊人精品一区二区三区| 波多野结衣 在线| 大桥未久女教师av一区二区| 91麻豆精品国产| 欧美午夜性生活| 岛国在线视频网站| 一区二区三区四区精品在线视频| 亚欧洲精品在线视频免费观看| 神马一区二区三区| 国产成人一区在线| 成人做爽爽免费视频| 久久久999久久久| 妖精视频成人观看www| 九九热精品视频在线播放| 蜜桃av免费在线观看| 欧美激情在线精品一区二区三区| 亚洲第一视频网| 日本wwwxx| 精品99re| 91精品欧美综合在线观看最新| 国产男女激情视频| 不卡av影片| 色综合网色综合| 99蜜桃臀久久久欧美精品网站| 久久青草伊人| 精品久久久久久久中文字幕| 久激情内射婷内射蜜桃| 2020国产在线| 精品福利在线视频| 日韩欧美在线播放视频| gay欧美网站| 日韩欧美黄色动漫| 激情av一区二区| 中文精品一区二区三区 | 99re视频精品| 精品在线视频一区二区| 图片区 小说区 区 亚洲五月| 国产91丝袜在线播放| 国产91视觉| 四虎在线视频免费观看| 91日韩一区二区三区| 久久99精品久久久久久秒播放器| 五月婷婷六月丁香| 国产午夜精品久久久久久免费视 | 亚洲综合日韩中文字幕v在线| 国产视频在线免费观看| 成人精品免费看| 久久久99爱| 成年人视频免费在线观看| 国产精品理论在线观看| 成人免费在线视频播放| 国产99在线| 欧美在线影院一区二区| 激情黄色小视频| 57pao国产一区二区| 亚洲大尺度美女在线| 性高潮久久久久久久| 日韩在线不卡| 久久久女人电视剧免费播放下载 | 久久久蜜桃一区二区人| 国产精品小说在线| 亚洲高清视频网站| 国产视频亚洲色图| 亚洲小视频在线播放| 国产精品蜜臀| 欧美无乱码久久久免费午夜一区| 久久久久久国产精品日本| 琪琪久久久久日韩精品| 日韩在线观看网址| 国产精品7777| 久久精品国产秦先生| 99久久精品免费看国产一区二区三区| 国产成人av片| 国产精品久久久久一区二区国产| 亚洲视频综合在线| 看av免费毛片手机播放| 97久久中文字幕| 日韩成人久久久| 最新一区二区三区| 亚洲一区黄色| 99一区二区| av中文天堂在线| 婷婷激情综合网| 中文字幕色网站| 久久不见久久见国语| 久久久久久久999| 91亚洲视频在线观看| 26uuu久久综合| 欧洲精品视频在线| 精品三级在线| 亚洲色图综合久久| 久久高清免费视频| 国产一区二区不卡| 亚洲精品无人区| 忘忧草在线日韩www影院| 日韩午夜电影在线观看| 超碰人人人人人人人| 亚洲欧美日韩国产| 国产一区二区在线网站| 污片视频在线免费观看| 欧美日韩免费不卡视频一区二区三区| 男男做爰猛烈叫床爽爽小说| 欧美日韩蜜桃| 91精品综合视频| 91av资源在线| 91福利在线导航| 中国美女乱淫免费看视频| 亚洲视频狠狠| 动漫精品视频| 色老头在线观看| 欧美大片在线观看一区二区| 免费成人深夜夜行网站| 久久精品国产一区二区三| 天堂一区二区三区| 久久久成人av毛片免费观看| 亚洲美女在线观看| 精品人妻一区二区色欲产成人| av一二三不卡影片| 91精品国产电影| 国产精品v日韩精品v在线观看| 日本亚洲不卡| 91禁国产网站| 亚洲人午夜射精精品日韩| 精品国产91乱高清在线观看| 日本黄色片在线播放| 在线亚洲自拍| 久久99精品久久久久子伦| av资源中文在线| 亚洲精品短视频| 97人妻一区二区精品视频| 久久久精品综合| 无限资源日本好片| 国产精品x453.com| 91免费在线视频网站| 日本色护士高潮视频在线观看| 精品人伦一区二区色婷婷| 日韩精品国产一区二区| 337p粉嫩大胆噜噜噜噜噜91av| 免费黄色日本网站| 国产一区二区三区站长工具| 国产精品青青在线观看爽香蕉| 男女啪啪在线观看| 精品久久久影院| www.国产色| 国产精品卡一卡二| 久久久无码人妻精品无码| 9久re热视频在线精品| 日韩久久久久久久| av国产精品| 国内精品400部情侣激情| 欧美孕妇性xxxⅹ精品hd| 欧美亚男人的天堂| 久久久综合久久久| 久久先锋资源网| 亚洲综合av在线播放| 国产综合网站| 日韩精品一区二区三区色偷偷| 色综合视频一区二区三区44| 欧美精品久久久久久久免费观看| 青青青草原在线| 51久久夜色精品国产麻豆| 国产午夜精品无码| 欧美激情一二三区| av电影中文字幕| 日韩电影在线观看一区| 国产精品视频二| 欧美精选视频在线观看| 欧美日韩视频一区二区| 男人的天堂视频在线| 日韩有码av| 成人免费xxxxx在线观看| 爱啪啪综合导航| www国产91| 亚洲av成人精品日韩在线播放| 欧美老女人第四色| 久久国产视频一区| 一区二区国产盗摄色噜噜| 日本黄色小视频在线观看| 豆国产96在线|亚洲| jizz18女人| 亚洲一区自拍| 日本一区午夜艳熟免费| 国产精品成人a在线观看| 久久综合九色综合网站| 911精品国产| 国产欧美va欧美va香蕉在| 筱崎爱全乳无删减在线观看| 九九视频这里只有精品| 午夜视频在线观看网站| 亚洲人成啪啪网站| 天堂在线资源8| 日韩欧美国产三级电影视频| 在线观看亚洲国产| 色天使久久综合网天天| 国产一级片视频| 亚洲久本草在线中文字幕| 香蕉成人在线视频| 国产欧美一区二区精品仙草咪| 韩国无码一区二区三区精品| 国产成人高清视频| 日本亚洲一区二区三区| 麻豆视频一区二区| 国产小视频精品| 日韩电影一二三区| 久久精品网站视频| 丝袜美腿亚洲色图| 成人黄色片视频| 国产亚洲精品bv在线观看| 欧美久久在线观看| 亚洲无吗在线| aa在线观看视频| 9色精品在线| 久久久999视频| 国产精品久久久久久久免费软件| 精品少妇在线视频| 亚洲欧洲一区| 老太脱裤让老头玩ⅹxxxx| 国产精品国码视频| 成人免费性视频| 一区二区自拍| 在线成人中文字幕| 成年人视频在线免费看| 欧美日韩国产影院| 国产91精品看黄网站在线观看| 黑人巨大精品欧美一区二区免费| 一级免费在线观看| 欧美性xxxx极品高清hd直播| 激情视频网站在线观看| 91福利视频网站| 中文字幕免费播放| 在线播放中文字幕一区| 国产精品羞羞答答在线| 日韩视频免费观看高清完整版 | 一二三区在线播放| 欧美福利视频导航| 亚洲精品综合网| 亚洲精品国产品国语在线| 欧美套图亚洲一区| 色诱女教师一区二区三区| 含羞草www国产在线视频| 欧美激情精品在线| 波多野结衣亚洲一二三| 国产精品香蕉在线观看| 视频亚洲一区二区| 国产伦精品一区二区三| 国产欧美高清视频在线| 中文字幕乱码一区二区三区| 午夜精品影院| 欧美一级在线看| 久久精品国产99| 少妇伦子伦精品无吗| 久久综合九色综合欧美就去吻| 中国美女黄色一级片| 夜夜嗨av一区二区三区四季av| 9i看片成人免费看片| 欧美欧美午夜aⅴ在线观看| 亚洲国产综合网| 国产亚洲视频中文字幕视频| xvideos国产在线视频| 奇米影视亚洲狠狠色| 亚洲爽爆av| 久久福利电影| 亚洲91精品| 无码人妻丰满熟妇区毛片18| 国模少妇一区二区三区| www.免费av| 亚洲人成影院在线观看| 无码人妻丰满熟妇精品区| 日韩一区二区中文字幕| 九色视频在线播放| 欧美黑人极品猛少妇色xxxxx| 亚洲一区二区三区四区| 国产精品免费一区二区三区| 青青草原综合久久大伊人精品| 日韩成人三级视频| 久久国内精品视频| 老牛影视av老牛影视av| 亚洲国产日韩一级| 国产精品久久无码一三区| 亚洲美女视频网| 高清电影在线免费观看| 成人免费视频网址| 教室别恋欧美无删减版| 97超碰在线人人| 国产伦理精品不卡| 97精品在线播放| 在线观看日韩国产| 日韩三级电影网| 午夜精品一区二区三区在线播放| 伊人亚洲精品| 亚洲国产精品一区二区第四页av| 男人的天堂成人在线| 人妻av一区二区| 一区二区三区日本| 国产精品福利电影| 中文字幕无线精品亚洲乱码一区| 女生影院久久| 久久久com| 一本色道久久综合一区| xxxxwww一片| 亚洲欧美日韩一区二区三区在线观看 | 成年人性生活视频| 成人免费一区二区三区视频 | 亚洲欧美成人精品| 国产高清视频色在线www| 99久久综合狠狠综合久久止| 亚洲激情中文| 五月天激情播播| ...xxx性欧美| 国产三级漂亮女教师| 自拍偷拍免费精品| 国产在视频一区二区三区吞精| 日本一区视频在线播放| 狂野欧美性猛交xxxx巴西| 欧美深性狂猛ⅹxxx深喉| 精品久久久久国产| 欧美女优在线观看| 国产成人精品免费久久久久| 天天躁日日躁狠狠躁欧美| jizzjizzxxxx| 久久综合九色综合久久久精品综合 | 91理论片午午论夜理片久久| 99久久精品国产亚洲精品| 国产三级生活片| 亚洲欧洲综合另类在线| www夜片内射视频日韩精品成人| 久久av在线看| 盗摄系列偷拍视频精品tp| 欧美成人免费在线观看视频| 99久久精品免费| 黄色片视频免费| 综合av色偷偷网| 国产精品一区二区三区av | 久久精品国产在热久久| 日韩黄色免费观看| 精品少妇一区二区三区在线播放| av中文在线资源| 欧美日韩国产免费一区二区三区 | 亚洲国产精品无码久久久久高潮 | 久久免费在线观看| 伊人成综合网伊人222| 91av俱乐部| |精品福利一区二区三区| 亚洲第一第二区| 日韩美女在线观看| 外国成人免费视频| 性活交片大全免费看| 色综合一个色综合亚洲| 日本中文字幕伦在线观看| 亚洲最大av网站| 制服诱惑一区二区| 人妻无码一区二区三区免费| 日韩亚洲欧美中文三级| 亚洲同志男男gay1069网站| 一区二区三区免费看| 成人美女视频在线观看18| 无码免费一区二区三区| 欧美成人午夜免费视在线看片| 欧美尿孔扩张虐视频| 污视频网站观看| 午夜精品久久一牛影视| 91精品国产综合久久久久久豆腐| www日韩av| 日本伊人午夜精品| 久久免费在线观看视频| 国产亚洲欧洲黄色| 久久a爱视频| 日本中文字幕精品—区二区| 午夜av一区二区| 精产国品自在线www| 久久香蕉综合色| 国产成人在线观看免费网站| 中文字幕av免费观看| 韩国福利视频一区| 欧美a级在线| av永久免费观看|