摘要:項(xiàng)目現(xiàn)已正式發(fā)布這是一個(gè)基于云和容器部署的分布式塊存儲(chǔ)新方式。這可能是與大多數(shù)現(xiàn)有的分布式存儲(chǔ)系統(tǒng)相比,最具特色的功能??焖偃腴T指南易于安裝和使用。使用或術(shù)語(yǔ),管理器容器是一項(xiàng)全球性服務(wù)。目前,我們不保留額外的元數(shù)據(jù)來(lái)指示使用哪些。
Longhorn項(xiàng)目現(xiàn)已正式發(fā)布!這是一個(gè)基于云和容器部署的分布式塊存儲(chǔ)新方式。Longhorn遵循微服務(wù)的原則,利用容器將小型獨(dú)立組件構(gòu)建為分布式塊存儲(chǔ),并使用容器編排來(lái)協(xié)調(diào)這些組件,形成彈性分布式系統(tǒng)。
Why Longhorn?如今,基于云和容器的部署規(guī)模日益擴(kuò)大,分布式塊存儲(chǔ)系統(tǒng)也正變得越來(lái)越復(fù)雜,單個(gè)存儲(chǔ)控制器上的volume數(shù)量在不斷增加。2000年代初,存儲(chǔ)控制器上的volume數(shù)量只有幾十個(gè),但現(xiàn)代云環(huán)境卻需要數(shù)萬(wàn)到數(shù)百萬(wàn)的分布式塊存儲(chǔ)卷。存儲(chǔ)控制器變成了高度復(fù)雜的分布式系統(tǒng)。
分布式塊存儲(chǔ)本身比其他形式的分布式存儲(chǔ)(如文件系統(tǒng))更簡(jiǎn)單。無(wú)論系統(tǒng)中有多少volume,每個(gè)volume只能由單個(gè)主機(jī)進(jìn)行裝載。正因如此,我們?cè)O(shè)想,是否可以將大型塊存儲(chǔ)控制器分割成多個(gè)較小的存儲(chǔ)控制器?若想要如此分割,我們需要保證這些volume仍然是從公共磁盤池構(gòu)建的,并且我們需要有辦法來(lái)編排這些存儲(chǔ)控制器,讓它們可以協(xié)同工作。
為了將這一想法發(fā)揮到極限,我們創(chuàng)建了Longhorn項(xiàng)目。這是一個(gè)我們認(rèn)為值得探索的方向,每個(gè)控制器上只有一個(gè)volume,這將大大簡(jiǎn)化存儲(chǔ)控制器的設(shè)計(jì)。因?yàn)榭刂破鬈浖墓收嫌騼H限于單個(gè)volume,所以控制器若崩潰,也只會(huì)影響一個(gè)volume。
Longhorn充分利用了近年來(lái)關(guān)于如何編排大量的容器和虛擬機(jī)的核心技術(shù)。例如,Longhorn并沒(méi)有構(gòu)建一個(gè)可以擴(kuò)展到100,000個(gè)volume的高度復(fù)雜的控制器,而是出于讓存儲(chǔ)控制器簡(jiǎn)單輕便的考慮,創(chuàng)建了100,000個(gè)多帶帶的控制器。然后,我們可以利用像Swarm、Mesos和Kubernetes這樣的最先進(jìn)的編排系統(tǒng)來(lái)調(diào)度這些獨(dú)立的控制器,共享一組磁盤中的資源,協(xié)同工作,形成一個(gè)彈性的分布式塊存儲(chǔ)系統(tǒng)。
Longhorn基于微服務(wù)的設(shè)計(jì)還有很多其他優(yōu)勢(shì)。因?yàn)槊總€(gè)volume都有自己的控制器,在升級(jí)每個(gè)volume的控制器和replica容器時(shí),是不會(huì)導(dǎo)致IO操作明顯的中斷的。 Longhorn可以創(chuàng)建一個(gè)長(zhǎng)期運(yùn)行的工作來(lái)編排所有l(wèi)ive volume的升級(jí),同時(shí)確保不會(huì)中斷系統(tǒng)正在進(jìn)行的操作。為確保升級(jí)不會(huì)導(dǎo)致意外的問(wèn)題,Longhorn可以選擇升級(jí)一小部分volume,并在升級(jí)過(guò)程中出現(xiàn)問(wèn)題時(shí)回滾到舊版本。這些做法在現(xiàn)代微服務(wù)應(yīng)用中已得到廣泛應(yīng)用,但在存儲(chǔ)系統(tǒng)中并不常見(jiàn)。我們希望Longhorn可以助力于微服務(wù)在存儲(chǔ)領(lǐng)域的更多應(yīng)用。
Longhorn功能概述將本地磁盤或安裝在計(jì)算或?qū)S么鎯?chǔ)主機(jī)中的網(wǎng)絡(luò)存儲(chǔ)形成共享資源池。
為容器和虛擬機(jī)創(chuàng)建塊存儲(chǔ)卷。你可以指定volume的大小,IOPS的需求,以及你想要的跨主機(jī)的同步replica的數(shù)量(這里的主機(jī)是指那些為volume提供存儲(chǔ)資源的主機(jī))。replica是在底層磁盤或網(wǎng)絡(luò)存儲(chǔ)上精簡(jiǎn)配置的。
為每個(gè)volume創(chuàng)建一個(gè)專用的存儲(chǔ)控制器。這可能是與大多數(shù)現(xiàn)有的分布式存儲(chǔ)系統(tǒng)相比,Longhorn最具特色的功能。大多數(shù)現(xiàn)有的分布式存儲(chǔ)系統(tǒng)通常采用復(fù)雜的控制器軟件來(lái)服務(wù)于從數(shù)百到數(shù)百萬(wàn)不等的volume。但Longhorn不同,每個(gè)控制器上只有一個(gè)volume,Longhorn將每個(gè)volume都轉(zhuǎn)變成了微服務(wù)。
跨計(jì)算或存儲(chǔ)主機(jī)調(diào)度多個(gè)replica。Longhorn會(huì)監(jiān)測(cè)每一個(gè)replica的健康狀況,對(duì)問(wèn)題進(jìn)行維修,并在必要時(shí)重新生成replica。
以Docker容器的形式操作存儲(chǔ)控制器和replica。例如,一個(gè)volume有三個(gè)replica,就意味著有四個(gè)容器。
為每個(gè)volume分配多個(gè)存儲(chǔ)“前端”。常見(jiàn)的前端包括Linux內(nèi)核設(shè)備(映射到/ dev / longhorn)和iSCSI目標(biāo)。Linux內(nèi)核設(shè)備適用于支持Docker volume,而iSCSI目標(biāo)更適合支持QEMU / KVM和VMware volume。
創(chuàng)建volume快照(snapshot)和AWS EBS風(fēng)格的備份。您可以為每個(gè)volume創(chuàng)建多達(dá)254個(gè)快照,這些快照可以逐個(gè)備份到NFS或S3兼容的輔助存儲(chǔ)中。只有更改的字節(jié)會(huì)在備份操作期間被復(fù)制和存儲(chǔ)。
指定定期快照和備份操作的計(jì)劃。您可以指定這些操作的頻率(每小時(shí),每天,每周,每月和每年)、執(zhí)行這些操作的確切時(shí)間(例如,每個(gè)星期日凌晨3:00),以及保留多少個(gè)循環(huán)快照和備份集。
快速入門指南Longhorn易于安裝和使用。您只需確保Docker已安裝,并且安裝了open-iscsi軟件包,就可以在單個(gè)Ubuntu 16.04服務(wù)器上設(shè)置運(yùn)行Longhorn所需的一切。
運(yùn)行以下命令在單個(gè)主機(jī)上設(shè)置Longhorn:
git clone https://github.com/rancher/longhorncd longhorn/deploy ./longhorn-setup-single-node-env.sh
該腳本將拉起并啟動(dòng)多個(gè)容器,包括etcd鍵值存儲(chǔ)區(qū)、Longhorn volume管理器、Longhorn UI和Longhorn docker volume插件容器。此腳本完成后,將生成以下輸出:
Longhorn is up at port 8080
您可以通過(guò)連接到http://
您現(xiàn)在可以從Docker CLI創(chuàng)建持久的Longhorn volume:
docker volume create -d longhorn vol1 docker run -it --volume-driver longhorn -v vol1:/vol1 ubuntu bash
在同一主機(jī)上運(yùn)行單主機(jī)Longhorn安裝程序etcd和所有volume副本,因此不適合在生產(chǎn)環(huán)境中使用。 Longhorn GitHub頁(yè)面有更多關(guān)于如何設(shè)置生產(chǎn)級(jí)別多主機(jī)使用說(shuō)明:,多主機(jī)將使用多帶帶的etcd服務(wù)器、Docker swarm mode集群和用于存儲(chǔ)備份的多帶帶NFS服務(wù)器。
Longhorn和其他存儲(chǔ)系統(tǒng)作為一項(xiàng)實(shí)驗(yàn),我們編寫了Longhorn,借助容器和微服務(wù),Longhorn構(gòu)建了一個(gè)分布式塊存儲(chǔ)系統(tǒng),Longhorn既不是為了與現(xiàn)有存儲(chǔ)軟件和存儲(chǔ)系統(tǒng)競(jìng)爭(zhēng),也并非為替代現(xiàn)有存儲(chǔ)軟件和存儲(chǔ)系統(tǒng),原因如下:
Longhorn只關(guān)注分布式塊存儲(chǔ)。從另一個(gè)角度來(lái)說(shuō),分布式文件存儲(chǔ)更難建立。如Ceph、Gluster、Infinit(由Docker收購(gòu))、Quobyte、Portworx和StorageOS以及來(lái)自NetApp、EMC等的存儲(chǔ)系統(tǒng),提供了分布式文件系統(tǒng)、統(tǒng)一存儲(chǔ)體驗(yàn)、企業(yè)數(shù)據(jù)管理以及許多Longhorn不支持的其他企業(yè)級(jí)功能。
Longhorn需要NFS共享或S3兼容的對(duì)象用以存儲(chǔ)volume備份。因此,它必須與來(lái)自NetApp、EMC Isilon或其他供應(yīng)商的網(wǎng)絡(luò)文件存儲(chǔ)器以及來(lái)自AWS S3、Minio、SwiftStack、Cloudian等的S3兼容的對(duì)象存儲(chǔ)端點(diǎn)配合使用。
Longhorn缺少企業(yè)級(jí)存儲(chǔ)功能,例如重復(fù)數(shù)據(jù)刪除、壓縮和自動(dòng)分層以及將大容量條帶化為較小塊的能力。因此,Longhorn volumes受到單個(gè)磁盤的大小和性能的限制。 iSCSI目標(biāo)以用戶級(jí)進(jìn)程運(yùn)行。我們?cè)诜植际酱鎯?chǔ)產(chǎn)品(如Dell EqualLogic,SolidFire和Datera)中可以看到,它缺乏企業(yè)級(jí) iscsi 系統(tǒng)的性能、可靠性和多路徑支持。
我們建立了Longhorn,使其簡(jiǎn)單易行,希望它可以測(cè)試我們的想法——使用容器和微服務(wù)來(lái)構(gòu)建存儲(chǔ)。它完全由Go(通常稱為golang)編寫,是現(xiàn)代系統(tǒng)編程的首選語(yǔ)言。
下面我們將繼續(xù)詳細(xì)描述Longhorn,讓大家能對(duì)Longhorn現(xiàn)階段的功能設(shè)計(jì)有個(gè)大致的預(yù)覽。當(dāng)前,盡管所描述的功能還未全部實(shí)現(xiàn),但我們將會(huì)繼續(xù)努力,使Longhorn項(xiàng)目的愿景變?yōu)楝F(xiàn)實(shí)。
作為微服務(wù)的volumeLonghorn volume管理器容器在Longhorn集群中的每個(gè)主機(jī)上運(yùn)行。使用Rancher或Swarm術(shù)語(yǔ),Longhorn管理器容器是一項(xiàng)全球性服務(wù)。如果您使用Kubernetes,Longhorn volume管理器則被視為DaemonSet。Longhorn volume管理器處理從UI中或Docker和Kubernetes的卷插件中執(zhí)行API調(diào)用。您可以在這里找到Longhorn API的說(shuō)明。下圖展示了Longhorn在Docker Swarm和Kubernetes中的控制路徑。
當(dāng)Longhorn管理器被要求創(chuàng)建一個(gè)volume時(shí),它將在該volume所附的主機(jī)以及放置副本的主機(jī)上創(chuàng)建一個(gè)控制器容器。副本應(yīng)放置在不同的主機(jī)上,以確保最大可用性。
在下圖中,有三個(gè)容器有Longhorn volumes。每個(gè)Docker volume都有一個(gè)作為容器運(yùn)行的專用控制器。每個(gè)控制器有兩個(gè)副本,每個(gè)副本都是一個(gè)容器。圖中的箭頭表示Docker volume、控制器容器、副本容器和磁盤之間的讀/寫數(shù)據(jù)流。通過(guò)為每個(gè)volume創(chuàng)建多帶帶的控制器,如果某個(gè)控制器發(fā)生故障,也不會(huì)影響其他volums的功能。
例如,在大規(guī)模部署100,000個(gè)Docker volumes的過(guò)程中,每個(gè)volume具有兩個(gè)副本,意味著將存在100,000個(gè)控制器容器和20萬(wàn)個(gè)復(fù)制容器。為了安排、監(jiān)視、協(xié)調(diào)和修復(fù)所有這些控制器和副本,需要一個(gè)存儲(chǔ)編排系統(tǒng)。
存儲(chǔ)編排存儲(chǔ)編排負(fù)責(zé)調(diào)度控制器和副本,監(jiān)視各種組件,并從錯(cuò)誤中恢復(fù)。Longhorn volume管理器執(zhí)行管理volume生命周期所需的所有存儲(chǔ)編排操作。您可以在這里找到Longhorn volume管理器執(zhí)行存儲(chǔ)編排的詳細(xì)信息。
控制器的功能類似于典型的鏡像RAID控制器,對(duì)其副本進(jìn)行讀寫操作并監(jiān)控副本的健康狀況。所有寫入操作都被同步復(fù)制。因?yàn)槊總€(gè)volume都有自己的專用控制器,并且控制器駐留在volume所附加的同一主機(jī)上,所以我們不需要控制器的高可用性(HA)配置。
Longhorn volume管理器負(fù)責(zé)挑選副本所在的主機(jī)。然后檢查所有副本的健康狀況,在必要時(shí),執(zhí)行相應(yīng)操作重建錯(cuò)誤的副本。
復(fù)制操作Longhorn replicas是通過(guò)Linux分散的文件構(gòu)建的,它支持精簡(jiǎn)配置。目前,我們不保留額外的元數(shù)據(jù)來(lái)指示使用哪些block。block大小為4K。
拍攝快照時(shí),您將創(chuàng)建一個(gè)差異磁盤。隨著快照數(shù)量的增長(zhǎng),差異磁盤鏈可能會(huì)相當(dāng)長(zhǎng)。為了提高讀取性能,Longhorn保留了一個(gè)讀取索引,記錄了該差異磁盤保存的每個(gè)4K block的有效數(shù)據(jù)。在下圖中,該volume有八個(gè)block。讀取索引有八個(gè)條目,并且在讀取操作發(fā)生時(shí)被惰性填充。寫操作會(huì)重置讀取索引,使其指向?qū)崟r(shí)數(shù)據(jù)。
讀取保存在內(nèi)存中的索引時(shí),每4K block消耗一個(gè)字節(jié)。字節(jié)大小的讀取索引意味著您可以為每個(gè)volume獲取多達(dá)254個(gè)快照。
為每個(gè)副本讀取索引將會(huì)消耗一定量的內(nèi)存數(shù)據(jù)結(jié)構(gòu)。例如,1TB卷消耗256MB的內(nèi)存讀取索引。因此,我們未來(lái)會(huì)考慮將讀取的索引放在內(nèi)存映射文件中。
副本重建當(dāng)控制器檢測(cè)到某個(gè)副本出現(xiàn)故障時(shí),它會(huì)將副本標(biāo)記為處于錯(cuò)誤狀態(tài)。Longhorn volume管理器負(fù)責(zé)啟動(dòng)和協(xié)調(diào)重建錯(cuò)誤副本,過(guò)程如下所示:
Longhorn volume管理器創(chuàng)建一個(gè)空白副本,并調(diào)用控制器將空白副本添加到其副本集中。
要添加空白副本,控制器須執(zhí)行以下操作:
暫停所有讀寫操作 在WO(只寫)模式下添加空白副本 獲取所有現(xiàn)有副本的快照,即刻會(huì)有一個(gè)空白的差異磁盤 Unpauses全部讀取寫入操作,僅將寫入操作發(fā)送到新添加的副本 啟動(dòng)后臺(tái)進(jìn)程,將所有(除最新的以外)差異磁盤從好的副本同步到空白副本 同步完成后,所有副本的數(shù)據(jù)都具有一致性,volume管理器將新副本設(shè)置為RW(讀寫)模式
Longhorn volume管理器調(diào)用控制器從其副本集中刪除錯(cuò)誤的副本。
重新構(gòu)建副本并不是很有效。我們可以通過(guò)嘗試重新使用故障副本中剩余的分散文件來(lái)提高重建性能。
備份快照我喜歡Amazon EBS的工作方式——每個(gè)快照都自動(dòng)備份到S3。主存儲(chǔ)中沒(méi)有任何內(nèi)容。但是,我們決定讓Longhorn的快照和備份更靈活一些。將快照和備份操作分開(kāi)執(zhí)行。通過(guò)拍攝快照、備份此快照與上一個(gè)快照之間的差異以及刪除上一個(gè)快照來(lái)模擬EBS風(fēng)格的快照。我們還開(kāi)發(fā)了一種定期的備份機(jī)制,以幫助您自動(dòng)執(zhí)行此類操作。
通過(guò)檢測(cè)和傳輸快照之間的被更改的block, 我們實(shí)現(xiàn)了高效的增量備份。這個(gè)任務(wù)相對(duì)來(lái)說(shuō)比較容易, 因?yàn)槊總€(gè)快照都是一個(gè)差異文件, 只用存儲(chǔ)最后一個(gè)快照中的更改。為了避免存儲(chǔ)大量的小block,我們使用2MB block執(zhí)行備份操作。這意味著,如果2MB邊界中的任何4K block改變,我們將不得不備份整個(gè)2MB block。但我們認(rèn)為這在可管理性和效率之間提供了平衡。
在下圖中,我們已經(jīng)備份了snap2和snap3。每個(gè)備份保留自己的一組2MB block,兩個(gè)備份共享一個(gè)綠色block和一個(gè)藍(lán)色block。每個(gè)2MB block僅備份一次。這意味著當(dāng)我們從二級(jí)存儲(chǔ)中刪除備份時(shí),不能刪除它所使用的所有block。相反,我們會(huì)定期執(zhí)行垃圾回收,以便從二級(jí)存儲(chǔ)中清理未使用的block。
Longhorn將給定的volume的所有備份存儲(chǔ)在公用目錄下。以下是描述Longhorn如何存儲(chǔ)volume的備份的簡(jiǎn)單視圖。volume級(jí)元數(shù)據(jù)存儲(chǔ)在volume.cfg中。每個(gè)備份的元數(shù)據(jù)文件(例如snap2.cfg)相對(duì)較小,因?yàn)樗鼈冎话瑐浞葜兴?MB block的偏移量和校驗(yàn)和。屬于同一volume的所有備份的2MB block都存儲(chǔ)在公用目錄下,因此可以跨多個(gè)備份進(jìn)行共享。2MB block(.blk文件)被壓縮。由于使用了校驗(yàn)和來(lái)處理2MB block,所以我們刪除了同一volume的2MB block中一定程度的重復(fù)數(shù)據(jù)。
兩種部署模式Longhorn volume管理器執(zhí)行調(diào)度副本到節(jié)點(diǎn)的任務(wù)。我們可以調(diào)整調(diào)度算法,以不同的方式放置控制器、復(fù)制副本??刂破饕冀K放置在連接volume的主機(jī)上。另一方面,副本可以在運(yùn)行控制器的同一組計(jì)算服務(wù)器上或在一組專用存儲(chǔ)服務(wù)器上進(jìn)行。前者構(gòu)成了超聚合部署模型, 后者則構(gòu)成專用存儲(chǔ)服務(wù)器模型。
堅(jiān)信開(kāi)源才是技術(shù)的未來(lái),始終秉承開(kāi)源理念的Rancher Labs,此次推出的Longhorn依然是100%的開(kāi)源軟件。您可以通過(guò)在GitHub上下載Longhorn:。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26880.html
摘要:近日,版本發(fā)布了,它可支持任何集群的持久化存儲(chǔ)實(shí)現(xiàn)如今,基于云和容器的部署規(guī)模日益擴(kuò)大,分布式塊存儲(chǔ)系統(tǒng)也正變得越來(lái)越復(fù)雜,單個(gè)存儲(chǔ)控制器上的數(shù)量在不斷增加。 Longhorn項(xiàng)目是Rancher Labs推出的開(kāi)源的基于云和容器部署的分布式塊存儲(chǔ)新方式。Longhorn遵循微服務(wù)的原則,利用容器將小型獨(dú)立組件構(gòu)建為分布式塊存儲(chǔ),并使用容器編排來(lái)協(xié)調(diào)這些組件,形成彈性分布式系統(tǒng)。 自2...
摘要:在這方面通常有三種主要選項(xiàng)文件系統(tǒng)存儲(chǔ)塊存儲(chǔ)和對(duì)象存儲(chǔ)。結(jié)論塊存儲(chǔ)比文件系統(tǒng)存儲(chǔ)更靈活,這樣更容易適應(yīng)容器環(huán)境的塊存儲(chǔ)。對(duì)象存儲(chǔ)對(duì)象存儲(chǔ)與文件系統(tǒng)存儲(chǔ)或塊存儲(chǔ)不同。結(jié)論由于依賴于調(diào)用,對(duì)象存儲(chǔ)可能更復(fù)雜。 當(dāng)管理員首次開(kāi)始使用Docker容器時(shí),通常會(huì)使其感到驚訝的是, 容器本身采用的是非永久性存儲(chǔ)。當(dāng)容器被移除時(shí), 容器的存儲(chǔ)也被移除了。 當(dāng)然,如果沒(méi)有辦法實(shí)現(xiàn)永久存儲(chǔ),則容器應(yīng)用程...
摘要:年月日,由以下簡(jiǎn)稱主辦的第三屆企業(yè)容器創(chuàng)新大會(huì)以下簡(jiǎn)稱在北京喜來(lái)登大酒店盛大舉行。在未來(lái),希望能為中國(guó)用戶帶來(lái)更多更實(shí)用的容器技術(shù),推動(dòng)中國(guó)企業(yè)容器化的持續(xù)創(chuàng)新。 2019年6月20日,由Rancher Labs(以下簡(jiǎn)稱Rancher)主辦的第三屆企業(yè)容器創(chuàng)新大會(huì)(Enterprise Container Innovation Conference, 以下簡(jiǎn)稱ECIC)在北京喜來(lái)登大...
摘要:資源獲取方式根據(jù)下面的索引,大家可以選擇自己需要的資源,然后在松哥公眾號(hào)牧碼小子后臺(tái)回復(fù)對(duì)應(yīng)的口令,就可以獲取到資源的百度云盤下載地址。公眾號(hào)二維碼如下另外本文會(huì)定期更新,松哥有新資源的時(shí)候會(huì)及時(shí)分享給大家,歡迎各位小伙伴保持關(guān)注。 沒(méi)有一條路是容易的,特別是轉(zhuǎn)行計(jì)算機(jī)這條路。 松哥接觸過(guò)很多轉(zhuǎn)行做開(kāi)發(fā)的小伙伴,我了解到很多轉(zhuǎn)行人的不容易,記得松哥大二時(shí)剛剛決定轉(zhuǎn)行計(jì)算機(jī),完全不知道這...
摘要:現(xiàn)已全面發(fā)布這是容器管理平臺(tái)的最新版本。確認(rèn)支持當(dāng)初,在正式版發(fā)布之前,我們就已經(jīng)首先實(shí)現(xiàn)了對(duì)的支持。雖然項(xiàng)目計(jì)劃最終納入,但目前仍然是實(shí)驗(yàn)性的,在現(xiàn)階段和仍然保持著各自的獨(dú)立性。中的密文支持在中,我們添加了使用處理中的密文的能力。 Rancher v1.6現(xiàn)已全面發(fā)布!這是Rancher容器管理平臺(tái)的最新版本。盡管我們一如既往地建議您使用Rancher最新的穩(wěn)定版本進(jìn)行生產(chǎn)或關(guān)鍵任務(wù)...
閱讀 1663·2021-09-23 11:31
閱讀 955·2021-09-23 11:22
閱讀 1390·2021-09-22 15:41
閱讀 4115·2021-09-03 10:28
閱讀 2943·2019-08-30 15:55
閱讀 3571·2019-08-30 15:55
閱讀 2006·2019-08-30 15:44
閱讀 2743·2019-08-30 13:50