Einführung in Ansible und Einführung in grundlegende Befehlsmodule

Kapitel 1 Ansible-Übersicht

Ansible ist ein Konfigurationsmanagementsystem

Die Python-Sprache ist eine Sprache, die das Betriebs- und Wartungspersonal beherrschen muss

ansible ist ein automatisiertes Betriebs- und Wartungstool, das auf Python basiert

Seine Funktion implementiert einen Remote-Verbindungsdienst basierend auf SSH

Ansible kann Batch-Systemkonfiguration, Batch-Softwarebereitstellung, Batch-Dateikopie, Batch-Ausführungsbefehle und andere Funktionen realisieren

Neben Ansible gibt es auch Batch-Management-Software wie Saltstack.

1.1 Was Ansible kann

Ansible kann uns dabei helfen, einige Batch-Aufgaben zu erledigen oder einige Arbeiten zu erledigen, die häufig wiederholt werden müssen.
Beispiel: Installieren Sie den Nginx-Dienst gleichzeitig auf 100 Servern und starten Sie den Dienst nach der Installation.
Beispiel: Kopieren Sie eine bestimmte Datei gleichzeitig auf 100 Server.
Beispiel: Jedes Mal, wenn ein neuer Server zur Arbeitsumgebung hinzugefügt wird, müssen Sie einen Dienst für den neuen Server bereitstellen, was bedeutet, dass Sie dieselbe Arbeit wiederholt ausführen müssen.
In diesen Szenarien können wir Ansible verwenden.
Bedeutung des Ansible-Batch-Management-Dienstes
01. Arbeitseffizienz verbessern
02. Arbeitsgenauigkeit verbessern
03. Wartungskosten senken
04. Wiederholte Arbeit reduzieren
Ansible-Batch-Management-Service-Funktion
01. Kann die Betriebskonfiguration des Batch-Systems realisieren
02. Kann die Bereitstellung von Batch-Softwarediensten realisieren
03. Batch-Datei Die Datenverteilung kann realisiert werden.
04. Die Sammlung von Batch-Systeminformationen kann realisiert werden.
1.2 Ansible-Softwarefunktionen

1. Ansible muss den Client nicht separat installieren. SSH entspricht dem Ansible-Client.
2.ansible muss keine Dienste starten, sondern lediglich die entsprechenden Tools installieren.
3.ansible basiert auf einer großen Anzahl von Python-Modulen, um eine Stapelverwaltung zu erreichen.
4.Ansible-Konfigurationsdatei/etc/ansible/ansible.cfg

1.3 Ansible-Infrastruktur

1. Connector-Plugins werden zum Herstellen einer Verbindung zum Host und zum Herstellen einer Verbindung zum verwalteten Ende verwendet.
2. Kernmodule werden zum Herstellen einer Verbindung zum Host zum Implementieren von Vorgängen verwendet. Sie stützen sich auf bestimmte Module, um bestimmte Aufgaben auszuführen.
3. Benutzerdefinierte Module ) Schreiben Sie spezifische Module entsprechend Ihren eigenen Anforderungen
4. Plugins (Plugins) vervollständigen die Ergänzung der Modulfunktionen
5. Playbooks (Playbooks) Ansible-Konfigurationsdateien, definieren mehrere Aufgaben in den Playbooks und werden automatisch von Ansible ausgeführt
6. Hostliste (Host-Inventar). ) definiert den Bereich der Hosts, die Ansible betreiben muss.
Der wichtigste Punkt ist, dass Ansible modular ist und alle Vorgänge von Modulen abhängen.

Es ist nicht erforderlich, den Client separat zu installieren (keine Agenten). Basierend auf dem mit dem System gelieferten SSHD-Dienst entspricht SSHD dem Ansible-Client.

Kein Server erforderlich (kein Server)

Für die Stapelverwaltung ist eine große Anzahl von Modulen erforderlich

Konfigurationsdatei/etc/ansible/ansible.cfg (in der frühen Phase ist keine Konfiguration erforderlich)

1.4 Module in Ansible anzeigen

Kopieren Sie den Code
[root@m01 ~]# ansible-doc -l

Listen Sie alle Modulinformationen auf

[root@m01 ~]# ansible-doc -s cron

Sehen Sie sich die Hilfe für das angegebene Modul an.
Kopieren Sie den Code

Kapitel 2 Ansible-Bereitstellung und -Nutzung

2.1 Ansible-Befehlssyntaxformat Ansible-Hostname/Hostgruppenname/Hostadressinformationen/alle -m (geben Sie die Modulinformationen der Anwendung an) Modulname -a (geben Sie die Aktionsinformationen an) „Welche Aktion soll ausgeführt werden?“

[root@m01 ~]# ansible oldboy -m command -a „hostname“

2.2 Ansible-Bestandsverwaltung

Die Inventardatei wird normalerweise verwendet, um die Authentifizierungsinformationen des zu verwaltenden Hosts zu definieren, z. B. den SSH-Anmeldebenutzernamen, das Kennwort und schlüsselbezogene Informationen. So konfigurieren Sie Inventardateien

Gastgeber

1. Unterstützt Platzhalter für Hostnamen und reguläre Ausdrücke, z. B. web[1:3].oldboy.com.
2. Unterstützt nicht standardmäßige SSH-Ports, z. B. web1.oldboy.com:6666.
3. Unterstützt angegebene Variablen, die verwendet werden können für individuelle Sonderkonfigurationen des Hosts, wie Login-Benutzer, Passwort usw.

Gastgebergruppe

1. Unterstützen Sie verschachtelte Gruppen, z. B. [game:children], dann werden die Gruppen unter dem Spielmodul in das Spiel einbezogen. 2.
Unterstützen Sie angegebene Variablen, z. B. [game:vars], geben Sie die Variablen unten an

Die folgenden Vorgänge werden in /etc/ansible/hosts ausgeführt

Fügen Sie dem Webserver drei Hosts hinzu

[Webserver]

web1.oldboy.com

web2.oldboy.com

web3.oldboy.com

Drei Hosts zum Webserver hinzufügen [gering verbesserte Version]

[Webserver]

web[1:3].oldboy.com

Drei Hosts zum Webserver hinzufügen [Passwortversion]

[Webserver]

web1.oldboy.com ansible_ssh_pass='123456'

web2.oldboy.com ansible_ssh_pass='123456'

web3.oldboy.com ansible_ssh_pass='123456'

Drei Hosts zum Webserver hinzufügen [Passwort-verbesserte Version]

[Webserver]

web[1:3].oldboy.com ansible_ssh_pass='123456'

Drei Hosts zum Webserver hinzufügen [Passwort-Split-Version]

[Webserver]

web1.oldboy.com

web2.oldboy.com

web3.oldboy.com

[Webserver:vars]

ansible_ssh_pass='123456'

Definieren Sie mehrere Gruppen und fassen Sie mehrere Gruppen zusammen und integrieren Sie sie

[Apache]

web1.oldboy.com

web2.oldboy.com

web3.oldboy.com

[Apache:vars]

ansible_ssh_pass='123456'

[nginx]

10.0.0.7

10.0.0.31

10.0.0.41

10.0.0.61

[nginx:vars]

ansible_ssh_pass='123456'

Die Webservergruppe umfasst zwei Untergruppen [apapche, nginx]

[Webserver:Kinder]

Apache

Nginx

ansible nginx --list-hosts

ansible apache --list-hosts

ansible websers --list-hosts
Code kopieren
2.3 Ansible-Installationskonfiguration

Implementieren Sie die Schlüsselauthentifizierung von der Verwaltungsmaschine m01 zu anderen Maschinen

veranschaulichen:

Die Funktion von ansible implementiert einen Remoteverbindungsdienst basierend auf SSH

Die Verwendung von Ansible erfordert zunächst die Implementierung einer SSH-Schlüsselverbindung

Ansible verwendet die Batch-Verwaltung mit öffentlichen Schlüsseln

Der eigentliche Ausführungsprozess der Verteilung des öffentlichen Schlüssels des SSH-Dienstes

Code kopieren
①. Der Verwaltungsserver erstellt einen privaten Schlüssel und einen öffentlichen Schlüssel (Schlüsselpaar).

②. Übertragen und kopieren Sie die öffentliche Schlüsseldatei aus der Ferne an den entsprechenden Benutzer des verwalteten Servers ~/.ssh/id_dsa.pub und ändern Sie die Berechtigungen des .ssh-Verzeichnisses auf 700

③. Ändern Sie den Namen der öffentlichen Schlüsseldatei in „authorized_keys“ und die Autorisierungsberechtigung in „600“.

④. Verwenden Sie die Konfigurationsparameter der SSH-Dienstkonfigurationsdatei, um die Datei „authorized_keys“ mit dem öffentlichen Schlüssel zu identifizieren

⑤. Implementieren Sie dann die schlüsselbasierte Remote-Anmeldung am Server (passwortfreie Anmeldung/nicht interaktive Anmeldung).
Kopieren Sie den Code.
Kopieren Sie den Code
-P gibt das Passwort an -f gibt den Speicherort an.

[root@m01 ~]# ssh-keygen -t rsa

Drücken Sie einfach bis zum Ende die Eingabetaste

Generieren eines öffentlichen/privaten DSA-Schlüsselpaars.

Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_dsa): #Der Pfad zum Speichern des privaten Schlüssels nach seiner Erstellung

Verzeichnis „/root/.ssh“ erstellt.

Passphrase eingeben (leer für keine Passphrase): #Muss der private Schlüssel verschlüsselt werden? Legen Sie das Passwort fest

Geben Sie dieselbe Passphrase erneut ein: #Muss der private Schlüssel verschlüsselt werden? Geben Sie das Passwort zur Bestätigung erneut ein.

ssh-keygen -P "" -f ~/.ssh/id_rsa Passwort nicht interaktiv erstellen

[root@m01 ~]# ll .ssh/

insgesamt 8

-rw------- 1 root root 1679 11. September 03:15 id_rsa #Privaten Schlüssel erstellt

-rw-r–r-- 1 root root 390 11. September 03:15 id_rsa.pub #Öffentlicher Schlüssel erstellt

#Verwenden Sie Nicht-Exchange-Tools, um eine Batch-Verteilung öffentlicher Schlüssel und Batch-Management-Server zu erreichen

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

-i gibt die zu verteilende öffentliche Schlüsseldatei und Pfadinformationen an

[Benutzer@] Als zu verteilender Benutzer

Maschine An welchen Host wird der öffentliche Schlüssel verteilt, die IP-Adresse des Remote-Hosts
Code kopieren
2.3.1 Ansible installieren

Code kopieren
[root@m01 ~]# yum install ansible -y

Überprüfen Sie die Ansible-Version

[root@m01 ~]# ansible --version

Ansible 2.6.1
Code kopieren
2.3.2 Ansible konfigurieren

Ändern Sie nach Abschluss der Softwareinstallation die Hosts-Datei unter Ansible und achten Sie auf den Pfad der Datei.

Code kopieren
[root@m01 ~]# vim /etc/ansible/hosts

[alter Junge]

172.16.1.31

172.16.1.41 Der Name im
kopierten Code [] stellt den Gruppennamen dar

Der Host-Teil kann durch Domänennamen, Hostnamen und IP-Adressen dargestellt werden; im Allgemeinen werden bei dieser Art von Konfiguration häufig IP-Adressen verwendet;

Die Hostadresse unter dem Gruppennamen ist die Adresse, die Ansible verwalten kann.

Zu diesem Zeitpunkt wurde der Ansible-Dienst bereitgestellt.

2.3.3 Ansible überprüfen

Ansible erkennt die Kommunikation über den SSH-Port

Code kopieren
[root@m01 ~]# ansible oldboy -m ping

10.0.0.30 | ERFOLGREICH => {

"changed": false,

"ping": "pong"

}

10.0.0.40 | ERFOLGREICH => {

"changed": false,

"ping": "pong"

}
Kopieren Sie
die Dateien unter Code 2.4/etc/ansible

Code kopieren
[root@m01 ansible]# ll

insgesamt 28

-rw-r–r-- 1 root root 18066 6. September 06:38 ansible.cfg #ansible-Konfigurationsdatei

-rw-r–r-- 1 root root 1016 Sep 6 06:38 hosts #Definieren Sie Hostinformationen, die Ansible verwalten kann

drwxr-xr-x 2 root root 4096 6. September 06:38 Rollen #Wird hauptsächlich bei der Bereitstellung mehrerer Hosts während der Automatisierung verwendet.
Code kopieren
2.5 Integrierte Ansible-Variablen

2.6 Gemeinsame Ansible-Module

In Ansible bezieht es sich auf einen Befehl, der schnell ausgeführt werden muss und nicht gespeichert werden muss. Bei komplexen Befehlen handelt es sich um ein Playbook.

Ansible Notes->Prompt-Farbinformationsbeschreibung

Gelb: Am Remote-Knoten werden entsprechende Änderungen vorgenommen.
Grün: Am Remote-Knoten werden keine entsprechenden Änderungen vorgenommen oder die Informationen zum Remote-Knoten werden nur angezeigt.
Rot: Es liegt eine Anomalie im Befehl zur Operationsausführung vor. Lila
: Zeigt eine Warnmeldung an wird für die Befehlsausführung ausgegeben (mögliche Probleme werden Ihnen mitgeteilt. Einige Vorschläge)

2.6.1 Befehl und Shell

Kopieren Sie den Code des Standardmoduls
des Befehlsmoduls
und führen Sie den Befehl aus

[root@m01 ~]# ansible oldboy -a „hostname“

Shell-Modul
Wenn Sie einige Rohrleitungsoperationen benötigen, verwenden Sie Shell

[root@m01 ~]# ansible oldboy -m shell -a „ifconfig|grep eth0“ -f 50

-f =forks /etc/ansible/ansible.cfg #Die Anzahl der zurückgegebenen Ergebnisse

Code kopieren

2.6.2 leckeres Installationsmodul

Schieben Sie die Skriptdatei auf die Fernbedienung und führen Sie die Skriptdatei remote aus

Code kopieren
[root@m01 ~]# ansible oldboy -m yum -a „name=httpd state=installed“

name – Geben Sie den Namen des zu installierenden Pakets an

state – gibt die Methode an, die yum verwenden soll

installed,present   ---安装软件包

removed,absent      ---移除软件包

latest               ---安装最新软件包

Code kopieren
2.6.3 Modul kopieren

Push-Dateimodul

[root@m01 ~]# ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/test.txt"
Bevor Sie die Remote-Dateien übertragen und überschreiben, sichern Sie die vorhandenen Dateien auf der Remote-Seite entsprechend Sicherung der Zeitinformationen

[root@m01 ~]# ansible oldboy -m copy -a „src=/etc/hosts dest=/tmp/test.txt backup=yes“
schreibt Dateninformationen direkt in die Remote-Datei und überschreibt die Originaldateninformationen der Remote-Datei

[root@m01 ~]# ansible oldboy -m copy -a "content='bgx' dest=/tmp/oldboy"
src – Quelldateiinformationen der übertragenen Daten

dest – der Zielpfad, an den Daten gesendet werden sollen

Backup – Sichern Sie Dateien, die gepusht und übertragen wurden

Inhalt – Fügen Sie Inhalte stapelweise direkt zu verwalteten Dateien hinzu

Gruppe – Lokale Dateien an das Remote-Ende übertragen und die Gruppeninformationen der Datei angeben

Eigentümer - Lokale Dateien an das Remote-Ende übertragen und die Informationen zum Dateieigentümer angeben

Modus - Lokale Dateien an das Remote-Ende übertragen, Dateiberechtigungsinformationen angeben

2.6.4 Service-Service-Modul

[root@m01 ~]# ansible oldboy -m service -a „name=crond state=stopped activate=yes“
name – definiert den Namen des zu startenden Dienstes

state – gibt an, ob der Dienststatus „Stopp“ oder „Running“ ist. Stop- und Run-Anweisungen sollten in der Vergangenheitsform geschrieben werden.

started       --- 启动

stopped     --- 停止

restarted    --- 重启

reloaded    --- 重载

aktiviert – Gibt an, ob der Dienst automatisch gestartet werden soll

2.6.5 Skriptmodul

Skript

Code kopieren
[root@m01 ~]# mkdir -p /server/scripts

[root@m01 ~]# cat /server/scripts/yum.sh

#!/usr/bin/bash

yum install -y iftop
kopiert den Code,
um das Modul lokal auszuführen, was einer Remote-Ausführung entspricht. Es ist nicht erforderlich, die Skriptdatei zur Ausführung auf den Zielhost zu übertragen.

[root@m01 ~]# ansible oldboy -m script -a „/server/scripts/yum.sh“
2.6.6 Dateikonfigurationsmodul

[root@m01 ~]# ansible oldboy -m file -a „path=/tmp/oldboy state=diretory“

[root@m01 ~]# ansible oldboy -m file -a „path=/tmp/tt state=touch mode=555 Owner=root group=root“

[root@m01 ~]# ansible oldboy -m file -a „src=/tmp/tt path=/tmp/tt_link state=link“
Pfad – Geben Sie Informationen zum Remote-Hostverzeichnis oder zur Datei an

recurse – rekursive Autorisierung

Zustand -

directory   --- 在远端创建目录

touch       --- 在远端创建文件

link        --- link或hard表示创建链接文件

absent      --- 表示删除文件或目录

mode        --- 设置文件或目录权限

owner       --- 设置文件或目录属主信息

group       --- 设置文件或目录属组信息

2.6.7 Gruppenmodul

name – gibt den Namen der zu erstellenden Gruppe an

gid – die GID der angegebenen Gruppe

Zustand

absent      --- 移除远端主机的组

vorhanden – Erstellen Sie eine Gruppe für Remote-Hosts (Standard)

Erstellen Sie eine Gruppe und geben Sie die GID an

[root@m01 ~]# ansible oldboy -m group -a „name=oldgirl gid=888“
2.6.8 user模块

Code kopieren
[root@m01 ~]# echo „bgx“ | openssl passwd -1 -stdin

$1 1 K me C ns K 1KmeCnsK1 K m e C n s K HGnBE86F/XkXufL.n6sEb.

[root@m01 ~]# ansible oldboy -m user -a 'name=xlw passwort="$1 1 K me C ns K 1KmeCnsK1 K m e C n s K HGnBE86F/XkXufL.n6sEb.“'

Erstellen Sie oldgirl, setzen Sie die UID auf 888 und fügen Sie die GID zu 888 hinzu

[root@m01 ~]# ansible oldboy -m user -a „name=oldgirl uid=888 group=888 shell=/sbin/nologin create_home=no“

Generieren Sie nach dem Zufallsprinzip eine verschlüsselte Zeichenfolge (-1 verwendet MD5 für die Verschlüsselung, -stdin nicht interaktiv, -salt-Verschlüsselungsparameter).

[root@m01 ~]# echo „bgx“ | openSL passwd -1 -stdin

Verschlüsselte Zeichenfolge korrigiert

[root@m01 ~]# echo „123“| openssl passwd -1 -stdin -salt 'salt

Erstellen Sie einen normalen Benutzer und konfigurieren Sie das entsprechende Benutzerpasswort

[root@m01 ~]# echo „bgx“ | openSL passwd -1 -stdin

$1 1 K me C ns K 1KmeCnsK1 K m e C n s K HGnBE86F/XkXufL.n6sEb.

[root@m01 ~]# ansible oldboy -m user -a 'name=xlw passwort="$1 765 y DG au 765yDGau7 6 5 y D G a u diDKPRoCIPMU6KEVEaPTZ0"'
Code-UID kopieren
– Geben Sie die UID des Benutzers an

Gruppe – gibt den Namen der Benutzergruppe an

Gruppen – Geben Sie zusätzliche Gruppennamen an

Passwort – Fügen Sie dem Benutzer ein Passwort hinzu

Shell – gibt die Shell für die Benutzeranmeldung an

create_home – Ob ein Home-Verzeichnis erstellt werden soll

2.6.9 Crond-Modul

Verwenden Sie den Crond-Dienst normal

[root@m01 ~]# crontab -l

          • /bin/sh /server/scripts/yum.sh
            Verwenden Sie ansible, um eine geplante Aufgabe hinzuzufügen

[root@m01 ~]# ansible oldboy -m cron -a „Minute=* Stunde=* Tag=* Monat=* Wochentag=* job='/bin/sh /server/scripts/test.sh'“

[root@m01 ~]# ansible oldboy -m cron -a "job='/bin/sh /server/scripts/test.sh'"
Legen Sie Anmerkungsinformationen für geplante Aufgaben fest, um Duplikate zu verhindern, und legen Sie den Namen fest

[root@m01 ~]# ansible oldboy -m cron -a "name='cron01' job='/bin/sh /server/scripts/test.sh'"
Löschen Sie die entsprechende geplante Aufgabe

[root@m01 ~]# ansible oldboy -m cron -a "name='ansible cron02' minute=0 stunde=0 job='/bin/sh /server/scripts/test.sh' state=absent" Kommentar entsprechender
Zeitpunkt Aufgabe zum Ungültigmachen geplanter Aufgaben

[root@m01 scripts]# ansible oldboy -m cron -a „name='ansible cron01' minute=0 stunde=0 job='/bin/sh /server/scripts/test.sh' deaktiviert=no“ minute und
Minute wann der Job ausgeführt werden soll ( 0-59, *, */2 usw. )

Stunde 时 Stunde, zu der der Job ausgeführt werden soll ( 0-23, *, */2 usw. )

Tag: Tag des Monats, an dem der Job ausgeführt werden soll (1-31, *, */2 usw.)

Monat 月 Monat des Jahres, in dem der Job ausgeführt werden soll ( 1-12, *, */2 usw. )

Wochentag und Wochentag, an dem der Job ausgeführt werden soll (0-6 für Sonntag-Samstag, * usw.)

Arbeit; etwas zu tun

Name definiert die Beschreibungsinformationen der geplanten Aufgabe

Geplante Aufgabe zum Kommentieren deaktiviert

Zustand

abwesend Geplante Aufgaben löschen

present erstellt eine geplante Aufgabe (Standard ist present)

2.6.10 Modul montieren

Nur die Montagekonfiguration wird in /etc/fstab geschrieben und der Montagevorgang wird nicht ausgeführt.

[root@m01 ~]# ansible oldboy -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=present" mountet das Gerät vorübergehend und schreibt die Mount-Informationen nach /etc
/ fstab


[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=mounted" temporäre Deinstallation, die /etc/ fstab nicht bereinigt

[root@m01 ~]# ansible web -m mount -a "src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=unmounted" deinstallieren, nicht nur vorübergehend deinstallieren, sondern auch /etc bereinigen /
fstab


[root@m01 ~]# ansible web -m mount -a „src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=absent“ vorhanden – Mount beim Einschalten, nur die Mount- Konfiguration schreiben / etc/fstab (nicht häufig verwendet)

mount – Mounten Sie das Gerät und schreiben Sie die Konfiguration in /etc/fstab

unmounten – Hängen Sie das Gerät aus und löschen Sie nicht die in /etc/fstab geschriebene Konfiguration

abwesend – Deinstallieren Sie das Gerät und bereinigen Sie die in /etc/fstab geschriebene Konfiguration

Zurück zum Anfang
Kapitel 3 Ansible-Playbook

Ein Playbook besteht aus einem oder mehreren Modulen, wobei mehrere verschiedene Module verwendet werden, um eine Sache abzuschließen.

3.1 Ansible-Softwarefunktionen

Eine Chargenverwaltung kann erreicht werden

Eine Stapelbereitstellung kann erreicht werden

Ad-hoc (Batch-Ausführungsbefehl) – für temporäre Vorgänge

ansible clsn -m command -a „hostname“ <- Beispiel für die Stapelausführung von Befehlen.
Schreiben eines Playbooks – für sich wiederholende Vorgänge

3.2 Ansible-Kernfunktionen

Kopieren Sie den Code
pyYAML ----- das Sprachformat, das von Ansible zum Schreiben von Skripten verwendet wird (Saltstack-Python).

rsync-ini-Syntax, sersync-xml-Syntax, ansible-pyYAML-Syntax

paramiko – Fernverbindung und Datenübertragung

Jinja2-----Vorlageninformationen zum Schreiben von Ansible
Copy-Code

Kapitel 3 Ansible-Playbook

Ein Playbook besteht aus einem oder mehreren Modulen, wobei mehrere verschiedene Module verwendet werden, um eine Sache abzuschließen.

3.1 Ansible-Softwarefunktionen

Eine Chargenverwaltung kann erreicht werden

Eine Stapelbereitstellung kann erreicht werden

Ad-hoc (Batch-Ausführungsbefehl) – für temporäre Vorgänge

ansible clsn -m command -a „hostname“ <- Beispiel für die Stapelausführung von Befehlen.
Schreiben eines Playbooks – für sich wiederholende Vorgänge

3.2 Ansible-Kernfunktionen

Kopieren Sie den Code
pyYAML ----- das Sprachformat, das von Ansible zum Schreiben von Skripten verwendet wird (Saltstack-Python).

rsync-ini-Syntax, sersync-xml-Syntax, ansible-pyYAML-Syntax

paramiko – Fernverbindung und Datenübertragung

Jinja2-----Vorlageninformationen zum Schreiben von Ansible-
Kopiercode
Zurück zum Anfang
Kapitel 4 Beschreibung der Regeln zum Schreiben von Skripten

4.1 YAML Drei Achsen

Vertiefung

YAML verwendet einen festen Einrückungsstil zur Darstellung der hierarchischen Struktur. Jeder Einzug besteht aus zwei Leerzeichen. Tabulatoren können nicht verwendet werden.

Doppelpunkt

Mit Ausnahme derjenigen, die mit einem Doppelpunkt enden, müssen allen anderen Doppelpunkten Leerzeichen folgen.

Bindestrich

Um ein Listenelement darzustellen, verwenden Sie einen Bindestrich gefolgt von einem Leerzeichen.

Mehrere Elemente verwenden dieselbe Einrückungsebene wie dieselbe Liste.

4.2 Skript-Schreibformat

  • hosts: 172.16.1.7 Verarbeitet den angegebenen Server (Space) hosts: (space) 172.16.1.7

    Aufgabe: Was das Skript tun wird; (Leerzeichen)(Leerzeichen)Aufgabe:

    • Name: (zwei Leerzeichen) - (Leerzeichen) Name:

      Befehl: echo hello clsn linux (vier Leerzeichen) Befehl: (Leerzeichen)

Beispiel für ein Drehbuchformat

Kopieren Sie den Code
[root@m01 ansible-playbook]# vim rsync.yaml

  • Hosts: 172.16.1.41

    Aufgaben:

    • Name: Rsync installieren

      yum: name=rsync state=installedCode kopieren
      4.3
      Skriptprüfmethode

Kopieren Sie den Code
ansible-playbook --syntax-check 01.yml

    --- 进行剧本配置信息语法检查

ansible-playbook -C 01.yml

    --- 模拟剧本执行(彩排)

Code kopieren
4.3.1 Syntaxprüfung

ansible-playbook --syntax-check

[root@m01 ansible-playbook]# ansible-playbook --syntax-check 01.yml

Playbook: 01.yml
4.3.2 Skriptausführung simulieren

Kopieren Sie den Code
ansible-playbook -C

[root@m01 ansible-playbook]# ansible-playbook -C 01.yml

Alle wiedergeben] ********************************************** ******************

AUFGABE [Fakten sammeln] ********************************************* *******

ok: [172.16.1.41]

ok: [172.16.1.8]

Hier weggelassen………

PLAY RECAP ********************************************** ****************

172.16.1.31: ok=2 geändert=0 nicht erreichbar=0 fehlgeschlagen=0

172.16.1.41: ok=2 geändert=0 nicht erreichbar=0 fehlgeschlagen=0

172.16.1.8: ok=2 geändert=0 nicht erreichbar=0 fehlgeschlagen=
0Code kopieren

.4 Beispiele für Skripte

Erweiterung des Inhalts zum Schreiben von Skripten: Mehrere Aufgaben für Aufgaben zum Schreiben von Skripten

Code kopieren

  • Gastgeber: alle

    Aufgaben:

    • Name: Netzwerk neu starten

      cron: name='restart network' minute=00 Hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'

    • Name: Synchronisierungszeit

      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"Code kopieren Inhaltserweiterung für das Schreiben von Skripten: Schreiben von Skriptaufgaben für
      mehrere
      Hosts

Code kopieren

  • Hosts: 172.16.1.7

    Aufgaben:

    • Name: Netzwerk neu starten

      cron: name='restart network' minute=00 Hour=00 job='/usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'

    • Name: Synchronisierungszeit

      cron: name='sync time' minute=*/5 job="/usr/sbin/ntpdate pool.ntp.com >/dev/null 2>&1"

  • Gastgeber: 172.16.1.31

    Aufgaben:

    • Name: IP-Adresse der Datei anzeigen

      Shell: echo $(hostname -i) >> /tmp/ip.txt
      Code kopieren
      4.5 Skript-Schreibmethode

Schreibmethode für mehrere Host-Einzelaufgaben

Multi-Host-Multitask-Schreibmethode

Multitasking-Programmiermethoden für verschiedene Hosts

Kapitel 5 Ansible-Projektfall

5.1 Umweltplanung

Sicherung des gesamten Netzwerks

Echtzeit-Backup

Rolle

Externe IP (NAT)

Intranet-IP (LAN)

Software bereitstellen

m01

eth0:10.0.0.61

eth1:172.16.1.61

ansible

Sicherung

eth0:10.0.0.41

eth1:172.16.1.41

rsync

nfs

eth0:10.0.0.31

eth1:172.16.1.31

nfs、Sersync

web01

eth0:10.0.0.7

eth1:172.16.1.7

httpd

5.2 Verzeichnisplanung

Kopieren Sie den Code
[root@m01 ~]# mkdir /etc/ansible/ansible_playbook/{file,conf,scripts} -p

[root@m01 ~]# Baum /etc/ansible/ansible_playbook/

/etc/ansible/ansible_playbook/

├── conf

└── Datei

└── Skripte
kopieren Code
-5.3-Dateien, die im Voraus vorbereitet werden müssen

5.3.1 rsync-Konfigurationsdatei

Bereiten Sie die entsprechende Konfigurationsdatei vor und speichern Sie sie in /etc/ansible/ansible_playbook/conf/

root@m01 conf]# cat /etc/ansible/ansible_playbook/conf/rsyncd.conf

uid = www

gid = www

Port = 873

fake super = ja

benutze chroot = nein

maximale Verbindungen = 200

Zeitüberschreitung = 600

Fehler ignorieren

Nur lesen = falsch

list = false

auth-Benutzer = rsync_backup

Secrets-Datei = /etc/rsync.password

Protokolldatei = /var/log/rsyncd.log

###################################

[Sicherung]

path = /backup

[Daten]

path = /dataCode
kopieren

5.3.2 NFS-Konfigurationsdatei

Bereiten Sie den Export von NFS-Konfigurationsdateien vor

[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/nfs_exports

/data/ 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

5.3.3 Sersync-Paket

Laden Sie das Sersync-Paket herunter

[root@m01 ansible_playbook]# ll /etc/ansible/ansible_playbook/file/

-rw-r–r-- 1 root root 727290 1. August 12:04 sersync.tar.gz

5.3.4 sersync-Konfigurationsdatei

Bereiten Sie die Konfigurationsdatei für die sersync-Echtzeitsynchronisierung vor

Code kopieren
[root@m01 ansible_playbook]# cat /etc/ansible/ansible_playbook/conf/confxml.xml.nfs

<?xml version="1.0"kodierung="ISO-8859-1"?>
<host hostip="localhost" port="8008"></host>

<debug start="false"/>

<fileSystem xfs="true"/>

<filter start="false">

<exclude expression="(.*)\.svn"></exclude>

<exclude expression="(.*)\.gz"></exclude>

<exclude expression="^info/*"></exclude>

<exclude expression="^static/*"></exclude>

</filter>

<inotify>

<delete start="true"/>

<createFolder start="true"/>

<createFile start="true"/>

<closeWrite start="true"/>

<moveFrom start="true"/>

<moveTo start="true"/>

<attrib start="false"/>

<modify start="false"/>

</inotify>



<sersync>

<localpath watch="/data">

    <remote ip="172.16.1.41" name="data"/>

</localpath>



<rsync>

    <commonParams params="-az"/>

    <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>

    <userDefinedPort start="false" port="874"/><!-- port=874 -->

    <timeout start="true" time="100"/><!-- timeout=100 -->

    <ssh start="false"/>

</rsync>

<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->

<crontab start="false" schedule="600"><!--600mins-->

    <crontabfilter start="false">

    <exclude expression="*.php"></exclude>

    <exclude expression="info/*"></exclude>

    </crontabfilter>

</crontab>

<plugin start="false" name="command"/>

</sersync>



<plugin name="command">

<param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix-->

<filter start="false">

    <include expression="(.*)\.php"/>

    <include expression="(.*)\.sh"/>

</filter>

</plugin>



<plugin name="socket">

<localpath watch="/opt/tongbu">

    <deshost ip="192.168.138.20" port="8009"/>

</localpath>

</plugin>

<plugin name="refreshCDN">

<localpath watch="/data0/htdocs/cms.xoyo.com/site/">

    <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>

    <sendurl base="http://pic.xoyo.com/cms"/>

    <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>

</localpath>

</plugin>

5.4 Grundlegende Umgebungsbereitstellung

Basisumgebung: einheitliche Konfiguration aller Maschinen

1. Es ist notwendig, Firewalld, Selinux, Epel Warehouse und SSH-Port zu schließen und die Grundkonfiguration zu optimieren

2. rsync und nfs-utils müssen installiert sein

3. Bereiten Sie den WWW-Benutzer vor

4. Die Passwortdatei /etc/rsync.pass muss vorbereitet werden

5. Sie müssen ein netzwerkweites Backup-Skript vorbereiten

Kopieren Sie den Code
des grundlegenden Playbook-Skripts

[root@m01 ansible_playbook]# cat base.yaml

  • Gastgeber: alle

    Aufgaben:

    • Name: Epel Repos installieren

      get_url: url=http://mirrors.aliyun.com/repo/epel-7.repo dest=/etc/yum.repos.d/epel.repo

    • Name: Rsync Nfs-Utils installieren

      Lecker: name=rsync,nfs-utils state=installed

    • Name: Gruppe WWW erstellen

      Gruppe: name=www gid=666

    • Name: Benutzer WWW erstellen

      Benutzer: name=www uid=666 group=666 create_home=no shell=/sbin/nologin

    • Name: Rsync_Client_Pass erstellen

      kopieren: content='1' dest=/etc/rsync.pass mode=600

    • Name: Skriptverzeichnis erstellen

      Datei: path=/server/scripts recurse=yes state=directory

    • Name: Push-Dateiskripte

      kopieren: src=./scripts/rsync_backup_md5.sh dest=/server/scripts/

    • Name: Crontable-Skripte

      cron: name="backup scripts" Stunde=01 Minute=00 job="/bin/bash /server/scripts/rsync_backup_md5.sh &>/dev/null"
      Code kopieren

5.5 Anwendungsumgebung: Rsync

1. Installieren Sie rsync

2. Rsync konfigurieren (Konfigurationsänderungen müssen neu geladen werden)

3. Erstellen Sie virtuelle Benutzer und passen Sie die Berechtigungen an

4. Erstellen Sie das Verzeichnis /data/ /backup

5. Starten Sie rsync

6. Konfigurieren Sie den Postfach->Absender des Postfach->Verifizierungsskripts

Kopieren Sie den Code
[root@m01 ansible_playbook]# cat rsync.yaml

  • Hosts: Backup

    Aufgaben:

    • Name: Installierter Rsync-Server

      Lecker: Name=rsync,mailx-Status=installiert

    • Name: Rsync-Server konfigurieren

      kopieren: src=./conf/rsyncd.conf dest=/etc/rsyncd.conf

      benachrichtigen: Starten Sie den Rsync-Server neu

    • Name: Virt-Benutzer erstellen

      kopieren: content='rsync_backup:1' dest=/etc/rsync.password mode=600

    • Name: Daten erstellen

      Datei: path=/data state=directory recurse=yesowner=www group=www mode=755

    • Name: Backup erstellen

      Datei: path=/backup state=directory recurse=yesowner=www group=www mode=755

    • Name: RsyncServer starten

      Dienst: Name=rsyncd-Status=gestartet, aktiviert=ja

    • Name: Push-Check-Skripte

      kopieren: src=./scripts/rsync_check_backup.sh dest=/server/scripts/

    • Name: Crond Check Scripts

      cron: name="check scripts" Stunde=05 Minute=00 job="/bin/bash /server/scripts/rsync_check_backup.sh &>/dev/null"
      Code kopieren

5.6 Anwendungsumgebung: NFS

1.Installieren Sie NFS-Utils

2. NFS konfigurieren (wenn die Konfiguration geändert wird, wird ein Neuladevorgang ausgelöst)

3. Verzeichnis erstellen und autorisieren

4. Starten

Kopieren Sie den Code
[root@m01 ansible_playbook]# cat nfs.yaml

  • Gastgeber: nfs

    Aufgaben:

    • Name: Installierter NFS-Server

      Lecker: Name=NFS-Utils-Status=installiert

    • Name: NFS-Server konfigurieren

      kopieren: src=./conf/exports dest=/etc/exports

      benachrichtigen: NFS-Server neu starten

    • Name: Freigabedaten erstellen

      Datei: path=/data state=directory recurse=yesowner=www group=www mode=755

    • Name: NFS-Server starten

      Dienst: Name=NFS-Server-Status=gestartet, aktiviert=Ja

    Bearbeiter:

    • Name: NFS-Server neu starten

      Dienst: name=nfs-server state=restartedCode
      kopieren

5.7 Anwendungsumgebung: Sersync

1. Laden Sie sersync herunter

2. Entpacken, umbenennen, konfigurieren

3. Starten

Kopieren Sie den Code
[root@m01 ansible_playbook]# cat sersync.yaml

  • Gastgeber: nfs

    Aufgaben:

    • Name: Scp Sersync

      kopieren: src=./file/sersync2.5.4_64bit_binary_stable_final.tar.gz dest=/usr/local/sersync.tar.gz

    • Name: Postleitzahl

      Shell: cd /usr/local && tar xf sersync.tar.gz && mv GNU-Linux-x86 sersync

      Argumente:

      erstellt: /usr/local/sersync

    • Name: Sersync konfigurieren

      kopieren: src=./conf/confxml.xml dest=/usr/local/sersync/

    • Name: Sersync starten

      Shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xmlCode
      kopieren

5.8 Anwendungsumgebung: WEB

Mounten Sie das freigegebene NFS-Verzeichnis

Kopieren Sie den Code
[root@m01 ansible_playbook]# cat web.yaml

  • Gastgeber: Web

    Aufgaben:

    • Name: NFS-Serverfreigabedaten bereitstellen

      mount: src=172.16.1.31:/data path=/data fstype=nfs opts=defaults state=montiertCode
      kopieren

5.9 includeinclude

Kopieren Sie den Code
[root@m01 ansible_playbook]# cat mail.yaml

  • import_playbook: base.yaml

  • import_playbook: rsync.yaml

  • import_playbook: nfs.yaml

  • import_playbook: sersync.yaml

  • import_playbook: web.yamlCode
    kopieren

5.10 Testschritte nach dem Betrieb

Snapshot-
Wiederherstellung Öffentlichen Schlüssel übertragen
Ping-Modul zum Testen
verwenden Ansible-Playbook-Test ausführen
Testen Sie die vollständige Netzwerksicherung, testen Sie, ob E-Mails gesendet werden können, und überprüfen Sie die Ergebnisse.
Testen Sie die NFS-Montage.
Testen Sie die Echtzeitsynchronisierung

Ich denke du magst

Origin blog.csdn.net/m0_57207884/article/details/119727308
Empfohlen
Rangfolge