热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenStack系列讲座3:OpenStack详细解读(定义,好处与使用实例)

OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础

OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目。它的社区拥有超过130家企业及1350位开发者,这些机构与个人都将OpenStack作为基础设施即服务(简称IaaS)资源的通用前端。OpenStack项目的首要任务是简化云的部署过程并为其带来良好的可扩展性。本文希望通过提供必要的指导信息,帮助大家利用OpenStack前端来设置及管理自己的公共云或私有云。

内容详解

OpenStack包括数个由社区维护的项目,具体情况我将在后文中详加阐述。

  • OpenStack Compute (Nova)是一套控制器,用于为单个用户或使用群组启动虚拟机实例。它同样能够用于为包含着多个实例的特定项目设置网络。OpenStack Compute在公共云处理方面堪与Amazon EC2相提并论;而在私有云方面也毫不逊色于VMware的产品。在公共云中,这套管理机制将提供预制的镜像或是为用户创建的镜像提供存储机制,这样用户就能够将镜像以虚拟机的形式启动。
  • OpenStack 对象存储(Swift)是一套用于在大规模可扩展系统中通过内置冗余及容错机制实现对象存储的系统。这些对象能够通过一个REST API或是像Cyberduck这样可以对接对象存储API的客户端加以恢复。
  • OpenStack镜像服务 (Glance)是一套虚拟机镜像查找及检索系统。它能够以三种形式加以配置:利用OpenStack对象存储机制来存储镜像;利用Amazon的简单存储解决方案(简称S3)直接存储信息;或者将S3存储与对象存储结合起来,作为S3访问的连接器。OpenStack镜像服务支持多种虚拟机镜像格式,包括VMware(VMDK)、Amazon镜像(AKI、ARI、AMI)以及VirtualBox所支持的各种磁盘格式。镜像元数据的容器格式包括Amazon的AKI、ARI以及AMI信息,标准OVF格式以及二进制大型数据。

最近根据投票结果纳入“核心”项目集团的新成员是一项代号为“Keystone”的身份服务以及一套基于Django的仪表板接口,后者的代号为“Horizon”。本文中的仪表板示例也来源于这一项目。

初窥门径

尝试探索OpenStack Compute最为合适的起点莫过于devstack.org站点,它为开发人员或是概念验证者们提供了一套脚本化安装方案。来自docs.openstack.org的OpenStack入门教程同样具备一步步详细的指示,帮助我们在Ubuntu 11.10中设定OpenStack Compute、镜像服务以及多合一对象存储的安装。如果大家拥有一台自己的服务器,并打算利用它搞一些概念验证工作,那么 点击此处 可以获取一套专门供裸机使用的StackOps安装系统。有了它,我们可以通过CD或者USB记忆棒完成OpenStack的安装。

各位还可以利用docs.openstack.org上提供的对象存储管理员指南或者OpenStack Compute管理员指南中的安装说明,设置出生产级别的OpenStack对象存储集群或是OpenStack Compute云。

OpenStack的使用

安装结束之后,接下来我们就要看看如何利用部分安全功能,通过仪表板接口或是命令行启动OpenStack Compute实例。我还将展示面向对象存储的、用于通过块存储备份镜像或者视频的接口。

登录到仪表板接口

OpenStack的仪表板是安装在运行着Nova API服务的节点中的。通过这套仪表板,大家应该可以看出Nova API实例的URL与有效仪表板的证书一样,也包括用户名及密码。

只要有了用户名与密码,大家可以利用OpenStack仪表板实现许多功能。首先,通过云管理员分配给我们的用户名及密码登录到仪表板中。

登录之后,可以看到服务器使用量与每台服务器的当前状态,如图一。

OpenStack 
图一

大家也可以点击查看哪些服务器处于终止状态。请注意,这里的正常运行时间并不会显示每套单独服务器的状态。

用户仪表板左侧的菜单提供的是我们所能执行的仪表板操作选项,所发出的命令通过API传递至终端。系统面板(也就是页面最上方的菜单)提供另一套视图,使得管理员能够监控使用状态、检查云中正在运行的服务并管理用户及项目的配额。

如何在仪表板中启用实例

现在,大家已经初步熟悉了仪表板的总体布局,接下来就该利用自己的云启动一套新的虚拟机系统,也就是镜像实例。一般来说,我们的云管理员应该已经上传了启动所必需的镜像。如果没有,我将在后文中讨论如何创建自定义镜像。要想启动镜像,首先找到仪表板中的镜像选项,在选定所要启动的镜像类型后点击启用按钮。图二中显示了可用的几款Ubuntu服务器镜像以及一款Windows镜像。

OpenStack 仪表盘 
图二

如果大家通过点击启动按钮完成镜像启动工作,那么接下来将会看到如图三所示的启动实例窗口。

 
图三

此窗口包含了为服务器命名、在启动中插入某些用户数据、选择CPU数量、硬盘空间以及RAM数量等功能,设置完成后点击“启动实例”。现在我们已经拥有了一套虚拟服务器,无论是SSH还是正常使用都没问题,就像普通的服务器一样。但同时我们也省去了大量组装、部署、布线等常规服务器所带来的诸多麻烦。

如何使用虚拟机实例

所谓实例,是指具备特殊规格内存、硬盘空间以及CPU的虚拟机。在OpenStack Compute的辅助下,我们通过对云的调整及启用,可以让用户实现启动实例、重启实例以及保存快照以备日后再利用等工作。

通过观察用户仪表板中的实例,我们能够清楚地看到自己刚刚所启动的实例。对于每个实例,我们都有数个操作选项,例如终止实例、重新启动、保存快照等等——这些操作的实现都依靠OpenStack Compute API 1.1的支持。我们也可以打开一个控制台窗口或是查看某个处于仪表板内的实例的日志文件。

为镜像添加安全密钥

安全功能是我们控制发往自己虚拟机访问的必要保障,OpenStack通过两种认证机制管理客户端工具。一种是仪表板自带的用户名及密码机制;另一种则是“密钥对”,密钥为用户的实例提供安全验证。只有当用户能够同时通过以上两种认证过程时,才能够获得在OpenStack云中访问目标实例的权限。密钥对(包括公共密钥对与私有密钥对)在我们启用实例时可以作为非常有用的参数。举例来说,要启动一套实例并加以访问,我们必须利用SSH创建一套密钥对,这样就能够识别通过SSH访问该实例的用户。

OpenStack仪表板让我们能够在密钥对选项中通过点击创建新密钥对管理密钥。在下图当中,大家可以为自己的密钥对命名,然后点击创建密钥按钮。创建新密钥对的过程包括登记公共密钥及下载私有密钥(一个.pem文件)两部分。由于这一创建工作完全是为我们的使用服务,因此请务必像对待其它SSH私有密钥一样妥善加以保管。详见图四。

 
图四

利用工具为自动化脚本启动实例

我们可以轻松地通过仪表板启动实例,但更多时候大家也许希望能够利用命令行加以启动,以使用某些脚本。这里只要安装python-nova客户端,我们就能在命令行中获得可以使用Compute API接口的nova shell命令。安装客户端,然后提供用户名及密码,设置适当的环境变量,这样我们就拥有了在命令行中向云端发送命令的能力。

安装python-nova客户端, 点此下载 原始码,并将其安装于大家常用的python环境中。

$ curl -O http://pypi.python.org/packages/source/p/python-novaclient/pythonnovaclient-2.6.3.tar.gz
$ tar -zxvf python-novaclient-2.6.3.tar.gz
$ cd python-novaclient-2.6.3
$ sudo python setup.py install

现在大家已经安装了python-nova客户端,输入以下内容以确认安装:

$ nova help

此时大家应该看到一个nova命令行客户端的所有命令与参数列表。通过设置环境变量所需的参数,我们可以在命令行上快速执行这些命令。为nova命令添加--username,或者将这些参数设为环境变量:

export NOVA_USERNAME=joecool
export NOVA_API_KEY=coolword
export NOVA_PROJECT_ID=coolu

项目ID与Tenant一样,都依赖于我们所使用的验证服务。当云管理员设置OpenStack时,应该注意为其分配一个类似NOVA_URL这样能够为nova所辨识的验证端点。

export NOVA_URL=http://hostname:5000/v2.0
export NOVA_VERSION=1.1

在建立自己的云之前,我们需要通过向镜像服务查询哪些配置类型可以奏效,来了解什么样的镜像能够被正确使用。镜像服务有点像云领域的iTunes:我们可以在利用自己常用的镜像在云中创建实例之前,先在列表中查看哪些镜像适用。大家可以利用以下命令获得镜像信息列表,包括名称、状态以及ID:

$ nova image-list

以下是返回信息的示例:

+----+-------------------------------------------------------+--------+
| ID | Name | Status |
+----+-------------------------------------------------------+--------+
| 1 | aki-tty | ACTIVE |
| 2 | ari-tty | ACTIVE |
| 3 | ami-tty | ACTIVE |
| 6 | CentOS_5.4_x64 | ACTIVE |
| 14 | maverick-kernel | ACTIVE |
| 15 | maverick | ACTIVE |
| 20 | ubuntu-kernel | ACTIVE |
| 21 | ubuntu-ramdisk | ACTIVE |
| 22 | ubuntu | ACTIVE |
| 24 | CentOS_5.6_x64_v5.7.14_Dev1 | ACTIVE |
+----+-------------------------------------------------------+--------+

接下来大家需要了解其中每一项的相对大小,这里使用flavor-list参数。

$ nova flavor-list
+----+-----------+-----------+------+----------+-------+------------+----------+
| ID | Name | Memory_MB | Swap | Local_GB | VCPUs | RXTX_Quota | RXTX_Cap |
+----+-----------+-----------+------+----------+-------+------------+----------+
| 1 | m1.tiny | 512 | | 0 | | | |
| 2 | m1.small | 2048 | | 20 | | | |
| 3 | m1.medium | 4096 | | 40 | | | |
| 4 | m1.large | 8192 | | 80 | | | |
| 5 | m1.xlarge | 16384 | | 160 | | | |
| 89 | Boom | 2 | | 20 | | | |
+----+-----------+-----------+------+----------+-------+------------+----------+

我们也可以使用grep来缩小查找结果列表,举例来说,通过以下命令查看CentOS镜像的信息:

$ nova image-list | grep 'CentOS'
| 6 | CentOS_5.4_x64 | ACTIVE |
| 24 | CentOS_5.6_x64_v5.7.14_Dev1 | ACTIVE |

在反馈得出的信息方面,我们可以选择图像与描述相结合的方式创建自己的虚拟服务器,并启动实例。

要启动服务器,首先选择一个镜像,找出该镜像及相关描述的ID,并对其进行调整;接下来利用ID创建命令。根据上文所给出的资料,我们可以看到Ubuntu Maverick镜像的ID为15。如果我们实际只打算搭建一个2GBy内存、20GB硬盘空间的小型服务器,那么可以选择m1.small——因为它所使用的ID为2.将这些参数添加进boot命令中,这样新建虚拟服务器的工作就完成了。

$ nova boot --flavor=2 --image=15 testserver
+-----------+--------------------------------------+
| Property | Value |
+-----------+--------------------------------------+
| adminPass | **************** |
| created | 2011-09-01T21:40:41Z |
| flavor | m1.small |
| hostId | |
| id | 1805 |
| image | maverick |
| metadata | {} |
| name | testserver |
| progress | 0 |
| status | BUILD |
| updated | 2011-09-01T21:40:41Z |
| uuid | ce044452-f22e-4ea4-a3ec-d1cde80cf996 |
+-----------+--------------------------------------+

现在,大家使用nova list命令即可查看自己在云中所部署的新服务器:

$ nova list
+------+------------+--------+--------------------------------+
| ID | Name | Status | Networks |
+------+------------+--------+--------------------------------+
| 1805 | testserver | ACTIVE | private=10.4.96.81 |
+------+------------+--------+--------------------------------+

状态选项共有三种,分别是:ACTIVE(活跃), BUILDING(创建中)以及 UNKNOWN(未知)。BUILDING状态一般是暂时性的,因此大家很可能在自己操作的时候不会遇到。如果出现UNKNOWN状态,不妨反复运行nova list命令,直到该状态消失。

要查看特定服务器的全部信息,使用nova show命令加上我们从nova list命令中获得的服务器ID。

$ nova show 1805
+-----------------+----------------------------------------------------------+
| Property | Value |
+-----------------+----------------------------------------------------------+
| created | 2011-09-01T21:40:41Z |
| flavor | m1.small |
| hostId | 58a7430169aa42cde5ce2456b0cb5bb5ac1ab0703bab6420e8a49e6e |
| id | 1805 |
| image | maverick |
| metadata | {} |
| name | testserver |
| private network | 10.4.96.81 |
| progress | 100 |
| status | ACTIVE |
| updated | 2011-09-01T21:40:46Z |
| uuid | ce044452-f22e-4ea4-a3ec-d1cde80cf996 |
+-----------------+----------------------------------------------------------+

通过以上几项nova命令的基本演练,现在大家已经在建立自有云的道路上迈出了第一步!

创建自定义镜像,并打包上传至OpenStack

成功从列表中查看当前可用的镜像之后,大家可能还希望添加符合自己需要的镜像。要创建自定义镜像,首要要从ISO文件开始。CentOS、Debian、Fedora或者Ubuntu,只要合用,都可以下载对应的ISO文件。 点击此处 获取适合初学者的初始镜像。在这里获取的都是.tar及.gz文件,其中包含虚拟机镜像(*.img),一套Xen兼容内核/虚拟磁盘(后者由xen-内核/vmlinuz*与xen-内核/initrd*两部分构成)以及一套KVM兼容内核/虚拟磁盘(后者由kvm-内核/vmlinuz*与kvm-内核/initrd*两部分构成)。大家可以通过命令行或者使用VirtualBox以及kvm之类的虚拟化平台打造自定义镜像。创建一个.vdi镜像,再利用quemu-utils中的quemu-img工具将其转换为可用格式。

大家可能还希望让镜像变得更大,向其中添加类似Linux标准基础这样的软件包,以使其更适合日常工作中的实际应用。一旦在VirtualBox或者其它任何平台上完成了自定义工作,将最终文件拷贝到安装了euca2ools的Linux计算机中。在文章的下一节中,我将向大家介绍如何将自己的自定义镜像通过命令行中的euca-命令导入OpenStack云中。

如何将新镜像导入OpenStack镜像服务(Glance)

当一套自定义虚拟机镜像创建完成,我们可以将磁盘镜像数据及镜像元数据存储在镜像服务中。

这里使用Eucalyptus工具集也是个不错的选择,该工具集是一款作用于云的开源命令行客户端,并且兼容Amazon的EC2 API。安装euca2ools命令行工具并确保自己的环境包含了Eucalyptus运行所必需的认证机制。

上传内核,并注意Amazon内核镜像(简称AKI):

euca-bundle-image -i kvm-kernel/vmlinuz-2.6.28-11-generic --kernel true
euca-upload-bundle -b jbbucket -m /tmp/vmlinuz-2.6.28-11-generic.manifest.xml
euca-register jbbucket/vmlinuz-2.6.28-11-generic.manifest.xml

上传虚拟磁盘并注意Amazon虚拟磁盘镜像(简称ARI),这样大家就能获得绑定镜像时必需的参考信息:

euca-bundle-image -i kvm-kernel/initrd.img-2.6.28-11-generic --ramdisk true
euca-upload-bundle -b jbbucket -m /tmp/initrd.img-2.6.28-11-generic.manifest.xml
euca-register jbbucket/initrd.img-2.6.28-11-generic.manifest.xml

上传自定义设备镜像,通过在之前步骤中获取到的值指定内核及虚拟磁盘:

euca-bundle-image -i centos-5.5-x86_64.img --kernel aki-XXXXXXXX --ramdisk ari-XXXXXXXX
euca-upload-bundle -b jbbucket -m /tmp/centos-5.5-x86_64.img.manifest.xml
euca-register jbbucket/centos-5.5-x86_64.img.manifest.xml

上传至镜像服务器的过程可能会持续一段时间——但当我们使用Eucalyptus的“describe images”命令时,新的AMI应该显示如下内容。

euca-describe-images
IMAGE ami-reey5wk5 jbbucket/centos.5-5.x86-64.img.manifest.xml myproject available private x86_64 machine ami-f4ks8moj ami-jqxvgtmd

如何通过UI使用存储对象

大家可能利用REST API来访问自己在OpenStack中的存储对象,但更多的时候,我们只希望能有一套良好的用户界面,以便通过拖拽操作实现文件存储。开源客户端Cyberduck,包括Mac OS X版本以及Windows版本,就针对从FTP到对象存储等一系列机制提供了一套用户界面。由于它的开源及跨平台特性,这款优秀的界面完全可以安装在OpenStack对象存储当中(类似于Rackspace云文件)。大家在cyberduck.ch站点下载即可。要实现其在OpenStack中的安装,我们需要变更某个 隐藏的配置选项 。这里需要将URL由default /v1.0修改为/auth/v1.0。要在Mac OS X中修改授权URL,则需要打开终端窗口并输入:

Defaults defaults write ch.sudo.cyberduck cf.authentication.context /auth/v1.0

Cyberduck 3.8.1中包含一个用于在打开某个链接时选择Swift(OpenStack对象存储)的下拉菜单。启动Cyberduck,然后点击新建连接工具栏按钮或者选择文件>打开连接。

选择Swift(OpenStack对象存储)并输入以下值:

  • Server(服务器):输入已安装的Swift服务器的URL。
  • Port(端口):由于用户是通过http进行连接,因此输入443.
  • Username(用户名):在冒号后输入账户名称,然后是用户名,例如test:tester。
  • Password(密码):根据上一步使用的账户名称及用户名输入对应密码。

图五显示的是一个Cyberduck Swift连接实例。


图五

大家在自己的对象存储系统中完成容器创建之后,就可以通过拖拽的方式将来自桌面的文件拷贝到Cyberduck当中,如图六所示。


图六

到这里,我们已经可以将所有的图片及视频作为内置冗余备份到大规模扩展存储系统当中。

获取帮助及其它进一步操作

如果大家在安装或测试过程中遇到问题,或者是无法使某些功能正常工作,OpenStack社区能够提供解决方案。Launchpad中的“Answers”主题是寻求帮助的理想所在。

Launchpad解答主题中的部分章节罗列如下:

  • OpenStack Compute
  • OpenStack 对象存储
  • OpenStack 镜像服务

如果还有其它疑问,各位不妨向 https://launchpad.net/~openstack 中的OpenStack邮件列表发送邮件,并在 文档 中留下评论,或者在 #openstack的IRC频道 中与其他共同讨论。

 

【51CTO.com译文,转载请注明原文作译者和出处。】

 

原文:http://drdobbs.com/web-development/231902601?pgno=1 


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了在Linux系统中,使用chown命令将django项目目录下的static目录的拥有者从root改为eureka的问题。作者尝试了多种命令,包括chown和sudo chown等,但都没有成功修改拥有者。文章提供了相关目录的权限信息,并补充了项目所在磁盘和操作系统的信息。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了在RHEL 7中的系统日志管理和网络管理。系统日志管理包括rsyslog和systemd-journal两种日志服务,分别介绍了它们的特点、配置文件和日志查询方式。网络管理主要介绍了使用nmcli命令查看和配置网络接口的方法,包括查看网卡信息、添加、修改和删除配置文件等操作。 ... [详细]
  • Python脚本编写创建输出数据库并添加模型和场数据的方法
    本文介绍了使用Python脚本编写创建输出数据库并添加模型数据和场数据的方法。首先导入相应模块,然后创建输出数据库并添加材料属性、截面、部件实例、分析步和帧、节点和单元等对象。接着向输出数据库中添加场数据和历程数据,本例中只添加了节点位移。最后保存数据库文件并关闭文件。文章还提供了部分代码和Abaqus操作步骤。另外,作者还建立了关于Abaqus的学习交流群,欢迎加入并提问。 ... [详细]
  • Tomcat安装与配置教程及常见问题解决方法
    本文介绍了Tomcat的安装与配置教程,包括jdk版本的选择、域名解析、war文件的部署和访问、常见问题的解决方法等。其中涉及到的问题包括403问题、数据库连接问题、1130错误、2003错误、Java Runtime版本不兼容问题以及502错误等。最后还提到了项目的前后端连接代码的配置。通过本文的指导,读者可以顺利完成Tomcat的安装与配置,并解决常见的问题。 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了markdown[软件代理设置]相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
yuzhenhua09
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有