Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Ruby/Rails utilizing Solr in Master/Slave setup

DZone's Guide to

Ruby/Rails utilizing Solr in Master/Slave setup

·
Free Resource
Apache Solr is a high-performance enterprise grade search server with a REST-like API.  Documentation is provided to as xml, json or binary. It extends Lucene search library.

Ruby/Rails communicates with this awesome search server using the "Sunspot" (sunspot, sunspot_rails gem) library, to do a full-text search. This is a nice tutorial on how to use Solr in your Rails project using Sunspot.


Solr: Slave and Master

Solr can perform as a standalone search server and even as master/slave instances collaborating with each other, with slaves polling master to sync-in their data.

Solr instances can be configured like a Slave and as a Master.
Configuration file 'solrconfig.xml' needs to be edited with a new RequestHandler for Replication to be configured:

{for Slave} :: to either poll at their Master's machine address at regular intervals
{for Master} :: or commit the changes and clone the mentioned configuration files when Slave asks for it

for detailed reference: http://wiki.apache.org/solr/SolrReplication
for optimizaed ways using ssh/rsync based replication: http://wiki.apache.org/solr/CollectionDistribution

Now, here you can even use a single configuration file with the 'Replication' node having fields for both Master and Slave with an 'enable' child-node with possible values 'true|false' set as per requirement for Master & Slave nodes.

Sunspot

Sunspot dealing with a single Solr instance, gets $ProjectRoot/config/sunspot.yml

production:
  solr:
    hostname: standaloneSolr.mydomain.com
    port: 8983
    log_level: WARNING

Sunspot dealing with a master/slave Solr set-up, gets $ProjectRoot/config/sunspot.yml

production:
  solr:
    hostname: slaveSolr.mydomain.com
    port: 8983
    master_hostname: masterSolr.mydomain.com
    master_port: 8983
    log_level: WARNING
  master_solr:
    hostname: masterSolr.mydomain.com
    port: 8983
    log_level: WARNING

If you have more than one slave, they need to be handled by a load-balancer and the DNS Entry for that Load Balancer comes here in slave's hostname field.

Also, the fields 'master_hostname' and 'master_port' below 'solr:' are not mandatory and supposed to be referred from the 'master_solr:' block, but it has been observed in some cases that mentioning them explicitly avoids non-picking of configuration.

By default, Sunspot configures Ruby/Rails applications to Write-Only, to Master, and to Read-Only from Slave.

Source:  http://tekwalk.blogspot.com/2011/11/rubyrails-utilizing-solr-in-masterslave.html



Topics:

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}