Кластеризация Jackrabbit

#jackrabbit

#jackrabbit

Вопрос:

Я использую jackrabbit 2.18.0, и я хотел бы настроить кластер на моем локальном компьютере, позже на AWS.

Теперь я могу запустить его с одним узлом со следующими конфигурациями:

 <?xml version="1.0"?>
<Repository>
    <!-- Enable bellow config for mysqldatastore-->
    <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore">
        <param name="driver" value="com.mysql.jdbc.Driver"/>
        <param name="url" value="jdbc:mysql://127.0.0.1:3306/jackrabbit" />
        <param name="user" value="root" />
        <param name="password" value="" />
        <param name="databaseType" value="mysql"/>
        <param name="schemaObjectPrefix" value="J_R_DS_"/>
    </DataStore>
    <!-- Enable bellow config for filedatastore-->
    <!--DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
            <param name="path" value="${rep.home}/repository/datastore"/>
            <param name="minRecordLength" value="100"/>
        </DataStore-->
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
        <param name="path" value="${rep.home}/repository" />
    </FileSystem>
    <Security appName="Jackrabbit">
        <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager" />
        <LoginModule class="org.apache.jackrabbit.core.security.SimpleLoginModule">
            <param name="anonymousId" value="anonymous" />
        </LoginModule>
    </Security>
    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="jcrlocal" />
    <Workspace name="${wsp.name}">
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager">
            <param name="driver" value="com.mysql.jdbc.Driver" />
            <param name="url" value="jdbc:mysql://127.0.0.1:3306/jackrabbit" />
            <param name="user" value="root" />
            <param name="password" value="" />
            <param name="schema" value="mysql" /> 
            <param name="schemaObjectPrefix" value="J_PM_${wsp.name}_" />
            <param name="externalBLOBs" value="false" />
        </PersistenceManager>
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${rep.home}/version" />
        </FileSystem>
    </Workspace>
    <Versioning rootPath="${rep.home}/version">
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
            <param name="path" value="${rep.home}/version" />
        </FileSystem>
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager">
            <param name="driver" value="com.mysql.jdbc.Driver" />
            <param name="url" value="jdbc:mysql://127.0.0.1:3306/jackrabbit" />
            <param name="user" value="root" />
            <param name="password" value="" />
            <param name="schema" value="mysql" />
            <param name="schemaObjectPrefix" value="J_V_PM_" />
            <param name="externalBLOBs" value="false" />
        </PersistenceManager>
    </Versioning>

    <Cluster id="node1" syncDelay="5"> 
        <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal"> 
            <param name="revision" value="${rep.home}/revision"/> 
            <param name="driver" value="com.mysql.jdbc.Driver"/> 
            <param name="url" value="jdbc:mysql://127.0.0.1:3306/jackrabbit"/> 
            <param name="user" value="root"/> 
            <param name="password" value=""/> 
            <param name="schema" value="mysql"/> 
            <param name="schemaObjectPrefix" value="J_C_"/> 
        </Journal> 
    </Cluster> 
    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">   
          <param name="path" value="${rep.home}/index"/>
          <!-- SearchIndex will get the indexing configuration from the classpath, if not found in the workspace home -->
          <param name="indexingConfiguration" value="/Users/tuhinsubhramandal/jack-repo/indexing_configuration.xml"/>
          <param name="useCompoundFile" value="true"/>
          <param name="minMergeDocs" value="100"/>
          <param name="volatileIdleTime" value="3"/>
          <param name="maxMergeDocs" value="100000"/>
          <param name="mergeFactor" value="10"/>
          <param name="maxFieldLength" value="10000"/>
          <param name="bufferSize" value="10"/>
          <param name="cacheSize" value="1000"/>
          <param name="forceConsistencyCheck" value="false"/>
          <param name="autoRepair" value="true"/>
          <param name="queryClass" value="org.apache.jackrabbit.core.query.QueryImpl"/>
          <param name="respectDocumentOrder" value="true"/>
          <param name="resultFetchSize" value="100"/>
          <param name="extractorPoolSize" value="3"/>
          <param name="extractorTimeout" value="100"/>
          <param name="extractorBackLogSize" value="100"/>
          <!-- needed to highlight the searched term -->
          <param name="supportHighlighting" value="true"/>
          <!-- custom provider for getting an HTML excerpt in a query result with rep:excerpt() -->
          <param name="excerptProviderClass" value="org.apache.jackrabbit.core.query.lucene.DefaultXMLExcerpt"/>
    </SearchIndex> 
</Repository>
  

====================

Теперь вот мой вопрос. Я использую tomcat9, где я добавил jackrabbit war в webapps и заставил его работать.

Для того, чтобы создать кластер, скажем, с 3 узлами, должен ли я иметь 3 разных кота с 3 наборами repositiory.xml с разными идентификаторами кластеров, указывающими на один и тот же источник данных?

Ответ №1:

Для того, чтобы создать кластер, скажем, с 3 узлами, должен ли я иметь 3 разных кота с 3 наборами repositiory.xml с разными идентификаторами кластеров, указывающими на один и тот же источник данных?

В общем, да, настройка N узлов с их собственным repository.xml идентификатором кластера (раздел кластера) с использованием одного и того же источника данных будет работать.

Имейте в виду, что для использования кластеризации должны выполняться следующие требования.

Цитирую из официальных документов (раздел требований):

  • Каждый узел кластера должен иметь свою собственную конфигурацию хранилища.
  • Хранилище данных всегда должно быть общим для узлов, если оно используется.
  • Глобальная файловая система на уровне хранилища должна быть общей (только та, которая находится на том же уровне, что и хранилище данных; только в repository.xml файл).
  • Каждому узлу кластера требуется свой собственный (частный) уровень рабочей области и файловая система версий (только те, которые находятся в рабочей области и конфигурации управления версиями; те, которые в repository.xml и workspace.xml файл).
  • Каждому узлу кластера нужны свои собственные (частные) поисковые индексы.
  • Каждому узлу кластера должен быть присвоен уникальный идентификатор.
  • Необходимо выбрать тип журнала, либо основанный на файлах, либо сохраненный в базе данных.
  • Каждый узел кластера должен использовать один и тот же (общий) журнал.
  • Менеджеры сохраняемости должны хранить свои данные в одном и том же месте, доступном по всему миру.