1.1 安装(两台一样的操作)
从 github下载安装包
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.35.tar.gz
解压安装包
tar xf V1.0.35.tar.gz cd libfastcommon-1.0.35/ ./make.sh echo $? ./make.sh install echo $?
编译安装完成
从 github下载安装包
wget https://github.com/happyfish100/fastdfs/archive/V5.10.tar.gz tar xf V5.10.tar.gz cd fastdfs-5.10/ ./make.sh ./make.sh install echo $? whereis fdfs_storaged vim /etc/init.d/fdfs_storaged whereis fdfs_storaged vim /etc/init.d/fdfs_trackerd whereis fdfs_trackerd
创建数据文件存放位置
mkdir -p /data/fdfs_tracker mkdir -p /data/fdfs_storage cd /etc/fdfs/ cp tracker.conf.sample tracker.conf cp storage.conf.sample storage.conf
修改配置文件
mkdir /data/fdfs_tracker 先创建mkdir /data/fdfs_storage/base /data/fdfs_storage/store /data/fdfs_tracker vim tracker.conf base_path=/data/fdfs_tracker 刚刚创建的目录 保存 vim storage.conf base_path=/data/fdfs_storage/base store_path0=/data/fdfs_storage/store 多节点 tracker_server=192.168.80.123:22122 tracker_server=192.168.80.201:22122 保存
查看配置
[root@lanyezi fdfs]# grep --color '^[a-z]' /etc/fdfs/tracker.conf disabled=false bind_addr= port=22122 connect_timeout=30 network_timeout=60 base_path=/data/fdfs_tracker max_connections=256 accept_threads=1 work_threads=4 min_buff_size = 8KB max_buff_size = 128KB store_lookup=2 store_group=group2 store_server=0 store_path=0 download_server=0 reserved_storage_space = 10% log_level=info run_by_group= run_by_user= allow_hosts=* sync_log_buff_interval = 10 check_active_interval = 120 thread_stack_size = 64KB storage_ip_changed_auto_adjust = true storage_sync_file_max_delay = 86400 storage_sync_file_max_time = 300 use_trunk_file = false slot_min_size = 256 slot_max_size = 16MB trunk_file_size = 64MB trunk_create_file_advance = false trunk_create_file_time_base = 02:00 trunk_create_file_interval = 86400 trunk_create_file_space_threshold = 20G trunk_init_check_occupying = false trunk_init_reload_from_binlog = false trunk_compress_binlog_min_interval = 0 use_storage_id = false storage_ids_filename = storage_ids.conf id_type_in_filename = ip store_slave_file_use_link = false rotate_error_log = false error_log_rotate_time=00:00 rotate_error_log_size = 0 log_file_keep_days = 0 use_connection_pool = false connection_pool_max_idle_time = 3600 http.server_port=8080 http.check_alive_interval=30 http.check_alive_type=tcp http.check_alive_uri=/status.html
查看配置
[root@lanyezi fdfs]# grep --color '^[a-z]' /etc/fdfs/storage.conf disabled=false group_name=group1 bind_addr= client_bind=true port=23000 connect_timeout=30 network_timeout=60 heart_beat_interval=30 stat_report_interval=60 base_path=/data/fdfs_storage/base max_connections=256 buff_size = 256KB accept_threads=1 work_threads=4 disk_rw_separated = true disk_reader_threads = 1 disk_writer_threads = 1 sync_wait_msec=50 sync_interval=0 sync_start_time=00:00 sync_end_time=23:59 write_mark_file_freq=500 store_path_count=1 store_path0=/data/fdfs_storage/store subdir_count_per_path=256 tracker_server=192.168.80.123:22122 tracker_server=192.168.80.201:22122 log_level=info run_by_group= run_by_user= allow_hosts=* file_distribute_path_mode=0 file_distribute_rotate_count=100 fsync_after_written_bytes=0 sync_log_buff_interval=10 sync_binlog_buff_interval=10 sync_stat_file_interval=300 thread_stack_size=512KB upload_priority=10 if_alias_prefix= check_file_duplicate=0 file_signature_method=hash key_namespace=FastDFS keep_alive=0 use_access_log = false rotate_access_log = false access_log_rotate_time=00:00 rotate_error_log = false error_log_rotate_time=00:00 rotate_access_log_size = 0 rotate_error_log_size = 0 log_file_keep_days = 0 file_sync_skip_invalid_record=false use_connection_pool = false connection_pool_max_idle_time = 3600 http.domain_name= http.server_port=8888
1.1.1 启动服务
[root@lanyezi fdfs]# /etc/init.d/fdfs_trackerd start Starting FastDFS tracker server: [root@lanyezi fdfs]# /etc/init.d/fdfs_storaged start Starting FastDFS storage server: [root@lanyezi fdfs]# [2017-10-19 20:56:40] ERROR - file: process_ctrl.c, line: 276, "/data/fdfs_storage/base" can't be accessed, error info: No such file or directory
创建刚刚的文件
mkdir /data/fdfs_storage/base /data/fdfs_storage/store
查看有没有起来
[root@lanyezi fdfs_storage]# netstat -lntup |grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 29525/fdfs_trackerd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 29567/fdfs_storaged
1.1.2 查看日志
[root@master logs]# tailf /data/fdfs_tracker/logs/trackerd.log
1.1.3 配置客户端
[root@lanyezi fdfs]# cp client.conf.sample client.conf vim client.conf base_path=/tmp tracker_server=192.168.80.123:22122 tracker_server=192.168.80.201:22122
1.2 测试操作(两台一样的操作)
测试上传一个文件
[root@lanyezi fdfs]# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd group1/M00/00/00/wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170
下载这个文件
[root@lanyezi ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170
对比完整性
[root@lanyezi ~]# md5sum wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170 d2daf23218e42ce37f799fa1316c8a7d wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170 [root@lanyezi ~]# md5sum /etc/passwd d2daf23218e42ce37f799fa1316c8a7d /etc/passwd
文件保存在这里 自动生成一个文件名
ls /data/fdfs_storage/store/data/00/00/wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170
查看上传的文件的属性
[root@master data]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhQe1nopb6AAz7KAAAEyYPK5Fg0384170source storage id: 0 source ip address: 192.168.80.123 file create timestamp: 2017-10-19 21:16:46 file size: 1225 file crc32: 2211112024 (0x83CAE458) 在上传的文件的末尾追加 [root@master data]# echo "hello" > append.txt [root@master data]# echo "world" > append2.txt [root@master tmp]# fdfs_upload_appender /etc/fdfs/client.conf append.txt group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt [root@master tmp]# fdfs_append_file /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt Usage: fdfs_append_file[root@master tmp]# fdfs_append_file /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt append2.txt [root@master tmp]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt [root@master tmp]# cat wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt hello world
删除一个文件
先查看属性
[root@master tmp]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt source storage id: 0 source ip address: 192.168.80.201 file create timestamp: 2017-12-21 15:19:58 file size: 12 file crc32: 1998380320 (0x771CDD20) [root@master tmp]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt 删除文件 [root@master tmp]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhQyVo7YHuEXDxFAAAAAHcc3SA805.txt 再次查看已经没有 [2017-12-21 15:23:31] ERROR - file: tracker_proto.c, line: 48, server: 192.168.80.201:23000, response status 2 != 0 [2017-12-21 15:23:31] ERROR - file: ../client/storage_client.c, line: 372, fdfs_recv_response fail, result: 2 query file info fail, error no: 2, error info: No such file or directory
1.3 监控fdfs集群
[root@master tmp]# fdfs_monitor /etc/fdfs/client.conf [2017-12-21 15:24:39] DEBUG - base_path=/tmp, connect_timeout=30, network_timeout=60, tracker_server_count=2, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0 server_count=2, server_index=1 tracker server is 192.168.80.201:22122 group count: 1 Group 1: group name = group1 disk total space = 18356 MB disk free space = 11706 MB trunk free space = 0 MB storage server count = 2 active server count = 2 storage server port = 23000 storage HTTP port = 8888 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0 Storage 1: id = 192.168.80.123 ip_addr = 192.168.80.123 ACTIVE http domain = version = 5.10 join time = 2017-10-19 20:58:00 up time = 2017-10-19 21:08:59 total storage = 18356 MB free storage = 15355 MB upload priority = 10 store_path_count = 1 subdir_count_per_path = 256 storage_port = 23000 storage_http_port = 8888 current_write_path = 0 source storage id = 192.168.80.201 if_trunk_server = 0 connection.alloc_count = 256 connection.current_count = 1 connection.max_count = 2 total_upload_count = 2 success_upload_count = 2 total_append_count = 0 success_append_count = 0 total_modify_count = 0 success_modify_count = 0 total_truncate_count = 0 success_truncate_count = 0 total_set_meta_count = 0 success_set_meta_count = 0 total_delete_count = 0 success_delete_count = 0 total_download_count = 2 success_download_count = 2 total_get_meta_count = 0 success_get_meta_count = 0 total_create_link_count = 0 success_create_link_count = 0 total_delete_link_count = 0 success_delete_link_count = 0 total_upload_bytes = 1231 success_upload_bytes = 1231 total_append_bytes = 0 success_append_bytes = 0 total_modify_bytes = 0 success_modify_bytes = 0 stotal_download_bytes = 1231 success_download_bytes = 1231 total_sync_in_bytes = 18 success_sync_in_bytes = 18 total_sync_out_bytes = 0 success_sync_out_bytes = 0 total_file_open_count = 7 success_file_open_count = 7 total_file_read_count = 2 success_file_read_count = 2 total_file_write_count = 5 success_file_write_count = 5 last_heart_beat_time = 2017-12-21 15:24:27 last_source_update = 2017-10-19 21:29:37 last_sync_update = 2017-10-19 21:37:31 last_synced_timestamp = 2017-12-21 15:23:28 (0s delay) Storage 2: id = 192.168.80.201 ip_addr = 192.168.80.201 (master.test.com) ACTIVE http domain = version = 5.10 join time = 2017-12-21 14:51:52 up time = 2017-12-21 14:51:52 total storage = 18356 MB free storage = 11706 MB upload priority = 10 store_path_count = 1 subdir_count_per_path = 256 storage_port = 23000 storage_http_port = 8888 current_write_path = 0 source storage id = if_trunk_server = 0 connection.alloc_count = 256 connection.current_count = 1 connection.max_count = 2 total_upload_count = 2 success_upload_count = 2 total_append_count = 1 success_append_count = 1 total_modify_count = 0 success_modify_count = 0 total_truncate_count = 0 success_truncate_count = 0 total_set_meta_count = 0 success_set_meta_count = 0 total_delete_count = 1 success_delete_count = 1 total_download_count = 3 success_download_count = 3 total_get_meta_count = 0 success_get_meta_count = 0 total_create_link_count = 0 success_create_link_count = 0 total_delete_link_count = 0 success_delete_link_count = 0 total_upload_bytes = 12 success_upload_bytes = 12 total_append_bytes = 6 success_append_bytes = 6 total_modify_bytes = 0 success_modify_bytes = 0 stotal_download_bytes = 1249 success_download_bytes = 1249 total_sync_in_bytes = 1231 success_sync_in_bytes = 1231 total_sync_out_bytes = 0 success_sync_out_bytes = 0 total_file_open_count = 8 success_file_open_count = 8 total_file_read_count = 3 success_file_read_count = 3 total_file_write_count = 5 success_file_write_count = 5 last_heart_beat_time = 2017-12-21 15:24:29 last_source_update = 2017-12-21 15:23:28 last_sync_update = 2017-12-21 15:15:36 last_synced_timestamp = 2017-10-19 21:29:37 (0s delay)
1.4 php编译模块
ls /home/fastdfs-5.10/php_client
第2章 安装nginx模块
2.1 编译安装nginx
[root@master src]# pwd /usr/local/src [root@master src]# wget http://nginx.org/download/nginx-1.10.3.tar.gz [root@master src]# tar xf nginx-1.10.3.tar.gz l[root@master src]# cd nginx-1.10.3 [root@master nginx-1.10.3]# ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src [root@master nginx-1.10.3]# https://github.com/happyfish100/fastdfs-nginx-module.git
[root@master nginx-1.10.3]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git Initialized empty Git repository in /usr/local/src/nginx-1.10.3/fastdfs-nginx-module/.git/ remote: Counting objects: 76, done. remote: Total 76 (delta 0), reused 0 (delta 0), pack-reused 76 Unpacking objects: 100% (76/76), done. [root@master nginx-1.10.3]# ls auto CHANGES CHANGES.ru conf configure contrib fastdfs-nginx-module html LICENSE man README src [root@master nginx-1.10.3]# useradd -s /sbin/nologin -M www [root@master nginx-1.10.3]# ./configure --prefix=/usr/local/nginx-1.10.3 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --add-module=./fastdfs-nginx-module/src/ [root@master nginx-1.10.3]# make [root@master nginx-1.10.3]# make install
编译的时候报错解决:将fastdfs升级到最新版本V5.11
./fastdfs-nginx-module/src//common.c: In function ‘fdfs_http_request_handler’: ./fastdfs-nginx-module/src//common.c:1245: error: ‘FDFSHTTPParams’ has no member named ‘support_multi_range’ make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] Error 1 make[1]: Leaving directory `/usr/local/src/nginx-1.10.2' make: *** [install] Error 2 cd .. wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz tar xf V5.11.tar.gz cd fastdfs-5.11/ ./make.sh ./make.sh install
重新编译
cd .. cd nginx-1.10.2 [root@master nginx-1.10.3]# ./configure --prefix=/usr/local/nginx-1.10.3 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --add-module=./fastdfs-nginx-module/src/ [root@master nginx-1.10.3]# make [root@master nginx-1.10.3]# make install
成功
[root@lanyezi nginx-1.10.3]# ln -s /usr/local/nginx-1.10.3/ /usr/local/nginx [root@lanyezi src]# pwd /usr/local/src/nginx-1.10.2/fastdfs-nginx-module/src [root@lanyezi src]# cp mod_fastdfs.conf /etc/fdfs/ 把模块的配置复制到/etc/fdf 复制后来最新安装的fastdfs(源码)的一些配置文件到/etc/fdfs/ [root@lanyezi conf]# cp http.conf anti-steal.jpg mime.types /etc/fdfs/ [root@lanyezi conf]# pwd /usr/local/src/fastdfs-5.11/conf
配置NGINX
[root@lanyezi conf]# cd /usr/local/nginx/conf/ [root@lanyezi conf]# ls fastcgi.conf fastcgi_params.default mime.types nginx.conf.default uwsgi_params fastcgi.conf.default koi-utf mime.types.default scgi_params uwsgi_params.default fastcgi_params koi-win nginx.conf scgi_params.default win-utf
配置文件
events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /M00 ; # 添加的 这样的匹配要把url_have_group_name = true root /data/fdfs_storage/store; 添加的 ngx_fastdfs_module; 添加的 location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html {
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3598287
解决后期报错400
vim /etc/fdfs/mod_fastdfs.conf 修改的地方 tracker_server=192.168.80.123:22122 tracker_server=192.168.80.201:22122 url_have_group_name = true(注意后边不要有分号) store_path0=/data/fdfs_storage/store
启动NGINX
[root@lanyezi conf]# /usr/local/nginx/sbin/nginx ngx_http_fastdfs_set pid=37613 [root@lanyezi conf]# netstat -lntup Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 37430/fdfs_trackerd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 37582/nginx tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1093/sshd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 37444/fdfs_storaged tcp 0 0 :::22 :::* LISTEN 1093/sshd
测试上传一个文件
[root@lanyezi conf]# fdfs_upload_file /etc/fdfs/client.conf /etc/security/limits.conf group1/M00/00/00/wKhQe1no40WACD39AAAHK_yyDxI74.conf
2.2 测试浏览器访问
http://192.168.80.123/M00/00/00/wKhQe1no40WACD39AAAHK_yyDxI74.conf
可以下载
配置fastdfs集群nginx
配置多个group
如果需要再单台服务器实例多个storage的解决办法
一、复制一份storage.conf并修改文件名storage_aaa.conf
二、修改storage_aaa.conf相关配置
1、修改组名:group_name=group4
2、修改端口:port=23004
3、修改日志文件目录:base_path=/fastdfs/aaa/data-and-log
4、修改资源保存路径:store_path0=/fastdfs/aaa/aaa-data
三、修改mod_fastdfs.conf配置文件
1、修改组名:group_name=group1/group2/group3/group4 多个用/区分开
2、设置组个数:group_count = 4
3、设置每一组信息:
[group1]group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/fastdfs/storage/images-data [group2] group_name=group2 storage_server_port=23001 store_path_count=1 store_path0=/fastdfs/storage_voice/voice-data
等以此类推
nginx日志报错ERROR - file: ../common/fdfs_global.c, line: 52, the format of filename
解决办法:
vi /etc/fdfs/mod_fastdfs.conf 将 url_have_group_name=false 改为 url_have_group_name=true
四、重启相关服务,可以访问到相关图片、语音等信息
本人在码云上提交了关于阅读spring源码之后编写的一些基础模块的实现,https://git.oschina.net/73hulu/spring.git 望大家不吝给颗星star,谢谢大家
[root@iZ2ze66dst6erg4u4lszcsZ fdfs_storage]# /usr/bin/fdfs_storaged /etc/fdfs/storage_aaa.conf 启动单独的配置文件