分布式文件系统对多个副本数据进行处理的方法及该系统的制作方法

文档序号:6489711阅读:303来源:国知局
分布式文件系统对多个副本数据进行处理的方法及该系统的制作方法
【专利摘要】本发明公开了分布式文件系统对多个副本数据进行处理的方法及该系统,其中,该方法包括:客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号;客户端从与地址集合包含的各节点地址对应的数据节点读取副本数据;客户端判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据。本发明方案能够保证分布式文件系统中多个副本数据的一致性。
【专利说明】分布式文件系统对多个副本数据进行处理的方法及该系统
【技术领域】
[0001]本发明涉及数据处理技术,尤其涉及分布式文件系统对多个副本数据进行处理的方法及该系统。
【背景技术】
[0002]参见图1,为现有技术的分布式文件系统结构示意图,该系统包括客户端、主节点服务器以及多个数据节点。实际应用中,每个文件被划分为多个数据块,每个数据块有多个副本数据,分别存储在多个数据节点上;副本数据,也就是数据块的备份数据。
[0003]当客户端需要从数据节点读取数据块的副本备份数据时,客户端从主节点服务器获取数据块多个副本数据的地址集合,从与地址集合包含的各节点地址对应的数据节点读取副本数据。
[0004]数据节点上保存的副本数据预先写入,在写入过程中,由于写入错误或数据节点故障等多种原因,常出现写入某些数据节点的数据发生损坏;而现有技术只在主节点服务器记录了多个副本数据的地址集合,不能获知哪些节点地址对应的数据节点上的数据损坏;这样,导致进行多个副本数据的读取时,读取到错误的数据,不能保证多个副本数据的
一致性。

【发明内容】

[0005]本发明提供了一种分布式文件系统对多个副本数据进行处理的方法,该方法能够保证分布式文件系统中多个副本数据的一致性。
[0006]本发明提供了一种分布式文件系统,该系统能够保证分布式文件系统中多个副本数据的一致性。
[0007]—种分布式文件系统对多个副本数据进行处理的方法,该方法包括:
[0008]客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号;
[0009]客户端从与地址集合包含的各节点地址对应的数据节点读取副本数据;
[0010]客户端判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据。
[0011]一种分布式文件系统,该系统包括客户端、主节点服务器和数据节点;
[0012]所述客户端,用于从主节点服务器获取数据块多个副本数据的地址集合和正确版本号;从与地址集合包含的各节点地址对应的数据节点读取副本数据;客户端还用于判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据;
[0013]所述主节点服务器,用于根据请求向客户端反馈数据块多个副本数据的地址集合和正确版本号;
[0014]所述数据节点,用于根据请求向客户端提供副本数据。
[0015]从上述方案可以看出,本发明中,不仅在主节点服务器记录数据块多个副本数据的地址集合,还记录多个副本数据的正确版本号;这样,客户端进行数据读取后,对数据中包含的版本号与正确版本号进行比较,如果一致,则确定为正确的数据,并进行保留,如果不一致,则确定为损坏的数据,丢掉这部分损坏的数据。本发明通过正确版本号对读取的副本数据进行判断,保证了数据块多副本数据的一致性。
【专利附图】

【附图说明】
[0016]图1为现有分布式文件系统的结构示意图;
[0017]图2为本发明分布式文件系统对多个副本数据进行处理的方法示意性流程图;
[0018]图3为本发明分布式文件系统写入副本数据的方法流程图实例一;
[0019]图4为本发明分布式文件系统写入副本数据的方法流程图实例二 ;
[0020]图5为采用图4实例在相邻数据块中记录节点数据块信息的示意图;
[0021]图6为本发明分布式文件系统的结构示意图。
【具体实施方式】
[0022]为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明进一步详细说明。
[0023]本发明中,不仅在主节点服务器记录数据块多个副本数据的地址集合,还记录多个副本数据的正确版本号,通过正确版本号对读取的副本数据进行判断,以保证数据块多副本数据的一致性。参见图2,为本发明分布式文件系统对多个副本数据进行处理的方法示意性流程图,其包括以下步骤:
[0024]步骤201,客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号。
[0025]每个文件被划分为多个数据块,每个数据块有多个副本数据,分别存储在多个数据节点上;副本数据,也就是数据块的备份数据。主节点记录了各文件包含的各数据块的信息,包括各数据块多个副本数据的地址集合和正确版本号,具体地,可对应数据块编号记录地址集合和正确版本号。在需要时,客户端可从主节点获取关于某文件的数据块信息,即数据块多个副本数据的地址集合和正确版本号。
[0026]步骤202,客户端从与地址集合包含的各节点地址对应的数据节点读取副本数据。
[0027]步骤203,客户端判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据。
[0028]如果不一致,说明数据发生损坏,则丢掉读取的这部分副本数据。
[0029]数据节点上保存的副本数据由客户端预先写入,写入数据节点的副本数据中包含版本号。向数据节点写入副本数据的方式多种多样,下面例举两种进行说明。
[0030]方式一、
[0031]图3为采用方式一写入副本数据的方法流程图,其包括以下步骤:
[0032]步骤301,客户端为数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为数据块设置版本号。
[0033]一般地,客户端预先从主节点服务器获取了多个节点地址,以供需要时使用,本步骤中,客户端从获取的节点地址中为数据块的多个副本数据选取节点地址。[0034]将地址集合表示为node_set,假设其包含三个节点地址(ipl,ip2,ip3),ipl、ip2和ip3为该数据块的三个副本分别所在的三个不同数据节点的ip地址;将设置的版本号表不为 chunk_version0
[0035]步骤302,客户端向节点地址对应的数据节点写入副本数据,并在写入各数据节点的副本数据中添加设置的版本号。
[0036]步骤303,如果副本数据在写入过程中发生损坏,则客户端增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中,并将增大后的版本号作为正确版本号,通知主节点服务器在硬盘上记录数据块多个副本数据的地址集合和正确版本号。
[0037]在写入过程中,由于写入错误或数据节点故障等多种原因,常出现写入某些数据节点的数据发生损坏;客户端获知出现数据损坏时,执行本步骤。
[0038]地址集合可采用摘要值的方式表示,具体地:将地址集合包含的多个节点地址经过排序,而后计算出一个摘要值,根据该摘要值,便可获知对应的地址集合。
[0039]步骤303之后,还可能进行数据追加写入,具体包括:
[0040]客户端从主节点服务器获取数据块的多个副本数据的地址集合和正确版本号;
[0041]客户端向与地址集合包含的各节点地址对应的数据节点,写入追加的数据;
[0042]如果数据在写入过程中发生损坏,则客户端增大从主节点服务器获取的版本号,将增大的版本号添加到写入数据节点的数据中;并将增大后的版本号作为最终的正确版本号,通知主节点服务器更新数据块多个副本数据的正确版本号。
[0043]同样地,以前述地址集合110如_8的为(丨?1,丨?2,丨?3)进行说明。假设上次写入数据的chunk_version=4。这次追加写的时候,因某种原因ip3无法写入,本次能写入的节点地址为ipl、ip2 ;由于这次追加写的地址和上次不一致,即ip3上发生了数据损坏,便增大chunk_version, chunk_version增加为5 ;也就是,经过追加写以后ipl, ip2上的该数据块的chunk_version=5, ip3上chunk_version=4。而后,将5作为最终的正确版本号,并通主节点服务器更新该数据块的正确版本号为5。
[0044]而后进行数据读取:客户端从主节点服务器获取node_Set (ipl, ip2,ip3)和chunk_version (5),分别从ipl、ip2和ip3上读取副本数据,此时,可能ip3上又能读取到数据了,但其chunk_version=4,和正确版本号5不一致,则需要丢掉从ip3上获取的数据。该过程中,错误数据最终会被剔出掉,从而保证了多个chunk副本之间的数据一致性。
[0045]采用方式一写入副本数据后,执行图2流程时,步骤201具体包括:
[0046]客户端向主节点服务器发送包含文件ID的信息获取请求;
[0047]主节点服务器从硬盘读取与文件ID对应的各数据块多个副本数据的地址集合和正确版本号,将读取的地址集合和正确版本号反馈给客户端。
[0048]方式二、
[0049]图4为采用方式二写入副本数据的方法流程图,其包括以下步骤:
[0050]步骤401,客户端为当前数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为当前数据块设置版本号。
[0051]一个文件包括多个数据块,每个数据块有多个副本数据;进行数据写入时,按照数据块编号,逐个完成数据块的写入。
[0052]一般地,客户端预先从主节点服务器获取了多个节点地址,以供需要时使用,本步骤中,客户端从获取的节点地址中为当前数据块的多个副本数据选取节点地址。
[0053]步骤402,客户端向节点地址对应的数据节点写入副本数据,在写入各数据节点的副本数据中添加设置的版本号,并添加上一数据块的地址集合和正确版本号。
[0054]举例说明,文件A包括5个数据块,分别为数据块O、数据块1、数据块2、数据块3和数据块4,如图5所示;完成数据块O的写入后,将数据块O多个副本数据的地址集合和正确版本号写入数据块I的多个副本数据中,具体可写入副本数据的头部;完成数据块I的写入后,将数据块I多个副本数据的地址集合和正确版本号Vl写入数据块2的多个副本数据中;完成数据块2的写入后,将数据块2多个副本数据的地址集合和正确版本号V2写入数据块3的多个副本数据中;完成数据块3的写入后,将数据块3多个副本数据的地址集合和正确版本号V3写入数据块4的多个副本数据中;完成数据块4的写入后,由于数据块4为最后一个数据块,则通知主节点服务器在硬盘上记录数据块4多个副本数据的地址集合和正确版本号V4。关于最有一个数据块地址集合和正确版本号的记录,记载在步骤403中。
[0055]步骤403,如果副本数据在写入过程中发生损坏,则客户端增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;将增大后的版本号作为当前数据块的正确版本号,判断当前数据块是否为最有一个数据块,如果是,将当前数据块的地址集合和正确版本号记录到下一数据块的各副本数据中,如果不是,则通知主节点服务器在硬盘上记录当前数据块多个副本数据的地址集合和正确版本号。
[0056]主节点服务器及其下属的多个数据节点为一个集群,主节点服务器的硬盘上存储了该集群的诸多重要属性信息;采用方式一,需要在主节点服务器硬盘上存储某文件的所有数据块副本数据的地址集合和正确版本号;而采用方式二,只需在主节点服务器硬盘上记录某文件的最后一数据块副本数据的地址集合和正确版本号,从而,大大节省主节点服务器的硬盘空间,提高了集群的容量。
[0057]采用方式二写入数据后,执行图2流程时,步骤201具体包括:
[0058]客户端向主节点服务器发送包含文件ID的信息获取请求;
[0059]主节点服务器从硬盘读取与文件ID对应的最后一个数据块多个副本数据的地址集合和正确版本号;并向各数据节点发送信息获取请求,接收数据节点反馈的除最后一个数据块外其他各数据块多个副本数据的地址集合和正确版本号,存储在内存中;
[0060]主节点服务器将与文件ID对应的所有数据块的地址集合和正确版本号反馈给客户端。
[0061]本发明中,不仅在主节点服务器记录数据块多个副本数据的地址集合,还记录多个副本数据的正确版本号;这样,客户端进行副本数据读取后,对读取的副本数据包含的版本号与正确版本号进行比较,如果一致,则确定为正确的副本数据,并进行保留,如果不一致,则确定为损坏的副本数据,丢掉这部分损坏的副本数据。这样,通过正确版本号对读取的副本数据进行判断,保证了数据块多副本数据的一致性。
[0062]参见图6,为本发明分布式文件系统的结构示意图,其包括客户端、主节点服务器和数据节点;
[0063]所述客户端,用于从主节点服务器获取数据块多个副本数据的地址集合和正确版本号;从与地址集合包含的各节点地址对应的数据节点读取副本数据;客户端还用于判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据;
[0064]所述主节点服务器,用于根据请求向客户端反馈数据块多个副本数据的地址集合和正确版本号;
[0065]所述数据节点,用于根据请求向客户端提供副本数据。
[0066]可选地,所述客户端包括获取单元、读取单元和判断单元,所述主节点服务器包括信息反馈单元,所述数据节点包括数据提供单元;
[0067]所述获取单元,用于从主节点服务器获取数据块多个副本数据的地址集合和正确版本号,将地址集合发送给读取单元,将正确版本号发送给判断单元;
[0068]所述读取单元,用于从与地址集合包含的各节点地址对应的数据节点读取副本数据,将副本数据包含的版本号发送给判断单元;
[0069]所述判断单元,用于判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据;
[0070]所述信息反馈单元,用于根据请求向客户端反馈数据块多个副本数据的地址集合和正确版本号;
[0071 ] 所述数据提供单元,用于根据请求向客户端提供副本数据。
[0072]可选地,所述客户端还包括第一选取设置单元、第一写入单元和第一更新通知单元;
[0073]所述第一选取设置单元,用于为数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为数据块设置版本号;将选取的节点地址和设置的版本号发送给第一写入单元和第一更新通知单元;
[0074]所述第一写入单元,用于向节点地址对应的数据节点写入副本数据,并在写入各数据节点的副本数据中添加设置的版本号;
[0075]所述第一更新通知单元,用于判断出数据在写入过程中发生损坏,则增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;并将增大后的版本号作为正确版本号,通知主节点服务器在硬盘上记录数据块多个副本数据的地址集合和正确版本号。
[0076]可选地,所述客户端包括第二选取设置单元、第二写入单元和第二更新通知单元;
[0077]所述第二选取设置单元,用于为当前数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为当前数据块设置版本号;将选取的节点地址和设置的版本号发送给第二写入单元和第二更新通知单元;
[0078]所述第二写入单元,用于向节点地址对应的数据节点写入副本数据,在写入各数据节点的副本数据中添加设置的版本号,并添加上一数据块的地址集合和正确版本号;
[0079]所述第二更新通知单元,用于判断出数据在写入过程中发生损坏,则增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;将增大后的版本号作为当前数据块的正确版本号,判断当前数据块是否为最有一个数据块,如果是,将当前数据块的地址集合和正确版本号记录到下一数据块的各副本数据中,如果不是,则通知主节点服务器在硬盘上记录当前数据块多个副本数据的地址集合和正确版本号。
[0080]可选地,所述获取单元包括请求发送子单元和接收子单元,所述主节点服务器包括信息获取单元;
[0081]所述请求发送子单元,用于向信息获取单元发送包含文件ID的信息获取请求;
[0082]所述接收子单元,用于接收信息反馈单元发送的与文件ID对应的所有数据块的地址集合和正确版本号;
[0083]所述信息获取单元,用于接收请求发送子单元发送的信息获取请求,从硬盘读取与文件ID对应的最后一个数据块多个副本数据的地址集合和正确版本号;并向各数据节点发送信息获取请求,接收数据节点反馈的除最后一个数据块外其他各数据块多个副本数据的地址集合和正确版本号,存储在内存中;将与文件ID对应的所有数据块的地址集合和正确版本号发送给所述信息反馈单元;
[0084]所述信息反馈单元,用于将与文件ID对应的所有数据块的地址集合和正确版本号反馈给客户端。
[0085]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种分布式文件系统对多个副本数据进行处理的方法,其特征在于,该方法包括: 客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号; 客户端从与地址集合包含的各节点地址对应的数据节点读取副本数据; 客户端判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据。
2.如权利要求1所述的方法,其特征在于,所述客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号之前,该方法还包括: 客户端为数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为数据块设置版本号; 客户端向节点地址对应的数据节点写入副本数据,并在写入各数据节点的副本数据中添加设置的版本号; 如果副本数据在写入过程中发生损坏,则客户端增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中,并将增大后的版本号作为正确版本号,通知主节点服务器在硬盘上记录数据块多个副本数据的地址集合和正确版本号。
3.如权利要求2所述的方法,其特征在于,所述通知主节点服务器在硬盘记录数据块多个副本数据的地址集合和正确版本号之后,该方法还包括数据追加写入,具体地: 客户端从主节点服务器获取数据块的多个副本数据的地址集合和正确版本号; 客户端向与地址集合包含的各节点地址对应的数据节点,写入追加的数据; 如果数据在写入过程中发生损坏,则客户端增大从主节点服务器获取的版本号,将增大的版本号添加到写入数据节点的数据中;并将增大后的版本号作为最终的正确版本号,通知主节点服务器更新数据块多个副本数据的正确版本号。
4.如权利要求2所述的方法,其特征在于,所述客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号,具体包括: 客户端向主节点服务器发送包含文件ID的信息获取请求; 主节点服务器从硬盘读取与文件ID对应的各数据块多个副本数据的地址集合和正确版本号,将读取的地址集合和正确版本号反馈给客户端。
5.如权利要求1所述的方法,其特征在于,所述客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号之前,该方法还包括: 客户端为当前数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为当前数据块设置版本号; 客户端向节点地址对应的数据节点写入副本数据,在写入各数据节点的副本数据中添加设置的版本号,并添加上一数据块的地址集合和正确版本号; 如果副本数据在写入过程中发生损坏,则客户端增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;将增大后的版本号作为当前数据块的正确版本号,判断当前数据块是否为最有一个数据块,如果是,将当前数据块的地址集合和正确版本号记录到下一数据块的各副本数据中,如果不是,则通知主节点服务器在硬盘上记录当前数据块多个副本数据的地址集合和正确版本号。
6.如权利要求5所述的方法,其特征在于,所述客户端从主节点服务器获取数据块多个副本数据的地址集合和正确版本号,具体包括:客户端向主节点服务器发送包含文件ID的信息获取请求; 主节点服务器从硬盘读取与文件ID对应的最后一个数据块多个副本数据的地址集合和正确版本号;并向各数据节点发送信息获取请求,接收数据节点反馈的除最后一个数据块外其他各数据块多个副本数据的地址集合和正确版本号,存储在内存中; 主节点服务器将与文件ID对应的所有数据块的地址集合和正确版本号反馈给客户端。
7.一种分布式文件系统,其特征在于,该系统包括客户端、主节点服务器和数据节点; 所述客户端,用于从主节点服务器获取数据块多个副本数据的地址集合和正确版本号;从与地址集合包含的各节点地址对应的数据节点读取副本数据;客户端还用于判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据; 所述主节点服务器,用于根据请求向客户端反馈数据块多个副本数据的地址集合和正确版本号; 所述数据节点,用于根据请求向客户端提供副本数据。
8.如权利要求7所述的系统,其特征在于,所述客户端包括获取单元、读取单元和判断单元,所述 主节点服务器包括信息反馈单元,所述数据节点包括数据提供单元; 所述获取单元,用于从主节点服务器获取数据块多个副本数据的地址集合和正确版本号,将地址集合发送给读取单元,将正确版本号发送给判断单元; 所述读取单元,用于从与地址集合包含的各节点地址对应的数据节点读取副本数据,将副本数据包含的版本号发送给判断单元; 所述判断单元,用于判断读取的副本数据包含的版本号与正确版本号是否一致,如果是,则保留读取的副本数据,否则丢掉读取的副本数据; 所述信息反馈单元,用于根据请求向客户端反馈数据块多个副本数据的地址集合和正确版本号; 所述数据提供单元,用于根据请求向客户端提供副本数据。
9.如权利要求8所述的系统,其特征在于,所述客户端还包括第一选取设置单元、第一写入单元和第一更新通知单元; 所述第一选取设置单元,用于为数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为数据块设置版本号;将选取的节点地址和设置的版本号发送给第一写入单元和第一更新通知单元; 所述第一写入单元,用于向节点地址对应的数据节点写入副本数据,并在写入各数据节点的副本数据中添加设置的版本号; 所述第一更新通知单元,用于判断出数据在写入过程中发生损坏,则增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;并将增大后的版本号作为正确版本号,通知主节点服务器在硬盘上记录数据块多个副本数据的地址集合和正确版本号。
10.如权利要求8所述的系统,其特征在于,所述客户端包括第二选取设置单元、第二写入单元和第二更新通知单元; 所述第二选取设置单元,用于为当前数据块的多个副本数据分别选取节点地址,由选取的节点地址组成地址集合,并为当前数据块设置版本号;将选取的节点地址和设置的版本号发送给第二写入单元和第二更新通知单元; 所述第二写入单元,用于向节点地址对应的数据节点写入副本数据,在写入各数据节点的副本数据中添加设置的版本号,并添加上一数据块的地址集合和正确版本号; 所述第二更新通知单元,用于判断出数据在写入过程中发生损坏,则增大设置的版本号,将增大的版本号添加到写入各数据节点的副本数据中;将增大后的版本号作为当前数据块的正确版本号,判断当前数据块是否为最有一个数据块,如果是,将当前数据块的地址集合和正确版本号记录到下一数据块的各副本数据中,如果不是,则通知主节点服务器在硬盘上记录当前数据块多个副本数据的地址集合和正确版本号。
11.如权利要求10所述的系统,其特征在于,所述获取单元包括请求发送子单元和接收子单元,所述主节点服务器包括信息获取单元; 所述请求发送子单元,用于向信息获取单元发送包含文件ID的信息获取请求; 所述接收子单元,用于接收信息反馈单元发送的与文件ID对应的所有数据块的地址集合和正确版本号; 所述信息获取单元,用于接收请求发送子单元发送的信息获取请求,从硬盘读取与文件ID对应的最后一个数据块多个副本数据的地址集合和正确版本号;并向各数据节点发送信息获取请求,接收数据节点反馈的除最后一个数据块外其他各数据块多个副本数据的地址集合和正确版本号,存储在内存中;将与文件ID对应的所有数据块的地址集合和正确版本号发送给所述信息反馈单元; 所述信息反馈单元,用 于将与文件ID对应的所有数据块的地址集合和正确版本号反馈给客户端。
【文档编号】G06F17/30GK103729352SQ201210381299
【公开日】2014年4月16日 申请日期:2012年10月10日 优先权日:2012年10月10日
【发明者】伍海君, 朱会灿, 邓大付, 李锐, 邹永强, 董乘宇, 陈晓东, 刘畅, 赵大勇, 杨绍鹏, 阙太富, 王磊, 张书鑫, 张银锋 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1