栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Liunx中配置fastDFS

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Liunx中配置fastDFS

文章目录
    • @[toc]
  • Liunx中配置fastDFS
    • 环境:
    • 安装:
    • 配置:
      • 配置tracker.conf
      • 配置storage.conf
      • 配置nginx的配置文件
    • 使用Java操作文件
      • 文件上传
      • 文件下载
      • 文件删除
      • 文件查询
    • 常见问题:
      • Win家庭版VM与Hyper-V不兼容的问题
      • Docker拉取镜像超时
      • getStoreStorage fail, errno code: 2
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 exec -it storage bash
配置tracker.conf
vim /etc/fdfs/tracker.conf

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

FastDFS :java.lang.Exception: getStoreStorage fail, errno code: 28

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

1.删除垃圾文件

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

3.扩大服务器存储

配置storage.conf
vim /etc/fdfs/storage.conf

group_name是组名,可以手动修改

存储服务的端口

连接超时时间、网络超时时间和心跳时间(心跳默认是每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文件中加入依赖


	net.oschina.zcx7878
	fastdfs-client-java
	1.27.0.0

在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和端口出错了

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/940329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号