当前位置:   article > 正文

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

fastdfs集群部署

一、结构

fastdfs_arch

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

示例:

服务器地址服务程序对应配置文件端口区别
192.168.0.104fdfs_trackerdtracker_22122.conf22122
192.168.0.104fdfs_trackerdtracker_22123.conf22123
192.168.0.104fdfs_storagestorage_group1_23000.conf
192.168.0.105fdfs_storagestorage_group1_23000.conf

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

二、服务器配置(192.168.0.104)

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

# 查询tracker的PID
ps -ef | grep tracker
# kill进程
kill -9 11027

# 查询storage的PID
ps -ef | grep storage
# kill进程
kill -9 17975
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

修改tracker_22122.conf配置文件

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

# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Tracker 服务端口(默认为 22122) 
port=22122 
# 存储日志和数据的根目录 
base_path=/home/fastdfs/tracker_22122
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

启动tracker_22122:

sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22122.conf
  • 1

修改tracker_22123.conf配置文件

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

# 启用配置文件(默认为 false,表示启用配置文件) 
disabled=false 
# Tracker 服务端口(默认为 22122) 
port=22123
# 存储日志和数据的根目录 
base_path=/home/fastdfs/tracker_22123
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

启动tracker_22123:

sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker_22123.conf
  • 1

此时查看启动的tracker:

 ps -ef | grep tracker
  • 1

信息显示:

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

  • 1
  • 2
  • 3

修改storage_group1_23000.conf配置文件

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

# 启用配置文件(默认为 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

启动storage_group1_23000:

sudo /usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf
  • 1

三、服务器配置(192.168.0.105)

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

# 查询tracker的PID
ps -ef | grep tracker
# kill进程
kill -9 17380

# 查询storage的PID
ps -ef | grep storage
# kill进程
kill -9 15937
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

cd /etc/fdfs 
sudo cp storage.conf.sample storage_group1_23000.conf 
sudo mkdir /home/fastdfs/storage_group1_23000
  • 1
  • 2
  • 3

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

# 启用配置文件(默认为 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

(4)启动storage_group1_23000。

/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf
  • 1

四、测试

配置client.conf

(1)创建client目录:

mkdir /home/fastdfs/client
  • 1

(2)修改client.conf。

# 修改client的base path路径 
base_path = /home/fastdfs/client 
# 配置tracker server地址 
tracker_server=192.168.0.104:22122 
tracker_server=192.168.0.104:22123
  • 1
  • 2
  • 3
  • 4
  • 5

配置mod_fastdfs.conf

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

# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

检测是否正常启动

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

/usr/bin/fdfs_monitor /etc/fdfs/storage_group1_23000.conf
  • 1

正常则存在2个Active的storage。

[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 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147

测试上传文件

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/storage_group1_23000.conf
  • 1

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

测试下载文件

(1)测试正常下载:

fdfs_download_file /etc/fdfs/client.conf
  • 1

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

/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf stop
  • 1

测试下载:

fdfs_download_file /etc/fdfs/client.conf
  • 1

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

/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf stop
  • 1

测试下载:

fdfs_download_file /etc/fdfs/client.conf
  • 1

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

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

恢复storage的运行

两台服务器都执行:

/usr/bin/fdfs_storaged /etc/fdfs/storage_group1_23000.conf
  • 1

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

报错处理

tracker_query_storage fail, error no: 28, error info: No space left on device
  • 1

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

五、参考

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

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/441479
推荐阅读
相关标签
  

闽ICP备14008679号