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

  1. Suunnitelma / Vaatimus
  2. Metodi1: Tiedostojen kopiointi etä-isäntien välillä käyttäen fetch-moduulia
  3. Metodi2: Tiedoston kopiointi etä-isäntien välillä käyttäen synkronize-moduulia
    1. Synkronize Push
    2. Synkronize Pull
  4. Toteutuksen ulostulot
  5. 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

  1. mwiappi01
  2. 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ää

  1. Synchronize Pull
  2. 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 mwiapp02ja 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 /tmphakemiston alla olevan tiedoston saatavuus mwiapp02palvelimella

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.

  1. Ansible Copy -moduulin viite
  2. Ansible Fetch -moduulin viite
  3. Ansible Synchronize -moduulin viite
  4. Miten kopioidaan tai vaihdetaan SSH-avain useiden isäntien välillä – Ansible
  5. 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ä