`
wang5598
  • 浏览: 113079 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Nginx负载均衡之后的文件上传同步

阅读更多

    使用nginx进行负载均衡后(使用ip_hash;策略),存在一个问题,有A、B两台服务器,使用相同的数据库,用户访问被分配到了A服务器,成功上传一张照片,刷新后在A服务器可以看到;但是连接B服务器的用户刷新页面后只看到了一条记录,照片却丢失显示不了;网上有比较多的解决办法,但是都集中在使用WADI等配置文件同步策略,看过后觉得有点复杂(WADI本身配置比较简单),想简单点实现,思路如下:预先在配置文件中写好参与负载均衡的服务器列表,用户在A上提交照片后,就检测系统中配置的集群服务器的列表,排除A后通过linux的scp命令在不同的服务器之间实现文件同步,就一个简单的Java类就可以实现了,实现linux同步是采用的ganymed-ssh2库包提供的ssh的功能:

package zkyg.util;

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.SCPClient;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.ResourceBundle;

import zkyg.util.Log;
/**
 * 解决负载均衡情况下的文件上传不一致的情况:一旦用户上传照片到A服务器,上传完毕后调用Linux的scp命令来实现不同的服务器之间的文件同步操作:
 * @author wangyq
 *
 */
public class ClusterFilesSync extends Thread{
	private static String remoteUser = "root";
	private static String remotePass = "randompsw@123";
	private String absFileName = "";
	
	public ClusterFilesSync(String absFileName) {
		this.absFileName = absFileName;
	}
	
	@Override
	public void run() {
		try {
			ArrayList<String> al = getHosts();
			for(String s:al){
                       //循环同步每台服务器上的文件
			  sync(s,22,absFileName);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	
	/**
	 * 获取需要同步的服务器列表
	 * @return
	 */
	public static ArrayList<String> getHosts(){
        //在com.firm.config目录下有system.properties文件记录了集群服务器列表
		ResourceBundle bd = ResourceBundle.getBundle("com.firm.config.system");
		String clusters = bd.getString("clusters");
		String[] ips = clusters.split(",");
		ArrayList<String> al = new ArrayList<String>();
		for(String s:ips){
		  al.add(s);
		}
		String localIp = "";
		try {
         //获取当前操作的服务器的IP地址,linux的etc/hosts中要配置好网络地址,不然只会得到127.0.0.1
		 localIp = InetAddress.getLocalHost().getHostAddress();
		 System.out.println("本机IP地址为:"+localIp);
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		al.remove(localIp);
		return al;
	}
	
	/**
	 * 简单的文件同步
	 * @return
	 */
	public static void sync(String ip,int port,String absFileName){
		String path = "/var/www/html/jetty/webapps/userphotos/";
		Connection con = new Connection(ip, port);
		//连接
		try {
			con.connect();
		  //远程服务器的用户名密码
			boolean isAuthed = con.authenticateWithPassword(remoteUser,remotePass);
		  //建立SCP客户端
			if(isAuthed){
				SCPClient scpClient = con.createSCPClient();
                //将文件同步到指定的path目录下面
				scpClient.put(absFileName, path);
				Log.console("文件同步成功");
			}else{
				Log.console("文件同步失败");
			}
			con.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

 

然后在用户图片上传成功后进行调用:

if(SystemConfigsInitHelper.getSpecifiedConfig("iscluster")!=null&&SystemConfigsInitHelper.getSpecifiedConfig("iscluster").equals("true")){
 //集群模式下进行数据同步
 new zkyg.util.ClusterFilesSync(fileName).start();
 }

 

分享到:
评论
1 楼 wang5598 2016-11-30  
目前涉及资源存储的,通用做法都是放到共享存储中(譬如hdfs中),这样就不用做资源同步了。写这个文章的时候经验比较少,没有想到这种方案。

相关推荐

    FastDFS基于 Centos7环境搭建及nginx负载均衡1

    卷的概念引入是为了支持大规模存储,每个卷由一台或多台Storage服务器组成,同一卷内的服务器文件相同,起到冗余备份和负载均衡的作用。 在FastDFS的文件操作过程中,如上传和下载,客户端(client)首先与Tracker...

    nginx+consul+upsync完成负载均衡的软件包,由于官网下载太慢,所以把包上传以下方便大家使用.zip

    这样,当`consul`检测到服务实例的变化时,`nginx`无需重启即可自动更新其负载均衡策略,保持与服务实例的动态同步,提高了系统的灵活性和响应速度。 这个软件包包含`nginx`、`consul`和`upsync`的安装和配置文件,...

    fastdfs-nginx-module

    fastdfs-nginx-module通过Nginx的负载均衡策略,可以选择已经同步完成的server提供服务,避免了数据不一致的问题。 3. **性能优化**:Nginx的高性能特性使得文件访问更加快速,同时,通过缓存机制,可以减少对...

    FastDFS+Nginx文件系统搭建

    FastDFS是一个开源的分布式文件系统,专为互联网设计,尤其适用于处理大容量存储和负载均衡的需求。FastDFS的主要目标是管理和存储文件,包括文件存储、同步以及访问。它解决了在大规模互联网服务中常见的冗余备份、...

    FastDFS+Nginx+libfastcommon+fastdfs-nginx-module

    FastDFS的核心功能包括文件存储、文件同步、文件访问(文件上传、文件下载)等,它将文件存储在多个服务器上,实现负载均衡和高可用性。 2. 安装FastDFS: - 获取FastDFS源代码并解压。 - 配置编译参数,确保链接...

    keepalived+nginx+fastdfs集群安装手册

    - **Nginx负载均衡**:通过Nginx的负载均衡模块,如轮询、权重分配等策略,将请求分发到不同的后端服务器,提高服务的可用性。 3. **Keepalived**:Keepalived是为LVS(Linux Virtual Server)提供的一种高可用...

    fastdfs-nginx-module-正版V1.19-亲测可用 .zip

    FastDFS是一个开源的高性能、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。而Nginx则是一款广泛使用的高性能HTTP...

    fastdfs-nginx-module_v1.19

    FastDFS提供了文件存储、文件同步、文件访问(文件上传、文件下载)等功能,特别适合以文件为载体的在线服务,如图片分享、视频分享等。其核心设计思想是将文件存储和文件服务分离,存储节点负责存储文件,而服务...

    最新版linux fastdfs-nginx-module-1.22.tar.gz

    FastDFS是一个开源的、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。FastDFS尤其适合以文件为载体的在线服务,如...

    fastdfs安装包(fastdfs-6.06,fastdfs-nginx-module-1.22,nginx-1.16.1)

    FastDFS是一款开源的高性能、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。在本教程中,我们将详细探讨如何利用...

    FastDFS+Nginx安装包

    FastDFS是轻量级的开源分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。FastDFS设计目标是轻量、简单、高效,特别适合中小...

    fastdfs-nginx-module-1.20.tar

    它将文件存储和文件访问分离,提供了文件存储、文件同步、负载均衡等功能,特别适合于存储大量小文件,如图片、文档等。 2. Nginx概述: Nginx以其高性能、低内存占用以及丰富的模块化设计而著名。作为一款反向...

    fdfs和nginx.zip

    FastDFS是一个开源的高性能、轻量级的分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。FastDFS支持主从模式和集群模式,...

    FastDFS-5.08+nginx-1.8.0+fastdfs-1.16

    其核心功能包括文件存储、文件同步和文件访问(文件上传、文件下载)。FastDFS分为两个主要部分:Tracker服务器和Storage服务器。Tracker服务器负责调度任务,如文件上传和下载的路由,而Storage服务器则实际存储...

    fastdfs-nginx-module-1.22.zip

    FastDFS是一个开源的高性能分布式文件系统,它对文件进行管理,包括文件存储、文件同步、文件访问(文件上传、文件下载)等功能,解决了大容量存储和负载均衡的问题。FastDFS支持基于DFS的文件存储,特别适合处理...

    fastdfs的安装手册说明+配置文件+fastdfs安装包+nginx安装包

    FastDFS提供了文件存储、文件同步、文件访问(文件上传、文件下载)等功能,特别适合以文件为载体的在线服务。其设计目标是高可用、高稳定、高性能。FastDFS采用C语言编写,轻量级且易于部署,支持多种数据库,如...

    fastdfs-nginx-module.tar.gz

    FastDFS提供了文件存储、文件同步、负载均衡等功能,它的核心思想是将文件存储和HTTP服务分离,文件存储由FastDFS完成,HTTP服务则由Web服务器如Nginx提供。这样既保证了文件服务的高性能,又降低了系统的复杂性。 ...

    Ubuntu+fastdfs+nginx

    这个组合充分利用了Ubuntu作为稳定的操作系统基础,FastDFS作为专业的分布式文件系统,以及Nginx作为高性能的反向代理和负载均衡器。 首先,Ubuntu是一个基于Debian的开源Linux操作系统,以其易用性和丰富的软件包...

    fastdfs-nginx-module-master.zip

    这种方式既保留了FastDFS的高效率,又利用了Nginx的高性能和负载均衡能力,使得整个文件服务系统更加健壮和高效。 总的来说,FastDFS与Nginx的集成是企业级文件服务的一种常见解决方案,尤其适用于需要处理大量文件...

    FastDFS和Linux下安装使用FastDFS 安装Nginx 分布式文件系统.docx

    FastDFS提供了文件存储、文件同步、文件上传和下载、负载均衡、在线扩容以及相同内容只存储一次等功能。它特别适合那些具有大规模存储需求的应用或系统,比如电商平台的图片、视频和文件共享。与其它分布式文件系统...

Global site tag (gtag.js) - Google Analytics