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
- /bin/sh /server/scripts/yum.sh
-
-
-
[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
<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