前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >构建高可用文件存储:深入解析FastDFS集群部署的关键步骤

构建高可用文件存储:深入解析FastDFS集群部署的关键步骤

原创
作者头像
Lion Long
发布2024-12-29 21:23:32
发布2024-12-29 21:23:32
11700
代码可运行
举报
文章被收录于专栏:后端开发技术
运行总次数:0
代码可运行

一、结构

图片
图片

部署2个tracker server,两个storage server。 模拟测试时多个tracker可以部署在同一台机器上,但是storage不能部署在同一台机器上。 如果是云服务器一定要记得开放对应的端口。

示例:

服务器地址

服务程序

对应配置文件

端口区别

192.168.0.104

fdfs_trackerd

tracker_22122.conf

22122

192.168.0.104

fdfs_trackerd

tracker_22123.conf

22123

192.168.0.104

fdfs_storage

storage_group1_23000.conf

192.168.0.105

fdfs_storage

storage_group1_23000.conf

注意:storage是要部署在不同的服务器上,修改端口是没有用。

二、服务器配置(192.168.0.104)

(1)把现有的tracker、storage全部停止。

代码语言:javascript
代码运行次数:0
复制
# 查询tracker的PID
ps -ef | grep tracker
# kill进程
kill -9 11027

# 查询storage的PID
ps -ef | grep storage
# kill进程
kill -9 17975

(2)建立配置文件和存储目录。

代码语言:javascript
代码运行次数:0
复制
cd /etc/fdfs 
cp tracker.conf.sample tracker_22122.conf 
cp tracker.conf.sample tracker_22123.conf 
mkdir /home/fastdfs/tracker_22122 # 同一个服务器创建多个tracker存储路径 
mkdir /home/fastdfs/tracker_22123 
cp storage.conf.sample storage_group1_23000.conf 
mkdir /home/fastdfs/storage_group1_23000

(3)然后要修改对应的配置文件,详细见如下。

2.1、修改tracker_22122.conf配置文件

在这里,tracker_22122.conf 只修改一下 Tracker 存储日志和数据的路径。主要修改port、base_path路径。

代码语言:javascript
代码运行次数:0
复制
# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Tracker 服务端口(默认为 22122) 
port=22122 
# 存储日志和数据的根目录 
base_path=/home/fastdfs/tracker_22122

启动tracker_22122:

代码语言:javascript
代码运行次数:0
复制
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22122.conf

2.2、修改tracker_22123.conf配置文件

在这里,tracker_22123.conf只修改一下 Tracker 存储日志和数据的路径。主要修改port、base_path路径。

代码语言:javascript
代码运行次数:0
复制
# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Tracker 服务端口(默认为 22122) 
port=22123
# 存储日志和数据的根目录 
base_path=/home/fastdfs/tracker_22123

启动tracker_22123:

代码语言:javascript
代码运行次数:0
复制
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22123.conf

此时查看启动的tracker:

代码语言:javascript
代码运行次数:0
复制
 ps -ef | grep tracker

信息显示:

代码语言:javascript
代码运行次数:0
复制
root       2424      1  0 13:10 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22122.conf
root       2455      1  0 13:12 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22123.conf

2.3、修改storage_group1_23000.conf配置文件

在这里,storage_group1_23000.conf 只是修改一下 storage 存储日志和数据的路径。主要修改:port、base_path、store_path0、tracker_server。

代码语言:javascript
代码运行次数:0
复制
# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Storage 服务端口(默认为 23000) 
port=23000 
# 数据和日志文件存储根目录 
base_path=/home/fastdfs/storage_group1_23000 
# 存储路径,访问时路径为 M00 
# store_path1 则为 M01,以此递增到 M99(如果配置了多个存储目录的话,这里只指定 1 个) 
store_path0=/home/fastdfs/storage_group1_23000 
# Tracker 服务器 IP 地址和端口,单机搭建时也不要写 127.0.0.1 
# tracker_server 可以多次出现,如果有多个,则配置多个 
tracker_server=192.168.0.104:22122 
tracker_server=192.168.0.104:22123

启动storage_group1_23000:

代码语言:javascript
代码运行次数:0
复制
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf

三、服务器配置(192.168.0.105)

(1)把现有的tracker、storage全部停止。

代码语言:javascript
代码运行次数:0
复制
# 查询tracker的PID
ps -ef | grep tracker
# kill进程
kill -9 17380

# 查询storage的PID
ps -ef | grep storage
# kill进程
kill -9 15937

(2)建立配置文件和存储目录。

代码语言:javascript
代码运行次数:0
复制
cd /etc/fdfs 
sudo cp storage.conf.sample storage_group1_23000.conf 
sudo mkdir /home/fastdfs/storage_group1_23000

(3)然后要修改对应的配置文件。在这里,storage_group1_23000.conf 只是修改一下 storage 存储日志和数据的路径,主要修改:port、base_path、store_path0、tracker_server。

代码语言:javascript
代码运行次数:0
复制
# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Storage 服务端口(默认为 23000) 
port=23000 
# 数据和日志文件存储根目录 
base_path=/home/fastdfs/storage_group1_23000
 # 存储路径,访问时路径为 M00 
 # store_path1 则为 M01,以此递增到 M99(如果配置了多个存储目录的话,这里只指定 1 个) 
 store_path0=/home/fastdfs/storage_group1_23000 
 # Tracker 服务器 IP 地址和端口,单机搭建时也不要写 127.0.0.1 
 # tracker_server 可以多次出现,如果有多个,则配置多个 
tracker_server=192.168.0.104:22122 
tracker_server=192.168.0.104:22123

(4)启动storage_group1_23000。

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf

四、测试

4.1、配置client.conf

(1)创建client目录:

代码语言:javascript
代码运行次数:0
复制
mkdir /home/fastdfs/client

(2)修改client.conf。

代码语言:javascript
代码运行次数:0
复制
# 修改client的base path路径 
base_path = /home/fastdfs/client 
# 配置tracker server地址 
tracker_server=192.168.0.104:22122 
tracker_server=192.168.0.104:22123

4.2、配置mod_fastdfs.conf

主要修改tracker_server、url_have_group_name、store_path0。 路径:/etc/fdfs/mod_fastdfs.conf。

代码语言:javascript
代码运行次数:0
复制
# Tracker 服务器IP和端口修改 
tracker_server=192.168.0.104:22122 
tracker_server=192.168.0.104:22123
# url 中是否包含 group 名称,改为 true,包含 group 
url_have_group_name = true 
# 配置 Storage 信息,修改 store_path0 的信息 
store_path0=/home/fastdfs/storage_group1_23000 
# 其它的一般默认即可,例如 
base_path=/tmp 
group_name=group1 
# storage服务器端口号 
storage_server_port=23000 
#存储路径数量, 必须和storage.conf文件一致 
store_path_count=1

4.3、检测是否正常启动

分别在两台服务器(192.168.0.104和192.168.0.105)执行:

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_monitor /etc/fdfs/storage_group1_23000.conf

正常则存在2个Active的storage。

代码语言:javascript
代码运行次数:0
复制
[2022-11-13 13:30:10] DEBUG - base_path=/home/fastdfs/storage_group1_23000, connect_timeout=5, network_timeout=60, tracker_server_count=2, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=1, 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.0.106:22123

group count: 1

Group 1:
group name = group1
disk total space = 99,701 MB
disk free space = 87,166 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.0.105
		ip_addr = 192.168.0.105  ACTIVE
		http domain = 
		version = 6.07
		join time = 2022-11-13 13:22:41
		up time = 2022-11-13 13:22:41
		total storage = 99,701 MB
		free storage = 87,168 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.0.106
		if_trunk_server = 0
		connection.alloc_count = 256
		connection.current_count = 1
		connection.max_count = 1
		total_upload_count = 0
		success_upload_count = 0
		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 = 0
		success_download_count = 0
		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 = 0
		success_upload_bytes = 0
		total_append_bytes = 0
		success_append_bytes = 0
		total_modify_bytes = 0
		success_modify_bytes = 0
		stotal_download_bytes = 0
		success_download_bytes = 0
		total_sync_in_bytes = 0
		success_sync_in_bytes = 0
		total_sync_out_bytes = 0
		success_sync_out_bytes = 0
		total_file_open_count = 0
		success_file_open_count = 0
		total_file_read_count = 0
		success_file_read_count = 0
		total_file_write_count = 0
		success_file_write_count = 0
		last_heart_beat_time = 2022-11-13 13:29:46
		last_source_update = 1970-01-01 08:00:00
		last_sync_update = 1970-01-01 08:00:00
		last_synced_timestamp = 1970-01-01 08:00:00 
	Storage 2:
		id = 192.168.0.106
		ip_addr = 192.168.0.106  ACTIVE
		http domain = 
		version = 6.07
		join time = 2022-11-13 13:17:34
		up time = 2022-11-13 13:17:34
		total storage = 99,701 MB
		free storage = 87,166 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 = 1
		total_upload_count = 0
		success_upload_count = 0
		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 = 0
		success_download_count = 0
		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 = 0
		success_upload_bytes = 0
		total_append_bytes = 0
		success_append_bytes = 0
		total_modify_bytes = 0
		success_modify_bytes = 0
		stotal_download_bytes = 0
		success_download_bytes = 0
		total_sync_in_bytes = 0
		success_sync_in_bytes = 0
		total_sync_out_bytes = 0
		success_sync_out_bytes = 0
		total_file_open_count = 0
		success_file_open_count = 0
		total_file_read_count = 0
		success_file_read_count = 0
		total_file_write_count = 0
		success_file_write_count = 0
		last_heart_beat_time = 2022-11-13 13:30:09
		last_source_update = 1970-01-01 08:00:00
		last_sync_update = 1970-01-01 08:00:00
		last_synced_timestamp = 1970-01-01 08:00:00

4.4、测试上传文件

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/storage_group1_23000.conf

查看两台服务器下的00/00目录是否存在相同的文件。

4.5、测试下载文件

(1)测试正常下载:

代码语言:javascript
代码运行次数:0
复制
fdfs_download_file /etc/fdfs/client.conf

(2)停止192.168.0.104的storage,然后测试下载。

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf stop

测试下载:

代码语言:javascript
代码运行次数:0
复制
fdfs_download_file /etc/fdfs/client.conf

此时还可以正常下载。 (3)继续停止另一个storage server(192.168.0.105),再测试下载。

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf stop

测试下载:

代码语言:javascript
代码运行次数:0
复制
fdfs_download_file /etc/fdfs/client.conf

此时就报错了,因为storage都已经停止了。

另外,可以使用浏览器去测试:http://(IP地址):80/group1/M00/00/00/(fileid)。

4.6、恢复storage的运行

两台服务器都执行:

代码语言:javascript
代码运行次数:0
复制
/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf

可以先恢复一台storage,然后上传文件,再恢复另一台storage,然后在新启动的storage观察文件是否被同步。

4.7、报错处理

代码语言:javascript
代码运行次数:0
复制
tracker_query_storage fail, error no: 28, error info: No space left on device

提示磁盘空间不足。 在tracker xx.conf中,将reserved_storage_space的值修改为5%,预留5%的磁盘空间。

五、参考

  1. FastDFS tracker leader机制介绍。
  2. FastDFS配置详解之Tracker配置。
  3. FastDFS配置详解之Storage配置。
  4. FastDFS集群部署指南。

六、总结

本文旨在深入解析FastDFS集群部署的关键步骤,帮助读者构建高可用的文件存储系统。

1. FastDFS集群架构:介绍FastDFS的基本架构和关键组件,包括跟踪器(Tracker)和存储节点(Storage),帮助读者理解集群部署的基本原理。

2. 安装和配置FastDFS:详细介绍FastDFS的安装和配置过程,包括跟踪器节点和存储节点的设置,以及集群的初始化和配置文件的编辑等步骤。

3. 集群扩展和负载均衡:探讨如何扩展FastDFS集群的容量和性能,并介绍常用的负载均衡方法,以确保高效的文件存储和访问。

4. 故障处理和监控:介绍常见的故障情况和故障处理方法,以及如何设置监控和报警系统,保障集群的稳定运行。

通过本文,读者将深入了解FastDFS集群部署的关键步骤和技巧,了解构建高可用文件存储系统所需的核心知识。将提供清晰的指导和实践建议,帮助读者成功部署和管理FastDFS集群,实现高可用的文件存储环境。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、结构
  • 二、服务器配置(192.168.0.104)
    • 2.1、修改tracker_22122.conf配置文件
    • 2.2、修改tracker_22123.conf配置文件
    • 2.3、修改storage_group1_23000.conf配置文件
  • 三、服务器配置(192.168.0.105)
  • 四、测试
    • 4.1、配置client.conf
    • 4.2、配置mod_fastdfs.conf
    • 4.3、检测是否正常启动
    • 4.4、测试上传文件
    • 4.5、测试下载文件
    • 4.6、恢复storage的运行
    • 4.7、报错处理
  • 五、参考
  • 六、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档