Docker 搭建FastDFS文件系统

打印 上一主题 下一主题

主题 685|帖子 685|积分 2055

1、检索和拉取fastDFS镜像

  1. # 检索fastdfs
  2. docker search fastdfs
  3. # 拉取fastdfs
  4. docker pull delron/fastdfs
复制代码

2、使用docker镜像构建tracker容器

跟踪服务器,起到调度的作用
  1. # 创建tracker 挂载文件目录
  2. mkdir -p /usr/local/fdfs/tracker
  3. # 创建fastdfs 跟踪服务器tracker
  4. docker run -d --network=host --name tracker -v
复制代码
  1. [root@localhost ~]# mkdir -p /usr/local/fdfs/tracker
  2. [root@localhost ~]# docker run -d --network=host --name tracker -v /usr/local/fdfs/tracker:/var/fdfs delron/fastdfs tracker
  3. 77cf76bd57a63a98b6bcff52d4edc34d2f02f558a6b17f9d048a303f4660d0ae
复制代码
3、使用docker镜像构建storage容器

存储服务器,提供容量和备份服务
TRACKER_SERVER=本机的ip地址:22122 本机ip地址不要使用127.0.0.1
  1. # 创建storage 挂载目录
  2. mkdir -p /usr/local/fdfs/storage
  3. # 创建fastdfs 存储服务器storage
  4. docker run -d --network=host --name storage -e TRACKER_SERVER=192.168.43.10:22122 -v /usr/local/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
复制代码
  1. [root@localhost ~]# mkdir -p /usr/local/fdfs/storage
  2. [root@localhost ~]# docker run -d --network=host --name storage -e TRACKER_SERVER=192.168.43.10:22122 -v /usr/local/fdfs/storage:/var/fdfs -e GROUP_NAME=group1 delron/fastdfs storage
复制代码


  • 说明1
    x.x.x.x这里要说明一下:这个地址必须使用服务器的的外网地址,否则上传的时候连不上服务器。
  • 说明2
    group1这个不要随便修改,因为默认的nginx的配置中使用的是0到9的数字,如果想修改这个名字,得进入到storage容器中修改nginx的配置文件
此时两个服务都以启动,进行fastdfs服务的相关配置。
4、storage容器配置

4.1 storage 配置文件

进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在/etc/fdfs目录下的storage.conf。
  1. #进入storage 容器后台服务
  2. [root@localhost ~]# docker exec -it storage /bin/bash
  3. # 切换至storage.cnf 文件所在目录/etc/fdfs
  4. [root@localhost nginx-1.12.2]# cd /etc/fdfs
  5. [root@localhost fdfs]# ls -a
  6. .                   mime.types           storage_ids.conf.sample
  7. ..                  mod_fastdfs.conf     tracker.conf
  8. client.conf         storage.conf         tracker.conf.sample
  9. client.conf.sample  storage.conf.sample
  10. http.conf           storage_ids.conf
  11. [root@localhost fdfs]# vi storage.conf
  12. # 查看storage.cnf 文件相关配置
  13. [root@localhost fdfs]# cat storage.conf.sample
  14. # is this config file disabled
  15. # false for enabled
  16. # true for disabled
  17. disabled=false
  18. # the name of the group this storage server belongs to
  19. #
  20. # comment or remove this item for fetching from tracker server,
  21. # in this case, use_storage_id must set to true in tracker.conf,
  22. # and storage_ids.conf must be configed correctly.
  23. group_name=group1
  24. # bind an address of this host
  25. # empty for bind all addresses of this host
  26. bind_addr=
  27. # if bind an address of this host when connect to other servers
  28. # (this storage server as a client)
  29. # true for binding the address configed by above parameter: "bind_addr"
  30. # false for binding any address of this host
  31. client_bind=true
  32. # the storage server port
  33. port=23000
  34. # connect timeout in seconds
  35. # default value is 30s
  36. connect_timeout=30
  37. # network timeout in seconds
  38. # default value is 30s
  39. network_timeout=60
  40. # heart beat interval in seconds
  41. heart_beat_interval=30
  42. # disk usage report interval in seconds
  43. stat_report_interval=60
  44. # the base path to store data and log files
  45. base_path=/home/yuqing/fastdfs
  46. # max concurrent connections the server supported
  47. # default value is 256
  48. # more max_connections means more memory will be used
  49. max_connections=256
  50. # the buff size to recv / send data
  51. # this parameter must more than 8KB
  52. # default value is 64KB
  53. # since V2.00
  54. buff_size = 256KB
  55. # accept thread count
  56. # default value is 1
  57. # since V4.07
  58. accept_threads=1
  59. # work thread count, should <= max_connections
  60. # work thread deal network io
  61. # default value is 4
  62. # since V2.00
  63. work_threads=4
  64. # if disk read / write separated
  65. ##  false for mixed read and write
  66. ##  true for separated read and write
  67. # default value is true
  68. # since V2.00
  69. disk_rw_separated = true
  70. # disk reader thread count per store base path
  71. # for mixed read / write, this parameter can be 0
  72. # default value is 1
  73. # since V2.00
  74. disk_reader_threads = 1
  75. # disk writer thread count per store base path
  76. # for mixed read / write, this parameter can be 0
  77. # default value is 1
  78. # since V2.00
  79. disk_writer_threads = 1
  80. # when no entry to sync, try read binlog again after X milliseconds
  81. # must > 0, default value is 200ms
  82. sync_wait_msec=50
  83. # after sync a file, usleep milliseconds
  84. # 0 for sync successively (never call usleep)
  85. sync_interval=0
  86. # storage sync start time of a day, time format: Hour:Minute
  87. # Hour from 0 to 23, Minute from 0 to 59
  88. sync_start_time=00:00
  89. # storage sync end time of a day, time format: Hour:Minute
  90. # Hour from 0 to 23, Minute from 0 to 59
  91. sync_end_time=23:59
  92. # write to the mark file after sync N files
  93. # default value is 500
  94. write_mark_file_freq=500
  95. # path(disk or mount point) count, default value is 1
  96. store_path_count=1
  97. # store_path#, based 0, if store_path0 not exists, it's value is base_path
  98. # the paths must be exist
  99. store_path0=/home/yuqing/fastdfs
  100. #store_path1=/home/yuqing/fastdfs2
  101. # subdir_count  * subdir_count directories will be auto created under each
  102. # store_path (disk), value can be 1 to 256, default value is 256
  103. subdir_count_per_path=256
  104. # tracker_server can ocur more than once, and tracker_server format is
  105. #  "host:port", host can be hostname or ip address
  106. tracker_server=192.168.209.121:22122
  107. #standard log level as syslog, case insensitive, value list:
  108. ### emerg for emergency
  109. ### alert
  110. ### crit for critical
  111. ### error
  112. ### warn for warning
  113. ### notice
  114. ### info
  115. ### debug
  116. log_level=info
  117. #unix group name to run this program,
  118. #not set (empty) means run by the group of current user
  119. run_by_group=
  120. #unix username to run this program,
  121. #not set (empty) means run by current user
  122. run_by_user=
  123. # allow_hosts can ocur more than once, host can be hostname or ip address,
  124. # "*" (only one asterisk) means match all ip addresses
  125. # we can use CIDR ips like 192.168.5.64/26
  126. # and also use range like these: 10.0.1.[0-254] and host[01-08,20-25].domain.com
  127. # for example:
  128. # allow_hosts=10.0.1.[1-15,20]
  129. # allow_hosts=host[01-08,20-25].domain.com
  130. # allow_hosts=192.168.5.64/26
  131. allow_hosts=*
  132. # the mode of the files distributed to the data path
  133. # 0: round robin(default)
  134. # 1: random, distributted by hash code
  135. file_distribute_path_mode=0
  136. # valid when file_distribute_to_path is set to 0 (round robin),
  137. # when the written file count reaches this number, then rotate to next path
  138. # default value is 100
  139. file_distribute_rotate_count=100
  140. # call fsync to disk when write big file
  141. # 0: never call fsync
  142. # other: call fsync when written bytes >= this bytes
  143. # default value is 0 (never call fsync)
  144. fsync_after_written_bytes=0
  145. # sync log buff to disk every interval seconds
  146. # must > 0, default value is 10 seconds
  147. sync_log_buff_interval=10
  148. # sync binlog buff / cache to disk every interval seconds
  149. # default value is 60 seconds
  150. sync_binlog_buff_interval=10
  151. # sync storage stat info to disk every interval seconds
  152. # default value is 300 seconds
  153. sync_stat_file_interval=300
  154. # thread stack size, should >= 512KB
  155. # default value is 512KB
  156. thread_stack_size=512KB
  157. # the priority as a source server for uploading file.
  158. # the lower this value, the higher its uploading priority.
  159. # default value is 10
  160. upload_priority=10
  161. # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
  162. # multi aliases split by comma. empty value means auto set by OS type
  163. # default values is empty
  164. if_alias_prefix=
  165. # if check file duplicate, when set to true, use FastDHT to store file indexes
  166. # 1 or yes: need check
  167. # 0 or no: do not check
  168. # default value is 0
  169. check_file_duplicate=0
  170. # file signature method for check file duplicate
  171. ## hash: four 32 bits hash code
  172. ## md5: MD5 signature
  173. # default value is hash
  174. # since V4.01
  175. file_signature_method=hash
  176. # namespace for storing file indexes (key-value pairs)
  177. # this item must be set when check_file_duplicate is true / on
  178. key_namespace=FastDFS
  179. # set keep_alive to 1 to enable persistent connection with FastDHT servers
  180. # default value is 0 (short connection)
  181. keep_alive=0
  182. # you can use "#include filename" (not include double quotes) directive to
  183. # load FastDHT server list, when the filename is a relative path such as
  184. # pure filename, the base path is the base path of current/this config file.
  185. # must set FastDHT server list when check_file_duplicate is true / on
  186. # please see INSTALL of FastDHT for detail
  187. ##include /home/yuqing/fastdht/conf/fdht_servers.conf
  188. # if log to access log
  189. # default value is false
  190. # since V4.00
  191. use_access_log = false
  192. # if rotate the access log every day
  193. # default value is false
  194. # since V4.00
  195. rotate_access_log = false
  196. # rotate access log time base, time format: Hour:Minute
  197. # Hour from 0 to 23, Minute from 0 to 59
  198. # default value is 00:00
  199. # since V4.00
  200. access_log_rotate_time=00:00
  201. # if rotate the error log every day
  202. # default value is false
  203. # since V4.02
  204. rotate_error_log = false
  205. # rotate error log time base, time format: Hour:Minute
  206. # Hour from 0 to 23, Minute from 0 to 59
  207. # default value is 00:00
  208. # since V4.02
  209. error_log_rotate_time=00:00
  210. # rotate access log when the log file exceeds this size
  211. # 0 means never rotates log file by log file size
  212. # default value is 0
  213. # since V4.02
  214. rotate_access_log_size = 0
  215. # rotate error log when the log file exceeds this size
  216. # 0 means never rotates log file by log file size
  217. # default value is 0
  218. # since V4.02
  219. rotate_error_log_size = 0
  220. # keep days of the log files
  221. # 0 means do not delete old log files
  222. # default value is 0
  223. log_file_keep_days = 0
  224. # if skip the invalid record when sync file
  225. # default value is false
  226. # since V4.02
  227. file_sync_skip_invalid_record=false
  228. # if use connection pool
  229. # default value is false
  230. # since V4.05
  231. use_connection_pool = false
  232. # connections whose the idle time exceeds this time will be closed
  233. # unit: second
  234. # default value is 3600
  235. # since V4.05
  236. connection_pool_max_idle_time = 3600
  237. # use the ip address of this storage server if domain_name is empty,
  238. # else this domain name will ocur in the url redirected by the tracker server
  239. http.domain_name=
  240. # the port of the web server on this storage server
  241. http.server_port=8888
复制代码
 默认端口是8888,可以进行修改也可以不进行修改(建议不进行修改)。
4.2 nginx 配置

进入storage容器配置nginx,在/usr/local/nginx目录下,修改nginx.conf文件

默认配置如下:
 可以修改为如下
  1. # 路径地址
  2. location /group1/M00 {
  3.         alias  /var/fdfs;  #storage 实现存储文件目录
  4.     }
复制代码
 也可以不做任何修改。(建议不做修改)
5、Tracker容器配置

进入到tracker服务器,配置一下tracker_server的服务器地址。
  1. # 进入tracker 服务配置
  2. docker exec -it tracker /bin/bash
  3. # 编辑storage 服务地址
  4. vi /etc/fdfs/client.conf
复制代码
  1. [root@localhost ~]# docker exec -it tracker /bin/bash
  2. [root@localhost nginx-1.12.2]# cat /etc/fdfs/client.conf
  3. # connect timeout in seconds
  4. # default value is 30s
  5. connect_timeout=30
  6. # network timeout in seconds
  7. # default value is 30s
  8. network_timeout=60
  9. # the base path to store log files
  10. base_path=/var/fdfs
  11. # tracker_server can ocur more than once, and tracker_server format is
  12. #  "host:port", host can be hostname or ip address
  13. tracker_server=192.168.0.197:22122
复制代码
将配置 tracker_server=x.x.x.x:22122
到这其实fastDFS就配好了
这里的x.x.x.x也建议设置为服务器的内网ip。
6、文件上传测试

进入storage容器,进入/var/fdfs目录
  1. # 进入storage 容器后台服务
  2. docker exec -it storage bash
  3. # 切换至storage 上传文件实际存储目录地址
  4. cd /var/fdfs
  5. # 在当前目录新建a.txt 文件,并且写入hello, world 内容
  6. echo hello,world>a.txt
  7. # 执行a.txt 文本上传
  8. /usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
复制代码
  1. [root@localhost ~]# docker exec -it storage bash
  2. [root@localhost nginx-1.12.2]# cd /var/fdfs
  3. [root@localhost fdfs]# echo hello,world>a.txt
  4. [root@localhost fdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf a.txt
  5. group1/M00/00/00/wKgrCmKuo9GAX5N6AAAADLMSuiI034.txt
复制代码
浏览器访问 http://ip:8888group1/M00/00/00/wKgrCmKuo9GAX5N6AAAADLMSuiI034.txt
端口根据你在starage里面设置的要保持一致,访问之前关闭防火墙 或者自己单独开放端口命令如下:

 7、开放端口(我个人是关闭CentOS 宿主主机的防火墙)

  1. firewall-cmd --zone=public --permanent --add-port=8888/tcp
  2. firewall-cmd --zone=public --permanent --add-port=22122/tcp
  3. firewall-cmd --zone=public --permanent --add-port=23000/tcp
  4. # 重启防火墙
  5. systemctl restart firewalld
复制代码
8、开机启动容器(一般是运维执行指令,对于普通开发建议使用)

  1. docker update --restart=always tracker
  2. docker update --restart=always storage
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户云卷云舒

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表