在ubuntu上部署fastdfs总结

 

    fastdfs是开源的高性能分布式文件系统。本文不会全面介绍fastdfs,仅仅介绍在ubuntu18.04上安装fastdfs的流程和注意事项,并列出参考文章的链接。fastdfs从 V4.05 以后去除了对http服务的支持,同时以nginx模块的形式通过nginx提供http服务。所以需要同步安装fastdfs和nginx。参考文章:https://www.cnblogs.com/chiangchou/p/fastdfs.html

    fastdfs需要自己下载源代码并编译安装。fastdfs依赖libfastcommon。nginx可以由于需要集成fastdfs-nginx-module,也需要下载源代码并编译安装。

1、通过命令行安装C语言及C++通用编译工具。

#编译C及C++项目需要的编译工具
sudo apt-get install build-essential
#pcre支持正则表达式,nginx中会用到
sudo apt-get install libpcre3 libpcre3-dev
#zlib用于对http数据包做gzip格式的压缩。
sudo apt-get install lib1g-dev
#如果nginx需要https协议,则需要安装openssl
sudo apt-get install openssl libssl-dev

2、下载libfastcommon,并编译安装.

    下载地址:https://github.com/happyfish100/libfastcommon

    下载到本地,进入到代码目录,编译及安装

#进入到主目录
cd libfastcommon
#编译及安装
./make.sh
./make.sh install

3、下载fastdfs,并编译安装

下载地址:https://github.com/happyfish100/fastdfs

下载到本地,进入到代码目录,编译及安装

#进入到主目录
cd fastdfs
#编译及安装
./make.sh
./make.sh install

4、跟踪服务器和存储服务器可以分别安装到相同的服务器上,也可以安装到同一个服务器上。下面是跟踪服务器配置。

#在Tracker Server电脑上创建数据存储目录
mkdir -p /data/fastdfs/tracker
#编辑配置文件tracker.conf
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vim tracker.conf
#以下是修改tracker.conf的内容

#日志数据路径
base_path=/data/fastdfs/tracker
#上传文件时选择group的方法
#0:轮询,1:指定组,2:选择剩余空间最大
store_lookup=2
#如果上面的配置是1,那么这里必须指定组名。否则指定也不生效
store_group=group2
#上传文件时选择server的方法
#0:轮询,1:按IP地址排序,2:通过权重排序
store_server=0
#storage上预留空间
reserved_storage_space=10%
http.server_port=8080
#保存并退出

   配置完成后,启动Tracker Server

#启动服务命令。此服务脚本存储在/etc/init.d/,是通过init启动的服务。后面会介绍配置通过systemctl管理服务的方法。
service start fdfs_trackerd
#查看Tracker Server端口的命令
netstat -unltp | grep gdfs

5、存储节点配置

#在Storage服务器上,创建数据存储目录
mkdir -p /data/fdfs_storage/base
mkdir -p /data/fdfs_storage/storage0
mkdir -p /data/fdfs_storage/storage1
#编辑配置文件
cd /etc/fdfs
cp storage.conf.sample storage.conf
vim storage.conf

#如下编辑各项配置
#storage server 所属组名
group_name=group1
#绑定IP,默认为本机IP
bind_addr=
#storage server 的端口
port=23000
#日志数据路径
base_path=/data/fdfs_storage/base
#storage path的个数
store_path_count=2
#根据store_path_count的值,部署从storage0到storage(N-1)个存储路径
store_path0=/data/fdfs_storage/storage0
store_path1=/data/fdfs_storage/storage1
#跟踪服务器地址及端口,可以配置多个服务器,一行一个
tracker_server=10.74.7.242:22122
tracker_server=10.74.7.243:22122

#编辑完成后,保存
:wq

保存配置文件后,启动存储节点

#启动存储服务。此服务脚本存储在/etc/init.d/,是通过init启动的服务。后面会介绍配置通过systemctl管理服务的方法。
service fdfs_storaged start
#检查服务运行状态
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

6、配置客户端

回到Tracker Server服务器上,修改客户端配置文件

#修改客户端配置文件
cd /etc/fdfs
cp client.conf.sample client.conf
vim client.conf

#修改的内容如下:
#tracker 服务器文件路径
base_path=/data/fastdfs/tracker
#tracker服务器IP地址和端口
tracker_server=10.74.7.242:22122
#tracker服务器的http端端口号,必须和tracker的设置一样
http.tracker_server_port=8080

    配置完成后,可以通过命令上传文件

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf image.png

   上传成功后,返回文件路径:group1/M00/00/00/CkoH8lxBni2AMLyqAADwGJmQPlE106.jpg

7、配置fdfs_trackerd和fdfs_storaged开机启动

    通过指令./make install 安装fastdfs时,会在/etc/init.d/目录下生成启动脚本fdfs_trackerd和fdfs_fdfs_storaged。但这两个指令需要工具chkconfig来配置开机启动,或者在文件local.rd中配置。但这两种配置方式在最新的linux操作系统特别是ubuntu 18.04中已经不建议使用。而建议使用systemctl方式管理应用程序的启动。

    首先,把/etc/init.d/下的启动脚本fdfs_trackerd和fdfs_fdfs_storaged移动到工作目录下。

    然后,在目录/lib/systemd/system/下创建两个服务文件

cd /lib/systemd/system/
touch fdfs_trackerd.service
touch fdfs_storaged.service

fdfs_trackerd.service的内容如下:

[Unit]
Description=fastdfs tracker daemon
After=initrd.target

[Service]
Type=forking
ExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
ExecReload=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
ExecStop=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop

[Install]
WantedBy=multi-user.target

fdfs_storaged.service的内容如下:

[Unit]
Description=fastdfs storaged daemon
After=initrd.target

[Service]
Type=forking
PIDFile=/home/walson/data/fdfs_storage/base/data/fdfs_storaged.pid
ExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
ExecReload=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
ExecStop=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

[Install]
WantedBy=multi-user.target

配置完成后,启动服务:

#刷新配置文件
systemctl daemon_reload
systemctl start fdfs_trackerd
systemctl start fdfs_storaged

#开启开机自启动
systemctl enable fdfs_trackerd
systemctl enable fdfs_storaged

8、安装nginx

    下载已发布的nginx源码:https://github.com/nginx/nginx/releases

    下载已发布的fastdfs-nginx-module源码:https://github.com/happyfish100/fastdfs-nginx-module/releases

     把下载的压缩包移动到/opt/目录下,并分别解压。

    修改fastdfs-nginx-module的配置文件fastdfs-nginx-module-1.20/src/config,否则编译时会报错:/usr/local/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录

   

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

编译并安装nginx:

#进入nginx文件夹
cd /nginx-release-1.14.2
#配置编译参数,生成Makefile文件
./auto/configure --/data/nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module \
--add-module=/opt/fastdfs-nginx-module-1.20/src

make
make install

安装完成后,通过命令复制相关文件

cp /opt/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/
cd /opt/fastdfs-5.11/conf
cp anti-seal.jpg http.conf mime.types /etc/fdfs/

修改配置文件mod_fastdfs.conf

#通过vim修改配置文件
vim /etc/fdfs/mod_fastdfs.conf

#修改内容如下
#日志目录
base_path=/tmp
#跟踪服务器,可以配置多个
tracker_server=10.74.7.242:22122
#url中是否有group名称
url_have_group_name=true
#storage path的个数
store_path_count=2
#根据storage_path_count的值,设置从storage0到storage[N-1]个路径
store_path0=/data/fdfs_storage/storage0
store_path1=/data/fdfs_storage/storage1

然后修改nginx.conf

worker_processes 2;
worker_rlimit_nofile 1024;
events {
    use epoll;
    worker_connections 1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  logs/access.log  main;

    sendfile        on;

    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location ~ /group[0-9]/M00 {
            #root   html;
            #index  index.html index.htm;
            ngx_fastdfs_module;
        }
    }
}

使用命令创建两个软链接

ln -s /dta/fdfs_storage/storage0 /data/fdfs_storage/storage0/M00
ln -s /dta/fdfs_storage/storage1 /data/fdfs_storage/storage1/M00

9、配置开机启动

#创建服务管理文件
cd /lib/systemd/system/
touch nginx.service

vim nginx.service

nginx.service内容如下:

[Unit]
Description=Nginx
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

刷新并启动

systemctl daemon-reload
systemctl start nginx.service
#开机自启动
systemctl enable nginx.service

9、通过客户端访问fastdfs

若想通过客户端远程访问fastdfs,需要在开通防火墙的22122接口。iptables的使用请参考:https://blog.csdn.net/sanve/article/details/80881380

iptables -A INPUT -p tcp --dport 22122 -j ACCEPT

fastfs客户端java版源码地址:https://github.com/happyfish100/fastdfs-client-java

参考官方中的指引生成jar包,不再累述。

客户端代码如下:

package org.demo.fastdfs;

import java.io.IOException;

import org.csource.common.MyException;
import org.csource.fastdfs.ClientGlobal;
import org.csource.fastdfs.StorageClient;
import org.csource.fastdfs.StorageServer;
import org.csource.fastdfs.TrackerClient;
import org.csource.fastdfs.TrackerServer;

public class ClientConfig {

	public static void main(String[] args){
		try {
			config();
			System.out.println("ClientGlobal.configInfo(): " + ClientGlobal.configInfo());
			testUpload();
		}catch (Exception e) {
			e.printStackTrace();
		}
        }
	
	public static void config() throws IOException, MyException {
		ClientGlobal.initByProperties("fastdfs-client.properties");
	}
	
	private static void testUpload() {
		TrackerClient trackerClient = new TrackerClient();
		TrackerServer trackerServer;
		try {
			trackerServer = trackerClient.getConnection();
			StorageServer storageServer = null;
			StorageClient storageClient = new StorageClient(trackerServer, storageServer);
			
			String localFilename = "D:/mysqlpeizhi.JPG";
			String[] fileNames = storageClient.upload_file(localFilename, "jpg", null);
			for(String fileName : fileNames) {
				System.out.println(fileName);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}
}

通过nginx服务器访问生成页面如下:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalsonTung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值