GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So konfigurieren Sie einen Hochverfügbarkeitscluster unter CentOS 7 / RHEL 7

High-Availability-Cluster, auch Failover-Cluster (Aktiv-Passiv-Cluster) genannt, ist einer der am weitesten verbreiteten Cluster-Typen in der Produktionsumgebung. Diese Art von Cluster bietet Ihnen die kontinuierliche Verfügbarkeit von Diensten, selbst wenn einer der Cluster-Knoten ausfällt. Wenn die Anwendung auf dem Server aus irgendeinem Grund ausgefallen ist (Hardwarefehler), wird die Cluster-Software (Schrittmacher) die Anwendung auf einem anderen Knoten neu starten.

Hochverfügbarkeit wird hauptsächlich für Datenbanken, benutzerdefinierte Anwendungen und auch für die gemeinsame Nutzung von Dateien verwendet. Failover ist nicht nur das Starten einer Anwendung. Es hat eine Reihe von Operationen, die damit verbunden sind, wie das Mounten von Dateisystemen, das Konfigurieren von Netzwerken und das Starten abhängiger Anwendungen.

Umgebung

CentOS 7 / RHEL 7 unterstützt Failover-Cluster mit Pacemaker. Hier betrachten wir die Konfiguration des Apache-(Web-)Servers als hochverfügbare Anwendung.

Wie gesagt, Failover ist eine Reihe von Operationen, also müssten wir Dateisystem und Netzwerke als Ressource konfigurieren. Für ein Dateisystem würden wir einen gemeinsam genutzten Speicher vom iSCSI-Speicher verwenden.

Hostname IP-Adresse Betriebssystem Zweck
node1.itzgeek.local 192.168.1.11 CentOS 7 Clusterknoten 1
node2.itzgeek.local 192.168.1.12 Clusterknoten 1
server.itzgeek.local 192.168.1.20 Gemeinsamer iSCSI-Speicher
192.168.1.100 Virtuelle Cluster-IP (Apache)

Alle laufen auf VMware Workstation.

Gemeinsamer Speicher

Gemeinsam genutzter Speicher ist eine der wichtigsten Ressourcen im Hochverfügbarkeitscluster, da er die Daten einer laufenden Anwendung enthält. Alle Knoten in einem Cluster haben Zugriff auf den gemeinsam genutzten Speicher für aktuelle Daten. SAN-Speicher ist der am weitesten verbreitete gemeinsam genutzte Speicher in der Produktionsumgebung. Für diese Demo konfigurieren wir zu Demonstrationszwecken einen Cluster mit iSCSI-Speicher.

Pakete installieren

iSCSI-Server

[root@server ~]# yum install targetcli -y

Clusterknoten

Es ist an der Zeit, Cluster-Knoten für die Verwendung von iSCSI-Speicher zu konfigurieren. Führen Sie die folgenden Schritte auf allen Ihren Cluster-Knoten aus.

# yum install iscsi-initiator-utils -y

Setup-Diskette

Hier erstellen wir 10 GB LVM-Festplatte auf dem iSCSI-Server, um sie als gemeinsam genutzten Speicher für unsere Cluster-Knoten zu verwenden. Lassen Sie uns die verfügbaren Festplatten auflisten, die mit dem Befehl.

an den Zielserver angeschlossen sind
[root@server ~]# fdisk -l | grep -i sd

Ausgabe:

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 209715199 104344576 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors

Aus der obigen Ausgabe können Sie ersehen, dass mein System über 10 GB Festplatte (/dev/sdb) verfügt. Erstellen Sie einen LVM mit /dev/sdb (ersetzen Sie /dev/sdb durch Ihren Festplattennamen)

[root@server ~]# pvcreate /dev/sdb

[root@server ~]# vgcreate vg_iscsi /dev/sdb

[root@server ~]# lvcreate -l 100%FREE -n lv_iscsi vg_iscsi

Gemeinsamen Speicher erstellen

Rufen Sie die Details des Knoteninitiators ab.

cat /etc/iscsi/initiatorname.iscsi

Knoten 1:

InitiatorName=iqn.1994-05.com.redhat:b11df35b6f75

Knoten 2:

InitiatorName=iqn.1994-05.com.redhat:119eaf9252a

Geben Sie den folgenden Befehl ein, um eine iSCSI-CLI für eine interaktive Eingabeaufforderung zu erhalten.

[root@server ~]# targetcli

Ausgabe:

targetcli shell version 2.1.fb46
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.

/> cd /backstores/block
/backstores/block> create iscsi_shared_storage /dev/vg_iscsi/lv_iscsi
Created block storage object iscsi_shared_storage using /dev/vg_iscsi/lv_iscsi.
/backstores/block> cd /iscsi
/iscsi> create
Created target iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
/iscsi> cd iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5/tpg1/acls
/iscsi/iqn.20...ad5/tpg1/acls> create iqn.1994-05.com.redhat:b11df35b6f75   << Initiator of Node 1
Created Node ACL for iqn.1994-05.com.redhat:b11df35b6f75
/iscsi/iqn.20...ad5/tpg1/acls> create iqn.1994-05.com.redhat:119eaf9252a    << Initiator of Node 1
Created Node ACL for iqn.1994-05.com.redhat:119eaf9252a
/iscsi/iqn.20...ad5/tpg1/acls> cd /iscsi/iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5/tpg1/luns
/iscsi/iqn.20...ad5/tpg1/luns> create /backstores/block/iscsi_shared_storage
Created LUN 0.
Created LUN 0->0 mapping in node ACL iqn.1994-05.com.redhat:119eaf9252a
Created LUN 0->0 mapping in node ACL iqn.1994-05.com.redhat:b11df35b6f75
/iscsi/iqn.20...ad5/tpg1/luns> cd /
/> ls
o- / ...................................................................................................... [...]
  o- backstores ........................................................................................... [...]
  | o- block ............................................................................... [Storage Objects: 1]
  | | o- iscsi_shared_storage ........................... [/dev/vg_iscsi/lv_iscsi (10.0GiB) write-thru activated]
  | |   o- alua ................................................................................ [ALUA Groups: 1]
  | |     o- default_tg_pt_gp .................................................... [ALUA state: Active/optimized]
  | o- fileio .............................................................................. [Storage Objects: 0]
  | o- pscsi ............................................................................... [Storage Objects: 0]
  | o- ramdisk ............................................................................. [Storage Objects: 0]
  o- iscsi ......................................................................................... [Targets: 1]
  | o- iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5 ....................................... [TPGs: 1]
  |   o- tpg1 ............................................................................ [no-gen-acls, no-auth]
  |     o- acls ....................................................................................... [ACLs: 2]
  |     | o- iqn.1994-05.com.redhat:119eaf9252a ................................................ [Mapped LUNs: 1]
  |     | | o- mapped_lun0 ............................................... [lun0 block/iscsi_shared_storage (rw)]
  |     | o- iqn.1994-05.com.redhat:b11df35b6f75 ............................................... [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............................................... [lun0 block/iscsi_shared_storage (rw)]
  |     o- luns ....................................................................................... [LUNs: 1]
  |     | o- lun0 ...................... [block/iscsi_shared_storage (/dev/vg_iscsi/lv_iscsi) (default_tg_pt_gp)]
  |     o- portals ................................................................................. [Portals: 1]
  |       o- 0.0.0.0:3260 .................................................................................. [OK]
  o- loopback ...................................................................................... [Targets: 0]
/> saveconfig
Configuration saved to /etc/target/saveconfig.json
/> exit
Global pref auto_save_on_exit=true
Last 10 configs saved in /etc/target/backup/.
Configuration saved to /etc/target/saveconfig.json
[root@server ~]#

Aktivieren Sie den Zieldienst und starten Sie ihn neu.

[root@server ~]# systemctl enable target

[root@server ~]# systemctl restart target

Konfigurieren Sie die Firewall, um iSCSI-Datenverkehr zuzulassen.

[root@server ~]# firewall-cmd --permanent --add-port=3260/tcp

[root@server ~]# firewall-cmd --reload

Freigegebenen Speicher entdecken

Ermitteln Sie auf beiden Cluster-Knoten das Ziel mit dem folgenden Befehl.

# iscsiadm -m discovery -t st -p 192.168.1.20

Ausgabe:

192.168.1.20:3260,1 iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5

Melden Sie sich jetzt mit dem folgenden Befehl beim Ziel an.

# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5 -p 192.168.1.20 -l

Ausgabe:

Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5, portal: 192.168.1.20,3260] successful.

Starten Sie den Initiatordienst neu und aktivieren Sie ihn.

# systemctl restart iscsid

# systemctl enable iscsid

Clusterknoten einrichten

Host-Eintrag

Machen Sie für alle Knoten auf jedem Knoten einen Host-Eintrag. Der Cluster verwendet den Hostnamen, um miteinander zu kommunizieren.

# vi /etc/hosts

Host-Einträge werden in etwa so aussehen.

192.168.1.11 node1.itzgeek.local  node1
192.168.1.12 node2.itzgeek.local  node2

Gemeinsamer Speicher

Gehen Sie zu allen Ihren Knoten und prüfen Sie, ob die neue Festplatte sichtbar ist oder nicht. In meinen Knoten ist /dev/sdb die Festplatte, die von unserem iSCSI-Speicher kommt.

# fdisk -l | grep -i sd

Ausgabe:

Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors 
/dev/sda1 * 2048 1026047 512000 83 Linux 
/dev/sda2 1026048 209715199 104344576 8e Linux LVM
Disk /dev/sdb: 10.7 GB, 10733223936 bytes, 20963328 sectors

Erstellen Sie auf einem Ihrer Knoten (z. B. Knoten1) ein Dateisystem für den Apache-Webserver, um die Website-Dateien zu speichern. Wir werden ein Dateisystem mit LVM erstellen.

[root@node1 ~]# pvcreate /dev/sdb

[root@node1 ~]# vgcreate vg_apache /dev/sdb

[root@node1 ~]# lvcreate -n lv_apache -l 100%FREE vg_apache

[root@node1 ~]# mkfs.ext4 /dev/vg_apache/lv_apache

Gehen Sie nun zu einem anderen Knoten und führen Sie die folgenden Befehle aus, um das neue Dateisystem zu erkennen.

[root@node2 ~]# pvscan

[root@node2 ~]# vgscan

[root@node2 ~]# lvscan

Überprüfen Sie schließlich den LVM, den wir auf node1 erstellt haben steht Ihnen auf einem anderen Knoten (z. B. Knoten2) mit dem folgenden Befehl zur Verfügung.

[root@node2 ~]# lvdisplay /dev/vg_apache/lv_apache

Ausgabe: Sie sollten /dev/vg_apache/lv_apache auf node2.itzgeek.local sehen

 --- Logical volume ---
  LV Path                /dev/vg_apache/lv_apache
  LV Name                lv_apache
  VG Name                vg_apache
  LV UUID                mFUyuk-xTtK-r7PV-PLPq-yoVC-Ktto-TcaYpS
  LV Write Access        read/write
  LV Creation host, time node1.itzgeek.local, 2019-07-05 08:57:33 +0530
  LV Status              available
  # open                 0
  LV Size                9.96 GiB
  Current LE             2551
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
Wenn das System das logische Volume nicht anzeigt, ziehen Sie in Betracht, den zweiten Knoten neu zu starten.

Pakete installieren

Installieren Sie Cluster-Pakete (Schrittmacher) auf allen Knoten mit dem folgenden Befehl.

# yum install pcs fence-agents-all -y

Ermöglichen Sie allen Hochverfügbarkeitsanwendungen auf der Firewall eine ordnungsgemäße Kommunikation zwischen den Knoten. Sie können diesen Schritt überspringen, wenn auf dem System keine Firewall installiert ist.

# firewall-cmd --permanent --add-service=high-availability

# firewall-cmd --add-service=high-availability

Verwenden Sie den folgenden Befehl, um die zulässigen Anwendungen in der Firewall aufzulisten.

# firewall-cmd --list-service

Ausgabe:

ssh dhcpv6-client high-availability

Legen Sie das Passwort für den Benutzer hacluster fest. Dieses Benutzerkonto ist ein Clusterverwaltungskonto. Wir empfehlen Ihnen, für alle Knoten dasselbe Passwort festzulegen.

# passwd hacluster

Starten Sie den Clusterdienst. Aktivieren Sie außerdem den automatischen Start beim Systemstart.

# systemctl start pcsd

# systemctl enable pcsd

Denken Sie daran, die obigen Befehle auf allen Ihren Cluster-Knoten auszuführen.

Erstellen Sie einen Hochverfügbarkeitscluster

Autorisieren Sie die Knoten mit dem folgenden Befehl. Führen Sie den folgenden Befehl in einem der Knoten aus, um die Knoten zu autorisieren.

[root@node1 ~]# pcs cluster auth node1.itzgeek.local node2.itzgeek.local

Ausgabe:

Username: hacluster
Password:      << Enter Password
node1.itzgeek.local: Authorized
node2.itzgeek.local: Authorized

Cluster erstellen.

[root@node1 ~]# pcs cluster setup --start --name itzgeek_cluster node1.itzgeek.local node2.itzgeek.local

Ausgabe:

Destroying cluster on nodes: node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Stopping Cluster (pacemaker)...
node2.itzgeek.local: Stopping Cluster (pacemaker)...
node2.itzgeek.local: Successfully destroyed cluster
node1.itzgeek.local: Successfully destroyed cluster

Sending 'pacemaker_remote authkey' to 'node1.itzgeek.local', 'node2.itzgeek.local'
node1.itzgeek.local: successful distribution of the file 'pacemaker_remote authkey'
node2.itzgeek.local: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
node1.itzgeek.local: Succeeded
node2.itzgeek.local: Succeeded

Starting cluster on nodes: node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Starting Cluster (corosync)...
node2.itzgeek.local: Starting Cluster (corosync)...
node1.itzgeek.local: Starting Cluster (pacemaker)...
node2.itzgeek.local: Starting Cluster (pacemaker)...

Synchronizing pcsd certificates on nodes node1.itzgeek.local, node2.itzgeek.local...
node1.itzgeek.local: Success
node2.itzgeek.local: Success
Restarting pcsd on the nodes in order to reload the certificates...
node1.itzgeek.local: Success
node2.itzgeek.local: Success

Ermöglichen Sie dem Cluster, beim Systemstart zu starten.

[root@node1 ~]# pcs cluster enable --all

Ausgabe:

node1.itzgeek.local: Cluster Enabled
node2.itzgeek.local: Cluster Enabled

Verwenden Sie den folgenden Befehl, um den Status des Clusters abzurufen.

[root@node1 ~]# pcs cluster status

Ausgabe:

Cluster Status:
 Stack: corosync
 Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
 Last updated: Fri Jul  5 09:14:57 2019
 Last change: Fri Jul  5 09:13:12 2019 by hacluster via crmd on node2.itzgeek.local
 2 nodes configured
 0 resources configured

PCSD Status:
  node1.itzgeek.local: Online
  node2.itzgeek.local: Online

Führen Sie den folgenden Befehl aus, um detaillierte Informationen über den Cluster zu erhalten, einschließlich seiner Ressourcen, des Pacemaker-Status und der Knotendetails.

[root@node1 ~]# pcs status

Ausgabe:

Cluster name: itzgeek_cluster

WARNINGS:
No stonith devices and stonith-enabled is not false

Stack: corosync
Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Fri Jul  5 09:15:37 2019
Last change: Fri Jul  5 09:13:12 2019 by hacluster via crmd on node2.itzgeek.local

2 nodes configured
0 resources configured

Online: [ node1.itzgeek.local node2.itzgeek.local ]

No resources


Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Fechtgeräte

Das Fencing-Gerät ist ein Hardware-/Softwaregerät, das hilft, den problematischen Knoten zu trennen, indem es den Knoten zurücksetzt / den gemeinsamen Speicher vom Zugriff trennt. Mein Demo-Cluster läuft auf der VMware Virtual Machine, daher zeige ich Ihnen kein Fencing-Gerät-Setup, aber Sie können dieser Anleitung folgen, um ein Fencing-Gerät einzurichten.

Cluster-Ressourcen

Ressourcen vorbereiten

Apache-Webserver

Installieren Sie den Apache-Webserver auf beiden Knoten.

# yum install -y httpd wget

Bearbeiten Sie die Konfigurationsdatei.

# vi /etc/httpd/conf/httpd.conf

Fügen Sie den folgenden Inhalt am Ende der Datei auf beiden Cluster-Knoten hinzu.

<Location /server-status>
  SetHandler server-status
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>

Jetzt müssen wir den gemeinsamen Speicher zum Speichern der Webinhaltsdatei (HTML) verwenden. Führen Sie den folgenden Vorgang in einem der Knoten aus.

[root@node2 ~]# mount /dev/vg_apache/lv_apache /var/www/

[root@node2 ~]# mkdir /var/www/html

[root@node2 ~]# mkdir /var/www/cgi-bin

[root@node2 ~]# mkdir /var/www/error

[root@node2 ~]# restorecon -R /var/www

[root@node2 ~]# cat <<-END >/var/www/html/index.html
<html>
<body>Hello, Welcome!. This Page Is Served By Red Hat Hight Availability Cluster</body>
</html>
END

[root@node2 ~]# umount /var/www

Apache-Dienst in der Firewall auf beiden Knoten zulassen.

# firewall-cmd --permanent --add-service=http

# firewall-cmd --reload

Ressourcen erstellen

Erstellen Sie eine Dateisystemressource für den Apache-Server. Verwenden Sie den Speicher, der vom iSCSI-Server kommt.

# pcs resource create httpd_fs Filesystem device="/dev/mapper/vg_apache-lv_apache" directory="/var/www" fstype="ext4" --group apache

Ausgabe:

Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')

Erstellen Sie eine IP-Adressressource. Diese IP-Adresse fungiert als virtuelle IP-Adresse für den Apache, und Clients verwenden diese IP-Adresse für den Zugriff auf den Webinhalt anstelle der IP des einzelnen Knotens.

# pcs resource create httpd_vip IPaddr2 ip=192.168.1.100 cidr_netmask=24 --group apache

Ausgabe:

Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')

Erstellen Sie eine Apache-Ressource, die den Status des Apache-Servers überwacht und die Ressource im Falle eines Fehlers auf einen anderen Knoten verschiebt.

# pcs resource create httpd_ser apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apache

Ausgabe:

Assumed agent name 'ocf:heartbeat:apache' (deduced from 'apache')

Da wir kein Fechten verwenden, deaktivieren Sie es (STONITH). Sie müssen die Cluster-Ressourcen zum Starten deaktivieren, aber das Deaktivieren von STONITH in der Produktionsumgebung wird nicht empfohlen.

# pcs property set stonith-enabled=false

Überprüfen Sie den Status des Clusters.

[root@node1 ~]# pcs status

Ausgabe:

Cluster name: itzgeek_cluster
Stack: corosync
Current DC: node2.itzgeek.local (version 1.1.19-8.el7_6.4-c3c624ea3d) - partition with quorum
Last updated: Fri Jul  5 09:26:04 2019
Last change: Fri Jul  5 09:25:58 2019 by root via cibadmin on node1.itzgeek.local

2 nodes configured
3 resources configured

Online: [ node1.itzgeek.local node2.itzgeek.local ]

Full list of resources:

 Resource Group: apache
     httpd_fs   (ocf::heartbeat:Filesystem):    Started node1.itzgeek.local
     httpd_vip  (ocf::heartbeat:IPaddr2):       Started node1.itzgeek.local
     httpd_ser  (ocf::heartbeat:apache):        Started node1.itzgeek.local

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Hochverfügbarkeitscluster überprüfen

Sobald der Cluster betriebsbereit ist, verweisen Sie einen Webbrowser auf die virtuelle IP-Adresse von Apache. Sie sollten eine Webseite wie unten sehen.

Hochverfügbarkeitscluster testen

Lassen Sie uns das Failover der Ressource des Knotens überprüfen, indem wir den Cluster auf dem aktiven Knoten stoppen.

[root@node1 ~]# pcs cluster stop node1.itzgeek.local

Schlussfolgerung

Das ist alles. In diesem Beitrag haben Sie gelernt, wie Sie einen High-Availability-Cluster unter CentOS 7 einrichten. Bitte teilen Sie uns Ihre Meinung im Kommentarbereich mit.


Cent OS
  1. So konfigurieren Sie eine virtuelle Netzwerkschnittstelle auf RHEL 8 / CentOS 8

  2. CentOS / RHEL 7 :So konfigurieren Sie den Nur-Cache-Nameserver

  3. CentOS / RHEL 6,7 :Wie man Hugepages konfiguriert

  4. So konfigurieren Sie Proxy in CentOS/RHEL/Fedora

  5. So konfigurieren Sie die Firewalld-Protokollierung in CentOS/RHEL 8

So konfigurieren Sie eine statische IP-Adresse in CentOS 8 / RHEL 8

So installieren und konfigurieren Sie Ansible unter CentOS 8 / RHEL 8

So konfigurieren Sie den DNS (BIND)-Server unter CentOS 8 / RHEL 8

So installieren und konfigurieren Sie Jenkins unter CentOS 8 / RHEL 8

Konfigurieren Sie VCS unter CentOS 8 | RHEL 8 Schritt für Schritt

So konfigurieren Sie VNC Server unter CentOS/RHEL 6