设为首页 收藏本站
查看: 3162|回复: 6

[经验分享] FastDFS+nginx+php的完整应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2013-8-12 09:51:08 | 显示全部楼层 |阅读模式

FastDFS功能简介:


    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。


主页地址:http://code.google.com/p/fastdfs/     #目前据说这上面已停止更新


FastDFS特点:


   FastDFS主要解决了大容量的文件(主要是图片、视频、音频等小文件)存储和高并发访问的问题,并在文件存取时实现了负载均衡。与其它类GFS系统相比,FastDFS最大的特点在于它是一个轻量级的系统,体现在以下几个方面。

首先,FastDFS的结构比较简单,主要由Client、Tracker server和Storage server三部分组成。Client通过Tracker server得到Storage server的信息,然后直接与Storage server通信访问文件,避免了Tracker server成为瓶颈。

   第二,FastDFS不对文件进行分块存储,与支持文件分块存储的DFS相比,更加简洁高效。

   第三,FastDFS中的文件ID是由Storage server生成后返回给客户端的。文件ID中包含了组号、文件相对路径和文件名等(文件ID中还包含文件大小、时间戳、源Storage server IP地址、文件内容校验码、随机数等),client可以根据文件ID直接定位到文件所在的组(但具体通过哪个Storage server下载需要询问Tracker server根据负载均衡原则指定)。因此FastDFS不需要存储文件索引信息。而其他文件系统则通常需要由NameServer存储文件索引信息,如mogileFS采用MySQL数据库来存储文件索引以及系统相关的信息,而MySQL很容易成为系统瓶颈。


FastDFS特性:


文件不分块存储,上传的文件和OS文件系统中的文件一一对应

支持相同内容的文件只保存一份,节约磁盘空间

下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用

支持在线扩容

支持主从文件

存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整体性能更好


FastDFS架构示意图:

150752312.jpg


文件上传流程:

150923713.jpg



1. Client询问Tracker server应上传到哪个Storage server;

2. Tracker server返回一台可用的Storage server,返回的数据为该Storage server的IP地址和端口;

3. Client直接和该Storage server建立连接,进行文件上传。

4. Storage server返回新生成的文件ID,文件上传结束。

5. 连接关闭。


文件下载流程:

151132328.jpg



1. client询问tracker可以下载指定文件的storage,参数为文件ID(组名和文件名);

2. tracker返回一台可用的storage;

3. client直接和storage通信完成文件下载。

4. 连接关闭。



FastDFS论坛:http://bbs.chinaunix.net/forum-240-1.html

FastDFS google code:http://code.google.com/p/fastdfs/


关于tracker server 和 storage server之间是如何交互的,请看我在附件中的PPT、以及PDF格式的电子书,还有一个是关于配置文件的参数以及fastdfs各项参数是如何调优的,都有详细的说明,下面就让我们开始配置过程吧!

配置环境:

CentOS 5.8 x 64

tracker server: 192.168.25.204

storage server: 192.168.25.207

php 客户端    :192.168.25.205


一、安装部署

1、配置tracker server


[Shell] 纯文本查看 复制代码
解决依赖关系
[iyunv@varnish ~]# tar xf libevent-2.0.21-stable.tar.gz
[iyunv@varnish ~]# cd libevent-2.0.21-stable
[iyunv@varnish libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent
[iyunv@varnish libevent-2.0.21-stable]# make
[iyunv@varnish libevent-2.0.21-stable]# make install
[iyunv@varnish libevent-2.0.21-stable]# echo '/usr/local/libevent/include/' >> /etc/ld.so.conf
[iyunv@varnish libevent-2.0.21-stable]# echo '/usr/local/libevent/lib/' >> /etc/ld.so.conf
[iyunv@varnish libevent-2.0.21-stable]# ldconfig

安装fastdfs
注意:我们这里使用的是最新版本的fastdfs,由于最新版的fastdfs取消了自带的http功能,所以这里我们就不对make.sh做修改。

[iyunv@varnish ~]# tar xf FastDFS_v4.07.tar.gz
[iyunv@varnish ~]# cd FastDFS
[iyunv@varnish FastDFS]# ./make.sh C_INCLUDE_PATH=/usr/local/libevent/include/ LIBRARY_PATH=/usr/local/libevent/lib/
[iyunv@varnish FastDFS]# ./make.sh install
[iyunv@varnish FastDFS]# ls /etc/fdfs/
client.conf  http.conf  mime.types  storage.conf  tracker.conf



配置文件解释:

tracker.conf   //负责均衡调度服务器配置文件

client.conf      //客户端上传配置文件

http.conf     //http服务器配置文件

storage.conf//文件存储服务器配置文件

mime.types   //文件类型配置文件


修改tracker server的配置文件

[backcolor=white !important]
[Shell] 纯文本查看 复制代码
[iyunv@varnish ~]# vim /etc/fdfs/tracker.conf
bind_addr= 改为 bind_addr=192.168.25.204
base_path=/home/yuqing/fastdfs 改为  base_path=/data/fastdfs
http.server_port=8080 改为 http.server_port=80

创建/data/fastdfs,用于存放tracker日志、storage server等信息
[iyunv@varnish ~]# mkdir -p /data/fastdfs
启动tracker server
[iyunv@varnish ~]# /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf




142659964.png


2、配置storage server

上述安装过程是一样的这里就不在进行演示,请大家见谅!



[Shell] 纯文本查看 复制代码
修改storage server的配置文件:
[iyunv@web2 ~]# vim /etc/fdfs/storage.conf
bind_addr= 改为 bind_addr=192.168.25.207
base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs
store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs
tracker_server=192.168.209.121:22122 改为 tracker_server=192.168.25.204:22122
http.server_port=8888 改为 http.server_port=80


创建数据目录,并启动storage server(有刷屏的感觉)

142858333.png

145904109.jpg

查看tracker和storage的链接情况:

142930512.png


3、测试上传文件

我们这里在tracker server上配置客户端上传文件



[Shell] 纯文本查看 复制代码
[/font][/color][/p][p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][iyunv@varnish ~]# vim /etc/fdfs/client.conf
base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs
tracker_server=192.168.0.197:22122
改为
tracker_server=192.168.25.204:22122


上传个文件,如果上传成功,会返回一个url,我们记住这个url,等下要用到

143200736.jpg


http://192.168.25.207/group1/M00/00/00/wKgZz1IEYnSASqs2AAAGgpr6pLY3507236_big


二、在storage server上安装nginx

1、安装nginx关于fastdfs集合的扩展模块,注意这个模块nginx默认的编译模块中没有,需手动下载安装



[Shell] 纯文本查看 复制代码
[iyunv@web2 ~]# tar xf fastdfs-nginx-module_v1.15.tar.gz
[iyunv@web2 ~]# cd fastdfs-nginx-module


只需解压开就可,这里我们再解释一下,好些朋友,在加载这个模块的时候,会报一些很莫名其妙的错,这个本人在编译的时候也是亲身体会,百思不得其解,后来经过点播才发现,版本不匹配,这里fastdfs官网给有详细说明,请看模块解压目录下的HISTORY、INSTALL问件,这里面很详细的安装和版本匹配说明(吃一堑一定要长一智)


安装nginx之前需要解决很多依赖关系的,这里不做说明,我这里是安装过得了,就不贴出来了,请大家按照网上的教程,解决依赖关系!

[backcolor=white !important]
[Shell] 纯文本查看 复制代码
[iyunv@web2 ~]# tar xf nginx-1.4.1.tar.gz
[iyunv@web2 ~]# cd nginx-1.4.1
[iyunv@web2 nginx-1.4.1]# ./configure 
>   --prefix=/usr 
>   --sbin-path=/usr/sbin/nginx 
>   --conf-path=/etc/nginx/nginx.conf 
>   --error-log-path=/var/log/nginx/error.log 
>   --http-log-path=/var/log/nginx/access.log 
>   --pid-path=/var/run/nginx/nginx.pid  
>   --lock-path=/var/lock/nginx.lock 
>   --user=nginx 
>   --group=nginx 
>   --with-http_ssl_module 
>   --with-http_flv_module 
>   --with-http_stub_status_module 
>   --with-http_gzip_static_module 
>   --http-client-body-temp-path=/var/tmp/nginx/client/ 
>   --http-proxy-temp-path=/var/tmp/nginx/proxy/ 
>   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ 
>   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi 
>   --http-scgi-temp-path=/var/tmp/nginx/scgi 
>   --with-pcre 
>   --add-module=/root/fastdfs-nginx-module/src
[iyunv@web2 nginx-1.4.1]# make
[iyunv@web2 nginx-1.4.1]# make install

[iyunv@web2 ~]# cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
[iyunv@web2 ~]# vim /etc/fdfs/mod_fastdfs.conf
base_path=/tmp 改为 base_path=/data/fastdfs
tracker_server=tracker:22122 改为 tracker_server=192.168.25.204:22122
store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs

[iyunv@web2 ~]# ln -s /data/fastdfs/data /data/fastdfs/data/M00

修改nginx的配置文件
[iyunv@web2 ~]# vim /etc/nginx/nginx.conf
在server段添加如下内容:
location /group1/M00{
            alias   /data/fastdfs/data;
            ngx_fastdfs_module;
        }
[iyunv@web2 ~]# /usr/sbin/nginx -t
ngx_http_fastdfs_set pid=28145
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[iyunv@web2 ~]# /usr/sbin/nginx
ngx_http_fastdfs_set pid=28148



然后我们在浏览器中输入上边上传的url,访问一下:

143949811.jpg 我们可以很清楚的看到400,Bad Request,那么我们换种访问方式试试


[backcolor=white !important]
[Shell] 纯文本查看 复制代码
修改nginx的配置文件
[iyunv@web2 ~]# vim /etc/nginx/nginx.conf
 location /M00{
            alias   /data/fastdfs/data;
            ngx_fastdfs_module;
        }
之后重启服务
[iyunv@web2 ~]# /usr/sbin/nginx -s stop
ngx_http_fastdfs_set pid=28947
[iyunv@web2 ~]# /usr/sbin/nginx
ngx_http_fastdfs_set pid=28948[/mw_shl_code[/font][/backcolor]
[/font][/color]

[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]然后我们把url中的group1手动去掉,访问一下:[/font][/color][/p]
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][color=#4b02][attach]23234[/attach][/color][/font][/color][/p]
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]很明显可以访问,我在配置的时候也是百思不得其解,网上也有此类问题,无意间打开了一个相关的帖子,终于让我找到了答案。[/font][/color][/p][p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][mw_shl_code=shell,true]

我们把nginx的配置文件修改回来
location /group1/M00{
            alias   /data/fastdfs/data;
            ngx_fastdfs_module;
        }

修改fastdfs的模块配置文件
[iyunv@web2 ~]# vim /etc/fdfs/mod_fastdfs.conf
url_have_group_name = false 改为 true      #关于啥意思,配置文件中有解释


然后我们再来访问一下:


144707928.jpg


如上图所示,ok了,加上组名可以访问,到这里基本上已经配置完成了


但是我在网上搜解决上述解决方法时,看到了一篇博文,结合了php,我觉得有必要分享一下,那好继续我们苦逼的配置吧!


三、PHP客户端配置


因为php的客户端安装也会依赖fastdfs本身的一些库文件,所以请保证已经安装了fastdfs

安装过程和上边一样,这里参考上边安装过程!


这个php客户端所在的测试机本来我就在上边搭建好了LNMP,所以只需参考上述过程安装fastdfs即可!

[Shell] 纯文本查看 复制代码

[iyunv@web1 ~]# cd /root/FastDFS/php_client
[iyunv@web1 php_client]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[iyunv@web1 php_client]# ./configure --with-php-config=/usr/local/php/bin/php-config
[iyunv@web1 php_client]# make && make install
[iyunv@web1 php_client]# cat fastdfs_client.ini >> /usr/local/php/etc/p
pear.conf             php-fpm.conf          php-fpm.conf.default
[iyunv@web1 php_client]# cat fastdfs_client.ini >> /etc/php.ini

验证模块是否被正常加载

[iyunv@web1 php_client]# /usr/local/php/bin/php -m | grep fastdfs_client
fastdfs_client              #说明模块已加载

[iyunv@web1 php_client]# cp ../conf/client.conf /etc/fdfs/
[iyunv@web1 php_client]# vim /etc/fdfs/client.conf

修改为如下配置:

tracker_server=192.168.25.204:22122
http.tracker_server_port=80

重新加载php
[iyunv@web1 php_client]# service php-fpm reload

然后我们写个小页面,写个php脚本上传
[iyunv@web1 ~]# echo "php client is here." > /opt/upload.txt
[iyunv@web1 ~]# vim test.php
        var_dump(function_exists('fastdfs_storage_upload_by_filename'));
        $ret = fastdfs_storage_upload_by_filename('/opt/upload.txt');
        var_dump($ret);
?>



执行php脚本

[iyunv@web1 ~]# /usr/local/php/bin/php test.php

结果如下图所示:

145428506.jpg


我们来访问下试试;

145705390.jpg




到此为止我们关于fastdfs的完整应用就介绍到此了,希望大家都动手做一下!还有关于fastdfs php插件的使用方法和函数调用方法,可以看/root/FastDFS/php_client/README,里面有详细介绍!此篇博文过程中如果有什么不对的地方,还请朋友们们指正,大家一起进步!




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-8324-1-1.html 上篇帖子: FastDFS+Nginx多硬盘的配置 下篇帖子: FastDFS4 + Ubuntu12安装及部署

尚未签到

发表于 2013-8-16 17:50:07 | 显示全部楼层
我妈常说,我们家要是没有电话就不会这么穷。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-18 19:59:03 | 显示全部楼层
关羽五绺长髯,风度翩翩,手提青龙偃月刀,江湖人送绰号——刀郎。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-21 02:40:36 | 显示全部楼层
有道理。。。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-24 07:29:34 | 显示全部楼层
与时俱进,你我共赴高潮!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-26 09:12:59 | 显示全部楼层
学海无涯,回头是岸!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

尚未签到

发表于 2013-8-28 09:45:30 | 显示全部楼层
男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表