Zum Hauptinhalt springen

Effiziente Zeitverwaltung unter Linux: Chrony manuell und mit Ansible konfigurieren

·830 Wörter·4 min· loading · loading · ·
Linux Software
Luca-Leon Hausdörfer
Autor
Luca-Leon Hausdörfer
Hi, ich bin Fachinformatiker für Systemintegration und teile hier Projekte aus meinem Homelab sowie persönliche Einblicke – ehrlich und inspirierend.
Inhaltsverzeichnis

Zeitmanagement mit Linux: Chrony und Ansible zur Synchronisation mehrerer Server
#

In der Welt der Systemadministration ist Zeitmanagement ein entscheidender Faktor. Ein präzises Zeitprotokoll ist nicht nur für die Protokollierung wichtig, sondern auch für die reibungslose Kommunikation zwischen Servern. Hier kommt Chrony, ein flexibler Network Time Protocol (NTP) Dienst, ins Spiel. In diesem Artikel zeige ich Dir, wie du Chrony manuell installierst und konfigurierst. Als Bonus erkläre ich am Ende, wie du diese Konfiguration mit Ansible auf mehreren Servern automatisieren kannst.


Was ist Chrony?
#

Chrony ist ein moderner NTP-Client und -Server, der für eine Vielzahl von Anwendungsfällen geeignet ist. Es bietet schnelle Synchronisation, niedrigen Ressourcenverbrauch und eine hohe Genauigkeit — besonders nützlich in Umgebungen, in denen Server unzuverlässige oder wechselnde Netzwerkverbindungen haben.

Hauptvorteile von Chrony:

  • Schnelle Synchronisation: Besonders nach dem Bootvorgang.
  • Unterbrechungsfreundlich: Handhabt Verbindungen zu intermittierenden Zeitquellen effizient.
  • Kompakte Konfiguration: Einfach zu verwenden und anpassbar.

Installation und Grundkonfiguration von Chrony
#

1. Chrony installieren
#

Die Installation ist unkompliziert und erfolgt über die Paketmanager deiner Linux-Distribution:

# Auf Debian/Ubuntu
sudo apt update && sudo apt install chrony

# Auf CentOS/RHEL
sudo yum install chrony

# Auf Fedora
sudo dnf install chrony
2. Konfiguration
#

Die Hauptkonfigurationsdatei von Chrony befindet sich normalerweise unter /etc/chrony/chrony.conf. Ein einfaches Beispiel für die Synchronisation mit den Standard-NTP-Servern:

server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst

# Erlauben von lokalem Zugriff auf Zeitinformationen
allow 192.168.0.0/24 # hier kannst du dein Lokales Netz angeben

# Logs aktivieren
logdir /var/log/chrony

Nach der Anpassung der Konfiguration startest du den Dienst neu und prüfst seinen Status:

sudo systemctl restart chronyd
sudo systemctl status chronyd
3. Synchronisationsstatus prüfen
#

Mit dem Befehl chronyc kannst du die Synchronisation überprüfen:

chronyc tracking
chronyc sources

Bonus: Skalierung mit Ansible
#

Wenn du mehrere Server verwaltest, kann Ansible die Konfiguration von Chrony effizient automatisieren. Im Folgenden skizziere ich einen grundlegenden Ansatz:

1. Vorbereitung der Ansible-Struktur
#

Erstelle zunächst in ein Verzeichnis, in dem du dein Ansible Projekt erstellen willst und wechsele in dieses. Anschließend wird mit ansible-galaxy init die Rolle mit den nötigen Ordnern und Dateien erstellt:

mkdir -p ansible-project
cd ansible-project
ansible-galaxy init chrony

Du solltest nun eine Ordnerstruktur erhalten, die ungefähr so aussieht:

chrony/
├── inventory.ini --> die Datei fehlt noch und muss angelegt werden
├── playbook.yml --> diese Datei ebenfalls
├── roles/
   ├── chrony/
      ├── tasks/
         └── main.yml
      ├── handlers/
         └── main.yml
      ├── templates/
         └── chrony.conf.j2
      ├── files/
      ├── vars/
         └── main.yml
      ├── defaults/
         └── main.yml
      ├── meta/
          └── main.yml
2. Erstellen einer Inventory Datei
#

Damit du mehrere Server gleichzeitig konfigurieren kannst, benötigst du eine Inventory Datei mit den Servern, welche du ansprechen willst. Erstelle diese wie oben gezeigt und befülle sie wie folgt:

---
[chrony_servers] 
server1 ansible_host=192.168.1.100 
server2 ansible_host=192.168.1.101
3. Erstellen des Playbooks
#

Damit Ansible die Konfigurationen übernehmen kann, musst du ein Playbook erstellen und dieses wie folgt befüllen. Der Speicherort ist ebenfalls im 1. Abschnitt zu finden:

--- 
- name: Install and configure Chrony 
  hosts: chrony_servers 
  become: yes 
  roles:
   - chrony
4. Ansible-Role
#

Wir haben jetzt alles vorbereitet, um mit dem Playbook die Hosts im Inventory anzusprechen, jedoch weiß Ansible noch nicht, was genau es tun soll. Hier kommt nun die Rollenkonfiguration ins Spiel. Die Rolle kannst du im File roles/chrony/tasks/main.yml finden. Öffne dieses einfach und bearbeite es wie folgt:

---
# Remove standard NTP tools
- name: Remove standard NTP tools
  ansible.builtin.package:
    name: ntp
    state: absent

# Install Chrony
- name: Install Chrony
  ansible.builtin.package:
    name: chrony
    state: present

# Copy the Chrony configuration file
- name: Deploy Chrony configuration
  ansible.builtin.template:
    src: chrony.conf.j2
    dest: /etc/chrony/chrony.conf
    owner: root
    group: root
    mode: 0644
    backup: yes

# Restart Chrony service
- name: Restart Chrony service
  ansible.builtin.service:
    name: chronyd
    state: restarted
    enabled: yes
5. Ansible-Templates
#

Du hast im dritten Abschnitt des Task-Files sicher gesehen, dass hier ein Template verwendet wird, welches wir noch nicht erstellt / bearbeitet haben. Siehe im Templates Foleder nach, hier erstellst du dann die Datei chrony.conf.j2 und befüllst diese:

server 0.pool.ntp.org iburst
server 1.pool.ntp.org iburst
server 2.pool.ntp.org iburst

driftfile /var/lib/chrony/drift
logdir /var/log/chrony
6. Ansible-Handler
#

Jetzt brauchen wir noch einen Ansible Handler, der am Ende des Playbooks den Dienst “chrony” auch einmal startet. Auch hierzu benötigen wir noch ein File, welches sich im Handlers Verzeichnis schon befindet. Verändere es wie folgt:

---
- name: Restart chrony
  ansible.builtin.service:
  name: chronyd
  state: restarted
7. Ansible-Playbook ausführen
#

Schließlich haben wir alle Dateien und können das Playbook wie folgt ausführen:

ansible-playbook -i inventory.ini playbook.yml

Fazit
#

Chrony bietet eine flexible und effiziente Methode zur Zeitsynchronisation auf Linux-Servern. Mit der beschriebenen manuellen Methode kannst du Chrony schnell auf einem einzelnen Server konfigurieren. Wenn du jedoch eine größere Anzahl von Servern verwaltest, ist Ansible ein mächtiges Werkzeug, um Zeit zu sparen und Fehler zu minimieren. Experimentiere mit beiden Ansätzen, um die Synchronisation perfekt auf Deine Anforderungen abzustimmen.