Miten kopioida tiedostoja etä-isäntien välillä Ansibessa
- 0
Miten kopioida tiedostoja etäpalvelimien välillä Ansibessa ?. on tämän artikkelin tarkoitus. Jokainen artikkeli, jonka kävin lukemassa, antoi minulle ehdotuksia, mutta ei mitään käytännönläheistä. Halusin yksinkertaisesti tehdä ansible rsync. Halusin suorittaa rsync
etä-isäntien välillä ja kopioida tiedostoja etä-isäntien välillä.
Tässä on siis esimerkkipohjainen artikkeli. Tässä postauksessa keskustelemme kahdesta tärkeimmästä vaihtoehdosta, jotka ovat käytettävissä tiedostojen kopioimiseksi etäpalvelimien välillä tai etäpalvelimista etäpalvelimiin.
Kun haluamme kopioida tiedostoja yhdeltä isännältä toiselle isännälle, yleensä ensimmäinen asia, joka tulee mieleemme, on SCP, ja ansiblellä on oma moduuli samannimiselle COPY
Jos haluat kopioida tiedoston Ansiblen valvontamestarilta etäisäntäasemille, COPY-moduuli (scp-moduuli) olisi aivan hyvä. Mutta tarvitsemme jotain muuta, kun haluamme kopioida tiedostoja etä-isäntien välillä tai kopioida tiedostoja etä-isäntien välillä.
Hyödynnämme joitakin Ansiblen moduuleja, kuten copy, fetch, synchronize, jotta voimme toteuttaa vaatimuksen tiedostojen kopioimisesta isäntien välillä Ansiblessä.
Vaikka olemme jo tietoisia siitä, mihin Ansible Copy -moduulia käytetään.
Tässä on yksinkertainen esittely Ansible Fetch ja Ansible Synchronize -moduuleihin.
Ansible Fetch -moduulin tehtävänä on vetää tiedostot etäpalvelimelta ohjauskoneeseen.
Ansible Synchronize -moduulin tehtävänä on kopioida tiedostot etäkäyttöisten palvelimien (tai) kohde-isäntien välillä. Tämä on enemmänkin kuin RSYNC:n suorittaminen Ansiblen avulla.
Sisällysluettelo
Sisällysluettelo
- Suunnitelma / Vaatimus
- Metodi1: Tiedostojen kopiointi etä-isäntien välillä käyttäen fetch-moduulia
- Metodi2: Tiedoston kopiointi etä-isäntien välillä käyttäen synkronize-moduulia
- Synkronize Push
- Synkronize Pull
- Toteutuksen ulostulot
- Viittaukset ja muut asiaan liittyvät artikkelit.
Suunnitelma / Vaatimus
Aloittaaksemme, määrittelemme itse joitakin vaatimuksia, jotta, voisimme liittyä ja olla samalla sivulla.
Meillä on kaksi palvelinta, jotka on nimetty seuraavasti
- mwiappi01
- mwiapp02
Vaatimuksena on kopioida tiedosto mwiapp01:stä mwiapp02:een. Ennen kuin jatkamme, Tässä on asetuksemme infrastruktuurikaavio.
Älä mene sekaisin nimestä Master. Se on vain ohjauskone. Muista, että Ansible on agenttivapaa. joten masteria ja slavea ei ole.
Method1: Kopioi app01:stä app02:een käyttäen fetch-moduulia
Tätä menetelmää varten ei tarvita SSH-tunnistautumista etäsolmujen välillä
Tämä on paras ja helpoin vaihtoehto siirtää tiedostoja etäsolmujen välillä Kun et ole ottanut käyttöön SSH-avainpohjaista tunnistautumista etäsolmujen välillä. Tosin se ei ole lyhin polku (tai) beeline. Se toimii hyvin silloin, kun pääpainopisteemme on saada työ tehtyä, olipa lähestymistapa mikä tahansa.
Tässä menetelmässä on kyse kaksivaiheisesta prosessista.
Vaihe 1: Hae tiedosto etäpalvelimelta (lähde) ansible-masteriin
Vaihe 2: Työnnä (kopioi) tiedosto ansible-masterista etäpalvelimelle ( määränpäähän)
Tässä master toimii ikään kuin puskurina, johon tiedostot väliaikaisesti tallennetaan ja jonka jälkeen ne siirretään.
Tarkastellaan seuraavaa playbookia, joka suorittaa molemmat edellä mainitut tehtävät.
--- - hosts: app tasks: - name: Fetch the file from the mwiapp01 to master run_once: yes fetch: src=/tmp/app01-to-app02.jar dest=buffer/ flat=yes when: "{{ inventory_hostname == 'mwiapp01' }}}" - name: Kopioi tiedosto masterista mwiapp02:een copy: src=buffer/app01-to-app02.jar dest=/tmp/ when: "{{ inventory_hostname == 'mwiapp02' }}}"
Tässä käytämme "when"
suorittaaksemme ehdolliseen suoritukseen perustuvan suorituksen ja inventory_hostname
on Ansiblen sisäänrakennettu muuttuja, joka osoittaa nykyisen suorituksen etä-isäntänimen.
Joskus saatat joutua käyttämään
ansible_hostname
:aa
Periaatteessa ohjeistamme Ansiblea suorittamaan Fetch-tehtävän vain mwiapp01
-palvelimella ja kopiointitehtävän vain silloin, kun mwiapp02
on tämänhetkinen etätoteutushost.
Menetelmä 2: Kopioi app01:stä app02:een käyttämällä synkronointimoduulia
SSH-avainpohjainen todennus on otettava käyttöön etä-isäntien välillä
Synkronointimoduulin häiriöttömän toiminnan kannalta SSH-avainpohjainen todennus on otettava käyttöön etäsolmujen välillä. Muuten synkronointitehtävä jumittuu ja niin myös Ansible-pelisi.
Muulla sanoen etäsolmujen pitäisi pystyä kirjautumaan toisiinsa ilman, että salasanaa tarvitsee syöttää manuaalisesti. Saavutamme tämän useimmiten SSH-avaimen avulla.
Kuten aiemmin sanottiin. Ansible Synchronize on enemmänkin kuin Ansible RSYNC. tyypillinen rsync
ominaisuus Linuxissa.
Tietääksesi, miten avainpohjainen todennus otetaan käyttöön vain muutamassa sekunnissa, tutustu seuraavaan artikkeliin
SSH-avainpohjaisen todennuksen ottaminen käyttöön Ansibella
Kun olemme valmiita SSH-avainpohjaisen todennuksen kanssa. Olemme valmiita pelaamaan näytelmän. ( playbook).
Tiedostojen kopioimiseen Synchronize-moduulin avulla on kaksi menetelmää
- Synchronize Pull
- Synchronize Push
Harkitaan seuraavia playbookeja, joissa kopioidaan tiedosto osoitteesta mwiapp01
osoitteeseen mwiapp02
sekä Synchronize Pull- että Synchronize Push-menetelmää käyttäen
Synchronize Pull
Kohde:: Source Server (mwiapp01)
Delegated to and Executed on:
Erittely: Destination Server (mwiapp02)
Explanation: Koska se suoritetaan kohdepalvelimella, jonne tiedoston on määrä saapua. Tehtävänä on vetää tiedosto Origin (tai) lähdepalvelimelta.
Tässä on pelikirja, joka suoritetaan kohdepalvelimella mwiapp02
delegoinnin avulla ja pulls
tiedosto siirretään mwiapp01:stä mwiapp02:een
---- nimi: Sync Pull -tehtävä - Suoritetaan kohde-isännällä "{{ryhmät}}" isännät: "{{groups}}" user: wlsusr tasks: - name: Kopioi tiedosto mwiapp01:stä mwiapp02:een käyttäen menetelmää Pull tags: sync-pull synchronize: src: "{{ item }}" dest: "{{ item }}" mode: pull delegate_to: "{{groups}}" register: syncfile run_once: true with_items: - "/tmp/app01-to-app02.jar"
Voi luulla, että playbook on asetettu suorittamaan ensimmäisellä palvelimella, koska hosts
-direktiivi kohdistuu ensimmäiseen palvelimeen. hosts: "{{group}}"
mwiapp01
Mutta sinun on huomioitava, että me itse asiassa suoritamme tämän tehtävän toisella palvelimella mwiapp02
delegate_to
Katsokaa seuraavaa näytön tietuetta ymmärtääksesi tämän paremmin.
Synchronize Push
Targeted to: Destination Server (mwiapp02)
Delegated to and Executed on: Lähdepalvelin (mwiapp01)
Selitys: Koska se suoritetaan lähdepalvelimella, jossa tiedosto on jo olemassa. Tehtävänä on työntää tiedosto kohdepalvelimelle
Tässä on pelikirja, joka suoritetaan lähdepalvelimella mwiapp01
ja pushes
tiedosto 01:stä 02:een
- nimi: Sync Push -tehtävä - Suoritetaan lähde-isännällä "{{ryhmät}}" isännät: "{{groups}}" user: wlsusr tasks: - name: Kopioidaan tiedosto mwiapp01:stä mwiapp02:een käyttäen menetelmää Push tags: sync-push synchronize: src: "{{ item }}" dest: "{{ item }}" mode: push delegate_to: "{{groups}}" register: syncfile with_items: - "/tmp/app01-to-app02.jar"
Voi luulla, että playbook on asetettu suoritettavaksi toisella palvelimella, koska hosts
-direktiivi kohdistuu ensimmäiseen palvelimeen. hosts: "{{group}}"
mwiapp02
Mutta sinun on huomioitava, että itse asiassa suoritamme tämän tehtävän ensimmäisellä palvelimella mwiapp01
delegate_to
Leikkikirja koostuu kahdesta isäntäpohjaisesta tehtävälistasta. Ensimmäinen suoritetaan Synchronize Pullin avulla suoritetaan mwiapp02
ja toinen Synchronize Pushin avulla suoritetaan mwiapp01
Vaikka playbook on ymmärrettävä ( helppo ymmärtää). Minusta tuntuu, että on joitakin erikoisia rivejä, jotka tarvitsevat enemmän selitystä, kuten "{{groups}}"
Se edustaa ”app” -nimisen isäntäryhmän ensimmäistä elementtiä (tai) palvelinta aivan kuten array
Toivottavasti seuraava kuva selventäisi asiaa.
Tiedostossa on myös kaksi muuta tärkeää riviä, jotka ovat seuraavat:
- -tila Se edustaa mallia, jonka mukaan Synchronize. Joko Synchronize pull tai Synchronize push
- delegate_to Se kertoo ansiblelle, missä tehtävä (tai) komento pitäisi oikeastaan suorittaa.
Toivottavasti olet jo tajunnut. delegate_to
ja hosts
yhdessä mode
:n kanssa ansible-playbookissa toimivat yhdessä, jotta etätoteutus (tai) kopiointi etäsolmujen välillä on mahdollista.
Toteutuksen tuloste
Edellisessä kuvakaappauksessa olemme suorittaneet 3 komentoa. Ensimmäinen ja viimeinen on Ansiblen ad-hoc-komento, jolla tarkistetaan /tmp
hakemiston alla olevan tiedoston saatavuus mwiapp02
palvelimella
käytämme komentoa
--limit
suorittaaksemme komennon vain yhdellä palvelimella, vaikka käytämme hostgroupia, joka sisältää kaksi palvelinta.
Olemme onnistuneesti kopioineet tiedoston mwiapp01:stä mwiapp02:een käyttäen sekä Fetch- että Synchronize-moduuleja.
Tulos
Tässä postauksessa olemme menestyksekkäästi opetelleet ja suorittaneet, miten kopioidaan tiedostoja etäisien isäntien välillä käyttäen Ansiblen copy- ja fetch-moduuleja. Olemme oppineet kaksi tapaa kopioida tiedostoja isäntien välillä ansiblen avulla.
Toivottavasti tämä artikkeli on hyödyllinen.
- Ansible Copy -moduulin viite
- Ansible Fetch -moduulin viite
- Ansible Synchronize -moduulin viite
- Miten kopioidaan tai vaihdetaan SSH-avain useiden isäntien välillä – Ansible
- Miten vaihdetaan IP-osoite ja päivitetään /etc/hosts-tiedosto useissa isäntien välillä – Ansible
Toivottavasti tämä artikkeli auttaa. Jos pidät tästä artikkelista, jaa sitä