2013-02-09 4 views
2

Фон: Я только что закончил читать Apache Solr 4 Cookbook. В нем автор упоминает, что создание осколков необходимо сделать с умом. B/c новые не могут быть добавлены в существующий кластер. Однако это было написано с использованием Solr 4.0, и в настоящее время я использую 4.1. Это все еще так? Мне жаль, что я не нашел этого issue, и я надеюсь, что кто-то скажет мне об этом иначе.Solr 4 Добавление осколка к существующему кластеру

Вопрос: Должен ли я знать, сколько данных я буду хранить в будущем при настройке осколков в кластере SolrCloud? Я играл с Solandra и читал elastic search, но, честно говоря, я являюсь поклонником Solr, так как это (и его большое сообщество!). Мне также нравится Zookeeper. Я застрял сейчас или есть обходной путь/патч?

Edit: Если выше вопрос нет, я мог построить SolrCloud с кучей (возможно, 100 или более) осколками, и пусть они растут (внутренне), и пока я вырасту мои данные начинают пилинга их один за другим один и помещать их в более крупные, более быстрые серверы с большим количеством ресурсов?

ответ

6

Да, конечно, вы можете. Вам нужно настроить новый сервер Solr, указывающий на тот же экземпляр zookeeper. Во время загрузки сервер соединяется с zk-ансамблем и регистрируется как член кластера.

Как только процесс регистрации завершен, сервер готов к созданию новых ядер. Вы можете создавать реплики существующих осколков, используя CoreAdmin. Кроме того, вы можете создавать новые осколки, но они не будут сбалансированы из-за формата индекса Lucene (не все поля хранятся), поскольку он может не иметь всей информации о документе для балансировки кластера, поэтому только новые индексированные/обновленные документы этот сервер (делать это не рекомендуется).

При настройке SolrCloud вам необходимо создать кластер с учетом фактора роста номера документа, поэтому, если у вас сначала есть 1M-документы и он растет как 10k docs/day, настройте кластер с 5 осколками, поэтому на начните размещать эти осколки в первоначальной настройке вашей машины, но в будущем, при необходимости, вы можете добавить новые серверы в кластер и move those shards to this new servers. Будьте осторожны, чтобы не перерасти в кластер, потому что в Lucene один индекс 20Gb, разделенный на 5 осколков, не будет индексом 4Gb в каждом осколке. Каждый осколок будет принимать (single_index_size/num_shards) * 1.1 (из-за сжатия словаря). Это может измениться в зависимости от вашей частоты.

Последнее, что у вас есть, - это добавить новые серверы в кластер и вместо добавления новых осколков/реплик на существующий сервер, настройте новую коллекцию, используя новые осколки и переиндексируйте параллельно этой новой коллекции. Затем, как только ваш процесс reindex завершится, замените эту коллекцию и старую.

+0

Спасибо за ваше время и ответ, но когда вы говорите «Да, конечно, вы можете», это на самом деле звучит так, как будто вы не можете (или не должны), нет? – Chris

+0

Нет, вы можете добавлять серверы без проблем для размещения осколков (первичных), пока не достигнете num_servers == [numShards] (http://wiki.apache.org/solr/SolrCloud#Managing_collections_via_the_Collections_API) (параметр создания коллекции). Учтите, что вы можете добавлять новые реплики для существующих осколков всякий раз, когда вам это нужно. Проблема возникает только в том случае, если вы пытаетесь вырасти через первоначальную конфигурацию numShards. –

+0

извините за задержку. Да, это мой вопрос. Я не знаю, сколько осколков мне нужно в этот момент. Может быть, 5 .. Может быть, 5000. Что делать, если я хочу индексировать весь www? Сколько осколков это требует? Это моя дилемма. Еще раз спасибо за ваше время. – Chris

3

Одним из решений проблемы является использование «неявного маршрутизатора» при создании вашей коллекции.

Скажем, вы должны индексировать все данные «Audit Trail» вашего приложения в Solr. Новые данные добавляются каждый день. Возможно, вы, скорее всего, захотите очертить год.

Вы могли бы сделать что-то вроде ниже при первоначальной настройке вашей коллекции:

admin/collections? 
action=CREATE& 
name=AuditTrailIndex& 
router.name=implicit& 
shards=2010,2011,2012,2013,2014& 
router.field=year 

Вышеуказанная команда: а) Создает 5 черепки - по одному за текущий и последние 4 года 2010,2011 , 2012,2013,2014 b) Направляет данные на правильный осколок в зависимости от значения поля «год» (указано как router.field)

В декабре 2014 года вы можете добавить новый осколок при подготовке к 2015 году используя API CREATESHARD (часть API коллекций) - Сделайте что-то вроде:

/admin/collections? 
action=CREATESHARD& 
shard=2015& 
collection=AuditTrailIndex 

Указанная выше команда создает новый осколок в той же коллекции.

Когда его 2015, все данные будут получать автоматически индексируются в «2015» осколка при условии, ваши данные имеет «год» поле правильно заселена до 2015

В 2015 году, если вы думаете, что не нужен 2010 осколок (на основе требований хранения данных) - вы всегда можете использовать DELETESHARD API, чтобы сделать так:

/admin/collections? 
action=DELETESHARD& 
shard=2015& 
collection=AuditTrailIndex 

PS Это решение работает, только если вы использовали «неявный роутер» при создании своей коллекции. НЕ работает, когда вы используете стандартный «составной маршрутизатор» - то есть коллекции, созданные с помощью параметра numshards.

Эта функция поистине является игровым чейнджером - позволяет добавлять осколки динамически, основываясь на растущих требованиях вашего бизнеса.

Смежные вопросы