安装前准备
# yum install -y git #下载git
# cd /data
# mkdir fastdfs
# cd fastdfs
# git clone https://github.com/happyfish100/fastdfs.git #克隆fastdfs仓库到本地
Cloning into 'fastdfs'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 1107 (delta 1), reused 1 (delta 0), pack-reused 1101
Receiving objects: 100% (1107/1107), 6.34 MiB | 26.00 KiB/s, done.
Resolving deltas: 100% (736/736), done. #克隆完毕
构建镜像
# cd /data/fastdfs/docker/dockerfile_network# docker build -t fastdfs:latest . #构建镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
fastdfs latest c1c4e7f3a646 5 hours ago 493MB
# mkdir -p /data/fastdfs/tracker_data
# mkdir -p /data/fastdfs/storage_data
# mkdir -p /etc/fdfs
# cp /data/fastdfs/fastdfs/docker/dockerfile_network/conf/* /etc/fdfs/
使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用)
修改tracker配置文件# vim /etc/fdfs/tracker.conf
# the base path to store data and log files
base_path=/fastdfs/storage/products
# when store_lookup set to 1, must set store_group to the group name
store_group=group0
创建tracker服务
# docker run -ti -d --name tracker -v /etc/fdfs:/etc/fdfs -v /data/fastdfs/tracker_data:/fastdfs/tracker -p 22122:22122 fastdfs:latest tracker
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0bc17faeec29 fastdfs:latest "/home/fastdfs.sh tr…" 34 minutes ago Up 34 minutes 80/tcp, 8888/tcp, 23000/tcp, 0.0.0.0:22122->22122/tcp tracker
进入tracker容器
# docker exec -it tracker /bin/bash
# mkdir /fastdfs/storage/products
# yum -y install net-tools
# yum -y install telnet
# yum -y install initscripts
# ip -4 a # 查看IP
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
24: eth0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
172.17.0.2 # tracker service服务的IP
# ss -ntlp #查看端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:* users:(("nginx",pid=19,fd=6))
LISTEN 0 128 *:8888 *:* users:(("nginx",pid=19,fd=7))
明显22122端口没启动
# cd /etc/init.d
# ls
fdfs_storaged fdfs_trackerd functions netconsole network README
# ./fdfs_trackerd start # 启动tracker服务
Starting FastDFS tracker server:
# ss -ntlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:* users:(("nginx",pid=19,fd=6))
LISTEN 0 128 *:8888 *:* users:(("nginx",pid=19,fd=7))
LISTEN 0 128 *:22122 *:* users:(("fdfs_trackerd",pid=103,fd=5))
使用docker镜像构建storage容器(存储服务器,提供容量和备份服务)
修改storage配置文件
# vim /etc/fdfs/storage.conf
# and storage_ids.conf must be configed correctly.
group_name=group0
# the base path to store data and log files
base_path=/fastdfs/storage/products
# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/fastdfs/storage/products/statics
store_path1=/fastdfs/storage/products/thumb
#store_path1=/home/dfs2
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=172.17.0.2:22122 # tracker_server服务的IP端口
创建storage服务
# docker run -ti -d --name storage -v /etc/fdfs:/etc/fdfs -v /data/fastdfs/storage_data:/fastdfs/storage/products -e TRACKER_SERVER:172.17.0.2:22122 -p 8888:8888 -p 23000:23000 fastdfs:latest storage
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2c75062a1666 fastdfs:latest "/home/fastdfs.sh st…" 3 hours ago Up 3 hours 80/tcp, 0.0.0.0:8888->8888/tcp, 22122/tcp, 0.0.0.0:23000->23000/tcp storage
进入storage容器
# docker exec -it storage /bin/bash
# yum -y install net-tools
# yum -y install telnet
# yum -y install initscripts
# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link-netnsid 0
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
172.17.0.3 # storage service服务的IP
# ss -ntlp #查看端口
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22122 *:* users:(("fdfs_trackerd",pid=20,fd=5))
LISTEN 0 128 *:80 *:* users:(("nginx",pid=22,fd=6))
LISTEN 0 128 *:23000 *:* users:(("fdfs_storaged",pid=168,fd=5))
LISTEN 4 128 *:8888 *:* users:(("nginx",pid=22,fd=7))
注:23000端口没启动时
# cd /etc/init.d
# ls
fdfs_storaged fdfs_trackerd functions netconsole network README
./fdfs_storaged
Usage: ./fdfs_storaged {start|stop|status|restart|condrestart}
# ./fdfs_storaged start
# ./fdfs_storaged status # 查看是启动状态
# ss -ntlp 查看未启动
这时,# kill -9 pid 再 # ./fdfs_storaged start 即可
用测试程序测试服务可用性(上传文件到storage容器)
# docker exec -it tracker /bin/bash
# echo hello world > /opt/123.txt
# fdfs_test /etc/fdfs/client.conf upload /opt/123.txt
打印如下信息即认为测试通过
This is FastDFS client test program v5.12
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.
[2019-08-27 06:31:58] DEBUG - base_path=/fastdfs/storage/products, connect_timeout=30, network_timeout=60, tracker_server_count=1, 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
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=172.17.0.3, port=23000
group_name=group0, ip_addr=172.17.0.3, port=23000
storage_upload_by_filename
group_name=group0, remote_filename=M00/00/00/rBEAA11kzl6ASXZWAAAADK8IOy0581.txt
source ip address: 172.17.0.3
file timestamp=2019-08-27 06:31:58
file size=12
file crc32=2936552237
example file url: http://172.17.0.3/group0/M00/00/00/rBEAA11kzl6ASXZWAAAADK8IOy0581.txt
storage_upload_slave_by_filename
group_name=group0, remote_filename=M00/00/00/rBEAA11kzl6ASXZWAAAADK8IOy0581_big.txt
source ip address: 172.17.0.3
file timestamp=2019-08-27 06:31:58
file size=12
file crc32=2936552237
example file url: http://172.17.0.3/group0/M00/00/00/rBEAA11kzl6ASXZWAAAADK8IOy0581_big.txt
# docker exec -it storage /bin/bash
# cd /fastdfs/storage/products/statics/data/00/00
# cat rBEAA11kzl6ASXZWAAAADK8IOy0581.txt
hello world