下面介绍在CentOS系统下的SeaweedFS配置方法,演示主机操作系统为CentOS 7.6。本次演示使用5台服务器,1台主服务器(master),4台卷服务器(volume),在相同的机架上复制一份副本。使用Redis管理文件映射关系,Redis安装在主服务器(master)上。
主机名称 | 机架 | IP地址 | 安装软件 | 开放端口 | 绑定域名 |
---|---|---|---|---|---|
M1 |
***.100.100.49(公网) 172.26.188.150(内网) |
Redis(端口:6379 密码:asdbgt123456) SeaweedFS的master服务 |
6379 (内网开放) 9333 (内网开放) 19333 (内网开放) |
||
V1 | rack1 |
***.92.29.143(公网) 172.26.188.151(内网) |
SeaweedFS的volume服务 SeaweedFS的filer服务 Nginx |
80 (公网开放) 7777 (只读端口,由Nginx将公网请求转发到此端口) 8080 (内网开放) 18080 (内网开放) 8888 (内网开放) 18888 (内网开放) |
img1.diyhi.com |
V2 | rack1 |
***.100.150.81(公网) 172.26.188.152(内网) |
SeaweedFS的volume服务 SeaweedFS的filer服务 Nginx |
80 (公网开放) 7777 (只读端口,由Nginx将公网请求转发到此端口) 8080 (内网开放) 18080 (内网开放) 8888 (内网开放) 18888 (内网开放) |
img2.diyhi.com |
V3 | rack2 |
***.92.122.114(公网) 172.26.188.153(内网) |
SeaweedFS的volume服务 SeaweedFS的filer服务 Nginx |
80 (公网开放) 7777 (只读端口,由Nginx将公网请求转发到此端口) 8080 (内网开放) 18080 (内网开放) 8888 (内网开放) 18888 (内网开放) |
img3.diyhi.com |
V4 | rack2 |
***.100.154.197(公网) 172.26.188.154(内网) |
SeaweedFS的volume服务 SeaweedFS的filer服务 Nginx |
80 (公网开放) 7777 (只读端口,由Nginx将公网请求转发到此端口) 8080 (内网开放) 18080 (内网开放) 8888 (内网开放) 18888 (内网开放) |
img4.diyhi.com |
S1 |
***.100.153.26(公网) 172.26.188.155(内网) |
JDK 1.8 Tomcat 8.5 MySQL 5.7 Nginx |
80 (公网开放) |
shop.diyhi.com |
1、打开SeaweedFS下载页面https://github.com/chrislusf/seaweedfs/releases 当前最新版本为1.41
2、下载对应当前系统版本的安装包,64位Linux适合linux_amd64.tar.gz
输入命令 wget https://github.com/chrislusf/seaweedfs/releases/download/1.41/linux_amd64.tar.gz3、创建目录
输入命令 mkdir /usr/local/seaweedfs/4、解压到/usr/local/seaweedfs/
输入命令 tar zxvf linux_amd64.tar.gz -C /usr/local/seaweedfs/5、进入目录/usr/local/seaweedfs/
输入命令 cd /usr/local/seaweedfs/6、建立存储数据用的文件夹,若文件夹不存在启动volume时会出错
输入命令 mkdir /usr/local/seaweedfs/mdatamaster参数 | ||
---|---|---|
cpuprofile | string | cpu配置文件输出文件 |
-defaultReplication | string |
默认复制类型(如果未指定) (默认 "000") 000: 只存储一份,默认设置 001: 在相同的Rack复制一份 010: 在同一DC的不同rack上复制一次 100: 在不同的DC复制一次 200: 在另外两个不同的DC上复制两次 110: 在不同的rack上复制一次,并在不同的DC上复制一次。 |
-disableHttp | 禁用http请求,只允许gRPC操作。 | |
-garbageThreshold | float | 清空和回收空间的阈值 (默认 0.3) |
-ip | string | 指定ip地址 (默认 "localhost") |
-ip.bind | string | 要绑定的IP地址 (默认 "0.0.0.0") |
-maxCpu | int | 最大CPU数。 0表示可用所有CPU |
-mdir | string | 用于存储元数据的数据目录 |
-memprofile | string | 内存配置文件输出文件 |
-peers | string | 以逗号分隔的所有主(master)节点 ip:port 列表, 示例: 127.0.0.1:9093,127.0.0.1:9094 |
-port | int | http监听端口 (默认 9333) |
-pulseSeconds | int | 心跳之间的秒数 (默认 5) |
-volumePreallocate | uint | 预分配卷的磁盘空间 |
-volumeSizeLimitMB | uint | Master停止指向超大卷的写入 (默认 30000) |
-whiteList | string | 逗号分隔的Ip地址具有写入权限。 空的没有限制。 |
volume参数 | ||
---|---|---|
-cpuprofile | string | 输出cpu配置文件 |
-dataCenter | string | 当前卷服务器的数据中心名称 |
-dir | string | 用于存储数据文件的目录. dir[,dir]... |
-idleTimeout | int | 空闲连接时间 (默认 30) |
-images.fix.orientation | 上传时调整jpg方向。 | |
-index | string | 内存模式[memory|leveldb|boltdb|btree]. (默认 "memory") |
-ip | string | ip或服务器名称 |
-ip.bind | string | 要绑定的IP地址 (默认 "0.0.0.0") |
-max | string | 最大卷(volume)个数 (默认 "7") |
-maxCpu | int | 最大cpu使用数,0为使用全部 |
-memprofile | string | 输出内存配置文件 |
-mserver | string | 逗号分隔的主(master)服务器 (默认 "localhost:9333") |
-port | int | http监听端口 (默认 8080) |
-port.public | string | 可公开访问的端口 |
-publicUrl | string | 可公开访问的地址 |
-pulseSeconds | string | master与volume的心跳间隔,心跳之间的秒数必须小于或等于主设备的设置(默认 5) |
-rack | string | 当前卷服务器的机架名称 |
-read.redirect | 重定向移动或非本地卷。 (默认 true) | |
-whiteList | string | 白名单 逗号分隔的Ip地址具有写入权限。 空的没有限制。(卷服务器上的白名单将在即将发布的版本中弃用。) |
filer参数 | ||
---|---|---|
-collection | string | 所有数据都将存储在此集合中 |
-dataCenter | string | 首选在此数据中心写入volumes |
-defaultReplicaPlacement | string |
默认复制类型(如果未指定) (默认 "000") 000: 只存储一份,默认设置 001: 在相同的Rack复制一份 010: 在同一DC的不同rack上复制一次 100: 在不同的DC复制一次 200: 在另外两个不同的DC上复制两次 110: 在不同的rack上复制一次,并在不同的DC上复制一次。 |
-dirListLimit | int | 限制子目录列表大小 (默认 100000) |
-disableDirListing | 关闭目录列表 | |
-disableHttp | 禁用http请求,只允许gRpc操作 | |
-ip | string | filer服务器http监听ip地址 |
-master | string | 逗号分隔的主服务器 (默认 "localhost:9333") |
-maxMB | int | 分割大于限制的文件 (默认 32) |
-port | int | 文件服务器http监听端口 (默认 8888) |
-port.grpc | int | Filer服务器的 grpc监听端口,默认为 http的端口+10000 |
-port.readonly | int | 开放的公共只读端口 |
-redirectOnRead | 是否在文件GET请求期间代理或重定向到卷(volume)服务器 |
grpc端口为-port +10000 如果您使用“-port = 18081”启动卷(volume)服务器,则grpc端口为10000 + 18081 = 28081
默认的grpc端口:
主服务器(master) -- 默认http为 9333,grpc为 19333
卷服务器(volume) -- 默认http为 8080,grpc为 18080
管理服务器(filer) -- 默认http为 8888,grpc为 18888
1.创建seaweedfs启动用户并授权
输入命令 getent group seaweedfs || groupadd -r seaweedfs
输入命令 getent passwd seaweedfs || useradd -r -d /opt -s /bin/nologin -g seaweedfs seaweedfs
2.更改文件权限
输入命令 chown -R seaweedfs:seaweedfs /usr/local/seaweedfs3.配置开机启动主服务(master)脚本
A.增加seaweedfs-master.service 在/usr/lib/systemd/system目录下增加seaweedfs-master.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-master.service
B. 将下面的配置内容复制到seaweedfs-master.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Master
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 master -ip=172.26.188.150 -port=9333 -defaultReplication=000 -mdir=/usr/local/seaweedfs/mdata
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-master
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
使用配置好的系统服务管理seaweedfs-master | |
---|---|
systemctl enable seaweedfs-master | 配置开机启动 |
systemctl start seaweedfs-master | 启动 |
systemctl stop seaweedfs-master | 停止 |
systemctl restart seaweedfs-master | 重启 |
systemctl disable seaweedfs-master | 删除开机启动 |
systemctl daemon-reload | 刷新 |
Redis服务器需预先安装好, Redis安装教程在《CentOS服务器环境配置演示》中已有介绍,这里就不再赘述。请按实际情况更改下面的IP地址。
输入命令 vim /etc/redis.conf 设置IP地址为 bind 172.26.188.150仅允许内网IP访问指定端口
#(1)允许172.26.188.0 IP段访问6379端口移除策略
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="IP地址" port protocol="tcp" port="端口号" accept'下载SeaweedFS并复制到指定目录前面已有教程介绍,这里就不再赘述。
1.创建seaweedfs启动用户并授权
输入命令 getent group seaweedfs || groupadd -r seaweedfs
输入命令 getent passwd seaweedfs || useradd -r -d /opt -s /bin/nologin -g seaweedfs seaweedfs
2.更改文件权限
输入命令 chown -R seaweedfs:seaweedfs /usr/local/seaweedfs3.配置开机启动卷服务(volume)脚本
A.增加seaweedfs-volume.service 在/usr/lib/systemd/system目录下增加seaweedfs-volume.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-volume.service
B. 将下面的配置内容复制到seaweedfs-volume.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 volume -max=5 -mserver=172.26.188.150:9333 -ip=172.26.188.151 -port=8080 -dir=/usr/local/seaweedfs/data -dataCenter=dc1 -rack=rack1
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-volume
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
注意:-max 参数为最大逻辑卷数量。例如硬盘可用空间为800G,则大约800/30 ≈ 26,最大可设置为26使用配置好的系统服务管理seaweedfs-volume | |
---|---|
systemctl enable seaweedfs-volume | 配置开机启动 |
systemctl start seaweedfs-volume | 启动 |
systemctl stop seaweedfs-volume | 停止 |
systemctl restart seaweedfs-volume | 重启 |
systemctl disable seaweedfs-volume | 删除开机启动 |
systemctl daemon-reload | 刷新 |
1.生成文件管理(filer)服务配置文件
A.进入/usr/local/seaweedfs/目录,生成filer.toml文件
[leveldb2]
enabled = false
[redis]
enabled = true
address = "172.26.188.150:6379"
password = "asdbgt123456"
打开filer.toml文件将参数参考上面的修改。请按实际情况更改IP地址和密码。修改完成后要更改文件权限
输入命令 chown -R seaweedfs:seaweedfs /usr/local/seaweedfs2.配置开机启动文件服务(filer)脚本
A.增加seaweedfs-filer.service 在/usr/lib/systemd/system目录下增加seaweedfs-filer.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-filer.service
B. 将下面的配置内容复制到seaweedfs-filer.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Filer
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 filer -master=172.26.188.150:9333 -port=8888 -port.readonly=7777 -defaultReplicaPlacement=001
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-filer
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
使用配置好的系统服务管理seaweedfs-filer | |
---|---|
systemctl enable seaweedfs-filer | 配置开机启动 |
systemctl start seaweedfs-filer | 启动 |
systemctl stop seaweedfs-filer | 停止 |
systemctl restart seaweedfs-filer | 重启 |
systemctl disable seaweedfs-filer | 删除开机启动 |
systemctl daemon-reload | 刷新 |
配置Nginx将80端口的请求转发到7777端口
server {
listen 80;
server_name _;
return 404;
}
server {
listen 80;
server_name img1.diyhi.com;
location /{
#屏蔽目录
if ($uri !~ \. ) {
return 403;
}
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass $scheme://172.26.188.151:7777;
}
}
仅允许内网IP访问指定端口
#(1)允许172.26.188.0 IP段访问8080端口移除策略
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="IP地址" port protocol="tcp" port="端口号" accept'下载SeaweedFS并复制到指定目录前面已有教程介绍,这里就不再赘述。
1.创建seaweedfs启动用户并授权
输入命令 getent group seaweedfs || groupadd -r seaweedfs
输入命令 getent passwd seaweedfs || useradd -r -d /opt -s /bin/nologin -g seaweedfs seaweedfs
2.更改文件权限
输入命令 chown -R seaweedfs:seaweedfs /usr/local/seaweedfs3.配置开机启动卷服务(volume)脚本
A.增加seaweedfs-volume.service 在/usr/lib/systemd/system目录下增加seaweedfs-volume.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-volume.service
B. 将下面的配置内容复制到seaweedfs-volume.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 volume -max=5 -mserver=172.26.188.150:9333 -ip=172.26.188.152 -port=8080 -dir=/usr/local/seaweedfs/data -dataCenter=dc1 -rack=rack1
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-volume
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
注意:-max 参数为最大逻辑卷数量。例如硬盘可用空间为800G,则大约800/30 ≈ 26,最大可设置为26使用配置好的系统服务管理seaweedfs-volume | |
---|---|
systemctl enable seaweedfs-volume | 配置开机启动 |
systemctl start seaweedfs-volume | 启动 |
systemctl stop seaweedfs-volume | 停止 |
systemctl restart seaweedfs-volume | 重启 |
systemctl disable seaweedfs-volume | 删除开机启动 |
systemctl daemon-reload | 刷新 |
1.生成文件管理(filer)服务配置文件
A.进入/usr/local/seaweedfs/目录,生成filer.toml文件
[leveldb2]
enabled = false
[redis]
enabled = true
address = "172.26.188.150:6379"
password = "asdbgt123456"
打开filer.toml文件将参数参考上面的修改。请按实际情况更改IP地址和密码。修改完成后要更改文件权限
输入命令 chown -R seaweedfs:seaweedfs /usr/local/seaweedfs2.配置开机启动文件服务(filer)脚本
A.增加seaweedfs-filer.service 在/usr/lib/systemd/system目录下增加seaweedfs-filer.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-filer.service
B. 将下面的配置内容复制到seaweedfs-filer.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Filer
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 filer -master=172.26.188.150:9333 -port=8888 -port.readonly=7777 -defaultReplicaPlacement=001
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-filer
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
使用配置好的系统服务管理seaweedfs-filer | |
---|---|
systemctl enable seaweedfs-filer | 配置开机启动 |
systemctl start seaweedfs-filer | 启动 |
systemctl stop seaweedfs-filer | 停止 |
systemctl restart seaweedfs-filer | 重启 |
systemctl disable seaweedfs-filer | 删除开机启动 |
systemctl daemon-reload | 刷新 |
配置Nginx将80端口的请求转发到7777端口
server {
listen 80;
server_name _;
return 404;
}
server {
listen 80;
server_name img2.diyhi.com;
location /{
#屏蔽目录
if ($uri !~ \. ) {
return 403;
}
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass $scheme://172.26.188.152:7777;
}
}
仅允许内网IP访问指定端口
#(1)允许172.26.188.0 IP段访问8080端口移除策略
firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="IP地址" port protocol="tcp" port="端口号" accept'3.配置开机启动卷服务(volume)脚本
A.增加seaweedfs-volume.service 在/usr/lib/systemd/system目录下增加seaweedfs-volume.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-volume.service
B. 将下面的配置内容复制到seaweedfs-volume.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 volume -max=5 -mserver=172.26.188.150:9333 -ip=172.26.188.153 -port=8080 -dir=/usr/local/seaweedfs/data -dataCenter=dc1 -rack=rack2
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-volume
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
注意:-max 参数为最大逻辑卷数量。例如硬盘可用空间为800G,则大约800/30 ≈ 26,最大可设置为26配置Nginx将80端口的请求转发到7777端口
server {
listen 80;
server_name _;
return 404;
}
server {
listen 80;
server_name img3.diyhi.com;
location /{
#屏蔽目录
if ($uri !~ \. ) {
return 403;
}
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass $scheme://172.26.188.153:7777;
}
}
3.配置开机启动卷服务(volume)脚本
A.增加seaweedfs-volume.service 在/usr/lib/systemd/system目录下增加seaweedfs-volume.service,目录必须是绝对目录
输入命令 cd /usr/lib/systemd/system
输入命令 vim seaweedfs-volume.service
B. 将下面的配置内容复制到seaweedfs-volume.service文件中。请按实际情况更改下面的IP地址。
[Unit]
Description=SeaweedFS Volume
After=network.target
[Service]
Type=simple
User=seaweedfs
Group=seaweedfs
ExecStart=/usr/local/seaweedfs/weed -v=0 volume -max=5 -mserver=172.26.188.150:9333 -ip=172.26.188.154 -port=8080 -dir=/usr/local/seaweedfs/data -dataCenter=dc1 -rack=rack2
WorkingDirectory=/usr/local/seaweedfs/
SyslogIdentifier=seaweedfs-volume
[Install]
WantedBy=multi-user.target
保存配置文件后执行systemctl daemon-reload命令刷新
输入命令 systemctl daemon-reload
注意:-max 参数为最大逻辑卷数量。例如硬盘可用空间为800G,则大约800/30 ≈ 26,最大可设置为26配置Nginx将80端口的请求转发到7777端口
server {
listen 80;
server_name _;
return 404;
}
server {
listen 80;
server_name img4.diyhi.com;
location /{
#屏蔽目录
if ($uri !~ \. ) {
return 403;
}
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass $scheme://172.26.188.154:7777;
}
}
商城管理后台分布式文件系统状态图
使用自带的backup命令可以创建备份,在一个磁盘空间充足的服务器上运行“weed backup”命令进行备份。假如我们要备份第5卷。
A、进入目录/usr/local/seaweedfs/
输入命令 cd /usr/local/seaweedfs/B、建立存储数据用的文件夹
输入命令 mkdir /usr/local/seaweedfs/backupC、执行备份命令
输入命令 ./weed backup -server=172.26.188.150:9333 -dir=/usr/local/seaweedfs/backup/ -volumeId=5远端不存在的volume ID也是可以运行的,但不会在本地创建任何文件,如果远端增加了此volume,则下次备份会进行同步
此命令不是服务,要想连续运行需要设置为定时任务,每次运行都会和本地卷比对一次,进行增量备份,备份多个volume可以用脚本遍历一定范围的volume(如1-100)