Fastdfs部署
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
安装步骤:
1.首先安装编译环境: yum install lrzsz telnet gcc gcc-c++ glib2-devel openssl-devel pcre-devel bzip2-devel gzip perl-devel perl-ExtUtils-Embed automake autoconf libtool make openssl -y wget https://github.com/happyfish100/libfastcommon/archive/master.zip unzip libfastcommon-master.zip cd libfastcommon-master ./make.sh ./make.sh install 2.安装FastDFS tar xf FastDFS_v5.05.tar.gzcd FastDFS vim make.sh TARGET_PREFIX=$DESTDIR /usr/local/fastdfs TARGET_CONF_PATH=$DESTDIR /usr/local/fastdfs/conf TARGET_INIT_PATH=$DESTDIR/etc/init.d ./make.sh ./make.sh install 安装tracker 安装storage 编辑storage服务器ID与IP地址的对应关系 在tracker上查看状态信息: a) /usr/local/fastdfs/bin/fdfs_monitor /usr/local/fastdfs/conf/client.conf 上传测试 /usr/local/fastdfs/bin/fdfs_upload_file/usr/local/fastdfs/conf/client.conf /tmp/t1.jpg 在storage中只生成一个文件。 整合nginx 此操作在storage中进行 tar xzvf pcre-8.36.tar.gz cd pcre-8.36 ./configure --prefix=/usr/local/pcre make make install tar xzvf fastdfs-nginx-module_v1.16.tar.gz vim /usr/local/src/fastdfs-nginx-module/src/config CORE_INCS="$CORE_INCS /usr/local/fastdfs/include/fastdfs /usr/include/fastcommon/" CORE_LIBS="$CORE_LIBS L/usr/local/fastdfs/lib64 -lfastcommon -lfdfsclient" CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/usr/local/fastdfs/conf/mod_fastdfs.conf\"'" tar xzvf nginx-1.6.2.tar.gz cd nginx-1.6.2 ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre --add module=/usr/local/src/fastdfs-nginx-module/src make make install b) 访问方式:http://xxx.xxx.xxx.xxx/group1/M00/00/00/xxx.jpg 前端负载均衡及缓存 在tracker中架构nginx负载均衡及缓存。 tar xzvf ngx_cache_purge-2.3.tar.gz tar xzvf pcre-8.36.tar.gz tar xzvf nginx-1.6.2.tar.gz cd pcre-8.36 ./configure --prefix=/usr/local/pcre make make install cd nginx-1.6.2 ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_spdy_module --with-http_stub_status_module --with-pcre --add- module=/usr/local/src/ngx_cache_purge-2.3 make make install
上传交互过程编辑
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
FastDFS file download
下载交互过程编辑
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
tracker 安装路径:/usr/local/fastdfs 重启命令:/etc/init.d/fdfs_trackerd restart storage 安装路径:/usr/local/fastdfs 存储路径:/data/fastdfs/storage/data 重启命令:/etc/init.d/fdfs_storaged restart 接口配置 需要在所有的接口中进行如下配置: 1. 安装压缩图片所需要的程序 从线下32接口中上传/usr/bin/gm到接口服务器的/usr/bin/下。 yum install ImageMagick -y 2. 创建目录及修改配置 mkdir /opt/image 编辑system_constant.properties 增加 path.image.temp=/opt/image 增加如下文件 WEB-INF/classes/fdfs_client.conf WEB-INF/lib/im4java.jar fsds* 3. 重启tomcat fastdfs支持多组多域名 1. storage配置文件修改 拷贝storage.conf到storage1.conf,修改storage1.conf的如下配置。 group_name=public2 port=23001 base_path=/data/fastdfs/storage1 store_path0=/data/fastdfs/storage1
mod_fastdfs.conf 配置文件修改如下配置。 注释#storage_server_port=23000 注释#group_name=public1 注释#store_path0=/data/fastdfs/storage 修改group_count = 2 增加往下配置。 [group1] group_name=public1 storage_server_port=23000 store_path_count=1 store_path0=/data/fastdfs/storage [group2] group_name=public2 storage_server_port=23001 store_path_count=1 store_path0=/data/fastdfs/storage1 storage重启方式改变 由/etc/init.d/fdfs_storaged restart修改为: /usr/local/fastdfs/bin/fdfs_storaged /usr/local/fastdfs/conf/storage.conf /usr/local/fastdfs/bin/fdfs_storaged /usr/local/fastdfs/conf/storage1.conf
3. 上传文件测试
默认的情况,文件上传到public1组,需要测试上传到public2组,需要更改tracker中stacker.conf的配置
store_lookup=1
store_group=public2
4. 外网访问nginx配置文件
外网访问nginx配置文件 storage nginx.conf配置文件 user www www; worker_processes 8; events { worker_connections 10240; } http { include mime.types; default_type application/octet-stream; client_header_buffer_size 16k; large_client_header_buffers 4 64k; sendfile on; keepalive_timeout 65; server { listen 80; server_name img05.allinmd.cn;; location /public1/M00 { alias /data/fastdfs/storage/data/; ngx_fastdfs_module; } } server { listen 80; server_name img06.allinmd.cn; location /public2/M00 { alias /data/fastdfs/storage1/data/; ngx_fastdfs_module; } } } tracker nginx.conf配置文件 ,添加如下server段 server { listen 80; listen 443 ssl; ssl_certificate ../sslkey/1__.allinmd.cn_bundle.crt; ssl_certificate_key ../sslkey/2__.allinmd.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:-LOW:!aNULL:!eNULL; ssl_prefer_server_ciphers on; server_name img06.allinmd.cn; location /public2/M00 { proxy_next_upstream http_502 http_504 error timeout invalid_header; proxy_cache http-cache; proxy_cache_valid 200 304 12h; proxy_cache_key $uri$is_args$args; proxy_pass http://fdfs_group1; expires 1d; } location ~ /purge(/.*) { allow 127.0.0.1; allow 192.168.1.0/24; allow 192.168.11.0/24; deny all; proxy_cache_purge http-cache $1$is_args$args; } } 解决客户端上传不能自动指定组名问题,多tracker端口支持。
上面说到,需要手工更改tracker.conf文件才能实现上传到public1或public2 storage中,但程序不会自动修改配置文件的,这样就需要多tracker端口支持。 1. tracker端配置文件修改 cp tracker.conf tracker1.conf,修改tracker1.conf文件 base_path=/data/fastdfs/tracker1 store_group=public2 storage_ids_filename = storage_ids1.conf cat storage_ids.conf # <id> <group_name> <ip_or_hostname> 100001 public1 10.170.249.18 100002 public1 10.172.220.94
cat storage_ids1.conf <id> <group_name> <ip_or_hostname> 100003 public2 10.170.249.18 100004 public2 10.172.220.94 cp client.conf client1.conf,修改client1.conf文件 base_path=/data/fastdfs/tracker1 tracker_server=10.44.169.68:22123 storage_ids_filename = storage_ids1.conf 2. storage端配置文件修改 修改storage1.conf文件 tracker_server=10.44.169.68:22123 3. tracker启动方式 之前采用/etc/init.d/fdfs_tracker restart方式,修改为: /usr/local/fastdfs/bin/fdfs_trackerd /usr/local/fastdfs/conf/tracker.conf /usr/local/fastdfs/bin/fdfs_trackerd /usr/local/fastdfs/conf/tracker1.conf 4. 测试 /usr/local/fastdfs/bin/fdfs_upload_file /usr/local/fastdfs/conf/client.conf /tmp/a.jpg public1/M00/00/00/CqzcXlcsaMSABe23AAKiG08B9J8746.jpg /usr/local/fastdfs/bin/fdfs_upload_file /usr/local/fastdfs/conf/client1.conf /tmp/a.jpg public2/M00/00/00/CqzcXlcsaMiAFgmVAAKiG08B9J8888.jpg