Changes

Centralized logging in swarm

2,192 bytes added, 07:57, 18 May 2019
Swarm stack
:[[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
</pre>
 ==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/elastic'''elasticsearc.yml'''
<syntaxhighlight lang="C++">
cluster.name: "my-cluster"
network.host: 0.0.0.0
# minimum_master_nodes need to be explicitly set when bound on a public IP# set to 1 to allow single node clusters# Details: https://github.com/elastic/elasticsearch/pull/17288discovery.zen.minimum_master_nodes: 12
discovery.zen.ping.unicast.hosts: elasticsearch - elasticsearch_coord - elasticsearch1 - elasticsearch2 - elasticsearch3
</syntaxhighlight>
Az alábbi megoldással több gond is van: összes ES node a közös elk nevű overlay hálózaton tud majd közvetlen kommunikálni egymással.    ===Coordinating node-ok===* Csak az első A Coordinating node van rákötve az ingress hálózatra, ez az egyetlen bejárata a ES cluster-nek, mivel nem egy darab okat több elemű swarm service tagjai az ES -ként fogjuk létrehozni. Ezek a node-ok* Csak lesznek a node1 címe van megadva ES cluster belépési pontjai. Egyedül ebben a node2swarm service-nél, fordítva már nem lehetne ha ben lesz több mint 2 egy konténer. Data mappát nem is csatolunk fel hozzá. Ahhoz hogy coordinating node-ként viselkedjen egy node lennebe kell állítani, hogy se nem data, mindegyiknek ugyan úgy a node1 címét kéne megadni (discoveryse nem master és se nem ingest tevékenységet nem végezhet.zen.ping.unicast.hosts=elasticsearch). Ha Ehhez létrehozhattunk volna egy külön konfigurációs fájlt a node1 leáll, vége a clustercoordinating node-nekoknak, nem fognak tudni egymásól mi most itt beírtuk környezeti változóba. 3 példányt kértünk belőle. Mindenképpen meg kell hogy adjuk egymásnak az összes címet, pl úgy hogy fix címet álltunk be az overlay Az ingress hálózaton, és akkor már a compose fájlba be lehet írni az összes 9200 -as porton érhetjük majd el a coordinating node-okat bármelyik swarm node összes címétIP címén.
<syntaxhighlight lang="C++">
version: '3'services: elasticsearchelasticsearch_coord:
image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0
ports:
- elk
volumes:
- "elasticsearches-conf:/usr/share/elasticsearch/config" environment: - clusternode.namedata=my-clusterfalse - node.name=node1# - bootstrap.memory_lockmaster=truefalse - http.cors.enabled=true - http.corsnode.allow-originingest=*false
deploy:
replicas: 2
restart_policy:
condition: on-failure
elasticsearch2</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:
- "elasticsearches-conf:/usr/share/elasticsearch/config" - "es-data1,2,3:/usr/share/elasticsearch/data"
environment:
- discovery.zen.ping.unicast.hosts=elasticsearch - cluster.name=my-cluster - node.name=node2# - bootstrap.memory_lock=true - http.cors.enabled=true - http.cors.allow-origin=*node1,2,3
deploy:
replicas: 1
restart_policy:
condition: on-failure
resources</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' reservationsservices: memory: 500m ....
networks:
driver_opts:
share: 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/elasticsearch/config
elasticsearch1es-datadata1:
driver: nfs
driver_opts:
share: 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/elasticsearch/data1
elasticsearch2es-datadata2:
driver: nfs
driver_opts:
share: 192.168.42.1:/home/adam/Projects/DockerCourse/persistentstore/elasticsearch/data2
</syntaxhighlight>