:[[File:ClipCapIt-180928180930-200815152409.PNG]]
=Swarm stack=
'''dockerelastic-composestack.yml'''
<syntaxhighlight lang="C++">
version: '3'
# docker stack ps logmanager ...
</pre>
=Elasticsarch cluster=
==Telepítés=Produkciós beállítások===Ha kivesszük a '''discovery.type=single-node''' paramétert, és ezen felül még a '''network.host''' paramétert is beállítjuk, az ES produkciós üzemmódban fog elindulni. Produkciós indulás közben sokkal szigorúbban ellenőrzi a kötelező beállításokat. Ebből a legfontosabb host operációs rendszernek (jelen esetben a boot2docker) a '''vm.max_map_count''' beállítása, amit fel kell emelni minimum '''262144'''-ra. Ha ez kevesebb, az adott node nem fog elindulni.
<pre>
docker-machine ssh mg0
==Egy lehetséges megoldás==
Mivel minden master és data node-nak saját perzisztencia store-ra van szüksége nem tehetjük meg simán egy darab swarm service-ként elindítjuk a cluster-t és aztán felskálázzuk (docker swarm scale). Tehát az világos, hogy minden data és manager node-ot külön service-ként kell definiálni. Viszont az ingress overlay hálózatra csak egy service-hez tudjuk a 9200-as portot definiálni. (feltéve, ha el akarjuk érni kívülről). Szerencsére a koordinációs node-oknak (amik nem végeznek se master, de data se Ingest tevékenységet, kizárólag a kliensek kéréseit rout-olják a megfelelő node-okhoz) nem kell hogy legyen mentett data mappája, így ezeket létre tudjuk hozzon több elemű swarm service-ként, mint Elasticsearch belépési pont, és akkor a swarm ingress hálózat még meg is oldja a load-balancing-ot.
===Közös konfigurációs fájl===
A közös konfigurációs fájlba felvesszük az összes cluster tag végpontját '''discovery.zen.ping.unicast.hosts''' paraméterben. A listában minden egyes sor egy swarm service neve, amit a swarm DNS felold konténer IP címére. Egyedül a '''elasticsearch_coord''' lesz több konténerből álló szolgáltatás, amik rá lesznek kötve az ingress hálózatra is, ezek lesznek az ES cluster belépési pontjai. Szerencsére a zen discovery képes olyan DNS válaszokat is kezelni, amik több végpontot adnak vissza. <br>
Az alábbi fájlt fel fogjuk csatolni az összes service-be NFS megosztással. <br>
/usr/share/elasticsearch/config/'''elasticsearc.yml'''
<syntaxhighlight lang="C++">
cluster.name: "my-cluster"
network.host: 0.0.0.0
# discovery.zen.minimum_master_nodes need to be explicitly set when bound on a public IP: 2# set to 1 to allow single node clusters# Details: https://github.com/elastic/elasticsearch/pull/17288discovery.zen.minimum_master_nodesping.unicast.hosts: 1 - elasticsearch_coord - elasticsearch1 - elasticsearch2 - elasticsearch3</syntaxhighlight> Az összes ES node a közös elk nevű overlay hálózaton tud majd közvetlen kommunikálni egymással.
discovery===Coordinating node-ok===A Coordinating node-okat több elemű swarm service-ként fogjuk létrehozni.zenEzek a node-ok lesznek a ES cluster belépési pontjai.pingEgyedül ebben a swarm service-ben lesz több mint egy konténer.unicastData mappát nem is csatolunk fel hozzá.hostsAhhoz hogy coordinating node-ként viselkedjen egy node be kell állítani, hogy se nem data, se nem master és se nem ingest tevékenységet nem végezhet. Ehhez létrehozhattunk volna egy külön konfigurációs fájlt a coordinating node-oknak, mi most itt beírtuk környezeti változóba. 3 példányt kértünk belőle. Az ingress hálózaton a 9200 -as porton érhetjük majd el a coordinating node-okat bármelyik swarm node IP címén.<syntaxhighlight lang="C++"> elasticsearch_coord: image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0 ports: - "9200:9200" networks: - elk volumes: - "es-conf:/usr/share/elasticsearch/config" environment: - node.data=false - node.master=false - node.ingest=false deploy: replicas: 2 restart_policy: condition: on-failure</syntaxhighlight> ===További node-ok definiálása===Mivel most nem akarunk hatalmas cluster-t építeni, három további node-ot fogunk a cluster-hez adni, amik már mind a három szerepkörben benne lesznek (master, data és ingest). Mivel a master és az adat node-oknak már saját data mappára van szüksége, minden node-ot egy külön swarm service-ként fogunk definiálni saját volume plugin megosztással a perzisztens store-ban. Így bárhol is hozza létre őket a swarm, mindig ugyan azt a data mappát fogják megkapni. <syntaxhighlight lang="C++"> elasticsearch1,2,3: image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0 ports: - "9200:9200" networks: - elk volumes: - "es-conf:/usr/share/elasticsearch/config" - "es-data1,2,3:/usr/share/elasticsearch/data" environment: - node.name=node1,2,3 deploy: replicas: 1 restart_policy: condition: on-failure</syntaxhighlight>A fenti compose blokkot háromszor kell a compose fájlba rakni a megfelelő sorszámmal a service, node és volume megosztás nevében (1,2,3) ==Docker stack fájl== {{warning|Nincs még frissítve...}} <syntaxhighlight lang="C++">version: '3'services: .... networks: elk: driver: overlay volumes: elasticsearch-conf: driver: nfs driver_opts: share: 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/elasticsearch/config es-data1: driver: nfs driver_opts: share: 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/elasticsearch/data1 es-data2: driver: nfs driver_opts: share: 192.168.42.1: /home/adam/Projects/DockerCourse/persistentstore/elasticsearch/data2
</syntaxhighlight>