Solr数据备份

Solr数据备份包括如下这些文件:

  1. solr config文件包括:

    1. solr.xml, 它位于SOLR_HOME下
    2. schema.xml, solrconfig.xml,stopwords.txt,synonyms.txt等和你应用相关的配置文件,他们通常位于SOLR_HOME/conf下。
  2. lucene index文件,它通常位于SOLR_HOME/data下面。该目录下面存放了真正的数据,我们主要就是讨论如何备份这里的数据。

备份方法

备份lucene index数据文件也分成两种方式:冷备份和热备份。

所谓冷备份就是指关闭solr,然后将SOLR_HOME/data下面的所有数据拷贝到一个安全的位置。这种方法简单,可靠,index数据文件不会产生不一致。但是缺点很明显,就是系统要关闭,如果数据量大的话,整个复制过程会比较长。

幸好,solr提供了一种非常简便的热备份方法,也就是利用Solr Replication Handler!Replication Handler的主要作用是在一个load-balancing的solr部署架构中,将index数据复制到各个slave服务器上。但是,即使在没有任何slave服务器的情况下,Replication Handler也可以用来在主服务器上创建index的副本。

那么让我们来看看怎么使用这个功能,其实相当简单,就是通过浏览器或curl等工具发送一个request,它的url是’http://master_server:port/solr/replication?command=backup’。这样备份就创建好了。默认情况下,会创建一个类似“snapshot.20120812201917”这样的文件夹,这个文件夹里面就包括了lucene index的数据备份。当然,你也可以指定该文件夹的位置,只需在url里面增加位置参数,如:&location=/foo/bar。

以alfresco中的solr为例,为了备份lucene的index,你需要发出如下请求:‘https://localhost:8443/solr/alfresco/replication?command=backup’(这里假设localhost是solr主服务器。url中的alfresco代表了solr core,alfresco系统中的solr使用了2个core,一个是alfresco——保存了当前alfresco中所有有效文档的index,另一个是archive——保存了所有被删除文档的index)。然后,你可以在‘alf_data/solr/workspace/SpacesStore/snapshot.20120902041725’中找到你备份的数据(20120902041725代表时间戳。每次备份都会不同)。

假如以上的Replication Handler url在你系统中显示“HTTP Status 404”,别着急,那是因为你还没有配置Replication Handler。你只需要在solrconfig.xml中增加如下的配置:

<requestHandler name=”/replication” >
     <lst name=”master”>
         <str name=”confFiles”>schema.xml,stopwords.txt</str>
         <str name=”backupAfter”>startup</str>
         <str name=”backupAfter”>optimize</str>
     </lst>
<!–
   <lst name=”slave”>
       <str name=”masterUrl”>http://localhost:8983/solr/replication</str>
       <str name=”pollInterval”>00:00:60</str>
   </lst>
–>
</requestHandler>

各参数的具体含义参见:http://wiki.apache.org/solr/SolrReplication 这里就不再熬述。

这里稍作扩展,讨论一下solr Replication Handler 中snapshot的原理。为什么我们不能在solr运行过程中直接复制lucene index文件,而必须通过Replication Handler呢?原因是,假如你直接复制,那么在复制过程中,lucene有可能进行了commit的操作,而commit操作会涉及到对segment文件的merge,如此就很容易造成数据的不一致性的问题。那么Replication Handler是怎么处理的呢?其原理就是在于SnapshotDeletionPolicy。SnapshotDeletionPolicy能使用最近一次commit作为参照,把所有对应该次commit的index数据做一个快照,一直保留着直到系统创建完成所有的备份数据。以下代码就说明了这个原理:

IndexDeletionPolicy policy = new KeepOnlyLastCommitDeletionPolicy();
SnapshotDeletionPolicy snapshotter = new SnapshotDeletionPolicy(policy);
IndexWriter writer = new IndexWriter(dir, analyzer, snapshotter,
IndexWriter.MaxFieldLength.UNLIMITED);
try {
    IndexCommit commit = snapshotter.snapshot();
    Collection fileNames = commit.getFileNames();
     /*<iterate over & copy files from fileNames>*/
} finally {
    snapshotter.release();
}
  • 第二行代码创建一个snapshot,
  • 你仍旧可以使用第三行创建的IndexWrite去更新数据,但它不会影响这个已创建的snapshot。
  • try block里面就是将snapshot对应的index数据创建出来。

大家有兴趣的话可以看一下solr的源码(org.apache.solr.handler. ReplicationHandler中的private void doSnapShoot(SolrParams params, SolrQueryResponse rsp, SolrQueryRequest req)),原理和上面的代码差不多。

恢复

恢复操作很简单,就是把之前备份出来的index数据复制回去。例如,将备份数据复制到SOLR_HOME/data/index下,然后重启solr就搞定了。

对于alfresco中的solr而言,就是将index备份复制回/alf_data/solr/workspace/SpacesStore/index中。

重建索引

假如你没有任何备份,而index数据又崩溃了,最后万不得已,你就只能重建索引了。不过还好,这项工作很简单,你需要做的就是先把solr停止,然后删除SOLR_HOME/data下面的index文件夹以及其他文件夹,再重启solr,根据你应用的情况,solr会自动重建index(例如,alfresco中的solr),或是你手动发起重建index的请求(例如,通过DIH)。

时间: 2024-10-10 12:40:54

Solr数据备份的相关文章

bzoj1150 [CTSC2007]数据备份

Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已知办公楼都位于同一条街上.你决定给这些办公楼配对(两个一组).每一对办公楼可以通过在这两个建筑物之间铺设网络电缆使得它们可以互相备份.然而,网络电缆的费用很高.当地电信公司仅能为你提供 K 条网络电缆,这意味着你仅能为 K 对办公楼(或总计2K个办公楼)安排备份.任一个办公楼

数据备份方案

经常有朋友发生了数据丢失时找我帮忙,我发现数据备份是最科学的解决方案.于是花时间把我这几年积累的数据备份方案整理出来,希望能帮到大家. 先看看几个典型情景: 我经常用手机拍照,万一我手机丢了,里面的照片的价值比一台新手机还大. 我把我的许多资料存在移动硬盘里了,结果今天硬盘出问题,读不出来,有什么办法可以挽回? 我的许多重要数据都存在我的个人电脑里,结果昨晚电脑被贼偷了. 我刚误修改了一份Excel文件,而且还保存了,我想要回修改前的文件. 以上是常见的几个代表情景,如果真的发生了,往往很难处理

Bzoj1150 数据备份Backup

Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设计一个系统让不同的办公楼彼此之间互相备份,而你则坐在家中尽享计算机游戏的乐趣.已知办公 楼都位于同一条街上.你决定给这些办公楼配对(两个一组).每一对办公楼可以通过在这两个建筑物之间铺设网 络电缆使得它们可以互相备份.然而,网络电缆的费用很高.当地电信公司仅能为你提供 K 条网络电缆,这意味 着你仅能为 K 对办公楼(或总计2K个办公楼)安排备份.任一

rsync远程数据备份配置之再次总结

一.实验环境 主机名  网卡ip  默认网关 用途 nfs-server 10.0.0.11 10.0.0.254 rsync服务器端 web-client01 10.0.0.12 10.0.0.254 rsync客服端 web-client02 10.0.0.13 10.0.0.254 rsync客服端 二.实验步骤 1.什么是rsync?rsync是一款开源的,快速的,多功能的可实现全量及增量的数据备份同步的优秀工具,适用于多种操作系统之上.2.rsync特性1)支持拷贝链接文件特殊文件2)

mysql定时数据备份工具(c#)

此博文的出处 为 http://blog.csdn.net/zhujunxxxxx/article/details/40124773如果进行转载请注明出处.本文作者原创,邮箱[email protected],如有问题请联系作者 为了确保数据的安全,我们往往要对数据进行备份.但是为了减少我们的工作量,我写了一个简单的数据备份工具,实现定时备份数据库. 其实程序很简单,数据备份的工作就是几个mysql的命令而已. 先看看程序的运行界面 可以看到界面是十分的简单的 我们使用的是命令行来进行数据备份,

elasticsearch数据备份恢复

本文主要介绍elasticsearch集群数据备份及恢复,利用共享文件系统,通过快照方式备份. 集群的部署参考:http://hnr520.blog.51cto.com/4484939/1876467 一.配置修改 1.配置文件必须添加如下参数 path.repo:  /mnt/backups/es_mybak 二.数据备份 1.创建备份仓库 curl -XPUT 'http://192.168.115.11:9200/_snapshot/EsBackup' -d '{   "type"

linux 数据备份(NFS映射方法)

环境:Red Hat 4.8.3-9(主机) ip地址:192.168.1.1 Ubuntu 4.8.4-2(从机) IP地址:192.168.1.2 用途:将从机数据备份到主机,因从机空间较小,选择使用NFS网络磁盘映射的方法完成 NFS 是Network File System的缩写,即网络文件系统 [主机] 安装NFS服务 nfs-utils-* :包括基本的NFS命令与监控程序 portmap-* :支持安全NFS RPC服务的连接(该服务改名为rpcbind) #查看是否已安装该服务

Postgresql 数据库,如何进行数据备份以及导入到另外的数据库

方法其实有很多种,这里用的方法比较稳妥.之后有时间会补充别的方法. 该方法分为三步:备份数据,新建表结构,导入数据 备份数据:>>\copy table_name to '/home/bak/table_name.sql'; 新建表结构:把原来表结构的sql语句复制,删除没必要和不适应的信息,在新的数据库运行新建表语句. 导入数据:>>\copy table_name from '/home/bak/table_name.sql';

mysql中的数据备份与还原

一.有三种备份方式: 1. 数据表文件备份 2. 单表数据备份 3. SQL备份 4. 增量备份 二.mysql中的存储引擎 主要有两种:myisam 和 innodb. -- 免费的 其他收费的还有:BDB, Memory, Archive innodb的存储方式:表结构单独存放,所有数据都存储在ibdata1文件中. myisam的存储方式:表.数据和索引全部单独分开存储. 二.数据表文件备份与还原 直接复制数据库目录下的文件夹复制对应的表结构和数据文件,还原的时候直接放回去即可. 但是此方