Changes

Jump to: navigation, search

Centralized logging in swarm

5,462 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=
==Perzisztencia==Ez itt a legnagyobb kérdés. Még akkor is ha nem dinamikusan létrehozott VM-eken futtatjuk az ES cluster-t, a swarm minden egyes újraindításkor más és más node-ra fogja rakni ugyan azt a node-ot.  ..name.  ===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...sudo sysctl -w vm.max_map_count=262144</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 nevét 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 paraméterben kell megadni: "my-cluster"network.host: 0.0.0.0 discovery.zen.minimum_master_nodes: 2 discovery.zen.ping.unicast. Ennek az hosts: - 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.    ===Coordinating node-ok===A Coordinating node-okat több elemű swarm service-ként fogjuk létrehozni. Ezek a node-ok lesznek a ES cluster belépési pontjai. Egyedül ebben a swarm service-ben lesz több mint egy konténer. Data mappát nem is csatolunk fel hozzá. Ahhoz hogy coordinating node-ban egyeznie ként viselkedjen egy node be kellállítani, hogy se nem data, innen tudja 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, hogy melyik 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 csatlakoznia 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>

Navigation menu