百摩网
当前位置: 首页 生活百科

ceph应用(使用系列之一RGW使用)

时间:2023-06-29 作者: 小编 阅读量: 2 栏目名: 生活百科

使用系列之一RGW使用No.1概述上一篇”CephDashboard全功能集成安装“博文中详细介绍了Ceph的安装过程,鉴于篇幅的关系没有介绍如何使用Ceph,本文开始Ceph使用系列之一CephRGW使用介绍No.2Ce。


No.1 概述

上一篇”Ceph Dashboard全功能集成安装“博文中详细介绍了Ceph 的安装过程,鉴于篇幅的关系没有介绍如何使用Ceph,本文开始Ceph使用系列之一Ceph RGW使用介绍。

No.2 Ceph RGW介绍

Ceph对象网关是在librados之上构建的对象存储接口,旨在为应用程序提供通往Ceph存储集群的RESTful网关,Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是用于与Ceph存储群集进行交互的HTTP服务器。其有多种体现方式,如:apache2、Nginx等,Ceph从Hammer版本后使用civetweb替换原apache2并作为默认的http服务器。

由它提供openstack Swift和Amazon S3兼容的接口,介绍如下:

  • S3兼容口:该对象存储接口其与Amazon S3 RESTful API的大部分子集兼容。
  • Swift兼容口:该对接存储接口与OpenStack Swift API的大部分子集兼容。

S3和Swift API共享同一个命名空间,所以可以使用两种API访问相同的数据。

温馨提醒

CivetWeb基于Mongoose项目,是一个易于使用,功能强大的C / C嵌入式Web服务器,其已经被直接嵌入了radosgw服务中。

其实除了上面提到两种访问接口外,Ceph还有一个管理接口admin API ,其通过rest api的方式对对象存储进行管理,命令行形式为radosgw-admin,可以用来执行创建用户、删除用户、列出用户等操作,示意图如下:

No.3 使用radosgw-admin管理RGW

Ceph RGW对象存储中有以下四个概念:

  • 用户:对象存储应⽤用的使⽤用者,一个⽤用户拥有一个或多个存储桶。RGW向您提供的⽤用户帐户包括了AK(AccessKeyId)和SK(SecretAccessKeyID)。通过使⽤用 AK 和 SK 对称加密的⽅方法来验证某个请求的发送者身份。
  • 桶:桶(Bucket)是RGW中存储对象的容器。对象存储提供了基于桶和对象的扁平化存储方式,桶中的所有对象都处于同一逻辑层级,去除了文件系统中的多层级树形目录结构。
  • 对象:对象(Object)是RGW中数据存储的基本单位,一个对象实际是一个文件的数据与其相关属性信息(元数据)的集合体。用户上传至RGW的数据都以对象的形式保存在桶中。
  • 访问密钥(AK/SK):RGW支持通过AK/SK认证方式进行认证鉴权,即使用Access Key ID(AK)/Secret Access Key(SK)加密的方法来验证某个请求发送者身份。

用户账户有两种类型:

用户:是作为s3接口用户;

子用户:是作为swift接口用户,子用户附属于用户。

radosgw-admin创建用户。

#radosgw-admin user create --u --display-name="First User"{"user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"subusers": [],"keys": [{"user": "testuser","access_key": "H1YNZV2D6E1X5PGAOSZ7","secret_key": "MasCiG6OJvEpXRTye4Ptz13SAI2dv5s3zUDXLO26"}],"swift_keys": [],"caps": [],"op_mask": "read, write, delete","default_placement": "","default_storage_class": "","placement_tags": [],"bucket_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"user_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"temp_url_keys": [],"type": "rgw","mfa_ids": []}

创建子用户。

#radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full{"user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"subusers": [{"id": "testuser:swift","permissions": "full-control"}],"keys": [{"user": "testuser","access_key": "H1YNZV2D6E1X5PGAOSZ7","secret_key": "MasCiG6OJvEpXRTye4Ptz13SAI2dv5s3zUDXLO26"}],"swift_keys": [{"user": "testuser:swift","secret_key": "yahhi4lK5eJIw0cMg0cSm1ylRcncbAEGzQoximrw"}],"caps": [],"op_mask": "read, write, delete","default_placement": "","default_storage_class": "","placement_tags": [],"bucket_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"user_quota": {"enabled": false,"check_on_raw": false,"max_size": -1,"max_size_kb": 0,"max_objects": -1},"temp_url_keys": [],"type": "rgw","mfa_ids": []}

查看用户。

# radosgw-admin user list["user-rgw","rgw","admin","test","testuser"]

查看用户详细信息。

# radosgw-admin user info --uid test{"user_id": "test","display_name": "test","email": "","suspended": 0,"max_buckets": 1000,"subusers": [],"keys": [...................................................

更多可使用-h查看。

#radosgw-admin -husage: radosgw-admin <cmd> [options...]commands: user createcreate a new user user modifymodify user user infoget user info user rmremove user user suspendsuspend a user user enablere-enable user after suspension user checkcheck user info user statsshow user stats as accounted by quota subsystem user listlist users caps addadd user capabilities caps rmremove user capabilities subuser createcreate a new subuser subuser modifymodify subuser subuser rmremove subuser key createcreate access key key rmremove access key bucket listlist buckets (specify --allow-unordered for..............................................

No.4使用Ceph Dashboard操作RGW

Ceph Dashboard现在支持如下三个功能:

  • 查看RGW主机
  • 管理用户
  • 管理桶

Ceph Dashboard现在还不支持上传下载对象,只能通过s3或swift接口实现,详细可参见下文。

以下为查看RGW主机界面。

新建用户。

创建子用户。

可以看到子用户附属于用户。

创建桶界面。

No.5 使用s3接口操作RGW

5.1 安装s3cmd

要想使用s3接口访问rgw,需要先安装aws s3cmd命令行客户端工具,s3cmd 是一款 Amazon S3 命令行工具。它不仅能上传、下载、同步,还能设置权限。

下载并s3cmd工具。

因为s3cmd是使用python写的,所以要先安装pip工具。

# yum -y install python-pip

安装s3cmd,因为pip默认使用国外源,容易下载失败,所以加了临时使用国内源的命令,使用-i指定国内源地址。

#pip install s3cmd -i https://pypi.tuna.tsinghua.edu.cn/simple

查看s3cmd版本。

#s3cmd --versions3cmd version 2.1.0

配置s3cmd配置文件, 该命令会在/root目录下,创建.s3cfg文件。文件内容包括向导式中填写的内容。也可以一直下一步生成空的配置文件,直接编辑配置文件,也可以按向导提示填入内容。

#s3cmd --configureEnter new values or accept defaults in brackets with Enter.Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.Access Key: YC57G2R9XJIMNG825UQPSecret Key: PEDoHiveAUhEciOeeKFYLkaArlhtSy5mBMfWhWesDefault Region [US]:Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.S3 Endpoint [s3.amazonaws.com]: 192.168.123.172:7480Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be usedif the target S3 system supports dns based buckets.DNS-style bucket hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: 192.168.123.172:7480/%(bucket)Encryption password is used to protect your files from readingby unauthorized persons while in transfer to S3Encryption password:Path to GPG program [/usr/bin/gpg]:When using secure HTTPS protocol all communication with Amazon S3servers is protected from 3rd party eavesdropping. This method isslower than plain HTTP, and can only be proxied with Python 2.7 or newerUse HTTPS protocol [Yes]: noOn some networks all internet access must go through a HTTP proxy.Try setting it here if you can't connect to S3 directlyHTTP Proxy server name:New settings: Access Key: YC57G2R9XJIMNG825UQP Secret Key: PEDoHiveAUhEciOeeKFYLkaArlhtSy5mBMfWhWes Default Region: US S3 Endpoint: 192.168.123.172:7480 DNS-style bucket hostname:port template for accessing a bucket: 192.168.123.172:7480/%(bucket) Encryption password: Path to GPG program: /usr/bin/gpg Use HTTPS protocol: False HTTP Proxy server name: HTTP Proxy server port: 0Test access with supplied credentials? [Y/n]Please wait, attempting to list all buckets...Success. Your access key and secret key worked fine :-)Now verifying that encryption works...Not configured. Never mind.Save settings? [y/N] yConfiguration saved to '/root/.s3cfg'

生产了s3cf配置文件,如果哪些设置有错误,也可以直接编辑该配置文件。

#vi /root/.s3cfg[default]access_key = YC57G2R9XJIMNG825UQPaccess_token = PEDoHiveAUhEciOeeKFYLkaArlhtSy5mBMfWhWescloudfront_host = 192.168.123.172:7480host_base = 192.168.123.172:7480host_bucket = 192.168.123.172:7480/%(bucket)

5.2 测试s3接口访问

测试 S3 访问。

#yum install python-boto

新建 Python 脚本。

#vi s3test.py

添加下面的内容到该文件中。

#!/usr/bin/python# -*- coding:utf-8 -*-import boto.s3.connectionaccess_key = 'YC57G2R9XJIMNG825UQP'secret_key ='PEDoHiveAUhEciOeeKFYLkaArlhtSy5mBMfWhWes'conn = boto.connect_s3(aws_access_key_id=access_key,aws_secret_access_key=secret_key,host='ceph-node1',port=7480,is_secure=False,calling_format=boto.s3.connection.OrdinaryCallingFormat(),)bucket = conn.create_bucket('my-new-bucket')for bucket in conn.get_all_buckets():print"{name} {created}".format(name=bucket.name,created=bucket.creation_date,)

将 host替换为你配置了网关服务的主机的主机名,比如 gateway host.将access_key替换为正确的值,将secret_key替换为正确的值。

运行这个脚本:

#python s3test.py

输出类似下面的内容,说明使用s3接口连接rgw对象成功。

# python s3test.pyceph-rgw 2020-05-03T08:29:44.240Zmy-new-bucket 2020-03-14T10:21:03.179Znew-bucket-510d1576 2020-03-16T13:20:59.151Znew-bucket-6c11b821 2020-03-14T10:37:11.406Znextcloud 2020-05-03T04:32:28.547Zrgw-test 2020-05-02T13:17:02.184Ztest 2020-03-12T14:55:47.827Ztest3 2020-03-14T10:45:54.065Ztest4 2020-03-14T10:46:03.714Ztest5 2020-03-14T10:46:37.318Ztest6 2020-03-14T10:47:46.755Ztest7 2020-03-14T10:51:50.559Ztest8 2020-03-14T10:53:02.755Ztest9 2020-05-02T14:15:04.193Z

5.3 使用s3cmd操作rgw

使用s3cmd创建桶。

# s3cmd mb s3://ceph-rgwBucket 's3://ceph-rgw/' created

上传文件到rgw对象存储。

#s3cmd put prometheus-2.16.0.linux-amd64.tar.gz s3://ceph-rgwWARNING: Could not refresh roleWARNING: Could not refresh roleWARNING: Could not refresh roleupload: 'prometheus-2.16.0.linux-amd64.tar.gz' -> 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz' [part 1 of 4, 15MB] [1 of 1]15728640 of 15728640 100% in0s29.05 MB/s doneWARNING: Could not refresh roleupload: 'prometheus-2.16.0.linux-amd64.tar.gz' -> 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz' [part 2 of 4, 15MB] [1 of 1]15728640 of 15728640 100% in0s36.41 MB/s doneWARNING: Could not refresh roleupload: 'prometheus-2.16.0.linux-amd64.tar.gz' -> 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz' [part 3 of 4, 15MB] [1 of 1]15728640 of 15728640 100% in0s36.27 MB/s doneWARNING: Could not refresh roleupload: 'prometheus-2.16.0.linux-amd64.tar.gz' -> 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz' [part 4 of 4, 11MB] [1 of 1]12422595 of 12422595 100% in0s31.92 MB/s doneWARNING: Could not refresh role

查看桶中的对象。

#s3cmd ls s3://ceph-rgwWARNING: Could not refresh roleWARNING: Could not refresh role2020-05-03 08:48 59608515 s3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz下载对象#s3cmd get s3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz prometheus-2.16.0.linux-amd64.tar.gz.bakdownload: 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz' -> 'prometheus-2.16.0.linux-amd64.tar.gz.bak' [1 of 1]59608515 of 59608515 100% in0s 142.89 MB/s done

删除桶中的对象,可以使用rm或del命令。

#s3cmd rm s3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gzWARNING: Could not refresh roleWARNING: Could not refresh roledelete: 's3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz'

查看对象占用空间大小

#s3cmd du -H s3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz56.8471097946M 1 objects s3://ceph-rgw/prometheus-2.16.0.linux-amd64.tar.gz

更多命令请参考s3cmd帮助。

No.6 使用S3 Browser访问RGW

打开s3 browser,点击"add new account"。

输入以下内容,注意签名版本为V4。

查看rgw对象存储中所有的桶。

No.7 使用swift接口操作RGW

安装swift命令行工具,配置swift安装源,因为swift是openstack一个组件,所以此处配置为openstack源,当然也有直接安装swift的命令,不用配置openstack源,不过本人没有使用那个方法安装成功,本文还是使用配置OpenStack源的方法。

#viopenstack.repo[openstack]name=openstackbaseurl=https://mirrors.cloud.tencent.com/centos/7.7.1908/cloud/x86_64/openstack-train/gpgcheck=0gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

安装swift命令工具。

#yum install python2-swiftclient

查看swiftclient版本。

#swift --versionpython-swiftclient 3.8.1

查看子用户名称和密钥。

#radosgw-admin user info --uid testuser["user-rgw","rgw","admin","test10","test","testuser"]

#radosgw-admin user info --uid testuser................................................................................"swift_keys": [{"user": "testuser:swift","secret_key": "yahhi4lK5eJIw0cMg0cSm1ylRcncbAEGzQoximrw"}],..................................................................................

使用swift命令查看rgw对象存储状态。

#swift -A http://192.168.123.172:7480/auth/v1.0 -U testuser:swift -K "yahhi4lK5eJIw0cMg0cSm1ylRcncbAEGzQoximrw" statAccount: v1Containers: 0Objects: 0Bytes: 0Objects in policy "default-placement-bytes": 0 Bytes in policy "default-placement-bytes": 0 Containers in policy "default-placement": 0Objects in policy "default-placement": 0Bytes in policy "default-placement": 0Accept-Ranges: bytesConnection: Keep-AliveX-Timestamp: 1588493556.96500X-Account-Bytes-Used-Actual: 0X-Trans-Id: tx0000000000000000003c8-005eae7cf4-f2b7f-defaultContent-Type: text/plain; charset=utf-8X-Openstack-Request-Id: tx0000000000000000003c8-005eae7cf4-f2b7f-default

但上面每次需要输入很长的命令,所以可以通过设置环境变量减少每次输入的命令,当然想要永久生效需要把以下内容存储在用户的环境变量文件中,如.bashrc文件中。

把下面的USER和KEY替换成实际的值。

#export ST_AUTH=http://production01.acme.com/auth/v1.0export ST_USER=user01export ST_KEY=password

现在就可以通过简短命令操作对象存储了。

创建桶

#swift post bucket

上传文件到桶中

创建桶并上传文件到rgw桶中

#swift upload bucket ceph-iscsi-config-2.7-1.el7.noarch.rpm#swift list bucketceph-iscsi-config-2.7-1.el7.noarch.rpm

温馨提醒

upload命令上传文件到指定的桶中,如果存在桶名称则直接上传到指定的桶中,如果没有存在桶名称,则新建桶并上传对象到此桶中

查看指定桶中的对象,不加桶名称即查看所有。

#swift list bucket

从指定桶下载对象

#swift download bucket ceph-iscsi-config-2.7-1.el7.noarch.rpmceph-iscsi-config-2.7-1.el7.noarch.rpm [auth 0.004s, headers 0.008s, total 0.009s, 17.761 MB/s]

查看指定桶中的对象。

#swift stat bucket ceph-iscsi-config-2.7-1.el7.noarch.rpmAccount: v1Container: bucketObject: ceph-iscsi-config-2.7-1.el7.noarch.rpmContent Type: application/x-rpmContent Length: 94632Last Modified: Tue, 05 May 2020 14:42:34 GMTETag: 86f3c320ed3b5c2ea8389710c31b7997Meta Mtime: 1583988649.031517Accept-Ranges: bytesConnection: Keep-AliveX-Timestamp: 1588689754.31758X-Trans-Id: tx0000000000000000000ce-005eb1801f-fc7b1-defaultX-Openstack-Request-Id: tx0000000000000000000ce-005eb1801f-fc7b1-default

删除对象。

#swift delete bucket ceph-iscsi-config-2.7-1.el7.noarch.rpmceph-iscsi-config-2.7-1.el7.noarch.rpm

更多命令请参考swift帮助。

No.8 使用CloudBerry 访问RGW

打开cloudberry explorer。

设置账号。

点击增加存储。

按以下内容输入详细,使用第三节创建的testuser:swift子用户以及密钥。

温馨提醒

注意地址栏中的auth关键字,这个必须要有否者连接不上

注意keystone version中使用的是“do not user”

No.9 Nextcloud网盘应用访问Ceph RGW

9.1 nextcloud介绍

上面演示了使用很多图形或命令行工具操作使用RGW对象存储,其实RGW使用最多的还是通过应用程序使用它,本节使用一个网盘应用软件Nextcloud,配置其后端存储使用RGW对象存储,为用户提供网盘应用,用户上传的文件实现是存储在了RGW对象存储中,示意图如下:

9.2 安装nextcloud

为了简化安装步骤,本文使用snap工具安装nextcloud.

配置epel源。

#yum install epel-release

安装snapd工具。

#yum install snapd

配置snapd socket。

#systemctl enable --now snapd.socket

配置软链接。

#ln -s /var/lib/snapd/snap /snap

通过snap安装nextcloud。

#snap install nextcloud

查看源已通过snap安装的nextcloud应用。

#snap listNameVersionRevTracking Publisher Notescore16-2.44.39066 stablecanonical✓ corenextcloud 18.0.4snap1 20498 stablenextcloud✓ -

snap安装的nextcloud默认使用80端口,输入IP地址打开nextcloud配置界面。

设置用户名和密码,点击完成。

9.1 配置nextcloud

安装完成打开nextcloud使用界面。

配置nextcloud使用rgw存储,点击应用按钮。

在已禁用应用中选择“external storage support",点击启用。

完成后点击设置查看左侧功能菜单出现”外部存储“。

创建nextcloud桶。

# s3cmd mb s3://nextcloudBucket 's3://nextcloud/' created

查看桶。

# s3cmd ls |grep nextcloud2020-05-03 04:32 s3://nextcloud

配置nextcloud使用s3访问rgw对象存储,填写目录名称,并勾选启用路径,当左边出现绿色的图标表示连接成功。

温馨提醒

启用路径样式后,将使用发出请求http://hostname.domain/bucket。只有这格式的才能对接成功(默认为http://bucket.hostname.domain)。

回到nextcloud界面,看到出现rgw目标,只有上传到该目录的文件才会使用s3接口存储到rgw存储中。

上传文件到rgw目录后,查看对应桶中的对象。

至此nextcloud使用s3对接使用rgw完成,当然nextcloud也支持使用swift接口对接nextcloud,但只能是在OpenStack中安装的swift,不能是单独的swift,因为nextcloud配置swift接口的界面中必须写keystone版本。

当然RGW的使用还不止上文中提到的这些,RGW还有

Multisite场景,其涉及的内容比较多,有机会再单独写一篇文章。

    推荐阅读
  • 高中化学氧化还原顺序表(氧化还原反应中的概念与规律)

    同理,不同的还原剂与同一氧化剂反应时,反应条件越易,其还原剂的还原性越强。

  • 关于黑洞的知识(关于黑洞的知识有什么)

    关于黑洞的知识黑洞源自恒星,我们的太阳最终的结局可能也是恒星。黑洞发展历程一般经过如下阶段,恒星耗尽氢燃料之后会探索外层炸飞变成超新星,然后再进一步就会形成黑洞。从外看黑洞,因为光逃逸不出来,所以是黑的。黑洞一般密度很大,所以说黑洞的恐怖之处在于它相对来说很小。所以说黑洞可以造成时空的扭曲,如果黑洞最终变得无限小,那就是一个“奇点”。

  • 祛除体内寒湿的民间方子(把寒湿彻底去除)

    白扁豆这味药不偏不倚,药性非常平和,用它来祛湿,又不必担心会损伤脾胃的阳气。参苓白术散用上,它能够培土,能够让脾气带着精华的部分上输到肺,肺气壮大,就能一鼓作气把外邪赶出去,咳嗽很快就能好过来。

  • 夏天可以用蒸脸器吗(夏天可以不可以蒸脸)

    另外,皮肤受热气熏蒸后,皮肤弹性增强,皱纹减少。为保证安全,使用过程中应随时密切观察喷雾状况,容器内的水量不能超过水位警界线,以免水沸时突然喷射出来烫伤皮肤,会对皮肤造成烫伤,甚至破坏皮肤组织,引起永久性面部损伤。

  • 祝兄弟十八岁生日快乐简单(送给好兄弟18岁生日的祝福语)

    昨日的风雨,已经远去今天的你我,还将继续忘记所有的哭泣,明天的你依然美丽生日快乐!祝兄弟十八岁生日快乐简单昨日的风雨,已经远去。悠悠的云里有淡淡的诗,淡淡的诗里有绵绵的喜悦,绵绵的喜悦里有我轻轻的祝福,生日快乐!关心你的朋友在这一天衷心祝你快乐到永远生日快乐一年又一年,真诚的祝福传递与你,愿开心、幸福!你是涓涓细流,滋润着我们的心田,生日快乐。

  • 60岁老人标准体重是多少(60岁以后的老人体重真的越)

    而60岁以上的老年人,标准的BMI值应该在24.9左右,我们以170cm的老人举例,标准体重普遍为65公斤。但令人惊讶的是,这个“U”型的顶点,并非在“标准体重”之上,而是在偏向右边的位置。换句话说,维持标准体重的老人,并非是最长寿的,反倒在不过度肥胖的基础上,稍稍超重标准体重范围的老人,长寿潜力更大,死亡率也最低。反之,体重稍微超出标准值的老人,全因死亡率反而比标准体重的老人降低20%左右。

  • 螃蟹做熟后能保存多久(螃蟹做熟之后可以放多久)

    跟着小编一起来看一看吧!螃蟹做熟后能保存多久熟的螃蟹在常温下能保存5小时,用保鲜膜密封好,放在冰箱的冷藏室中,能够保存8小时。放入冰箱冷冻层中,可以保存1~2天。螃蟹属软甲纲,十足目,是甲壳类动物,身体被硬壳保护着,靠鳃呼吸。在生物分类学上,它与虾、龙虾、寄居蟹是同类动物。绝大多数种类的螃蟹生活在海里或近海区,也有一些栖于淡水或陆地。常见的螃蟹有梭子蟹、远海梭子蟹、青蟹和中华绒螯蟹等。

  • 奥迪推头啥意思(奥迪抬头是什么意思)

    并并不是,毫无疑问奥迪的确很容易发生推头现象,可是在各种比赛中依然能见到奥迪的影子,并没有由于职业赛车手没有钱车辆置换,只是由于奥迪的优越性也十分显著。此外,车辆快速可靠性好还象征着安全系数高,很多人吐槽说开奥迪没脑子,就算是刚拿驾驶证的萌新也可以把奥迪开得很快,但这刚好便是奥迪的优点所属。

  • 地图标注地址怎么标入驻(地图标注操作指南-筹备店必备)

    市面上,主要有百度地图、高德地图、苹果自带地图等。

  • 每个月不同的情人节寓意是什么(情人节的来历和意义有哪些)

    每年的2月14日是西方国家传统的情人节。瓦伦丁节,又称情人节,是欧美和大洋洲的一些国家的民族节日。贵族阶级为维护其统治,残暴镇压民众和基督教徒。是时有一位教徒瓦伦丁,被捕入狱。他们相互爱慕,并得到典狱长女儿的照顾。统治阶级下令将他执行死刑。表明他光明磊落的心迹和对典狱长女儿的深深眷恋。因此3月14日又称为白色情人节。亚洲地区被赋予多种含义的“情人节”情人节作为一个国际性的节日,在亚洲也有很多国家庆祝。