glusterFS文件系统与ftp以及java代码的结合

来源:互联网 发布:香港转口贸易数据 编辑:程序博客网 时间:2024/06/05 11:17

glusterFS文件系统与ftp以及java代码的结合

之前搭建了一个fastdfs的文件系统,领导说要搞一个glusterfs和ftp结合的,就又学了下glusterfs,感觉挺有用的,和大家分享一些细节。


新建虚拟机

新建虚拟机,这个我觉得不用介绍了,还是说一下吧^_^
1.你要有一个VMware或者其他可以创建虚拟机的软件,然后你要有一个linux系统的镜像,我用的是CentOS7,然后就是

(1)新建虚拟机

新建虚拟机就完了,别怂

(2)选择典型

选典型就完了,别秀了

(3)选择镜像

选你下的镜像就完了,没有上网下去

(4)选择好安装目录(我一般是按照IP来),下一步就行

不知道IP是多少的就跟我一样

(5)开启你的虚拟机

对,就点它,点啊

(6)选择安装centos

这里默认是中间的选项,鼠标点一下会进入虚拟机,用上下键控制选项,选择第一行回车安装就行

千万别选错了,选错了就重启

(7)选择语言

我选的英语

(8)选择INSTALLATION DESTINATION

点进去,点一下DONE(左上角蓝色按钮),我没有修改其他的

英语我也不认识,别问了

(9)点击开始安装

出来后,等个几秒,begin installation就会变蓝,然后点击安装

没变蓝?你急个鸡儿,等会不行啊

(10)设置密码

在这里你可以一边安装一边给root用户设置密码,如果有需要可以在右边的链接进去添加用户

别几把秀了,用root用户就行了

(11)等待安装完毕重启登录即可

(12)配置IP
虚拟机有三种网络连接方式,默认是NAT的,具体的IP配置方式你可以参考着面这个文档
http://blog.csdn.net/lsc476782158/article/details/51721909

glusterFS集群搭建

刚才我们简单了解了一下虚拟机的搭建,不会的可以多搜些资料看看。接下来我们就要进入正题,开始搭建glusterFS集群文件系统了,首先介绍一下我们要搭建的集群的组成:
glusterfs服务器节点:

IP 名称 类型 系统 192.168.29.28 tmaster 服务器主节点 centos7 192.168.29.29 tslave1 服务器子节点1 centos7 192.168.29.30 tslave2 服务器子节点2 centos7 192.168.29.31 phn 客户端节点 centos7

接下来的东西是我跟一个大神的文档看的,就不装逼了,自己学吧,学完了再回来。

http://blog.csdn.net/phn_csdn/article/details/75153913?utm_source=debugrun&utm_medium=referral

ftp搭建

其实ftp我也是跟一个大神学的,我觉得我不应该装逼了,但是我还是把他的文档给大家看看。这个ftp装在客户端192.168.29.31就行。
(1)安装vsftpd组件
yum -y install vsftpd
(2)添加一个ftp用户
useradd ftpuser
(3)给ftp用户添加密码
passwd ftpuser
(4)关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
(5)关闭匿名访问
vi /etc/vsftpd/vsftpd.conf
把anonymous_enable改成NO
(6)重启ftp服务
service vsftpd restart
(7)开启被动模式
vi /etc/vsftpd/vsftpd.conf
在最后加上两行
pasv_min_port=30000
pasv_max_port=30999
(8)设置开机启动vsftpd ftp 服务
chkconfig vsftpd on

java代码结合

理论上你的glusterFS文件系统搭建好了,你可以试试能不能访问你的客户端,然后往里面传文件有没有同步到三个服务端,客户端的目录是/opt/fgsmount,服务端的是/opt/gluster/data,如果可以同步那就没问题了,重启机器后要重新启动服务端gluster volume start models,这一点要稍微注意一下(当然你可以开机启动)。

然后就是和java代码结合了,废话不多说,直接看代码。

package com.xxxx;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.commons.net.ftp.FTP;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;import org.apache.commons.net.ftp.FTPReply;/** * ftp上传下载工具类 * <p>Title: FtpUtil</p> * <p>Description: </p> * @author   * @date    2016年4月13日下午8:11:51 * @version 1.0 */public class FTPUtil {    /**      * Description: 向FTP服务器上传文件      * @param host FTP服务器hostname      * @param port FTP服务器端口      * @param username FTP登录账号      * @param password FTP登录密码      * @param basePath FTP服务器基础目录     * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath     * @param filename 上传到FTP服务器上的文件名      * @param input 输入流      * @return 成功返回true,否则返回false      */      public static boolean uploadFile(String host, int port, String username, String password, String basePath,            String filePath, String filename, InputStream input) {        boolean result = false;        FTPClient ftp = new FTPClient();        try {            int reply;            ftp.connect(host, port);// 连接FTP服务器            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器            ftp.login(username, password);// 登录            reply = ftp.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) {                ftp.disconnect();                return result;            }            //切换到上传目录            if (!ftp.changeWorkingDirectory(basePath+filePath)) {                //如果目录不存在创建目录                String[] dirs = filePath.split("/");                String tempPath = basePath;                for (String dir : dirs) {                    if (null == dir || "".equals(dir)) continue;                    tempPath += "/" + dir;                    if (!ftp.changeWorkingDirectory(tempPath)) {                        if (!ftp.makeDirectory(tempPath)) {                            return result;                        } else {                            ftp.changeWorkingDirectory(tempPath);                        }                    }                }            }            ftp.enterLocalPassiveMode();            //设置上传文件的类型为二进制类型            ftp.setFileType(FTP.BINARY_FILE_TYPE);            //上传文件            if (!ftp.storeFile(filename, input)) {                return result;            }            input.close();            ftp.logout();            result = true;        } catch (IOException e) {            e.printStackTrace();        } finally {            if (ftp.isConnected()) {                try {                    ftp.disconnect();                } catch (IOException ioe) {                    ioe.printStackTrace();                }            }        }        return result;    }    /**      * Description: 从FTP服务器下载文件      * @param host FTP服务器hostname      * @param port FTP服务器端口      * @param username FTP登录账号      * @param password FTP登录密码      * @param remotePath FTP服务器上的相对路径      * @param fileName 要下载的文件名      * @param localPath 下载后保存到本地的路径      * @return      */      public static boolean downloadFile(String host, int port, String username, String password, String remotePath,            String fileName, String localPath) {        boolean result = false;        FTPClient ftp = new FTPClient();        try {            int reply;            ftp.connect(host, port);            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器            ftp.login(username, password);// 登录            reply = ftp.getReplyCode();            if (!FTPReply.isPositiveCompletion(reply)) {                ftp.disconnect();                return result;            }            ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录            FTPFile[] fs = ftp.listFiles();            for (FTPFile ff : fs) {                if (ff.getName().equals(fileName)) {                    File localFile = new File(localPath + "/" + ff.getName());                    OutputStream is = new FileOutputStream(localFile);                    ftp.retrieveFile(ff.getName(), is);                    is.close();                }            }            ftp.logout();            result = true;        } catch (IOException e) {            e.printStackTrace();        } finally {            if (ftp.isConnected()) {                try {                    ftp.disconnect();                } catch (IOException ioe) {                }            }        }        return result;    }    public static void main(String[] args) {        try {              FileInputStream in=new FileInputStream(new File("E:\\1.jpg"));              boolean flag = uploadFile("192.168.29.32", 21, "ftpuser", "ftpuser", "/opt/gfsmount","/test", "33.jpg", in);              System.out.println(flag);          } catch (FileNotFoundException e) {              e.printStackTrace();          }      }}

拷到你的工程里面,改成你的配置,执行就完了
true就行了,false自己调试呀
最后再回到你的文件系统里看有没有传上去,看看其他节点有没有同步,当然ftp可以从文件夹,xftp这个方式去看,就方便很多。
这里写图片描述
到这里就基本上完成了,接下来就是在你的正式环境搭建你的文件系统了。