LoginSignup
0
0

More than 3 years have passed since last update.

Solr(Master-Slave) を Vagrant で構築する

Posted at

Solr(Master-Slave) を Vagrant で構築する

Vagrant で Solr を レガシーな Master-Slave 構成で構築しました.
Solr のバージョンは 6.2.0 です.

masterslave.png

構成

Solr の構築はシェルでやることにしました.

D:\vagrant\solrmasterslave
┣Vagrantfile
┗create_solr.sh

Vagrantfile

  • OS は CentOS 7 を使用します.
  • プロビジョナでシェルを実行します.
slave_cnt = 2

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.proxy.enabled  = true
  config.proxy.http     = "http://user_id:password@proxy_address:proxy_port"
  config.proxy.https    = "http://user_id:password@proxy_address:proxy_port"
  config.proxy.no_proxy = "localhost,127.0.0.1"

  config.vm.define "master" do | master |
    master.vm.hostname = "master"
    master.vm.network "private_network", ip: "192.168.33.40"
    master.vm.provision :hosts, :sync_hosts => true
    master.vm.provision :shell, path: "./create_solr.sh"
  end

  (1..slave_cnt).each do |i|
    config.vm.define "slave#{i}" do | slave |
      slave.vm.hostname = "slave#{i}"
      slave.vm.network "private_network", ip: "192.168.33.4#{i}"
      slave.vm.provision :hosts, :sync_hosts => true
      slave.vm.provision :shell, path: "./create_solr.sh"
    end
  end

end

create_solr.sh

Standalone のときと同じです.
ただ文書の登録は後のお楽しみにとっておきます.

# Java をインストールする
yum install -y java-1.8.0-openjdk

# Solr を構築する
cd /usr/local/src/
yum install -y wget
wget https://archive.apache.org/dist/lucene/solr/6.2.0/solr-6.2.0.tgz
tar xzf solr-6.2.0.tgz
./solr-6.2.0/bin/install_solr_service.sh solr-6.2.0.tgz

# core を作成する
sudo -u solr /opt/solr/bin/solr create -c examplecore
# 文書は登録しない

# Port を開放する
systemctl enable firewalld.service
systemctl start firewalld.service
firewall-cmd --zone=public --add-port=8983/tcp --permanent
firewall-cmd --reload

Solr を構築する

> pwd
D:\vagrant\solrmasterslave
> vagrant up

Master を設定する

  • Solr を停止します.
  • core にある solrconfig.xml に Master の設定を追加します.
  • Solr を起動します.
> vagrant ssh master
$ su root
$ service stop solr
$ vi /var/solr/masterslave/master/data/examplecore/conf/solrconfig.xml
$ service start solr
  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="master">
      <str name="replicateAfter">commit</str>
      <str name="replicateAfter">optimize</str>
      <str name="replicateAfter">startup</str>
      <str name="confFiles">schema.xml,stopwords.txt</str>
    </lst>
  </requestHandler>

Slave を設定する

  • Solr を停止します.
  • core にある solrconfig.xml に Slave の設定を追加します.
  • Solr を起動します.
> vagrant ssh slave1
$ su root
$ service stop solr
$ vi /var/solr/masterslave/master/data/examplecore/conf/solrconfig.xml
$ service start solr

> vagrant ssh slave2
$ su root
$ service stop solr
$ vi /var/solr/masterslave/master/data/examplecore/conf/solrconfig.xml
$ service start solr
  <requestHandler name="/replication" class="solr.ReplicationHandler" >
    <lst name="slave">
      <str name="masterUrl">http://master:8983/solr/examplecore</str>
      <str name="pollInterval">00:00:30</str>
    </lst>
  </requestHandler>

Replication 確認

Master に文書を登録して Slave に反映されるか確認します.
まず,core を作成しただけなので検索結果が空であることを確認します.

> curl -X GET "http://192.168.33.40:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.40
{
  "responseHeader":{
    "status":0,
    "QTime":23,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}
> curl -X GET "http://192.168.33.41:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.41
{
  "responseHeader":{
    "status":0,
    "QTime":23,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}
> curl -X GET "http://192.168.33.42:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.42
{
  "responseHeader":{
    "status":0,
    "QTime":23,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":0,"start":0,"docs":[]
  }}

Master に文書を登録します.

> vagrant ssh master -c "sudo -u solr /opt/solr/bin/post -c examplecore -p 8983 /opt/solr/example/exampledocs/*.xml"

再度検索してみます.

> curl -X GET "http://192.168.33.40:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.40
{
  "responseHeader":{
    "status":0,
    "QTime":6,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":32,"start":0,"docs":[
      {
        "id":"GB18030TEST"},
      {
        "id":"SP2514N"},
      {
        "id":"6H500F0"},
      {
        "id":"F8V7067-APL-KIT"},
      {
        "id":"IW-02"},
      {
        "id":"MA147LL/A"},
      {
        "id":"adata"},
      {
        "id":"apple"},
      {
        "id":"asus"},
      {
        "id":"ati"}]
  }}
> curl -X GET "http://192.168.33.41:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.41
{
  "responseHeader":{
    "status":0,
    "QTime":11,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":32,"start":0,"docs":[
      {
        "id":"GB18030TEST"},
      {
        "id":"SP2514N"},
      {
        "id":"6H500F0"},
      {
        "id":"F8V7067-APL-KIT"},
      {
        "id":"IW-02"},
      {
        "id":"MA147LL/A"},
      {
        "id":"adata"},
      {
        "id":"apple"},
      {
        "id":"asus"},
      {
        "id":"ati"}]
  }}
> curl -X GET "http://192.168.33.42:8983/solr/examplecore/select?q=*:*&fl=id&wt=json&indent=on" --noproxy 192.168.33.42
{
  "responseHeader":{
    "status":0,
    "QTime":27,
    "params":{
      "q":"*:*",
      "indent":"on",
      "fl":"id",
      "wt":"json"}},
  "response":{"numFound":32,"start":0,"docs":[
      {
        "id":"GB18030TEST"},
      {
        "id":"SP2514N"},
      {
        "id":"6H500F0"},
      {
        "id":"F8V7067-APL-KIT"},
      {
        "id":"IW-02"},
      {
        "id":"MA147LL/A"},
      {
        "id":"adata"},
      {
        "id":"apple"},
      {
        "id":"asus"},
      {
        "id":"ati"}]
  }}

Replication が実行されて Master のインデックスが Slave にも反映されました.

あとがき

一気に Master-Slave 構成を構築する際の Vagrantfile,シェル,構成です.
共有ディレクトリを用意して,設定済みの solrconfig.xml を配布します(solrconfig.xml には Master,Slave の設定を追記しています).

slave_cnt = 2

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.synced_folder "./shared", "/home/vagrant/shared", owner: "vagrant", group: "vagrant"

  config.proxy.enabled  = true
  config.proxy.http     = "http://user_id:password@proxy_address:proxy_port"
  config.proxy.https    = "http://user_id:password@proxy_address:proxy_port"
  config.proxy.no_proxy = "localhost,127.0.0.1"

  config.vm.define "master" do | master |
    master.vm.hostname = "master"
    master.vm.network "private_network", ip: "192.168.33.40"
    master.vm.provision :hosts, :sync_hosts => true
    master.vm.provision :shell, path: "./create_solr.sh"
    master.vm.provision :shell, path: "./setup_master.sh"
  end

  (1..slave_cnt).each do |i|
    config.vm.define "slave#{i}" do | slave |
      slave.vm.hostname = "slave#{i}"
      slave.vm.network "private_network", ip: "192.168.33.4#{i}"
      slave.vm.provision :hosts, :sync_hosts => true
      slave.vm.provision :shell, path: "./create_solr.sh"
      slave.vm.provision :shell, path: "./setup_slave.sh"
    end
  end

end
service solr stop
\cp -f /home/vagrant/shared/master/solrconfig.xml /var/solr/data/examplecore/conf/solrconfig.xml
service solr start
service solr stop
\cp -f /home/vagrant/shared/slave/solrconfig.xml /var/solr/data/examplecore/conf/solrconfig.xml
service solr start
D:\vagrant\solrmasterslave
┣Vagrantfile
┣shared
┃┣master
┃┃┗solrconfig.xml
┃┗slvae
┃  ┗solrconfig.xml
┣create_solr.sh
┣setup_master.sh
┗setup_slave.sh
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0