




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Solr 集群 Replication 配置与实践Solr 作为一个搜索服务器,在并发搜索请求的场景下,可能一台服务器很容易就垮掉,这是我们可以通过使用集群技术,设置多台 Solr 搜索服务器同时对外提供搜索服务,在前端使用类似 Nginx 的负载均衡软件,可以通过配置使得并发到达的搜索请求均匀地反向到Solr 集群中的每一台服务器上,这样每台 Solr 搜索服务器搜索请求的增强了每台服务器能够持续提供服务器的能力。可以大大减小,然而,这时我们的问题有:·集群中的每台服务器上要保证索引数据都能很好地的同步,使得每台搜索服务器的索引数据在一定可以承受的程度上保持一致性;集群中某台服务器
2、宕机离线,人工干预重启后继续与集群中其它服务器索引数据保·持一致,继续提供搜索服务;集群中某台服务器的索引数据,由于硬盘故障或人为·无法提供搜索服务,需要一种数据恢复机制;集群中最先接受数据更新的Master 服务器,在将索引更新·到Slave 服务器上时,避免多台 Slave 服务器同一时间占用大量网络带宽,从而影响了 Master 提供搜索服务。事实上,Solr 框架在上面的几个方面都能做到不错的支持,具有很大的灵活性。基于上述的几个问题,我们来配置 Solr 集群的 Replication,并实践集群的功能。单机实例 ReplicationSolr 支持在单
3、机上配置多个实例(MultiCore),每个实例都可以对外提供服务,共享同一网络带宽。同时,也可以实现单机实例之间 Replication,在实例之间数据的可用性,从而提高系统的服务能力。数据,保证我们看一下,这种模式的结构图,如下所示:上图,在同一台服务器上,启动 Solr 的多个实例,将这些实例(通过 Core 来区分)作为单机上的伪分布式集群,这些 Core 实例都是在同一个 JVM 中。选择其中的一个实例 Core0作为 Master,每次索引更新都首先从这个实例 Core0 进行,直到 Master 实例 Core0与 Slave 实例 Core1、Core2、Core3 上的数据同
4、步为止。其中,每个实例都可以对外提供服务,因为这种模式保证多个实例上的数据都是同一份数据,起到数据备份的作用,一般不建议让多个实例同时提供服务。下面给出上图模式下 Solr 的配置。Core0 作为 Master,对应的 solrconfig.xml 配置内容,如下所示:<?xml version="1.0" encoding="UTF-8" ?><config><luceneMatchVersion>LUCENE_35</luceneMatchVersion><directoryFactorynam
5、e="DirectoryFactory"class="$solr.directoryFactory:solr.StandardDirectoryFactory" /><updateHandler class="solr.DirectUpdateHandler2" /><requestDispatcher handleSelect="true"><requestParsers enableRemoteStreaming="false" multipartUplo
6、adLimitInKB="2048" /></requestDispatcher><requestHandler name="standard" class="solr.StandardRequestHandler" default="true" /><requestHandler name="/update" class="solr.JsonUpdateRequestHandler" /><requestHandler nam
7、e="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /><queryParser name="dismax" class="solr.DisMaxQParserPlugin" /><requestHandler name="/dismax" class="solr.SearchHandler"><lst name="defaults">&l
8、t;str name="defType">dismax</str><str name="qf">title content</str><bool name="hl">true</bool>上述配置中,提供了一个/dismax 搜索接口,对外提供搜索服务。配置中 name 为/Replication的requestHandler,即为Solr 提供的请求处理接口,配置中replicateAfter 表示在startup请求。和 commit 之后才Slave 的Solr
9、支持索引数据 Replication,同时也支持配置数据的。如果需要配置数据做好配置备份,可以在 Master 的 solrconfig.xml 中配置如下内容:<str name="confFiles">schema.xml,stopwords.txt,solrconfig.xml,synonyms.txt</str>指定需要从 Master 上的配置文件名即可。对于 Core1Core3 都为 Slave,即请求数据,我们拿 Core1 为例,其它配置均相同,但是我们不希望 Slave 实例对外提供服务,所以只需要配置 Slave 的/repli
10、cation处理接口即可,配置内容如下所示:请求<?xml version="1.0" encoding="UTF-8" ?><config><luceneMatchVersion>LUCENE_35</luceneMatchVersion><directoryFactoryname="DirectoryFactory"class="$solr.directoryFactory:solr.StandardDirectoryFactory" /><st
11、r name="hl.fl">title content</str><int name="hl.fragsize">200</int><int name="hl.snippets">1</int><str name="fl">*,score</str><str name="qt">standard</str><str name="wt">standar
12、d</str><str name="version">2.2</str><str name="echoParams">explicit</str><str name="indent">true</str><str name="debugQuery">on</str><str name="explainOther">on</str></lst></r
13、equestHandler><requestHandler name="/replication" class="solr.ReplicationHandler"><lst name="master"><str name="replicateAfter">startup</str><str name="replicateAfter">commit</str><str name="commituratio
14、n">00:00:10</str></lst></requestHandler><admin><defaultQuery>solr</defaultQuery></admin></config>Slave 配置中 masterUrl 和 pollInterval 是必选的,masterUrl 指定为 core0 的请求接口,pollInterval 是指Slave 周期地向Master 询问是否数据有所更新,如果发生变更则进行。其它的参数可以根据需要进行配置。一般情况下,单机多个实例
15、之间的 Replication 不需要配置上述 httpBasicAuth*的参数的。启动 Solr 之前,没有任何索引数据。启动之后,我们通过在中设计的小工具,向 Master数据请求索引,因为在 post 的过程中,执行了 commit 和 optimize 操作,所以会触发 Slave Master 的索引数据,我们可以看一下日志。在 Master 和 Slave 数据同步的情况下,Master 收到 Slave 的 Replication 请求:2011-12-9 15:18:00 org.apache.solr.core.SolrCore execute信息: core0 webap
16、p=/solr35 path=/replication params=command=indexversion&wt=javabin status=0 QTime=02011-12-9 15:18:20 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/replication params=command=indexversion&wt=javabin status=0 QTime=0<updateHandler class="solr.DirectUpdateHandler2
17、" /><requestDispatcher handleSelect="true"><requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" /></requestDispatcher><requestHandler name="standard" class="solr.StandardRequestHandler" default=&q
18、uot;true" /><requestHandler name="/update" class="solr.JsonUpdateRequestHandler" /><requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" /><requestHandler name="/replication" class="solr.Replic
19、ationHandler"><lst name="slave"><str name="masterUrl"></str><str name="pollInterval">00:00:20</str><str name="compression">internal</str><str name="httpConnTimeout">5000</str><str name=
20、"httpReadTimeout">10000</str><str name="httpBasicAuthUser">username</str><str name="httpBasicAuthPassword">password</str></lst></requestHandler><admin><defaultQuery>solr</defaultQuery></admin></conf
21、ig>每隔 20s 间隔,Slave 请求一次,这个时间间隔可以根据需要进行配置。从我们向 Master索引数据更新索引请求后,在 Master 和 Slave 之间执行的数据的复制,处理日志内容可以参考后面附录的内容。通过日志信息可以看到,Slave 在 Master 更新索引(通过 add 可以看到更新了 5 篇文档,日志中给出了文档编号;更新时,每次2 篇文档执行一次 commit,全部完成后执行一次 commit 和 optimize 操作)之后,通过请求获取文件列表,然后执行过程,最后 Slave 索引数据发生变化,为保证实时能够搜索到最新内容,重新打开了一个IndexSear
22、cher 实例。日志最后面的部分,Slave 的索引数据与 Master 保持同步,不需要。集群结点 Replication在 Solr 集群中进行配置,与上面单机多实例的情况基本上一致,基本特点是:每个结点上的实例(Core)在同一个 JVM 内,不同结点之间进行实际上是不同结点上的实例之间进行 Replication。集群模式架构图,如下所示:2011-12-9 15:18:40 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/replication params=command=indexversio
23、n&wt=javabin status=0 QTime=02011-12-9 15:19:00 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/replication params=command=indexversion&wt=javabin status=0 QTime=0在一个 Solr 集群中执行 Replication,请求与动作发生在一个网络内部。而 replication的端点是不同结点上的实例(Core),很可能 Slave 结点上的其它实例在提供其他的服务。通过上图可以看到
24、,在只有一个 Master 的 Solr 集群中,如果存在大量的 Slave 要求Replication,势必会造成对 Master 服务器的(网络带宽、系统 IO、系统 CPU)。很可能因为外部大量搜索请求达到,使 Master 持续提供服务的能力降低,甚至宕机。Solr 也考虑到这一点,通过在 Master 和 Slave 之间建立一个的结点来单点故障,结点既做 Master 的 Slave,同步 Master 的数据,同时又做 Slave 的 Master,将最新的数据同步到 Slave 结点,这个结点叫做 Repeater,架构图如下所示:由图可见,Master 的一下转移到了 Rep
25、eater 结点上,在一定程度上解决了 Master 的单点问题。对于 Reaper 结点,它具有双重,显而易见,在配置的时候需要配置上 Master和 Slave 都具有的属性。我们给出一个 Repeater 的配置示例。Master 配置:<requestHandler name="/replication" class="solr.ReplicationHandler"><lst name="master"><str name="replicateAfter">startu
26、p</str><str name="replicateAfter">commit</str><str name="confFiles">schema.xml,stopwords.txt,solrconfig.xml,synonyms.txt</str><str name="commituration">00:00:10</str></lst>Repeater 配置:Slave 配置:可见,Solr 能够支持这种链式 Replication
27、配置,甚至可以配置级,但具体如何配置还要依据你的应用的特点,以及条件的限制。总之,Solr Replication 的目标就是让你系统的数据可用性变得更好。任何时候发生备机上同步数据。故障、硬盘故障、数据错误,都可以从其他的附录日志2011-12-9 15:19:32 cessor.LogUpdateProcessor finish信息: add=4eded6a5bf3bfa0014000003, 4eded74abf3bfa0014000005 0 12572011-12-9 15:19:32 org.apache.solr.core.So
28、lrCore execute信息: core0 webapp=/solr35 path=/update params= status=0 QTime=1257<requestHandler name="/replication" class="solr.ReplicationHandler" ><lst name="slave"><strname="masterUrl"></str><str name="pollInterval">00
29、:00:20</str><str name="compression">internal</str><str name="httpConnTimeout">5000</str><str name="httpReadTimeout">10000</str><str name="httpBasicAuthUser">username</str><str name="httpBasicAuthPas
30、sword">password</str></lst></requestHandler><requestHandler name="/replication" class="solr.ReplicationHandler"><lst name="master"><str name="replicateAfter">startup</str><str name="replicateAfter"
31、>commit</str><str name="commituration">00:00:10</str></lst><lst name="slave"><strname="masterUrl"></str><str name="pollInterval">00:00:20</str><str name="compression">internal</str>
32、<str name="httpConnTimeout">5000</str><str name="httpReadTimeout">10000</str><str name="httpBasicAuthUser">username</str><str name="httpBasicAuthPassword">password</str></lst></requestHandler></req
33、uestHandler>2011-12-9 15:19:32 org.apache.solr.update.DirectUpdateHandler2 commit信息: start commit(optimize=false,waitFlush=true,waitSearcher=true,expungeDeletes=false) 2011-12-9 15:19:33 org.apache.solr.core.SolrDeletionPolicy onCommit信息: SolrDeletionPolicy.onCommit: commits:num=2 commitdir=E:Dev
34、elopmyeclipseworkspacesolr35multicorecore0dataindex,segFN=segments_1,version=1323415055454,generation=1,filenames=segments_1 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=segments_2,version=1323415055456,generation=2,filenames=_0.tis, _0.nrm, _0.fnm, _0.tii, _0.frq, segmen
35、ts_2, _0.fdx, _0.prx, _0.fdt2011-12-9 15:19:33 org.apache.solr.core.SolrDeletionPolicy updateCommits信息: newest commit = 13234150554562011-12-9 15:19:33 org.apache.solr.search.SolrIndexSearcher <init>信息: Opening Searcher151b6ea main2011-12-9 15:19:33 org.apache.solr.update.DirectUpdateHandler2
36、commit信息: end_commit_flush2011-12-9 15:19:33 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming Searcher151b6ea main from Searcher1a80fb8 main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=
37、0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:33 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming result for Searcher151b6ea main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_h
38、itratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:33 org.apache.solr.core.SolrCore registerSearcher 信息: core0 Registered new searcher Searcher151b6ea main 2011-12-9 15:19:33 org.apache.solr.search.SolrIndexSearcher close 信息: Closing Searcher1a80fb8 mainfieldValueCachelookups=0
39、,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:33 cessor.LogUpdateProcessor finish信息: commit= 0 7902011-12-9 15:19:33 org.apache.solr
40、.core.SolrCore execute信息: core0 webapp=/solr35 path=/update params= status=0 QTime=790 2011-12-9 15:19:33 org.apache.solr.update.SolrIndexWriter getDirectory警告:NolockTypeconfiguredfor E:Developmyeclipseworkspacesolr35multicorecore0dataindex/ assuming 'simple'2011-12-9 15:19:33 org.apache.sol
41、r.core.SolrDeletionPolicy onInit信息: SolrDeletionPolicy.onInit: commits:num=1 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=segments_2,version=1323415055456,generation=2,filenames=_0.tis, _0.nrm, _0.fnm, _0.tii, _0.frq, segments_2, _0.fdx, _0.prx, _0.fdt2011-12-9 15:19:33 o
42、rg.apache.solr.core.SolrDeletionPolicy updateCommits信息: newest commit = 13234150554562011-12-9 15:19:33 cessor.LogUpdateProcessor finish信息: add=4eded53abf3bfa0014000002, 4eded700bf3bfa0014000004 0 3362011-12-9 15:19:33 org.apache.solr.core.SolrCore execute信息: core0 webapp=/
43、solr35 path=/update params= status=0 QTime=336 2011-12-9 15:19:33 org.apache.solr.update.DirectUpdateHandler2 commit信息: start commit(optimize=false,waitFlush=true,waitSearcher=true,expungeDeletes=false) 2011-12-9 15:19:34 org.apache.solr.core.SolrDeletionPolicy onCommit信息: SolrDeletionPolicy.onCommi
44、t: commits:num=2 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=segments_2,version=1323415055456,generation=2,filenames=_0.tis, _0.nrm, _0.fnm, _0.tii, _0.frq, segments_2, _0.fdx, _0.prx, _0.fdtcommitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=se gmen
45、ts_3,version=1323415055458,generation=3,filenames=_0.nrm,_0.tis,_0.fnm,_1.tis,_1.frq, _1.fnm, _1.fdx, _1.prx, _0.tii, _1.fdt, _0.frq, _1.tii, _0.fdx, _0.prx, _1.nrm, segments_3,_0.fdt2011-12-9 15:19:34 org.apache.solr.core.SolrDeletionPolicy updateCommits信息: newest commit = 13234150554582011-12-9 15
46、:19:34 org.apache.solr.search.SolrIndexSearcher <init>信息: Opening Searcher5fa11b main2011-12-9 15:19:34 org.apache.solr.update.DirectUpdateHandler2 commit信息: end_commit_flush2011-12-9 15:19:34 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming Searcher5fa11b main from Searcher151b6ea
47、 main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:34 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming result for Searche
48、r5fa11b main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:34 org.apache.solr.core.SolrCore registerSearcher 信息: core0 Registered new
49、searcher Searcher5fa11b main 2011-12-9 15:19:34 org.apache.solr.search.SolrIndexSearcher close 信息: Closing Searcher151b6ea mainfieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,
50、cumul ative_evictions=02011-12-9 15:19:34 cessor.LogUpdateProcessor finish信息: commit= 0 6162011-12-9 15:19:34 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/update params= status=0 QTime=6162011-12-9 15:19:34 org.apache.solr.update.SolrIndexWriter getDi
51、rectory警告:NolockTypeconfiguredfor E:Developmyeclipseworkspacesolr35multicorecore0dataindex/ assuming 'simple'2011-12-9 15:19:34 org.apache.solr.core.SolrDeletionPolicy onInit信息: SolrDeletionPolicy.onInit: commits:num=1 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=
52、segments_3,version=1323415055458,generation=3,filenames=_0.nrm,_0.tis,_0.fnm,_1.tis,_1.frq, _1.fnm, _1.fdx, _1.prx, _0.tii, _1.fdt, _0.frq, _1.tii, _0.fdx, _0.prx, _1.nrm, segments_3,_0.fdt2011-12-9 15:19:34 org.apache.solr.core.SolrDeletionPolicy updateCommits信息: newest commit = 13234150554582011-1
53、2-9 15:19:34 cessor.LogUpdateProcessor finish信息: add=4eded79fbf3bfa0014000006 0 1642011-12-9 15:19:34 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/update params= status=0 QTime=164 2011-12-9 15:19:34 org.apache.solr.update.DirectUpdateHandler2 commit信
54、息: start commit(optimize=false,waitFlush=true,waitSearcher=true,expungeDeletes=false) 2011-12-9 15:19:35 org.apache.solr.core.SolrDeletionPolicy onCommit信息: SolrDeletionPolicy.onCommit: commits:num=2 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=segments_3,version=13234150
55、55458,generation=3,filenames=_0.nrm,_0.tis,_0.fnm,_1.tis,_1.frq, _1.fnm, _1.fdx, _1.prx, _0.tii, _1.fdt, _0.frq, _1.tii, _0.fdx, _0.prx, _1.nrm, segments_3,_0.fdtcommitdir=E:Developmyeclipseworkspacesolr35multicorecore0dataindex,segFN=se gments_4,version=1323415055460,generation=4,filenames=_0.tis,
56、_1.frq, _2.tii, _1.fnm, _1.tii,_0.prx, _0.nrm, _1.tis, _0.fnm, _2.prx, _2.fdt, _2.frq, _2.fdx, _2.fnm, _1.prx, _1.fdx, _2.tis, _0.tii,_1.fdt, _0.frq, _0.fdx, _0.fdt, _1.nrm, _2.nrm, segments_42011-12-9 15:19:35 org.apache.solr.core.SolrDeletionPolicy updateCommits信息: newest commit = 1323415055460201
57、1-12-9 15:19:35 org.apache.solr.search.SolrIndexSearcher <init>信息: Opening Searcher1d449fc main2011-12-9 15:19:35 org.apache.solr.update.DirectUpdateHandler2 commit信息: end_commit_flush2011-12-9 15:19:35 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming Searcher1d449fc main from Sear
58、cher5fa11b main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:35 org.apache.solr.search.SolrIndexSearcher warm信息: autowarming result f
59、or Searcher1d449fc main fieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_inserts=0,cumul ative_evictions=02011-12-9 15:19:35 org.apache.solr.core.SolrCore registerSearcher信息: core0 Regis
60、tered new searcher Searcher1d449fc main 2011-12-9 15:19:35 org.apache.solr.search.SolrIndexSearcher close 信息: Closing Searcher5fa11b mainfieldValueCachelookups=0,hits=0,hitratio=0.00,inserts=0,evictions=0,size=0,warmupTime=0,cumulative_lookups=0,cumulative_hits=0,cumulative_hitratio=0.00,cumulative_
61、inserts=0,cumul ative_evictions=02011-12-9 15:19:35 cessor.LogUpdateProcessor finish信息: commit= 0 7352011-12-9 15:19:35 org.apache.solr.core.SolrCore execute信息: core0 webapp=/solr35 path=/update params= status=0 QTime=735 2011-12-9 15:19:35 org.apache.solr.update.DirectUpda
62、teHandler2 commit信息: start commit(optimize=true,waitFlush=false,waitSearcher=false,expungeDeletes=false) 2011-12-9 15:19:35 org.apache.solr.update.SolrIndexWriter getDirectory警告:NolockTypeconfiguredfor E:Developmyeclipseworkspacesolr35multicorecore0dataindex/ assuming 'simple'2011-12-9 15:19:35 org.apache.solr.core.SolrDeletionPolicy onInit信息: SolrDeletionPolicy.onInit: commits:num=1 commitdir=E:Developmyeclipseworkspacesolr35multicorecore0datain
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚财产公正协议书范本
- 注塑机设备租赁协议合同
- 永嘉专业会计代理协议书
- 汽车挂靠合同解除协议书
- 艺人签约合同之终止协议
- 电动摩托车租赁合同协议
- 混凝土浇灌施工合同范本
- 渡资产使用权合同或协议
- 腾讯产品包销合同协议书
- 汕尾打印机租赁协议合同
- 学堂在线 大国航母与舰载机 章节测试答案
- DB11-T 593-2025 高速公路清扫保洁质量与作业要求
- 2025年兵团连队考试题库及答案
- 2025年执业药师继续教育试题答案
- 客户接待流程培训
- 2025北京市职业病防治院第二批招聘19人笔试参考题库附答案解析
- 人民警察法试题及答案
- 万科物业管理公司全套制度最新版
- 深基坑开挖危险源辨识及控制措施
- 变电站直流系统讲解PPT通用课件
- 市属事业单位新一轮岗位聘用工作手册
评论
0/150
提交评论