Liunx中配置fastDFS

Liunx中配置fastDFS

环境:

虚拟机VMware Workstation

CentOS7系统

安装Docker以及配置远程仓库(阿里云)和镜像加速器(不是必须)

JDK1.8

安装:

docker开机自启动

systemctl enable docker

安装fastDFS(Docker拉取),注意:要先启动Docker,否则会报错

docker pull morunchang/fastdfs

安装并运行tracker(跟踪服务器,起到调度的作用):

docker run -d --name tracker --net=host morunchang/fastdfs sh tracker.sh

安装并运行storage(存储服务器,提供容量和备份服务):

docker run -d --name storage --net=host -e TRACKER_IP=服务器或者虚拟机的ip:跟踪服务的端口(默认22122) -e GROUP_NAME=组名(写group1) morunchang/fastdfs sh storage.sh
  • -net :添加网络模式
  • -e :添加 storage 到环境变量

开机自启动

docker update --restart=always tracker
docker update --restart=always storage

查看docker启动了的容器

docker ps

docker中启动了的容器

配置:

进入docker容器

docker exec -it storage bash

配置tracker.conf

vim /etc/fdfs/tracker.conf

配置存储空间

reserved storage space 是存储空间,可以根据需求自己调节,默认是10%

FastDFSjava.lang.Exception: getStoreStorage fail, errno code: 28

如果出现这个异常解决方案

1.删除垃圾文件

2.找到配置文件,改reserved storage space

3.扩大服务器存储

配置storage.conf

vim /etc/fdfs/storage.conf

配置组名

group_name是组名,可以手动修改

配置端口

存储服务的端口

连接超时时间、网络超时时间和心跳时间(心跳默认是每30秒向跟踪服务发送文件的信息

连接超时时间、网络超时时间和心跳时间(心跳默认是每30秒向跟踪服务发送文件的信息

存储文件的路径

存储文件的路径

每个区存储的路径

每个区存储的路径

store_path0是第一个M00,以此类推

跟踪服务的的地址,注意:配置错了无法通讯

跟踪服务的的地址,注意:配置错了无法通讯

配置nginx的配置文件

vim /etc/nginx/conf/nginx.conf
location ~ /M00 {
	root /data/fast_data/data;
	ngx_fastdfs_module;
}

如果是Docker,会自动帮我们配置好,如果有更多分区,可以继续配置

退出容器

exit

重启容器

docker restart storage

使用Java操作文件

创建一个springboot项目,在pom文件中加入依赖

<dependency>
	<groupId>net.oschina.zcx7878</groupId>
	<artifactId>fastdfs-client-java</artifactId>
	<version>1.27.0.0</version>
</dependency>

在resources下创建 fastdfs-client.properties 文件

# http连接超时时间
fastdfs.connect_timeout_in_seconds=5
# tracker与storage网络通信超时时间
fastdfs.network_timeout_in_seconds=30
# 字符编码
fastdfs.charset=utf-8
# tracker服务器地址,多个地址中间用英文逗号分隔
fastdfs.tracker_servers=192.168.109.128:22122

文件上传

/**
     * 文件上传
     */
    @Test
    public void upload(){
        try {
            //1.初始化fastdfs的数据
            ClientGlobal.initByProperties("fastdfs-client.properties");
            //2.创建Tracker对象TrackerClient
            TrackerClient trackerClient = new TrackerClient();
            //3.通过trackerClient得到TrackerServer
            TrackerServer trackerServer = trackerClient.getConnection();

            //4.通过trackerServer得到StorageServer
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

            //5.创建一个StorageClient1
            StorageClient1 sc1=new StorageClient1(trackerServer,storageServer);

            //6.可传的附加参数
            NameValuePair[] meta_list=new NameValuePair[1];
            meta_list[0]=new NameValuePair("author","mmmmores");

            //7.待上传的图片路径
            String item="D://1.gif";

            //8.上传文件
            String file_id = sc1.upload_file1(item, "gif", meta_list);
            //9.打印
            System.out.println("上传的文件id:"+file_id);
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }


    }

文件下载

	/**
     * 文件下载
     */
    @Test
    public void download(){
        try {
            //1.初始化fastdfs的数据
            ClientGlobal.initByProperties("fastdfs-client.properties");
            //2.创建Tracker对象TrackerClient
            TrackerClient trackerClient = new TrackerClient();
            //3.通过trackerClient得到TrackerServer
            TrackerServer trackerServer = trackerClient.getConnection();

            //4.通过trackerServer得到StorageServer
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

            //5.创建一个StorageClient1
            StorageClient1 sc1=new StorageClient1(trackerServer,null);
            //7.下载
            byte[] bytes = sc1.download_file1("上传时拿到的id");
            FileOutputStream fileOutputStream = new FileOutputStream(new File("D://3.gif"));
            //6.写入磁盘
            fileOutputStream.write(bytes);
            fileOutputStream.close();
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }
    }

文件删除

	/**
     * 文件删除
     */
    @Test
    public void del(){
        try {
            //1.初始化fastdfs的数据
            ClientGlobal.initByProperties("fastdfs-client.properties");
            //2.创建Tracker对象TrackerClient
            TrackerClient trackerClient = new TrackerClient();
            //3.通过trackerClient得到TrackerServer
            TrackerServer trackerServer = trackerClient.getConnection();

            //4.通过trackerServer得到StorageServer
            StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

            //5.创建一个StorageClient1
            StorageClient1 sc1=new StorageClient1(trackerServer,null);

            int i = sc1.delete_file1("上传拿到的id");
            if (i==1){
                System.out.println("删除成功");
            }
        } catch (IOException | MyException e) {
            e.printStackTrace();
        }

    }

文件查询

/**
 * 文件查询
 */
@Test
public void del(){
    try {
        //1.初始化fastdfs的数据
        ClientGlobal.initByProperties("fastdfs-client.properties");
        //2.创建Tracker对象TrackerClient
        TrackerClient trackerClient = new TrackerClient();
        //3.通过trackerClient得到TrackerServer
        TrackerServer trackerServer = trackerClient.getConnection();

        //4.通过trackerServer得到StorageServer
        StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);

        //5.创建一个StorageClient1
        StorageClient1 sc1=new StorageClient1(trackerServer,null);

        //6.查询(查看文件信息)
        FileInfo info = sc1.get_file_info1("上传时拿到的id");
        System.out.println(info);
    } catch (IOException | MyException e) {
        e.printStackTrace();
    }

}

使用服务器ip或虚拟机ip+“/”+id作为浏览器访问路径可以拿到图片(虚拟机或服务器必须开着)

常见问题:

Win家庭版VM与Hyper-V不兼容的问题

问题:WINI10家庭版没有Hyper-V服务,不自带虚拟机。

解决办法:

  • 1.win+r,输入services.msc,打开服务。将下列所有的服务停止,稍等这还没结束。

    这一步,很关键,一定要用 以管理员身份运行 cmd ,然后输入

    bcdedit /set hypervisorlaunchtype off
    

    运行成功后会有提示:操作成功,如果提示无法操作一定是你没有使用管理员身份运行!!!

    之后重启就可以啦。

  • 2.安全中心 设备安全性 内核隔离 关闭内存完整性 重启电脑

再打开VM你会发现,安装完的虚拟机可以启动了!

Docker拉取镜像超时

安装远程仓库时,选择阿里云的

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

镜像加速器配置

打开我们的阿里云官网https://www.aliyun.com/

右上角登录,点击控制台

工作台 -> 弹性计算 -> 容器服务 -> 容器镜像服务 -> 镜像工具 -> 镜像加速器

然后选择我们的系统,将我们指令复制进入执行

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://0rgcp567.mirror.aliyuncs.com"]
}

然后重新加载我们的daemon

systemctl daemon-reload

重启我们的Docker

systemctl restart docker

getStoreStorage fail, errno code: 2

这是跟踪服务连接存储服务超时导致的

说明存储服务找不到

1.存储服务没用起来

2.client.conf和storage.conf中tracker_server中的ip和端口出错了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mmmmores

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

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

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

打赏作者

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

抵扣说明:

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

余额充值