1、fastDFS简介 1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标, 3 使用
1 FastDFS是用c语言编写的一款开源的分布式文件系统。 2 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标, 3 使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。2、fastDFS架构
1 FastDFS架构包括 Tracker server和Storage server。 2 客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。 3 Tracker server作用是负载均衡和调度, 4 通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。 5 可以将tracker称为追踪服务器或调度服务器。 6 Storage server作用是文件存储, 7 客户端上传的文件最终存储在Storage服务器上, 8 Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。 9 可以将storage称为存储服务器。
如下图:
3、Tracker 集群1 FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务, 2 Tracker server不存在单点故障。 3 客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。4、Storage集群
1 Storage集群采用了分组存储方式。 2 storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。 3 一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系, 4 不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步, 5 从而保证同组内每个storage上的文件完全一致的。 6 一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。 7 采用分组存储方式的好处是灵活、可控性较强。 8 比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。 9 一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。 10 当系统容量不足时,可以增加组来扩充存储容量(横向扩容)5、Storage状态收集
1 Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态, 2 包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。6、文件上传流程
1 客户端上传文件后存储服务器将文件ID返回给客户端, 2 此文件ID用于以后访问该文件的索引信息。 3 文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
1 组名: 2 文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。 3 虚拟磁盘路径: 4 storage配置的虚拟路径,与磁盘选项store_path*对应。 5 如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。 6 数据两级目录: 7 storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。 8 文件名: 9 与文件上传时不同。 10 是由存储服务器根据特定信息生成, 11 文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。7、项目架构图 8、安装FastDFS(需要一天的时间)
1 安装fastDFS之前需要依赖环境: 2 FastDFS使用c语言开发,需要使用gcc编译,需要安装gcc。 3 需要安装fastdfs依赖类库:libevent8.1、安装fastDFS依赖环境 8.1.1、安装gcc
命令:命令:yum -y install gcc
8.1.2、安装libevent命令:yum –y install libevent libevent-devel
8.1.3、安装libfastcommon依赖环境1 第一步:导入libfastcommon到usr/local/Hadoop/libfastcommonV1.0.7.tar.gz 2 使用rz命令导入 3 第二步:解压 4 tar -zxvf libfastcommonV1.0.7.tar.gz 5 第三步:编译 6 命令:./make.sh 7 第四步:安装 8 命令:./make.sh install 9 第五步:拷贝usr/lib64目录下:libfastcommon.so文件到usr/lib下 10 拷贝命令:cp usr/lib64/ libfastcommon.so /usr/lib 11 注意: 12 libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下, 13 由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
要拷贝的文件如下:
****************************************************手动安装fastDFS*************************START******************************
8.2、安装fastDFS1 第一步:导入fastDFS安装包 2 使用rz命令导入 3 4 第二步:解压 5 tar -zxvf FastDFS_v5.05.tar.gz 6 7 第三步:编译安装 8 编译命令:./make.sh 9 安装命令:./make.sh install 10 11 第四步:拷贝FastDFS/conf下面所有配置文件到etc/fdfs/ 12 拷贝命令:[root@localhost conf]# cp * /etc/fdfs/ 13 14 [root@localhost fdfs]# ll 15 total 104 16 -rw-r--r--. 1 root root 23981 May 13 18:34 anti-steal.jpg 17 -rw-r--r--. 1 root root 1461 May 13 18:34 client.conf 18 -rw-r--r--. 1 root root 858 May 13 18:34 http.conf 19 -rw-r--r--. 1 root root 31172 May 13 18:34 mime.types 20 -rw-r--r--. 1 root root 7829 May 13 18:34 storage.conf 21 -rw-r--r--. 1 root root 7829 May 13 18:31 storage.conf.sample 22 -rw-r--r--. 1 root root 105 May 13 18:34 storage_ids.conf 23 -rw-r--r--. 1 root root 7102 May 13 18:34 tracker.conf 24 -rw-r--r--. 1 root root 7102 May 13 18:31 tracker.conf.sample8.3、安装tracker
1 安装tracker,由于tracker运行程序就是fasfdfs,fastDFS安装成功,只需要修改etc/fdfs/tracker.conf配置文件即可。 2 3 第一步:修改base_path存储基本路径 4 base_path=/home/fastdfs //fastdfs需要手动创建,fastdfs在home目录下 5 6 第二步:修改存在组 7 store_group=group1 8 9 第三步:在home目录下创建fastdfs 10 创建命令:mkdir fastdfs 11 12 第三步:测试启动tracker 13 测试是否安装成功 14 运行命令:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 15 16 drwx------. 4 mine mine 4096 May 5 02:22 mine 17 [root@localhost home]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf 18 [root@localhost home]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 19 waiting for pid [9077] exit ... 20 starting ...8.4、安装storage
1 由于storage和tracker运行的都是fastDFS程序, 2 每一台服务器都部署一台fasfDFS, 3 一台服务器是tracker,一台是storage。 4 此机器:tracker和fastDFS都是使用同一个程序。只需要配置storage配置文件即可。 5 6 配置storage.conf 7 第一步:配置组名 8 group_name=group1 //必须和tracker的组名相同。 9 10 第二步:配置基本存储路径base_path 11 base_path=/home/fastdfs 12 13 第三步:配置文件存储路径 14 store_path0=/home/fastdfs/storage_path //storage_path需要手动创建 15 #store_path1=/home/yuqing/fastdfs2 16 如果有多个存储路径,就可以依次往下顺延。 17 18 第四步:创建文件存储路径storage_path 19 /home/fastdfs此目录下面创建 20 命令:mkdir storage_path 21 22 [root@localhost fastdfs]# mkdir storage_path 23 [root@localhost fastdfs]# ll 24 total 12 25 drwxr-xr-x. 2 root root 4096 May 13 18:45 data 26 drwxr-xr-x. 2 root root 4096 May 13 18:43 logs 27 drwxr-xr-x. 2 root root 4096 May 13 18:54 storage_path 28 29 第五步:修改连接tracker服务器地址 30 tracker_server=192.168.66.66:22122 31 32 第六步:启动storage测试 33 启动命令: 34 [root@localhost fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf 35 [root@localhost fdfs]# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 36 waiting for pid [9132] exit ... 37 starting ...8.5、测试图片上传
1 Tracker和storage都已经安装完成,使用命令测试文件上传: 2 FastDFS提供一个文件上传命令:usr/bin/fdfs_test 测试文件上传 3 测试上传需要连接tracker服务器,连接storage服务器。 4 因此需要指定一个配置文件:client.conf配置文件,通过Client.conf连接tracker服务器。 5 6 第一步:修改Client.conf 7 # the base path to store log files 8 base_path=/home/fastdfs 9 10 # tracker_server can ocur more than once, and tracker_server format is 11 # "host:port", host can be hostname or ip address 12 tracker_server=192.168.66.66:22122 13 14 第二步:测试命令: 15 在 /etc/fdfs 目录下执行下面的测试命令: 16 /usr/bin/fdfs_test client.conf upload anti-steal.jpg 17 18 解析: 19 使用测试程序fdfs_test 的命令 upload命令上传anti-steal.jpg图片。 20 * example file url: http://192.168.66.66/group1/M00/00/00/wKhCQlc1uJOAYKOhAABdrZgsqUU338_big.jpg 21 * storage_upload_slave_by_filename 22 * group_name=group1, remote_filename=M00/00/00/wKhCQlc1uJOAYKOhAABdrZgsqUU338_big.jpg 23 * source ip address: 192.168.66.66 24 * file timestamp=2016-05-13 19:20:51 25 * file size=23981 26 * file crc32=2553063749 27 * example file url: http://192.168.66.66/group1/M00/00/00/wKhCQlc1uJOAYKOhAABdrZgsqUU338_big.jpg 28 29 思考: 30 图片已经上传成功,返回图片地址?浏览器是否能访问? 31 浏览器访问任何资源都必须遵循http协议。 32 Nginx作为http服务器,通过nginx访问分布式图片服务器。 33 34 也就是说:nginx访问fastDFS。需要nginx和FASTDFS整合。9、整合nginx和FASTDFS
FastDFS-nginx-module整合nginx和fastDFS
9.1、安装FastDFS-nginx-module1 第一步:导入FastDFS-nginx-module到usr/local/Hadoop 2 fastdfs-nginx-module_v1.16.tar.gz 3 第二步:解压fastdfs-nginx-module_v1.16.tar.gz 4 命令:tar –zxvf fastdfs-nginx-module_v1.16.tar.gz 5 第三步:修改/home/canglang/fasfDFS-common/fastdfs-nginx-module/src/Config 6 修改路径
1 注意: 2 去掉错误路径,usr/local/include改为usr/include 3 4 第四步:拷贝fastdfs-nginx-module/src/mod_fastdfs.conf到etc/fdfs 5 在/home/canglang/fasfDFS-common/fastdfs-nginx-module/src目录下执行 6 cp mod_fastdfs.conf /etc/fdfs/ 7 8 第五步:修改mod_fastdfs.conf 9 * base_path=/home/fastdfs/storage_path //此处必须是存储路径 10 * tracker_server=192.168.66.66:22122 11 * group_name=group1 //和前面配置组名保持一致 12 * store_path0=/home/fastdfs/storage_path //M00 13 * url_have_group_name = true //允许使用组名 14 15 第六步:拷贝usr/lib64目录下库文件libfdfsclient.so 16 拷贝usr/lib64/libfdfsclient.so 库文件 到 usr/lib目录下。 17 拷贝命令:cp /usr/lib64/libfdfsclient.so /usr/lib9.2、整合
1 需要把module添加nginx中。通过设置安装参数方式添加模块。 2 首先在var目录下创建temp目录,在temp目录下创建nginx目录 3 参数设置:在nginx的解压目录下执行 4 ./configure \ 5 --prefix=/home/canglang/nginx/nginx-install \ 6 --pid-path=/var/run/nginx/nginx.pid \ 7 --lock-path=/var/lock/nginx.lock \ 8 --error-log-path=/var/log/nginx/error.log \ 9 --http-log-path=/var/log/nginx/access.log \ 10 --with-http_gzip_static_module \ 11 --http-client-body-temp-path=/var/temp/nginx/client \ 12 --http-proxy-temp-path=/var/temp/nginx/proxy \ 13 --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ 14 --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ 15 --http-scgi-temp-path=/var/temp/nginx/scgi \ 16 --add-module=/home/canglang/fastdfs-nginx-module/src 17 18 需要从新编译安装: 19 在nginx的解压目录下执行 20 Make 21 Make install 22 23 修改nginx配置文件nginx.conf配置文件: 24 http { 25 include mime.types; 26 default_type application/octet-stream; 27 sendfile on; 28 keepalive_timeout 65; 29 server { 30 listen 80; 31 server_name 192.168.66.66; 32 location /group1/M00/ { 33 #root html; 34 #index index.html index.htm; 35 ngx_fastdfs_module; 36 } 37 error_page 500 502 503 504 /50x.html; 38 location = /50x.html { 39 root html; 40 } 41 } 42 }9.3、重启服务
1 fastDFS: 2 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 3 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 4 nginx: 5 cd /home/canglang/nginx/nginx-install/sbin/ 6 ./nginx start 7 关闭防火墙
****************************************************手动安装fastDFS*************************END******************************
10、图片服务器(使用安装版本)
1 直接在虚拟机中导入即可 2 选择:I moved it –不需要进行设置,使用原来mac地址。 3 选择:I copy it --? 生成新MAC地址。生成新的网卡eth1 4 需要eth1网卡修改为eth0网卡: 5 修改:/etc/udev/rules.d/70-persistent-net.rules 6 打开:上面配置文件,发现有2个网卡; 7 #SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:b5:e3:64", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 8 SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:b5:e3:66", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" 9 修改网卡配置: 10 vim /etc/sysconfig/network-scripts/ifcfg-eth0 11 DEVICE=eth0 12 TYPE=Ethernet 13 *UUID=bb6c530a-6983-4a14-9883-7f077f2172bc //删除 14 ONBOOT=no 15 NM_CONTROLLED=yes 16 BOOTPROTO=none 17 *HWADDR=00:0c:29:b5:e3:66 18 IPADDR=192.168.66.66 19 PREFIX=24 20 GATEWAY=192.168.66.2 21 DEFROUTE=yes 22 IPV4_FAILURE_FATAL=yes 23 IPV6INIT=no 24 NAME="System eth0" 25 DNS1=219.141.140.1011、设置 11.1、设置桌面启动
1 第一次导入是以黑窗口的方式启动的 2 用户名:root 3 密码:itcast 4 cd /etc 5 vim inittab 6 将最下面的一行中的3改成5,保存 7 reboot重启11.2、设置网络
1 右上角 小电脑图标--右键--设置网络即可
11.3、设置连接fastdfs是ip
1 fastDFS安装完成后会在/etc/fdfs下生成配置文件 2 3 anti-steal.jpg 4 client.conf ---客户端的配置文件 5 client.conf.sample 6 http.conf 7 mime.types 8 mod_fastdfs.conf ---nginx访问fastDFS的配置文件 9 storage.conf ---存储的配置文件 10 storage.conf.sample 11 storage_ids.conf 12 tracker.conf ---调度者的配置文件 13 tracker.conf.sample11.4、修改ip
1 storage.conf 2 mod_fastdfs.conf 3 client.conf 4 这三个文件中都需要修改ip 5 tracker_server=192.168.254.67:2212211.5、查找图片存储路径
1 storage.conf配置文件中store_path0=/home/fastdfs/store_path0 2 这是路径:/home/fastdfs/store_path0/data/00/0011.6、重启
1 fastdfs安装完成后会在/usr/bin目录下生成一个启动命令 2 启动: 3 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 4 执行/usr/bin/目录下的fdfs_trackerd启动命令,加载/etc/fdfs/下面的tracker.conf配置文件 5 6 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 7 执行/usr/bin/目录下的fdfs_storaged情动命令,加载/etc/fdfs/下面的storage.conf配置文件12、测试图片上传 12.1、上传
1 cd /etc/fdfs/ 2 /usr/bin/fdfs_test client.conf upload anti-steal.jpg 3 执行/usr/bin/目录下的fdfs_test测试命令,加载client.conf配置文件,upload 图片名称12.2、访问 12.3、查看图片上传到路径
1 cd /home/fastdfs/store_path0/data/00/00
13、设置开机自动启动
更换电脑后切换fastDFS中配置的ip
1 图片测试上传和配置文件的路径:/etc/fdfs 2 storage.conf tracker_server=192.168.66.66:22122 3 client.conf tracker_server=192.168.66.66:22122 4 5 重启服务: 6 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 7 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 8 9 测试图片上传: 10 在 /etc/fdfs 目录下执行下面的测试命令: /usr/bin/fdfs_test client.conf upload anti-steal.jpg 11 会返回一个全路径: http://192.168.174.129/group1/M00/00/00/wKiugVtAcVCAIZxsAABdrZgsqUU567_big.jpg 12 13 14 整合nginx后 15 修改/etc/fdfs mod_fastdfs.conf tracker_server=192.168.66.66:22122 16 修改nginx.con配置文件中的服务ip 17 18 启动nginx: 19 /home/canglang/nginx/nginx-install/sbin 20 ./nginx 21 22 访问:http://192.168.174.129/group1/M00/00/00/wKiugVtAcVCAIZxsAABdrZgsqUU567_big.jpg
1 nginx启动时报这个错: 2 [canglang@localhost sbin]$ sudo ./nginx 3 ngx_http_fastdfs_set pid=2807 4 [canglang@localhost sbin]$ nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) 5 解决方案: 6 修改/conf/nginx.conf配置文件 7 将#pid logs/nginx.conf的注释放开 8 修改成自己定的路径就行