<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>collection &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/collection/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Sat, 14 Nov 2020 08:55:47 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 7.2 &#8211; automatyczne rozmieszczanie replik korzystając z UTILIZENODE</title>
		<link>https://solr.pl/2018/01/02/solr-7-2-automatyczne-rozmieszczanie-replik-korzystajac-z-utilizenode/</link>
					<comments>https://solr.pl/2018/01/02/solr-7-2-automatyczne-rozmieszczanie-replik-korzystajac-z-utilizenode/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Tue, 02 Jan 2018 08:55:18 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[7.2]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[collection]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[utilizenode]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=744</guid>

					<description><![CDATA[Wraz z premierą Solr 7.2 dostaliśmy nową opcję dostępną w ramach Collections API &#8211; możliwość zmuszenia Solr do relokacji replik na podstawie ustawień autoscalingu. Solr przygląda się replikom oraz ustawieniom autoscalingu, a następnie, w miarę możliwości automatycznie przydziela repliki do]]></description>
										<content:encoded><![CDATA[<p>Wraz z premierą Solr 7.2 dostaliśmy nową opcję dostępną w ramach Collections API &#8211; możliwość zmuszenia Solr do relokacji replik na podstawie ustawień autoscalingu. Solr <em>przygląda</em> się replikom oraz ustawieniom autoscalingu, a następnie, w miarę możliwości automatycznie przydziela repliki do zadanej instancji Solr. Brzmi bardzo fajnie w teorii, zobaczmy zatem, jak działa w praktyce.</p>
<p><span id="more-744"></span></p>
<h3>Autoscaling API w Solr</h3>
<p>Jeżeli nie wiesz co to jest Autoscaling API Solr pozwolę sobię na szybkie wprowadzenie. Jest to API pozwalające na ustawianie reguł dla klastra lub kolekcji, które mówią Solr jak mają być alokowane repliki w Solr. Chcemy wziąć pod uwagę wykorzystanie procesora danej instancji Solr &#8211; możemy to zrobić. Chcemy wziąć pod uwagę wyjorzystanie dysku na danej instancji &#8211; oczywiście możemy to zrobić. Najfajniejsze jest to, iż reguły mogą być definiowane zarówno dla całego klastra, jak również dla pojedynczych kolekcji w klastrze. Daje nam to całkiem dużą swobodę jeżeli chodzi o konfigurację.</p>
<p>Aczkolwiek, zdefiniowane reguły używane są tylko podczas przypisywania replik do instancji Solr. Oznacza to, że w momencie kiedy kolekcja została już stworzona Solr nie będzie korzystał z tych informacji podczas dodawania replik. Zmieniło się to wraz z wprowadzeniem Solr 7.2, gdzie dostaliśmy do dyspozycji komendę <em>UTILIZENODE</em>.</p>
<h3>Środowisko testowe</h3>
<p>Aby umożliwić proste odtworzenie testu zdecydowałem się na urucomienie banalnego środowiska testowego opartego o Solr 7.2 składającego się z dwóch instancji Solr. Pierwsza z nich uruchomiona została następującym poleceniem:
</p>
<pre>$ bin/solr start -c</pre>
<p>Drugą instancję Solr uruchamiamy następującym poleceniem:
</p>
<pre>$ bin/solr start -z localhost:9983 -p 6683</pre>
<p>Po uruchomieniu obu instancji tworzymy pojedynczą kolekcję nazwaną <em>test</em> zbudowaną z jednego lidera i trzech replik, wszystkie stworzone na pojedynczej instancji Solr. Nasz widok kolekcji wygląda następująco:</p>
<p><a href="https://solr.pl/wp-content/uploads/2017/12/cluster_before_load_balancing.png"><img decoding="async" class="aligncenter wp-image-4058" src="https://solr.pl/wp-content/uploads/2017/12/cluster_before_load_balancing-300x47.png" alt="" width="450" height="70"></a></p>
<p>A sam stan opisany odpowiednim plikiem JSON wygląda następująco:
</p>
<pre>{"test":{
    "pullReplicas":"0",
    "replicationFactor":"1",
    "router":{"name":"compositeId"},
    "maxShardsPerNode":"1",
    "autoAddReplicas":"false",
    "nrtReplicas":"1",
    "tlogReplicas":"0",
    "shards":{"shard1":{
        "range":"80000000-7fffffff",
        "state":"active",
        "replicas":{
          "core_node2":{
            "core":"test_shard1_replica_n1",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT",
            "leader":"true"},
          "core_node4":{
            "core":"test_shard1_replica_n3",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT"},
          "core_node6":{
            "core":"test_shard1_replica_n5",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT"},
          "core_node8":{
            "core":"test_shard1_replica_n7",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT"}}}}}}
</pre>
<p>Jak widać mamy potwierdzenie tego, iż wszystkie shardy zostały przypisane do tego samej instancji Solr &#8211; tej z <em>base_url</em> równą <em>http://192.168.1.15:8983/solr</em>.</p>
<p>Mamy zatem następującą sytuację:</p>
<ul>
<li>Mamy klaster Solr, który stowrzony jest z dwóch instancji Solr</li>
<li>W ramach klastra stworzona jest pojedyncza kolekcja</li>
<li>Nasza kolekcja zbudowana jest z czterech shardów &#8211; jednego lidera oraz trzech replik</li>
<li>Wszystkie shardy przypisane są do pojedynczej instancji Solr</li>
</ul>
<p>Podsumowując &#8211; nie korzystamy z wszystkich instancji Solr. Spróbujmy to zmienić korzystając z komendy <em>UTILIZENODE</em> wprowadzonej w Collections API w Solr 7.2.</p>
<h3>Korzystanie z UTILIZENODE w API kolekcji</h3>
<p>Aby zilustrować działanie Autoscaling API oraz <em>UTILIZENODE</em> w Collections API ustawimy pewne preferencje alokacji replik dla całego klastra. Przy pomocy następującego polecenia powiemy Solr, aby starał się minimalizować liczbę coreów na każdej instancji Solr dostępnej w klastrze:
</p>
<pre>$ curl -XPOST 'localhost:8983/api/cluster/autoscaling' -H 'Content-Type:application/json' -d '{
 "set-cluster-preferences" : [
  {"minimize": "cores"}
 ]
}'</pre>
<p>Powyższe polecenie ustawia właściwości dla klastra dotyczące preferencji umieszczania shardów. Mówi, że Solr ma minimalizować liczbę coreów na każdej instancji, a zatem dążyć do jak największego rozproszenia kolekcji. Zatem teraz, korzystając z polecenia <em>UTILIZENODE</em> z Collections API możemy zmusić Solr, aby druga, nieużywana instancja Solr zaczęła być wykorzystywana. Robimy to następującym poleceniem:
</p>
<pre>$ curl -XGET 'localhost:8983/solr/admin/collections?action=UTILIZENODE&amp;node=192.168.1.15:6683_solr'</pre>
<p>Parametr <em>node</em> jest konieczny ponieważ musimy powiedziec Solr, która instancja Solr powinna być brana pod uwagę podczas alokacji. Przetwarzanie polecenia, w zależności od wielkości replik może zająć dość długo, a w związku z tym, w systemie produkcyjnym sugerowane jest uruchamianie tej komendy w asynchronicznie. W naszym przypadku wykonanie będzie dość szybkie i skutkuje takimi zmianami w klastrze:</p>
<p><a href="https://solr.pl/wp-content/uploads/2017/12/cluster_after_load_balancing.png"><img decoding="async" class="aligncenter wp-image-4059" src="https://solr.pl/wp-content/uploads/2017/12/cluster_after_load_balancing-1024x144.png" alt="" width="450" height="63"></a></p>
<p>Plik JSON opisujący stan kolekcji, po zmianach, wygląda następująco:
</p>
<pre>{"test":{
    "pullReplicas":"0",
    "replicationFactor":"1",
    "shards":{"shard1":{
        "range":"80000000-7fffffff",
        "state":"active",
        "replicas":{
          "core_node6":{
            "core":"test_shard1_replica_n5",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT",
            "leader":"true"},
          "core_node8":{
            "core":"test_shard1_replica_n7",
            "base_url":"http://192.168.1.15:8983/solr",
            "node_name":"192.168.1.15:8983_solr",
            "state":"active",
            "type":"NRT"},
          "core_node10":{
            "core":"test_shard1_replica_n9",
            "base_url":"http://192.168.1.15:6683/solr",
            "node_name":"192.168.1.15:6683_solr",
            "state":"active",
            "type":"NRT"},
          "core_node12":{
            "core":"test_shard1_replica_n11",
            "base_url":"http://192.168.1.15:6683/solr",
            "node_name":"192.168.1.15:6683_solr",
            "state":"active",
            "type":"NRT"}}}},
    "router":{"name":"compositeId"},
    "maxShardsPerNode":"1",
    "autoAddReplicas":"false",
    "nrtReplicas":"1",
    "tlogReplicas":"0"}}</pre>
<p>Jak widać dwie repliki zostały przesunięte z instancji <em>192.168.1.15:8983_solr</em> do instancji <em>192.168.1.15:6683_solr</em>, czyli Solr zrobił dokładnie to co chcieliśmy.</p>
<h3>Podsumowanie</h3>
<p>Komenda <em>UTILIZENODE</em> z API kolekcji jest pewną formą automatyzacji zarządzania klastrem. Oczywiście podobny efekt uzyskamy korzystając z poleceń <em>ADDREPLICA</em> oraz <em>DELETEREPLICA</em> ale będzie to zarządzanie manualne i nie będzie brało pod uwagę ustawień klastra i kolekcji. Komenda <em>UTILIZENODE</em> daje nam pewność, iż wszystkie ustawienia, zarówno te dotyczące klastra, jak i te dotyczące kolekcji będą zachowane.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2018/01/02/solr-7-2-automatyczne-rozmieszczanie-replik-korzystajac-z-utilizenode/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
