29 Mayıs 2016 Pazar

SolrCloud kurulumu (ve ZooKeeper)

Solr 4 ile birlikte master-slave mevzusu devam etmekle birlikte SolrCloud olarak birden fazla solr makinenin birleştirilerek hata durumunda en az kayıpla çalışma devam etmesi ve bunlar olurken isteklerin tek bir makineye yönlendirilip arkada geri kalan işleri Solr'un hâlletmesi planlanmış. (fault tolerance and high availability).

Kendi kurulum scripti ile tomcat gibi bir web server kurmadan doğrudan kendi içinde gelen jetty isimli web server ile çalıştırabiliyorsunuz. Cloud yapısındaki datanın senkron olması için ZooKeeper isimli araç kullanılmakta. Localde test yapmak için ZooKeeper kurmanıza gerek yok. Kendi içinde gömülü geliyor. Ama prod ortam için kurmalısınız. Çünkü solr kapanırsa ZooKeeper da kapanıyor.

Düzenleme: Docker ile bütün işlemler burada: https://github.com/volkan/docker-solr-cloud

Basit olarak kurup çalıştırmak için şurada anlatılan işlemleri yapıyoruz. Özetlersek;




wget https://archive.apache.org/dist/lucene/solr/5.5.1/solr-5.5.1.tgz
tar zxvf solr-5.5.1.tgz
cd solr-5.5.1

bin/solr -e cloud
Buradan sonra gelen bütün seçenekleri enter'e basarak geçin. Sorunsuz bir şekilde kurulması gerekiyor. Aşağıdaki şekilde durumu kontrol edebilirsiniz.

bin/solr status

Bizim asıl amacımız Production ortamında bunu kurmak. Şimdi onun için başlıyoruz. Örnekler Centos 6 için anlatılacaktır.
Öncelikle varsa iptables stop edin yok yapamam diyorsanız şu kuralları kuracağınız bütün makinelere ekleyin;

vi /etc/sysconfig/iptables

-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 2181 -j ACCEPT
-A INPUT -p tcp --dport 2182 -j ACCEPT
-A INPUT -p tcp --dport 2183 -j ACCEPT


yum install lsof -y
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel -y #java 1.7 yoksa
yum install -y system-config-services #docker için
useradd solr
cd /opt
wget https://archive.apache.org/dist/lucene/solr/5.5.1/solr-5.5.1.tgz
tar xzf solr-5.5.1.tgz && solr-5.5.1/bin/install_solr_service.sh --strip-components=2
bash solr-5.5.1/bin/install_solr_service.sh solr-5.5.1.tgz
service solr start
chown solr:solr /var/solr -R #Solr home directory /var/solr/data not found! Gibi bir sorun çıkarsa

Aşağıdaki çıktı ilk güzel haber :)

[root@9afe0af76150 opt]# service solr start
Waiting up to 30 seconds to see Solr running on port 8983 [-]
Started Solr server on port 8983 (pid=877). Happy searching!
Şimdi aynı makinede solr sayısını ikiye çıkaralım.

cd /opt
bash solr-5.5.1/bin/install_solr_service.sh solr-5.5.1.tgz -s solr2 -p 8984

Waiting up to 30 seconds to see Solr running on port 8984 [-]
Started Solr server on port 8984 (pid=1072). Happy searching!
Burada işimiz şimdilik bitti. ZooKeeper kurulumuna geçiyoruz örnek olması için tek makinede birden fazla makineye kuruyormuş gibi anlatıyorum;

cd /opt
wget http://mirror.vorboss.net/apache/zookeeper/current/zookeeper-3.4.8.tar.gz
tar xzf zookeeper-3.4.8.tar.gz
cp -R /opt/zookeeper-3.4.8/ /opt/zookeeper-3.4.8-2
cp -R /opt/zookeeper-3.4.8/ /opt/zookeeper-3.4.8-3
ln -s /opt/zookeeper-3.4.8/ /opt/zookeeper
ln -s /opt/zookeeper-3.4.8-2/ /opt/zookeeper2
ln -s /opt/zookeeper-3.4.8-3/ /opt/zookeeper3

vi /usr/local/sbin/zkrun

nano veya vi ile açtığınız dosyaya aşağıdaki kodu yerleştirin.

#!/bin/sh

# chkconfig: - 75 50
# description: Starts and stops Zookeeper

cd /opt/zookeeper
bin/zkServer.sh $1

cp /usr/local/sbin/zkrun /usr/local/sbin/zkrun2
cp /usr/local/sbin/zkrun /usr/local/sbin/zkrun3
chmod +x /usr/local/sbin/zkru*
zkrun2 ve zkrun3 için "cd /opt/zookeeper" kısmını "cd /opt/zookeeper2" ve "cd /opt/zookeeper3" olarak değiştirin.

ln -s /usr/local/sbin/zkrun /etc/init.d/zookeeper
ln -s /usr/local/sbin/zkrun2 /etc/init.d/zookeeper2
ln -s /usr/local/sbin/zkrun3 /etc/init.d/zookeeper3
chkconfig --add zookeeper
chkconfig --add zookeeper2
chkconfig --add zookeeper3
chkconfig zookeeper on
chkconfig zookeeper2 on
chkconfig zookeeper3 on

zoo.cfg leri ayarlamakta sıra; zoo.cfg dosyası oluşturup içine şunları koyuyoruz

vi /opt/zookeeper/conf/zoo.cfg

dataDir=/var/lib/zookeeperdata/1
clientPort=2181
initLimit=5
syncLimit=2
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

Burada server.1 çok önemli. Çünkü bu sayıya göre data içinde myid dosyası oluşturup değer vereceğiz. localhost yazan kısım hosts dosyasında yer alan diğer solr sunucularımız olabilirdi. Ben de bu kısım şöyle;

server.1=solr1:2888:3888
server.2=solr2:2889:3889
server.3=solr3:2890:3890
/opt/zookeeper/conf/zoo.cfg dosyasını diğer zookeeper lara kopyalıyoruz.

cp /opt/zookeeper/conf/zoo.cfg /opt/zookeeper2/conf/zoo.cfg 
cp /opt/zookeeper/conf/zoo.cfg /opt/zookeeper3/conf/zoo.cfg 
Şimdi /opt/zookeeper2/conf/zoo.cfg ve /opt/zookeeper3/conf/zoo.cfg dosyasında yer alan "dataDir" ve "clientPort" kısmında 1 yazan yerleri sırasıyla 2 ve üç yapıyoruz. portlarıda 2182,2183

mkdir -p /var/lib/zookeeperdata/1 mkdir -p /var/lib/zookeeperdata/2 mkdir -p /var/lib/zookeeperdata/3
echo 1 > /var/lib/zookeeperdata/1/myid
echo 2 > /var/lib/zookeeperdata/2/myid
echo 3 > /var/lib/zookeeperdata/3/myid

service zookeeper start && service zookeeper2 start && service zookeeper3 start
ZooKeeper da tamamlandı. Kontrol için aşağıdaki komutu yazıp ilgili çıktıyı görmeliyiz

[root@9afe0af76150 opt]# service zookeeper status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Mode: follower
[root@9afe0af76150 opt]# service zookeeper2 status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper2/bin/../conf/zoo.cfg
Mode: leader
Şimdi Solr'a bu ZooKeeper'ları tanımlama zamanı. /etc/default/solr.in.sh ve /etc/default/solr2.in.sh dosyalarını açıp ZK_HOST alanındaki yorum kısmını kaldırıyoruz. Buraya şunu yazıyoruz;

ZK_HOST="localhost:2181,localhost:2182,localhost:2183"
Sonra solrları restart ediyoruz.

service solr restart
service solr2 restart

Hemen ilk collectionumuzu oluşturuyoruz.

[root@9afe0af76150 opt]# bash /opt/solr/bin/solr create_collection -shards 2 -replicationFactor 2 -c product2 -d /opt/solr-5.5.1/server/solr/configsets/data_driven_schema_configs

Connecting to ZooKeeper at localhost:2181,localhost:2182,localhost:2183 ...
Uploading /opt/solr-5.5.1/server/solr/configsets/data_driven_schema_configs/conf for config product2 to ZooKeeper at localhost:2181,localhost:2182,localhost:2183

Creating new collection 'product2' using command:
http://localhost:8984/solr/admin/collections?action=CREATE&name=product2&numShards=2&replicationFactor=2&maxShardsPerNode=2&collection.configName=product2

{
  "responseHeader":{
    "status":0,
    "QTime":31629},
  "success":{
    "172.17.0.2:8984_solr":{
      "responseHeader":{
        "status":0,
        "QTime":21578},
      "core":"product2_shard1_replica2"},
    "172.17.0.2:8983_solr":{
      "responseHeader":{
        "status":0,
        "QTime":21819},
      "core":"product2_shard2_replica1"}}}

Bu arada configde değişiklik yapmak için /opt/solr/server/scripts/cloud-scripts/zkcli.sh dosyasını kullanabilirsiniz. Örnek şemamız dinamik field yapısını desteklediği için direk kullanmaya başlayabilirsiniz.
PHP tarafında solarium isimli kütüphaneyi önerebilirim.

Aşağıdaki çıktıyı şu linke tıkladığınızda görürsünüz inşaallah :)
Not: Uygun vakitte Docker olarak kurulumu hazırlayıp buradan paylaşacağım.


Hiç yorum yok: