成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題

分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題

熱門標(biāo)簽:外呼線路資源屬于電信業(yè)務(wù)嗎 內(nèi)蒙古營(yíng)銷智能外呼系統(tǒng)哪個(gè)好 河南電話外呼系統(tǒng)招商 呼和浩特外呼系統(tǒng)原理是什么 青白江400企業(yè)電話申請(qǐng) 小裙科技電銷機(jī)器人怎樣 智能外呼系統(tǒng)官網(wǎng) 長(zhǎng)沙電銷外呼防封卡是什么 crm外呼系統(tǒng)聯(lián)系方式

  前文我們聊到了mongodb的副本集以及配置副本集,回顧請(qǐng)參考  https://www.jb51.net/article/167270.htm 今天我們來(lái)聊下mongodb的分片;

  1、什么是分片?為什么要分片?

  我們知道數(shù)據(jù)庫(kù)服務(wù)器一般出現(xiàn)瓶頸是在磁盤io上,或者高并發(fā)網(wǎng)絡(luò)io,又或者單臺(tái)server的cpu、內(nèi)存等等一系列原因;于是,為了解決這些瓶頸問(wèn)題,我們就必須擴(kuò)展服務(wù)器性能;通常擴(kuò)展服務(wù)器有向上擴(kuò)展和向外擴(kuò)展;所謂向上擴(kuò)展就是給服務(wù)器加更大的磁盤,使用更大更好的內(nèi)存,更換更好的cpu;這種擴(kuò)展在一定程度上是可以解決性能瓶頸問(wèn)題,但隨著數(shù)據(jù)量大增大,瓶頸會(huì)再次出現(xiàn);所以通常這種向上擴(kuò)展的方式不推薦;向外擴(kuò)展是指一臺(tái)服務(wù)器不夠加兩臺(tái),兩臺(tái)不夠加三臺(tái),以這種方式擴(kuò)展,只要出現(xiàn)瓶頸我們就可以使用增加服務(wù)器來(lái)解決;這樣一來(lái)服務(wù)器性能解決了,但用戶的讀寫(xiě)怎么分散到多個(gè)服務(wù)器上去呢?所以我們還要想辦法把數(shù)據(jù)切分成多塊,讓每個(gè)服務(wù)器只保存整個(gè)數(shù)據(jù)集的部分?jǐn)?shù)據(jù),這樣一來(lái)使得原來(lái)一個(gè)很大的數(shù)據(jù)集就通過(guò)切片的方式,把它切分成多分,分散的存放在多個(gè)服務(wù)器上,這就是分片;分片是可以有效解決用戶寫(xiě)操作性能瓶頸;雖然解決了服務(wù)器性能問(wèn)題和用戶寫(xiě)性能問(wèn)題,同時(shí)也帶來(lái)了一個(gè)新問(wèn)題,就是用戶的查詢;我們把整個(gè)數(shù)據(jù)集分散到多個(gè)server上,那么用戶怎么查詢數(shù)據(jù)呢?比如用戶要查詢年齡大于30的用戶,該怎么查詢呢?而年齡大于30的用戶的數(shù)據(jù),可能server1上有一部分?jǐn)?shù)據(jù),server2上有部分?jǐn)?shù)據(jù),我們?cè)趺床拍軌虬阉袧M足條件的數(shù)據(jù)全部查詢到呢?這個(gè)場(chǎng)景有點(diǎn)類似我們之前說(shuō)的mogilefs的架構(gòu),用戶上傳圖片到mogilefs首先要把圖片的元數(shù)據(jù)寫(xiě)進(jìn)tracker,然后在把數(shù)據(jù)存放在對(duì)應(yīng)的data節(jié)點(diǎn),這樣一來(lái)用戶來(lái)查詢,首先找tracker節(jié)點(diǎn),tracker會(huì)把用戶的請(qǐng)求文件的元數(shù)據(jù)告訴客戶端,然后客戶端在到對(duì)應(yīng)的data節(jié)點(diǎn)取數(shù)據(jù),最后拼湊成一張圖片;而在mongodb上也是很類似,不同的的是在mogilefs上,客戶端需要自己去和后端的data節(jié)點(diǎn)交互,取出數(shù)據(jù);在mongdb上客戶端不需要直接和后端的data節(jié)點(diǎn)交互,而是通過(guò)mongodb專有的客戶端代理去代客戶端交互,最后把數(shù)據(jù)統(tǒng)一由代理返回給客戶端;這樣一來(lái)就可以解決用戶的查詢問(wèn)題;簡(jiǎn)單講所謂分片就是把一個(gè)大的數(shù)據(jù)集通過(guò)切分的方式切分成多分,分散的存放在多個(gè)服務(wù)器上;分片的目的是為了解決數(shù)據(jù)量過(guò)大而導(dǎo)致的性能問(wèn)題;

  2、數(shù)據(jù)集分片示意圖

  提示:我們通過(guò)分片,可以將原本1T的數(shù)據(jù)集,平均分成4分,每個(gè)節(jié)點(diǎn)存儲(chǔ)原有數(shù)據(jù)集的1/4,使得原來(lái)用一臺(tái)服務(wù)器處理1T的數(shù)據(jù),現(xiàn)在可以用4臺(tái)服務(wù)器來(lái)處理,這樣一來(lái)就有效的提高了數(shù)據(jù)處理過(guò)程;這也是分布式系統(tǒng)的意義;在mongodb中我們把這種共同處理一個(gè)數(shù)據(jù)集的部分?jǐn)?shù)據(jù)的節(jié)點(diǎn)叫shard,我們把使用這種分片機(jī)制的mongodb集群就叫做mongodb分片集群;

  3、mongodb分片集群架構(gòu)

  提示:在mongodb分片集群中,通常有三類角色,第一類是router角色,router角色主要用來(lái)接收客戶端的讀寫(xiě)請(qǐng)求,主要運(yùn)行mongos這個(gè)服務(wù);為了使得router角色的高可用,通常會(huì)用多個(gè)節(jié)點(diǎn)來(lái)組成router高可用集群;第二類是config server,這類角色主要用來(lái)保存mongodb分片集群中的數(shù)據(jù)和集群的元數(shù)據(jù)信息,有點(diǎn)類似mogilefs中的tracker的作用;為了保證config server的高可用性,通常config server也會(huì)將其運(yùn)行為一個(gè)副本集;第三類是shard角色,這類角色主要用來(lái)存放數(shù)據(jù),類似mogilefs的數(shù)據(jù)節(jié)點(diǎn),為了保證數(shù)據(jù)的高可用和完整性,通常每個(gè)shard是一個(gè)副本集;

  4、mongodb分片集群工作過(guò)程

  首先用戶將請(qǐng)求發(fā)送給router,router接收到用戶請(qǐng)求,然后去找config server拿對(duì)應(yīng)請(qǐng)求的元數(shù)據(jù)信息,router拿到元數(shù)據(jù)信息后,然后再向?qū)?yīng)的shard請(qǐng)求數(shù)據(jù),最后將數(shù)據(jù)整合后響應(yīng)給用戶;在這個(gè)過(guò)程中router 就相當(dāng)于mongodb的一個(gè)客戶端代理;而config server用來(lái)存放數(shù)據(jù)的元數(shù)據(jù)信息,這些信息主要包含了那些shard上存放了那些數(shù)據(jù),對(duì)應(yīng)的那些數(shù)據(jù)存放在那些shard上,和mogilefs上的tracker非常類似,主要存放了兩張表,一個(gè)是以數(shù)據(jù)為中心的一張表,一個(gè)是以shard節(jié)點(diǎn)為中心的一張表;

  5、mongodb是怎么分片的?

  在mongodb的分片集群中,分片是按照collection字段來(lái)分的,我們把指定的字段叫shard key;根據(jù)shard key的取值不同和應(yīng)用場(chǎng)景,我們可以基于shard key取值范圍來(lái)分片,也可以基于shard key做hash分片;分好片以后將結(jié)果保存在config server上;在configserver 上保存了每一個(gè)分片對(duì)應(yīng)的數(shù)據(jù)集;比如我們基于shardkey的范圍來(lái)分片,在configserver上就記錄了一個(gè)連續(xù)范圍的shardkey的值都保存在一個(gè)分片上;如下圖

  上圖主要描述了基于范圍的分片,從shardkey最小值到最大值進(jìn)行分片,把最小值到-75這個(gè)范圍值的數(shù)據(jù)塊保存在第一個(gè)分片上,把-75到25這個(gè)范圍值的數(shù)據(jù)塊保存在第二個(gè)分片上,依次類推;這種基于范圍的分片,很容易導(dǎo)致某個(gè)分片上的數(shù)據(jù)過(guò)大,而有的分片上的數(shù)據(jù)又很小,造成分片數(shù)據(jù)不均勻;所以除了基與shard key的值的范圍分片,也可以基于shard key的值做hash分片,如下圖

  基于hash分片,主要是對(duì)shardkey做hash計(jì)算后,然后根據(jù)最后的結(jié)果落在哪個(gè)分片上就把對(duì)應(yīng)的數(shù)據(jù)塊保存在對(duì)應(yīng)的分片上;比如我們把shandkey做hash計(jì)算,然后對(duì)分片數(shù)量進(jìn)行取模計(jì)算,如果得到的結(jié)果是0,那么就把對(duì)應(yīng)的數(shù)據(jù)塊保存在第一個(gè)分片上,如果取得到結(jié)果是1就保存在第二個(gè)分片上依次類推;這種基于hash分片,就有效的降低分片數(shù)據(jù)不均衡的情況,因?yàn)閔ash計(jì)算的值是散列的;

  除了上述兩種切片的方式以外,我們還可以根據(jù)區(qū)域切片,也叫基于列表切片,如下圖

  上圖主要描述了基于區(qū)域分片,這種分片一般是針對(duì)shardkey的取值范圍不是一個(gè)順序的集合,而是一個(gè)離散的集合,比如我們可用這種方式對(duì)全國(guó)省份這個(gè)字段做切片,把流量特別大的省份單獨(dú)切一個(gè)片,把流量小的幾個(gè)省份組合切分一片,把國(guó)外的訪問(wèn)或不是國(guó)內(nèi)省份的切分為一片;這種切片有點(diǎn)類似給shardkey做分類;不管用什么方式去做分片,我們盡可能的遵循寫(xiě)操作要越分散越好,讀操作要越集中越好;

  6、mongodb分片集群搭建

  環(huán)境說(shuō)明

主機(jī)名 角色 ip地址
node01 router 192.168.0.41
node02/node03/node04 config server replication set

192.168.0.42

192.168.0.43

192.168.0.44

node05/node06/node07 shard1 replication set

192.168.0.45

192.168.0.46

192.168.0.47

node08/node09/node10 shard2 replication set

192.168.0.48

192.168.0.49

192.168.0.50

  基礎(chǔ)環(huán)境,各server做時(shí)間同步,關(guān)閉防火墻,關(guān)閉selinux,ssh互信,主機(jī)名解析

  主機(jī)名解析

[root@node01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1   localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.99 time.test.org time-node
192.168.0.41 node01.test.org node01
192.168.0.42 node02.test.org node02
192.168.0.43 node03.test.org node03
192.168.0.44 node04.test.org node04
192.168.0.45 node05.test.org node05
192.168.0.46 node06.test.org node06
192.168.0.47 node07.test.org node07
192.168.0.48 node08.test.org node08
192.168.0.49 node09.test.org node09
192.168.0.50 node10.test.org node10
192.168.0.51 node11.test.org node11
192.168.0.52 node12.test.org node12
[root@node01 ~]#

  準(zhǔn)備好基礎(chǔ)環(huán)境以后,配置mongodb yum源

[root@node01 ~]# cat /etc/yum.repos.d/mongodb.repo
[mongodb-org]
name = MongoDB Repository
baseurl = https://mirrors.aliyun.com/mongodb/yum/redhat/7/mongodb-org/4.4/x86_64/
gpgcheck = 1
enabled = 1
gpgkey = https://www.mongodb.org/static/pgp/server-4.4.asc
[root@node01 ~]#

  將mongodb yum源復(fù)制給其他節(jié)點(diǎn)

[root@node01 ~]# for i in {02..10} ; do scp /etc/yum.repos.d/mongodb.repo node$i:/etc/yum.repos.d/; done
mongodb.repo                 100% 206 247.2KB/s 00:00 
mongodb.repo                 100% 206 222.3KB/s 00:00 
mongodb.repo                 100% 206 118.7KB/s 00:00 
mongodb.repo                 100% 206 164.0KB/s 00:00 
mongodb.repo                 100% 206 145.2KB/s 00:00 
mongodb.repo                 100% 206 119.9KB/s 00:00 
mongodb.repo                 100% 206 219.2KB/s 00:00 
mongodb.repo                 100% 206 302.1KB/s 00:00 
mongodb.repo                 100% 206 289.3KB/s 00:00 
[root@node01 ~]#

  在每個(gè)節(jié)點(diǎn)上安裝mongodb-org這個(gè)包

for i in {01..10} ;
 do ssh node$i ' yum -y install mongodb-org '; 
done

  在config server 和shard節(jié)點(diǎn)上創(chuàng)建數(shù)據(jù)目錄和日志目錄,并將其屬主和屬組更改為mongod

[root@node01 ~]# for i in {02..10} ; do ssh node$i 'mkdir -p /mongodb/{data,log}  chown -R mongod.mongod /mongodb/  ls -ld /mongodb'; done
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:47 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
drwxr-xr-x 4 mongod mongod 29 Nov 11 22:45 /mongodb
[root@node01 ~]#

  配置shard1 replication set

[root@node05 ~]# cat /etc/mongod.conf
systemLog:
 destination: file
 logAppend: true
 path: /mongodb/log/mongod.log
 
storage:
 dbPath: /mongodb/data/
 journal:
 enabled: true
 
processManagement:
 fork: true
 pidFilePath: /var/run/mongodb/mongod.pid
 timeZoneInfo: /usr/share/zoneinfo
 
net:
 bindIp: 0.0.0.0
 
sharding:
 clusterRole: shardsvr
 
replication:
 replSetName: shard1_replset
[root@node05 ~]# scp /etc/mongod.conf node06:/etc/
mongod.conf                 100% 360 394.5KB/s 00:00 
[root@node05 ~]# scp /etc/mongod.conf node07:/etc/
mongod.conf                 100% 360 351.7KB/s 00:00 
[root@node05 ~]#

  配置shard2 replication set

[root@node08 ~]# cat /etc/mongod.conf
systemLog:
 destination: file
 logAppend: true
 path: /mongodb/log/mongod.log
 
storage:
 dbPath: /mongodb/data/
 journal:
 enabled: true
 
processManagement:
 fork: true
 pidFilePath: /var/run/mongodb/mongod.pid
 timeZoneInfo: /usr/share/zoneinfo
 
net:
 bindIp: 0.0.0.0
 
sharding:
 clusterRole: shardsvr
 
replication:
 replSetName: shard2_replset
[root@node08 ~]# scp /etc/mongod.conf node09:/etc/
mongod.conf                 100% 360 330.9KB/s 00:00 
[root@node08 ~]# scp /etc/mongod.conf node10:/etc/
mongod.conf                 100% 360 385.9KB/s 00:00 
[root@node08 ~]#

  啟動(dòng)shard1 replication set和shard2 replication set

[root@node05 ~]# systemctl start mongod.service
[root@node05 ~]# ss -tnl
State  Recv-Q Send-Q   Local Address:Port       Peer Address:Port    
LISTEN  0  128       *:22          *:*     
LISTEN  0  100     127.0.0.1:25          *:*     
LISTEN  0  128       *:27018         *:*     
LISTEN  0  128       :::22          :::*     
LISTEN  0  100      ::1:25          :::*     
[root@node05 ~]#for i in {06..10} ; do ssh node$i 'systemctl start mongod.service  ss -tnl';done
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   *:27018     *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   *:27018     *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   *:27018     *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   *:27018     *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   *:27018     *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
[root@node05 ~]#

  提示:默認(rèn)不指定shard監(jiān)聽(tīng)端口,它默認(rèn)就監(jiān)聽(tīng)在27018端口,所以啟動(dòng)shard節(jié)點(diǎn)后,請(qǐng)確保27018端口正常監(jiān)聽(tīng)即可;

  連接node05的mongodb 初始化shard1_replset副本集

> rs.initiate(
... {
...  _id : "shard1_replset",
...  members: [
...  { _id : 0, host : "node05:27018" },
...  { _id : 1, host : "node06:27018" },
...  { _id : 2, host : "node07:27018" }
...  ]
... }
... )
{
  "ok" : 1,
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605107401, 1),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  },
  "operationTime" : Timestamp(1605107401, 1)
}
shard1_replset:SECONDARY>

  連接node08的mongodb 初始化shard2_replset副本集

> rs.initiate(
... {
...  _id : "shard2_replset",
...  members: [
...  { _id : 0, host : "node08:27018" },
...  { _id : 1, host : "node09:27018" },
...  { _id : 2, host : "node10:27018" }
...  ]
... }
... )
{
  "ok" : 1,
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605107644, 1),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  },
  "operationTime" : Timestamp(1605107644, 1)
}
shard2_replset:OTHER>

  配置configserver replication set

[root@node02 ~]# cat /etc/mongod.conf
systemLog:
 destination: file
 logAppend: true
 path: /mongodb/log/mongod.log
 
storage:
 dbPath: /mongodb/data/
 journal:
 enabled: true
 
processManagement:
 fork: true
 pidFilePath: /var/run/mongodb/mongod.pid
 timeZoneInfo: /usr/share/zoneinfo
 
net:
 bindIp: 0.0.0.0
 
sharding:
 clusterRole: configsvr
 
replication:
 replSetName: cfg_replset
[root@node02 ~]# scp /etc/mongod.conf node03:/etc/mongod.conf
mongod.conf                 100% 358 398.9KB/s 00:00 
[root@node02 ~]# scp /etc/mongod.conf node04:/etc/mongod.conf 
mongod.conf                 100% 358 270.7KB/s 00:00 
[root@node02 ~]#

  啟動(dòng)config server

[root@node02 ~]# systemctl start mongod.service
[root@node02 ~]# ss -tnl
State  Recv-Q Send-Q   Local Address:Port       Peer Address:Port    
LISTEN  0  128       *:27019         *:*     
LISTEN  0  128       *:22          *:*     
LISTEN  0  100     127.0.0.1:25          *:*     
LISTEN  0  128       :::22          :::*     
LISTEN  0  100      ::1:25          :::*     
[root@node02 ~]# ssh node03 'systemctl start mongod.service  ss -tnl' 
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:27019     *:*     
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
[root@node02 ~]# ssh node04 'systemctl start mongod.service  ss -tnl'
State  Recv-Q Send-Q Local Address:Port    Peer Address:Port    
LISTEN  0  128   *:27019     *:*     
LISTEN  0  128   *:22      *:*     
LISTEN  0  100 127.0.0.1:25      *:*     
LISTEN  0  128   :::22      :::*     
LISTEN  0  100  ::1:25      :::*     
[root@node02 ~]#

  提示:config server 默認(rèn)在不指定端口的情況監(jiān)聽(tīng)在27019這個(gè)端口,啟動(dòng)后,請(qǐng)確保該端口處于正常監(jiān)聽(tīng);

  連接node02的mongodb,初始化cfg_replset 副本集

> rs.initiate(
... {
...  _id: "cfg_replset",
...  configsvr: true,
...  members: [
...  { _id : 0, host : "node02:27019" },
...  { _id : 1, host : "node03:27019" },
...  { _id : 2, host : "node04:27019" }
...  ]
... }
... )
{
  "ok" : 1,
  "$gleStats" : {
    "lastOpTime" : Timestamp(1605108177, 1),
    "electionId" : ObjectId("000000000000000000000000")
  },
  "lastCommittedOpTime" : Timestamp(0, 0),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605108177, 1),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  },
  "operationTime" : Timestamp(1605108177, 1)
}
cfg_replset:SECONDARY>

  配置router

[root@node01 ~]# cat /etc/mongos.conf
systemLog:
 destination: file
 path: /var/log/mongodb/mongos.log
 logAppend: true
 
processManagement:
 fork: true
 
net:
 bindIp: 0.0.0.0
sharding:
 configDB: "cfg_replset/node02:27019,node03:27019,node04:27019"
[root@node01 ~]#

  提示:configDB必須是副本集名稱/成員監(jiān)聽(tīng)地址:port的形式,成員至少要寫(xiě)一個(gè);

  啟動(dòng)router

[root@node01 ~]# mongos -f /etc/mongos.conf
about to fork child process, waiting until server is ready for connections.
forked process: 1510
child process started successfully, parent exiting
[root@node01 ~]# ss -tnl
State  Recv-Q Send-Q   Local Address:Port       Peer Address:Port    
LISTEN  0  128       *:22          *:*     
LISTEN  0  100     127.0.0.1:25          *:*     
LISTEN  0  128       *:27017         *:*     
LISTEN  0  128       :::22          :::*     
LISTEN  0  100      ::1:25          :::*     
[root@node01 ~]#

  連接mongos,添加shard1 replication set 和shard2 replication set

mongos> sh.addShard("shard1_replset/node05:27018,node06:27018,node07:27018")
{
  "shardAdded" : "shard1_replset",
  "ok" : 1,
  "operationTime" : Timestamp(1605109085, 3),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605109086, 1),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  }
}
mongos> sh.addShard("shard2_replset/node08:27018,node09:27018,node10:27018")
{
  "shardAdded" : "shard2_replset",
  "ok" : 1,
  "operationTime" : Timestamp(1605109118, 2),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605109118, 3),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  }
}
mongos>

  提示:添加shard 副本集也是需要指明副本集名稱/成員的格式添加;

  到此分片集群就配置好了

  查看sharding 集群狀態(tài)

mongos> sh.status()
--- Sharding Status ---
 sharding version: {
  "_id" : 1,
  "minCompatibleVersion" : 5,
  "currentVersion" : 6,
  "clusterId" : ObjectId("5fac01dd8d6fa3fe899662c8")
 }
 shards:
  { "_id" : "shard1_replset", "host" : "shard1_replset/node05:27018,node06:27018,node07:27018", "state" : 1 }
  { "_id" : "shard2_replset", "host" : "shard2_replset/node08:27018,node09:27018,node10:27018", "state" : 1 }
 active mongoses:
  "4.4.1" : 1
 autosplit:
  Currently enabled: yes
 balancer:
  Currently enabled: yes
  Currently running: yes
  Collections with active migrations:
    config.system.sessions started at Wed Nov 11 2020 23:43:14 GMT+0800 (CST)
  Failed balancer rounds in last 5 attempts: 0
  Migration Results for the last 24 hours:
    45 : Success
 databases:
  { "_id" : "config", "primary" : "config", "partitioned" : true }
    config.system.sessions
      shard key: { "_id" : 1 }
      unique: false
      balancing: true
      chunks:
        shard1_replset 978
        shard2_replset 46
      too many chunks to print, use verbose if you want to force print
mongos>

  提示:可以看到當(dāng)前分片集群中有兩個(gè)shard 副本集,分別是shard1_replset和shard2_replset;以及一個(gè)config server

  對(duì)testdb數(shù)據(jù)庫(kù)啟用sharding功能

mongos> sh.enableSharding("testdb")
{
  "ok" : 1,
  "operationTime" : Timestamp(1605109993, 9),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605109993, 9),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  }
}
mongos> sh.status()
--- Sharding Status ---
 sharding version: {
  "_id" : 1,
  "minCompatibleVersion" : 5,
  "currentVersion" : 6,
  "clusterId" : ObjectId("5fac01dd8d6fa3fe899662c8")
 }
 shards:
  { "_id" : "shard1_replset", "host" : "shard1_replset/node05:27018,node06:27018,node07:27018", "state" : 1 }
  { "_id" : "shard2_replset", "host" : "shard2_replset/node08:27018,node09:27018,node10:27018", "state" : 1 }
 active mongoses:
  "4.4.1" : 1
 autosplit:
  Currently enabled: yes
 balancer:
  Currently enabled: yes
  Currently running: no
  Failed balancer rounds in last 5 attempts: 0
  Migration Results for the last 24 hours:
    214 : Success
 databases:
  { "_id" : "config", "primary" : "config", "partitioned" : true }
    config.system.sessions
      shard key: { "_id" : 1 }
      unique: false
      balancing: true
      chunks:
        shard1_replset 810
        shard2_replset 214
      too many chunks to print, use verbose if you want to force print
  { "_id" : "testdb", "primary" : "shard2_replset", "partitioned" : true, "version" : { "uuid" : UUID("454aad2e-b397-4c88-b5c4-c3b21d37e480"), "lastMod" : 1 } }
mongos>

  提示:在對(duì)某個(gè)數(shù)據(jù)庫(kù)啟動(dòng)sharding功能后,它會(huì)給我們分片一個(gè)主shard所謂主shard是用來(lái)存放該數(shù)據(jù)庫(kù)下沒(méi)有做分片的colleciton;對(duì)于分片的collection會(huì)分散在各個(gè)shard上;

  啟用對(duì)testdb庫(kù)下的peoples集合啟動(dòng)sharding,并指明在age字段上做基于范圍的分片

mongos> sh.shardCollection("testdb.peoples",{"age":1})
{
  "collectionsharded" : "testdb.peoples",
  "collectionUUID" : UUID("ec095411-240d-4484-b45d-b541c33c3975"),
  "ok" : 1,
  "operationTime" : Timestamp(1605110694, 11),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605110694, 11),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  }
}
mongos> sh.status()
--- Sharding Status ---
 sharding version: {
  "_id" : 1,
  "minCompatibleVersion" : 5,
  "currentVersion" : 6,
  "clusterId" : ObjectId("5fac01dd8d6fa3fe899662c8")
 }
 shards:
  { "_id" : "shard1_replset", "host" : "shard1_replset/node05:27018,node06:27018,node07:27018", "state" : 1 }
  { "_id" : "shard2_replset", "host" : "shard2_replset/node08:27018,node09:27018,node10:27018", "state" : 1 }
 active mongoses:
  "4.4.1" : 1
 autosplit:
  Currently enabled: yes
 balancer:
  Currently enabled: yes
  Currently running: no
  Failed balancer rounds in last 5 attempts: 0
  Migration Results for the last 24 hours:
    408 : Success
 databases:
  { "_id" : "config", "primary" : "config", "partitioned" : true }
    config.system.sessions
      shard key: { "_id" : 1 }
      unique: false
      balancing: true
      chunks:
        shard1_replset 616
        shard2_replset 408
      too many chunks to print, use verbose if you want to force print
  { "_id" : "testdb", "primary" : "shard2_replset", "partitioned" : true, "version" : { "uuid" : UUID("454aad2e-b397-4c88-b5c4-c3b21d37e480"), "lastMod" : 1 } }
    testdb.peoples
      shard key: { "age" : 1 }
      unique: false
      balancing: true
      chunks:
        shard2_replset 1
      { "age" : { "$minKey" : 1 } } -->> { "age" : { "$maxKey" : 1 } } on : shard2_replset Timestamp(1, 0)
mongos>

  提示:如果對(duì)應(yīng)的collection存在,我們還需要先對(duì)collection創(chuàng)建shardkey索引,然后在使用sh.shardCollection()來(lái)對(duì)colleciton啟用sharding功能;基于范圍做分片,我們可以在多個(gè)字段上做;

  基于hash做分片

mongos> sh.shardCollection("testdb.peoples1",{"name":"hashed"})
{
  "collectionsharded" : "testdb.peoples1",
  "collectionUUID" : UUID("f6213da1-7c7d-4d5e-8fb1-fc554efb9df2"),
  "ok" : 1,
  "operationTime" : Timestamp(1605111014, 2),
  "$clusterTime" : {
    "clusterTime" : Timestamp(1605111014, 2),
    "signature" : {
      "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
      "keyId" : NumberLong(0)
    }
  }
}
mongos> sh.status()
--- Sharding Status ---
 sharding version: {
  "_id" : 1,
  "minCompatibleVersion" : 5,
  "currentVersion" : 6,
  "clusterId" : ObjectId("5fac01dd8d6fa3fe899662c8")
 }
 shards:
  { "_id" : "shard1_replset", "host" : "shard1_replset/node05:27018,node06:27018,node07:27018", "state" : 1 }
  { "_id" : "shard2_replset", "host" : "shard2_replset/node08:27018,node09:27018,node10:27018", "state" : 1 }
 active mongoses:
  "4.4.1" : 1
 autosplit:
  Currently enabled: yes
 balancer:
  Currently enabled: yes
  Currently running: yes
  Collections with active migrations:
    config.system.sessions started at Thu Nov 12 2020 00:10:16 GMT+0800 (CST)
  Failed balancer rounds in last 5 attempts: 0
  Migration Results for the last 24 hours:
    480 : Success
 databases:
  { "_id" : "config", "primary" : "config", "partitioned" : true }
    config.system.sessions
      shard key: { "_id" : 1 }
      unique: false
      balancing: true
      chunks:
        shard1_replset 543
        shard2_replset 481
      too many chunks to print, use verbose if you want to force print
  { "_id" : "testdb", "primary" : "shard2_replset", "partitioned" : true, "version" : { "uuid" : UUID("454aad2e-b397-4c88-b5c4-c3b21d37e480"), "lastMod" : 1 } }
    testdb.peoples
      shard key: { "age" : 1 }
      unique: false
      balancing: true
      chunks:
        shard2_replset 1
      { "age" : { "$minKey" : 1 } } -->> { "age" : { "$maxKey" : 1 } } on : shard2_replset Timestamp(1, 0)
    testdb.peoples1
      shard key: { "name" : "hashed" }
      unique: false
      balancing: true
      chunks:
        shard1_replset 2
        shard2_replset 2
      { "name" : { "$minKey" : 1 } } -->> { "name" : NumberLong("-4611686018427387902") } on : shard1_replset Timestamp(1, 0)
      { "name" : NumberLong("-4611686018427387902") } -->> { "name" : NumberLong(0) } on : shard1_replset Timestamp(1, 1)
      { "name" : NumberLong(0) } -->> { "name" : NumberLong("4611686018427387902") } on : shard2_replset Timestamp(1, 2)
      { "name" : NumberLong("4611686018427387902") } -->> { "name" : { "$maxKey" : 1 } } on : shard2_replset Timestamp(1, 3)
mongos>

  提示:基于hash做分片只能在一個(gè)字段上做,不能指定多個(gè)字段;從上面的狀態(tài)信息可以看到testdb.peoples被分到了shard2上,peoples1一部分分到了shard1,一部分分到了shard2上;所以在peoples中插入多少條數(shù)據(jù),它都會(huì)寫(xiě)到shard2上,在peoples1中插入數(shù)據(jù)會(huì)被寫(xiě)入到shard1和shard2上;

  驗(yàn)證:在peoples1 集合上插入數(shù)據(jù),看看是否將數(shù)據(jù)分片到不同的shard上呢?

  在mongos上插入數(shù)據(jù)

mongos> use testdb
switched to db testdb
mongos> for (i=1;i=10000;i++) db.peoples1.insert({name:"people"+i,age:(i%120),classes:(i%20)})
WriteResult({ "nInserted" : 1 })
mongos>

  在shard1上查看數(shù)據(jù)

shard1_replset:PRIMARY> show dbs
admin 0.000GB
config 0.001GB
local 0.001GB
testdb 0.000GB
shard1_replset:PRIMARY> use testdb
switched to db testdb
shard1_replset:PRIMARY> show tables
peoples1
shard1_replset:PRIMARY> db.peoples1.find().count()
4966
shard1_replset:PRIMARY>

 提示:在shard1上可以看到對(duì)應(yīng)collection保存了4966條數(shù)據(jù);

  在shard2上查看數(shù)據(jù)

shard2_replset:PRIMARY> show dbs
admin 0.000GB
config 0.001GB
local 0.011GB
testdb 0.011GB
shard2_replset:PRIMARY> use testdb
switched to db testdb
shard2_replset:PRIMARY> show tables
peoples
peoples1
shard2_replset:PRIMARY> db.peoples1.find().count()
5034
shard2_replset:PRIMARY>

  提示:在shard2上可以看到有peoples集合和peoples1集合,其中peoples1集合保存了5034條數(shù)據(jù);shard1和shard2總共就保存了我們剛才插入的10000條數(shù)據(jù);

  ok,到此mongodb的分片集群就搭建,測(cè)試完畢了;

到此這篇關(guān)于分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的文章就介紹到這了,更多相關(guān)MongoDB分片集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB訪問(wèn)控制的操作方法
  • 分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB備份與恢復(fù)的實(shí)踐詳解
  • SpringDataMongoDB多文檔事務(wù)的實(shí)現(xiàn)
  • mongodb如何對(duì)文檔內(nèi)數(shù)組進(jìn)行過(guò)濾的方法步驟
  • MongoDB中文檔的更新操作示例詳解
  • MongoDB數(shù)據(jù)庫(kù)文檔操作方法(必看篇)
  • mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內(nèi)嵌文檔/數(shù)組等)
  • PHP庫(kù) 查詢Mongodb中的文檔ID的方法
  • MongoDB如何更新多級(jí)文檔的數(shù)據(jù)

標(biāo)簽:呼倫貝爾 菏澤 池州 安順 黃石 舟山 楚雄 白山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題》,本文關(guān)鍵詞  分布式,文檔,存儲(chǔ),數(shù)據(jù)庫(kù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于分布式文檔存儲(chǔ)數(shù)據(jù)庫(kù)之MongoDB分片集群的問(wèn)題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产精品一区二区欧美黑人喷潮水| 久久综合亚洲社区| 经典三级一区二区三区视频| 国产99re| 9.1麻豆精品| 自拍亚洲欧美老师丝袜| 91麻豆国产福利精品| 国产91精品网站| 亚洲大片av| 国产一区二区三区精品在线| 日韩三级av| 欧美日韩一区免费| 黄色av片三级三级三级免费看| 少妇黄色一级片| 日韩免费视频播放| 久久亚洲综合国产精品99麻豆精品福利| 制服诱惑亚洲| 免费久久网站| 英国三级经典在线观看| 一区二区三区四区视频精品免费| 国产福利电影一区二区三区| 精品中文字幕一区二区| 亚洲一品av免费观看| 欧美国产一区二区三区| 在线观看免费高清完整| 麻豆一区二区三区四区精品蜜桃| 国产欧美日韩精品高清二区综合区| 免费成人网www| 九九久久综合网站| 中文日韩在线观看| 欧美性xxxx交| 亚洲国产一区二区三区青草影视| 免费看一级一片| 欧美黄色直播| 激情中文字幕| 精品久久一区| 国产精品无码AV| 51久久夜色精品国产麻豆| 四虎在线视频免费观看| 女一区二区三区| 日韩精品成人一区二区三区| 欧美一区2区视频在线观看| 中文字幕日韩一区二区三区| 日日日日人人人夜夜夜2017| 国产一二三在线视频| 俺去啦;欧美日韩| 欧美 日韩 人妻 高清 中文| 成人免费视频一区二区| 国产对白在线正在播放| av影院在线| 亚洲天堂a在线| 欧美日韩一区三区四区| 国产亚洲成av人片在线观黄桃| 女人18毛片水真多18精品| 国产精品高潮呻吟| 九九九在线视频| 丰满女人性猛交| 91精品视频一区| 免费黄色网址在线| 日韩av片在线播放| 成人ssswww在线播放| 欧美一级视频免费| 精品久久久久久久人人人人传媒| 精品国产一区久久久| 亚洲激情视频在线| 麻豆一区二区三区视频| 蜜臀av性久久久久蜜臀aⅴ流畅| 免费看特级毛片| 国产一区二区三区四区在线| 国产福利影院在线观看| 91精品啪在线观看国产| 欧美 日韩 国产精品免费观看| 毛片免费看不卡网站| 国产一区二区在线免费播放| 成人av免费播放| 精品国产三级电影在线观看| 无码视频一区二区三区| 日韩欧美国产片| av最新在线| 国产综合久久久久久鬼色| 国产女主播喷水高潮网红在线| 美女高潮久久久| 日韩美女视频中文字幕| 欧美午夜丰满在线18影院| 色综合久久久久久中文网| 欧美亚洲大片| 精品乱码一区二区三区四区| 三年中国中文在线观看免费播放| av在线资源网| 国模无码大尺度一区二区三区| 日本高清不卡在线观看| 亚洲欧美一区二区三区不卡| 26uuu另类亚洲欧美日本老年| 日韩精品免费专区| 天堂av在线免费观看| 日韩欧美色电影| 亚洲欧美日韩一区二区| 欧美日韩国产色| 久久久久久久久久久久久9999| 91免费日韩| 老师我好爽再深一点的视频| 亚洲欧洲av| 激情亚洲综合在线| 国产日韩精品入口| 国产嫩草影院久久久久| 亚洲性在线观看| 苍井空浴缸大战猛男120分钟| 久久精品女人天堂| av在线不卡网| 国产羞羞视频| 亚洲国产欧美日韩精品| 国产在线你懂得| 91精品国自产在线偷拍蜜桃| 丝袜美腿美女被狂躁在线观看| 亚洲福利电影| 久久激情视频| 欧美一区2区视频在线观看| 裸体xxxx视频在线| 福利一区和二区| www.5588.com毛片| 国产对白在线正在播放| 成人av电影在线观看| 国内精品久久久久久影院老狼| 日本性高潮视频| 亚洲一区二区三区美女| 久久久久黄久久免费漫画| 日韩123区| 国产精品自拍视频| 男人插曲女人的视频| 免费一级欧美在线观看视频| 91插插视频| 精品小视频在线| 欧美日韩国产高清一区二区| 欧美一级二级三级乱码| 欧美丰满少妇xxxxx高潮对白| 成人爽a毛片免费啪啪红桃视频| 一区二区三区在线视频观看| 国产一区二区三区无遮挡| 日韩中文字幕网站| 草草在线观看| 日韩久久免费电影| 91社区在线| 伊人久久噜噜噜躁狠狠躁| 最新中文字幕亚洲| 黄色av免费在线观看| 澳门av一区二区三区| 亚洲私人影吧| 视频一区视频二区国产精品| 国产v综合v亚洲欧美久久| 久久精品夜色噜噜亚洲a∨| 日本资源在线| 日韩大胆人体| 在线精品国产成人综合| 国产精品老熟女视频一区二区| 国产精品96久久久久久又黄又硬| 一区二区在线观看免费视频播放| 久久1电影院| 醉酒壮男gay强迫野外xx| 日韩av电影手机在线观看| 欧美1o一11sex性hdhd| 三上悠亚av一区二区三区| 秋霞成人午夜伦在线观看| 亚洲中文一区二区| 久久久精品2019中文字幕之3| 久久久久这里只有精品| 国产成人久久| 久久精品xxx| 日韩在线观看电影完整版高清免费悬疑悬疑| 日韩精品在线中文字幕| 国产一区二区香蕉| 天堂中文在线资| 欧美日韩成人在线观看| 中文字幕在线字幕中文| 国产一区二区三区在线看麻豆| av电影在线观看网站| 国产成人久久精品一区二区三区| 男人天堂2017| 国产又粗又硬又长| 午夜成人免费视频| 中文字幕日韩一区二区| 中文字幕在线观看一区| av软件在线观看| 国产亚洲永久域名| 国自产拍偷拍福利精品免费一| 国产午夜视频在线播放| 97国产一区二区精品久久呦| 亚洲第一综合网| 亚洲视频综合网| 欧洲三级视频| 日本麻豆一区二区三区视频| 国产一区国产精品| 久久精品国产亚洲AV成人婷婷| 欧美日本一区二区在线观看| 欧美少妇性生活视频| 精品国产一区二区三区不卡蜜臂| 亚洲女优在线| 91成人在线看| 欧美成人免费在线观看视频| 日日夜夜操操操| 色婷婷综合成人| 欧美日韩亚洲系列| 欧美成人专区| 日本一区视频在线观看| 亚洲一区欧美一区| av激情在线| 91高清免费看| 1区1区3区4区产品乱码芒果精品| 中文字幕在线影视资源| 另类小说欧美激情| 18被视频免费观看视频| 欧美一区三区二区在线观看| 国产巨乳在线观看| 特级毛片在线免费观看| 992tv在线观看免费进| 国产午夜精品全部视频播放| 国产乱子伦精品无码专区| 国产自产在线视频一区| 中文字幕亚洲欧美在线| 亚洲国产成人精品电影| 亚洲精品日韩成人| 久久99精品国产91久久来源| 高清国语自产拍免费视频国产| 欧美三级网站在线观看| 成人蜜桃视频网站网址| 欧洲亚洲两性| 三级网站在线看| 奇米亚洲欧美| 国产老头老太做爰视频| 日韩精品一级中文字幕精品视频免费观看| 午夜精品视频在线观看| 成人影欧美片| 国产福利91精品一区二区三区| 黑人一区二区三区| 色婷婷激情久久| 成视频免费在线看| 成年人视频在线| av黄色免费在线观看| 日韩极品一区| 2020国产在线| 国产传媒免费在线观看| 你懂的网址一区二区三区| 亚洲精品白浆| 美女黄色成人网| 九九热在线观看| 午夜探花在线观看| 精品69视频一区二区三区| 久久精品人人爽| 狠狠狠狠狠狠操| 一级黄色免费毛片| 久久国产精品无码一级毛片| 欧美狂欢多p性派对| 黄色裸体一级片| 91免费视频网| 久久无码人妻一区二区三区| 国产在线一区不卡| 日本精品视频在线播放| 麻豆成人入口| 在线不卡欧美| 色综合成人av| 国产91亚洲精品一区二区三区| 日产亚洲一区二区三区| 日本色图欧美色图| 国产精品成人一区二区不卡| 成人在线视频免费观看| 亚洲免费视频网站| 国产精品一区二区久久久久| 2017亚洲天堂1024| 18以下岁禁止1000部免费| 蜜桃成人365av| 国产日韩欧美91| 波多野结衣视频在线播放| 日韩美女一区二区三区| 欧美草草影院在线视频| 久久精品中文字幕电影| 国产成人无码精品久在线观看| av免费观看网址| 亚洲人成77777| 国产在线视频资源| 日本一区二区三区四区高清视频| 日本婷婷久久久久久久久一区二区| 中文字幕av无码一区二区三区| 中国一区二区视频| 欧美乱大交xxxxx| 国产又大又黄又爽| 国产精品黄色大片| 亚洲黄色一级大片| 欧美91精品久久久久国产性生爱| 日韩精品免费一区二区在线观看| 日韩av影视在线| 国产一区二区在线观看免费| 宅男噜噜噜66国产日韩在线观看| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品人人爽| 亚洲激情在线观看视频| 欧美高潮视频| 亚洲妇熟xx妇色黄| 亚洲国产成人精品女人| 草草视频在线免费观看| 天堂va蜜桃一区二区三区漫画版| 欧美aⅴ在线观看| 2019亚洲男人天堂| 国产福利资源一区| 久久品道一品道久久精品| 国产精品久久久久久久免费| 在线免费av一区| 亚洲精品日韩在线| 欧美黑人猛交的在线视频| 五月天婷婷激情视频| 在线观看av黄网站永久| 欧美国产成人精品一区二区三区| 影视先锋av在线| 美女黄毛**国产精品啪啪| 69久久久久久| 国产精品香蕉在线观看| 先锋影音欧美性受| 色综合久久中文综合久久牛| 欧美高清在线一区二区| 亚洲精品2区| 天天干视频在线| 日本福利午夜视频在线| 四虎精品在线观看| 500福利第一精品导航| 精品国产_亚洲人成在线| 在线观看视频污| 精品176极品一区| 国产精品黄色网| eeuss影院eeuss最新直达| 成人免费毛片嘿嘿连载视频|