`
code727
  • 浏览: 66767 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

FastDFS安装配置

阅读更多

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

1.实现目标

 目标清单:

1)192.168.31.240和192.168.31.241为两个TrackerServer,它们将提供文件的上传/下载功能;

2)对外部应用程序来说,访问地址应始终为http://192.168.31.204,其中204是由某台TrackerServer上的Keeplived提供的VIP,并且由当前主机上的Nginx来对外提供HTTP服务;

3)默认情况下,应由240(Master)上的Nginx来提供服务,当Master上的Nginx发生故障变为不可用时,Keeplived将VIP漂移到241(Master_BackUp)上,并由该机的Nginx来继续提供服务;

4)SrorageServer将提供文件的存储服务,共分为两个组,即group1(242和243)和group2(244和245);

5)当TrackerServer上传文件并存储在某一个组的某台SrorageServer后,该组内的其余SrorageServer将上传的文件作一次同步存储处理。如果在同步期间,该组内的某一台SrorageServer处于不可用时,则当此SrorageServer恢复正常后仍然能同步到文件。

2.安装依赖  

    在所有TrackerServer和SrorageServer上进行下列步骤。

2.1安装gcc、openssl、pcre和perl

yum install gcc gcc+ gcc-c++ 
yum install openssl openssl-devel 
yum install pcre pcre-devel
yum install perl perl-devel
 2.2安装libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/master.zip 
unzip master.zip
cd libfastcommon-master/
./make.sh
./make.sh install
    libfastcommon.so默认安装到了/usr/lib64/libfastcommon.so,而FastDFS主程序设置的lib目录是/usr/local/lib,所以设置软连接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
 3.安装FastDFS    在所有TrackerServer和SrorageServer上进行下列步骤。
# 将FastDFS安装文件解压到/usr/local目录后进入
tar -zxvf FastDFS_v5.07.tar.gz -C /usr/local
cd /usr/local/FastDFS
 3.1修改make.sh
vi make.sh
   将TARGET_PREFIX=$DESTDIR/usr 修改为 TARGET_PREFIX=$DESTDIR/usr/local

3.2编译安装

./make.sh
./make.sh install
 4.tracker配置   
    在TrackerServer(240和241)上进行下列步骤。

4.1创建数据及日志存放目录

mkdir -p /home/data/fastdfs/tracker
4.2创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件
cd /etc/fdfs
cp -r tracker.conf.sample tracker.conf
# 编辑Tracker配置文件
vi tracker.conf
   主要配置项如下:
# tracker绑定的端口号,默认为22122
port=22122
# tracker的数据及日志存放目录,对应4.1节创建的目录
base_path=/home/data/fastdfs/tracker
max_connections=1024
# 工作线程数,通常设置为CPU 数
work_threads=4
store_lookup=0
store_server=0
store_path=0
download_server=0
reserved_storage_space=4G
run_by_group=fastdfs
run_by_user=fastdfs
rotate_error_log=true
 4.3安装并配置nginx
    安装步骤省略,参考http://code727.iteye.com/blog/2248384
vi /etc/nginx/nginx.conf
    主要配置内容如下:
# storage goup1组
upstream storageGoup1 {
   server   192.168.31.242:80;
   server   192.168.31.243:80;
}

# storage goup2组
upstream storageGoup2 {
   server   192.168.31.244:80;
   server   192.168.31.245:80;
}

server {
	listen 80;
	server_name localhost;
	location /g1 {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://storageGoup1;
	}
	location /g2 {
		proxy_redirect off;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://storageGoup2;
	}
}
 4.4服务设置
4.4.1交由service管理
# 将tracker的启动脚本拷贝到/etc/init.d/目录后编辑  
cp /usr/local/FastDFS/init.d/fdfs_trackerd /etc/init.d/  
vi /etc/init.d/fdfs_trackerd  
    将 PRG=/usr/bin/fdfs_trackerd 修改为 PRG=/usr/local/bin/fdfs_trackerd(因为前面在安装脚本中修改了默认的安装路径为/usr/local)
依次执行:
service fdfs_trackerd start
service fdfs_trackerd status
 若出现如下示例信息:
fdfs_trackerd (pid 1454) 正在运行...
 则表示tracker已在运行
4.4.2开机设置
编辑rc.local:
vi /etc/rc.d/rc.local
 加入如下配置:
/etc/init.d/fdfs_trackerd start
 5.Storage group1配置
 StorageServer(242和243)上进行下列步骤。
5.1创建数据及日志存放目录
mkdir -p /home/data/fastdfs/storage
 5.2创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件
cd /etc/fdfs
cp -r storage.conf.sample storage.conf
# 编辑Storage配置文件
vi /etc/fdfs/storage.conf
 主要配置项如下:
# group1的名称,对应tracker的nginx配置  
group_name=g1  
# storage的数据及日志存放目录
base_path=/home/data/fastdfs  
max_connections=1024  
# 工作线程数,通常设置为CPU 数  
work_threads=8  
# group1的文件存储路径数  
store_path_count=1  
#  group1的文件存储路径,对应5.1节的创建结果  
store_path0=/home/data/fastdfs/storage  
# 对应trackerserver的VIP和端口(默认22122)  
tracker_server=192.168.31.204:22122  
# 运行FastDFS 的用户组  
run_by_group=fastdfs  
# 运行FastDFS 的用户  
run_by_user=fastdfs  
file_distribute_path_mode=1  
rotate_error_log=true  
 5.3安装nginx并添加fastdfs集成模块
 5.3.1创建软连接
ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
 5.3.2安装nginx和fastdfs集成模块
cd /home/tools
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
tar -zxvf nginx-1.9.5.tar.gz
cd nginx-1.9.5
# 指定nginx安装路径,并添加fastdfs集成模块
./configure --prefix=/usr/local/nginx --add-module=/home/tools/fastdfs-nginx-module/src
make && make install
 5.3.3fastdfs集成配置
# 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改
cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
 主要配置项如下:
connect_timeout=30  
# trackerserver的vip和端口  
tracker_server=192.168.31.204:22122  
# storageserver的端口(默认为23000)  
storage_server_port=23000  
# group1的名称,对应tracker的nginx配置  
group_name=g1  
url_have_group_name = true  
# group1的文件存储路径数  
store_path_count=1  
# group1的文件存储路径,对应5.1节的创建结果  
store_path0=/home/data/fastdfs/storage  
  5.3.4修改Nginx配置文件
vi /etc/nginx/nginx.conf
主要配置项如下:
worker_processes 8;  
error_log  /home/logs/nginx/error.log;    
pid        /home/logs/nginx/nginx.pid;   
worker_rlimit_nofile 51200;  
events {  
        use epoll;  
        worker_connections 51200;  
}  
http {  
        include mime.types;  
        default_type application/octet-stream;  
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '  
                '$status $body_bytes_sent "$http_referer" '  
                '"$http_user_agent" "$http_x_forwarded_for"';  
        access_log  /home/logs/nginx/access.log  main;    
        server {  
            listen 80;  
            server_name localhost;  
            location /g1/M00 {  
                # /g1/M00请求路径对应的文件存储的真实路径  
                root /home/data/fastdfs/storage/data;  
                # 加入fastdfs集成模块  
                ngx_fastdfs_module;  
        }  
    }  
}  
 5.3.5为group1文件存储的真实路径创建软连接
ln -s /home/data/fastdfs/storage/data /home/data/fastdfs/storage/data/M00
 注意:/data/M00目录不存在时需事先创建
5.3.6将fastdfs安装目录下的http.conf和mime.types拷贝到/etc/fdfs
cp -r /usr/local/FastDFS/conf/http.conf /etc/fdfs
cp -r /usr/local/FastDFS/conf/mime.types /etc/fdfs
    nginx启动时ngx_fastdfs_module需要加载这些文件
5.4服务设置
5.4.1交由service管理
# 将storage的启动脚本拷贝到/etc/init.d/目录后编辑
cp /usr/local/FastDFS/init.d/fdfs_storaged /etc/init.d/
vi /etc/init.d/fdfs_storaged
   将 PRG=/usr/bin/fdfs_storaged 修改为 PRG=/usr/local/bin/fdfs_storaged(因为前面在安装脚本中修改了默认的安装路径为/usr/local)
依次执行:
service fdfs_storaged start
service fdfs_storaged status
 若出现如下示例信息:
fdfs_storaged (pid 8385) 正在运行...
则表示storage已在运行
5.4.2开机设置
编辑rc.local:
vi /etc/rc.d/rc.local
 加入如下配置:
/etc/init.d/fdfs_storaged start
6.Storage group2配置
 StorageServer(244和245)上进行下列步骤。
6.1创建数据及日志存放目录
mkdir -p /home/data/fastdfs/storage
mkdir -p /home/data/fastdfs/storage1
6.2创建并编辑配置文件
# 进入/etc/fdfs目录后拷贝配置文件
cd /etc/fdfs
cp -r storage.conf.sample storage.conf
# 编辑Storage配置文件
vi /etc/fdfs/storage.conf
 主要配置项如下:
# group2的名称,对应tracker的nginx配置
group_name=g2
# storage的数据及日志存放目录
base_path=/home/data/fastdfs
max_connections=1024
# 工作线程数,通常设置为CPU 数
work_threads=8
# 配置group2的存储路径有两个
store_path_count=2
# group2的文件存储路径,对应6.1节的创建结果  
store_path0=/home/data/fastdfs/storage
store_path1=/home/data/fastdfs/storage1
# 对应trackerserver的VIP和端口(默认22122)  
tracker_server=192.168.31.204:22122
# 运行FastDFS 的用户组
run_by_group=fastdfs
# 运行FastDFS 的用户
run_by_user=fastdfs
file_distribute_path_mode=1
rotate_error_log=true
6.3安装nginx并添加fastdfs集成模块
6.3.1创建软连接(与5.3.1节一样)
6.3.2安装nginx和fastdfs集成模块(与5.3.2节一样)
6.3.3fastdfs集成配置
# 将fastdfs的nginx模块配置文件拷贝到/etc/fdfs,并修改
cp -r /home/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
 主要配置项如下:
connect_timeout=30
# trackerserver的vip和端口
tracker_server=192.168.31.204:22122
# storageserver的端口(默认为23000)
storage_server_port=23000
# group2的名称,对应tracker的nginx配置
group_name=g2
url_have_group_name = true
# group2的文件存储路径数
store_path_count=2
# group2的文件存储路径,对应6.1节的创建结果
store_path0=/home/data/fastdfs/storage
store_path1=/home/data/fastdfs/storage1
 6.3.4修改Nginx配置文件
vi /etc/nginx/nginx.conf
 主要配置项如下:
worker_processes 8;
error_log  /home/logs/nginx/error.log;    
pid        /home/logs/nginx/nginx.pid; 
worker_rlimit_nofile 51200;
events {
	use epoll;
	worker_connections 51200;
}
http {
	include mime.types;
	default_type application/octet-stream;
	log_format main '$remote_addr - $remote_user [$time_local] "$request" '
			'$status $body_bytes_sent "$http_referer" '
			'"$http_user_agent" "$http_x_forwarded_for"';
	access_log  /home/logs/nginx/access.log  main;    
	server {
		listen 80;
		server_name localhost;
		location /g2/M00{
                        # /g2/M00请求路径对应的文件存储的真实路径  
			root /home/data/fastdfs/storage/data;
                        # 加入fastdfs集成模块  
			ngx_fastdfs_module;
		}
		location /g2/M01{
                        # /g2/M01请求路径对应的文件存储的真实路径  
			root /home/data/fastdfs/storage1/data;
                        # 加入fastdfs集成模块  
			ngx_fastdfs_module;
		}
	}
}
 6.3.5为group2文件存储的真实路径创建软连接
ln -s /home/data/fastdfs/storage/data /home/data/fastdfs/storage/data/M00
ln -s /home/data/fastdfs/storage1/data /home/data/fastdfs/storage1/data/M01
 注意:/data/M00和/data/M01不存在时需事先创建
6.3.6将fastdfs安装目录下的http.conf和mime.types拷贝到/etc/fdfs(与5.3.6节一样
6.4服务设置(与5.4节一样)
7.在TrackerServer上安装配置Keeplived实现主从切换
    和http://code727.iteye.com/blog/2248384第3节的内容几乎一样,区别在于Master和Backup上的keepalived.conf有所不同
! Configuration File for keepalived  
  
global_defs {  
   notification_email {  
     code727@163.com  
   }  
   notification_email_from pub@easymobi.cn  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
  
vrrp_script chk_http_port {   
   script "/opt/nginx_keepalived.sh"   
   interval 2     
    weight 3   
}   
  
vrrp_instance VI_1 {  
    state Master  
    interface eth2  
    virtual_router_id 53   
    mcast_src_ip 192.168.31.240  
    priority 100  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111222  
    }  
    virtual_ipaddress {  
        192.168.31.204  
    }  
    track_script {  
        chk_http_port  
    }  
} 
! Configuration File for keepalived  
  
global_defs {  
   notification_email {  
     code727@163.com  
   }  
   notification_email_from pub@easymobi.cn  
   smtp_server 127.0.0.1  
   smtp_connect_timeout 30  
   router_id LVS_DEVEL  
}  
  
vrrp_script chk_http_port {   
   script "/opt/nginx_keepalived.sh"   
   interval 2     
    weight 3   
}   
  
vrrp_instance VI_1 {  
    state Backup  
    interface eth3
    virtual_router_id 53   
    mcast_src_ip 192.168.31.241  
    priority 99  
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111222  
    }  
    virtual_ipaddress {  
        192.168.31.204  
    }  
    track_script {  
        chk_http_port  
    }  
} 
 8.重启系统后测试
8.1在tracker上利用fdfs_upload_file来上传测试图片
8.1.1配置
# 进入/etc/fdfs目录后拷贝client.conf
cd /etc/fdfs
cp -r client.conf.sample client.conf
# 编辑
vi /etc/fdfs/client.conf
connect_timeout=30
base_path=/home/data/fastdfs
tracker_server=192.168.31.204:22122
http.tracker_server_port=80
log_level=info
 8.1.2命令行上传
fdfs_upload_file /etc/fdfs/client.conf /home/test.jpg
 上传成功后会返回下列示例的文件相对路径:
g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg
8.1.3测试
1)可以通过TrackerServer来访问,即http://192.168.31.240/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpghttp://192.168.31.241/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg
2)可以通过TrackerServer绑定的VIP来访问,即http://192.168.31.204/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg
3)文件的相对路径是以“g2/M00”开头的,这匹配于6.3.4节中关于StorageServer group2的nginx。因此,在244和255的/home/data/fastdfs/storage/data/00/00目录中能找到上传的文件;
4)可以直接通过StorageServer group2来访问,即http://192.168.31.244/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpghttp://192.168.31.245/g2/M00/00/00/wKgf9FZC0NCAesDuAARUS1ON6x4281.jpg。但StorageServer group1(将ip最后一位换成242和243)不能访问,因为文件上传到这两台服务器上。
5)停掉两个TrackerServer上的任意一个Keepalived,第1)- 第4)步的测试结果不受影响;
6)停掉两个TrackerServer上的任意一个Tracker,除用被停Tracker的URL不能访问外,其余不受影响;
7)停掉两个StorageServer group2上的任意一个Storage,除用被停Storage的URL不能访问外,其余不受影响;
9.总结
     FastDFS还提供了一套专有的API,通过客户端程序调用API可以轻松实现文件的上传、下载和删除等功能。通过情况下,我们都是按照统一的URL地址(此架构为http://192.168.31.204)来实现上述功能,即所有的功能都是通过TrackerServer来进行的。
      为了分摊TrackerServer的并发压力,实现类似于数据库的“读写分离”,我们可以直接访问具体某一台StorageServer来读取文件,但这样做会引起两个问题:第一,脱离了TrackerServer的调度管理,不能控制StorageCluster的负载均衡。第二,StorageServer的单点问题,当要访问的StorageServer处于不可用的状态时会使应用程序报错。因此,可以为每一个StorageServer增加一台备份机,并通过Keepalived来实现故障切换。或在应用程序层面做如下判断处理:
if 从StorageServer可访问 then end;
else 通过TrackerServer访问 end;
      TrackerServer在整个架构体系中主要做调度工作,在访问上起负载均衡的作用。其中负载策略可以通过tracker.conf的如下几个配置项实现:
配置项 值/作用
store_lookup

存储文件时选择group的策略

0:轮训策略

1:指定某一个组

2:负载均衡,选择空闲空间最大的group

store_group 如果store_lookup选择了1,则此配置项必填,其值对应一个存在的group名称
store_server

选择哪台storage做主storage,当一个文件上传到主storage后,就由这台机器同步文件到group内的其他storage上

0:轮训策略

1:根据ip地址排序,第一个

2:根据优先级排序,第一个

download_server

选择那个storage作为主下载服务器

0:轮训策略

1:将主上传storage作为主下载服务器

store_path

选择文件上传到storage中的哪个(目录/挂载点),storage可以有多个存放文件的base path

0:轮训策略

2:负载均衡,选择空闲空间最大的

reserved_storage_space 系统预留空间,当一个group中的任何storage的剩余空间小于定义的值,整个group就不能上传文件了。例如:reserved_storage_space=4GB
        关于FastDFS配置文件的更多详情可以参考http://blog.163.com/023_dns/blog/static/11872736620121020105322220/
  • 大小: 27.2 KB
分享到:
评论

相关推荐

    fastdfs 安装配置所需的安装包

    fastdfs 安装配置所需的安装包 FastDFS_v5.02.tar.gz fastdfs-nginx-module_v1.15.tar.gz nginx-1.4.7.tar.gz ngx_cache_purge-2.1.tar.gz pcre-8.34.tar.gz zlib-1.2.8.tar.gz 安装方法:...

    FastDFS安装配置手册

    《FastDFS安装配置手册》 FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要解决大容量存储和负载均衡的问题,尤其适合图片、视频等大量文件存储。FastDFS为互联网应用提供了一个高效的文件存储解决方案,...

    FastDFS安装和配置过程

    ### FastDFS安装与配置详解 #### 一、FastDFS简介 FastDFS是一个高效的分布式文件系统,主要用于海量数据存储,能够实现文件的快速存取。它由淘宝的技术团队开发,主要适用于互联网环境下大流量高并发的场景。...

    Redhat下Fastdfs安装配置及nginx模块安装配置文档.pdf

    在本文档中,我们详细讨论了如何在Redhat操作系统上安装和配置FastDFS以及其Nginx模块。FastDFS是一个开源的高性能、轻量级的分布式文件系统,主要用于解决大容量存储和负载均衡的问题。以下是安装和配置FastDFS及其...

    FastDFS需要的配置需要软件和配置说明

    在安装过程中,需要配置FastDFS的安装路径、数据存储路径等信息。 3. **配置FastDFS**:修改`/etc/fdfs`目录下的`tracker.conf`和`storage.conf`文件。`tracker.conf`是追踪服务器的配置,包含服务器的IP、端口等...

    FastDFS集群配置文件

    现在,我们将深入探讨如何配置FastDFS集群,以及相关配置文件的作用。 首先,我们来看标题中的“FastDFS集群配置文件”。一个FastDFS集群通常包括Tracker服务器和Storage服务器。Tracker服务器负责调度任务,...

    FastDFS(5.0.5)安装配置

    ### FastDFS 5.0.5 安装与配置详解 #### 一、概述 FastDFS 是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载等),解决了大容量存储和负载均衡...

    fastDFS客户端配置文件

    FastDFS客户端配置文件,主要是为了配置FastDFS服务器的ip地址

    fastdfs安装程序集合:fastdfs安装需要的所有程序

    2. 安装FastDFS:解压FastDFS安装包,配置编译参数(通常包括libfastcommon的安装路径),然后进行编译和安装。 3. 安装Nginx:如果尚未安装Nginx,需要先安装。Nginx可以从官方网站下载源码包,然后按照官方文档的...

    fastdfs 安装及使用

    **FastDFS简介** FastDFS是一个开源的高性能、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、...了解并熟练掌握FastDFS的安装、配置、使用以及与Java的集成,对于提升系统的稳定性和扩展性具有重要意义。

    FastDFS所有安装配置文件

    在这个压缩包文件中,包含了FastDFS安装和配置所需的全部文件,包括客户端配置、存储节点配置、追踪节点配置、Nginx集成配置等。 1. **client.conf**:这是FastDFS客户端的配置文件,主要用于设置客户端连接到...

    FastDFS_配置文件详解

    《FastDFS配置文件详解》 FastDFS是一款开源的高性能、轻量级的分布式文件系统,主要解决大容量存储和负载均衡的问题。配置文件是FastDFS系统运行的核心,它定义了系统的运行方式和行为。本文将深入解析FastDFS的...

    FastDFS安装与Nginx整合

    - 配置FastDFS,指定安装路径,例如: ``` ./configure --prefix=/usr/local/fastdfs make sudo make install ``` 4. **配置FastDFS** - 将配置文件复制到指定目录,例如: ``` sudo cp conf/* /etc/fdfs/...

    FastDFS安装说明,所需文件包

    至此,FastDFS的基本安装和配置已完成。然而,实际部署时可能需要考虑更多因素,比如负载均衡、故障转移、监控和日志管理等。FastDFS提供了丰富的API供应用程序调用,可以方便地集成到各种Web服务中。同时,FastDFS...

    FastDFS 5.01 + nginx + cache 集群安装配置手册

    根据提供的文件信息,本知识点手册将详细介绍如何在Centos6.7系统上安装CDH5.7 Hadoop集群环境,包括离线安装FastDFS 5.01、nginx和cache集群配置。以下是详细的知识点: 1. 环境准备与配置: - 确保操作系统为...

    虚拟机fastdfs配置静态ip

    ### 虚拟机FastDFS配置静态IP的知识点详解 #### 一、FastDFS简介 FastDFS是一款开源的轻量级分布式文件系统,主要应用于互联网环境下大规模文件存储场景。它支持高并发、高性能以及可扩展性,适用于图片、视频等大...

Global site tag (gtag.js) - Google Analytics