GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come configurare il cluster ad alta disponibilità su CentOS 7 / RHEL 7

Il cluster ad alta disponibilità, noto anche come cluster di failover (cluster attivo-passivo), è uno dei tipi di cluster più utilizzati nell'ambiente di produzione. Questo tipo di cluster fornisce la disponibilità continua dei servizi anche se uno dei nodi del cluster si guasta. Se il server che esegue l'applicazione si è guastato per qualche motivo (guasto hardware), il software del cluster (pacemaker) riavvierà l'applicazione su un altro nodo.

High-Availability viene utilizzato principalmente per database, applicazioni personalizzate e anche per la condivisione di file. Il failover non è solo l'avvio di un'applicazione. Ha alcune serie di operazioni ad esso associate come il montaggio di filesystem, la configurazione di reti e l'avvio di applicazioni dipendenti.

Ambiente

CentOS 7 / RHEL 7 supporta il cluster di failover utilizzando il pacemaker. Qui esamineremo la configurazione del server Apache (web) come applicazione ad alta disponibilità.

Come ho detto, il failover è una serie di operazioni, quindi avremmo bisogno di configurare il filesystem e le reti come risorsa. Per un filesystem, utilizzeremmo una memoria condivisa dalla memoria iSCSI.

Nome host Indirizzo IP OS Scopo
node1.itzgeek.local 192.168.1.11 CentOS 7 Nodo cluster 1
node2.itzgeek.local 192.168.1.12 Nodo cluster 1
server.itzgeek.local 192.168.1.20 Archiviazione condivisa iSCSI
192.168.1.100 IP del cluster virtuale (Apache)

Tutti sono in esecuzione su VMware Workstation.

Archiviazione condivisa

L'archiviazione condivisa è una delle risorse importanti nel cluster ad alta disponibilità in quanto contiene i dati di un'applicazione in esecuzione. Tutti i nodi in un cluster avranno accesso all'archiviazione condivisa per i dati recenti. Lo storage SAN è lo storage condiviso più utilizzato nell'ambiente di produzione. Per questa demo, configureremo un cluster con storage iSCSI a scopo dimostrativo.

Installa pacchetti

Server iSCSI

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

Nodi cluster

È il momento di configurare i nodi del cluster per utilizzare l'archiviazione iSCSI, eseguire i passaggi seguenti su tutti i nodi del cluster.

# yum install iscsi-initiator-utils -y

Disco di installazione

Qui creeremo 10 GB di disco LVM sul server iSCSI da utilizzare come memoria condivisa per i nostri nodi del cluster. Elenchiamo i dischi disponibili collegati al server di destinazione utilizzando il comando.

[root@server ~]# fdisk -l | grep -i sd

Risultato:

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

Dall'output sopra, puoi vedere che il mio sistema ha 10 GB di disco rigido (/dev/sdb). Crea un LVM con /dev/sdb (sostituisci /dev/sdb con il nome del tuo disco)

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

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

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

Crea spazio di archiviazione condiviso

Ottieni i dettagli dell'iniziatore di nodi.

cat /etc/iscsi/initiatorname.iscsi

Nodo 1:

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

Nodo 2:

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

Immettere il comando seguente per ottenere un'interfaccia a riga di comando iSCSI per un prompt interattivo.

[root@server ~]# targetcli

Risultato:

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 ~]#

Abilita e riavvia il servizio di destinazione.

[root@server ~]# systemctl enable target

[root@server ~]# systemctl restart target

Configura il firewall per consentire il traffico iSCSI.

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

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

Scopri lo spazio di archiviazione condiviso

Su entrambi i nodi del cluster, individua la destinazione utilizzando il comando seguente.

# iscsiadm -m discovery -t st -p 192.168.1.20

Risultato:

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

Ora, accedi alla destinazione con il comando seguente.

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

Risultato:

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.

Riavvia e abilita il servizio iniziatore.

# systemctl restart iscsid

# systemctl enable iscsid

Imposta i nodi del cluster

Inserimento host

Crea una voce host su ogni nodo per tutti i nodi. Il cluster utilizzerà il nome host per comunicare tra loro.

# vi /etc/hosts

Le voci dell'host saranno simili a quelle riportate di seguito.

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

Archiviazione condivisa

Vai a tutti i tuoi nodi e controlla se il nuovo disco è visibile o meno. Nei miei nodi, /dev/sdb è il disco proveniente dal nostro storage iSCSI.

# fdisk -l | grep -i sd

Risultato:

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

Su uno qualsiasi dei tuoi nodi (es, node1), crea un filesystem per il server web Apache per contenere i file del sito web. Creeremo un filesystem con LVM.

[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

Ora vai su un altro nodo ed esegui i comandi seguenti per rilevare il nuovo filesystem.

[root@node2 ~]# pvscan

[root@node2 ~]# vgscan

[root@node2 ~]# lvscan

Infine, verifica l'LVM che abbiamo creato su node1 è disponibile su un altro nodo (Es. nodo2) utilizzando il comando seguente.

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

Risultato: Dovresti vedere /dev/vg_apache/lv_apache su node2.itzgeek.local

 --- 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
Se il sistema non visualizza il volume logico, prendere in considerazione il riavvio del secondo nodo.

Installa pacchetti

Installa i pacchetti del cluster (pacemaker) su tutti i nodi usando il comando seguente.

# yum install pcs fence-agents-all -y

Consenti a tutte le applicazioni ad alta disponibilità sul firewall di avere una comunicazione adeguata tra i nodi. Puoi saltare questo passaggio se il sistema non ha firewalld installato.

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

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

Utilizzare il comando seguente per elencare le applicazioni consentite nel firewall.

# firewall-cmd --list-service

Risultato:

ssh dhcpv6-client high-availability

Imposta la password per l'utente hacluster. Questo account utente è un account di amministrazione del cluster. Ti consigliamo di impostare la stessa password per tutti i nodi.

# passwd hacluster

Avvia il servizio cluster. Inoltre, abilita l'avvio automatico all'avvio del sistema.

# systemctl start pcsd

# systemctl enable pcsd

Ricorda di eseguire i comandi precedenti su tutti i nodi del tuo cluster.

Crea un cluster ad alta disponibilità

Autorizza i nodi usando il comando sotto. Esegui il comando seguente in uno qualsiasi dei nodi per autorizzare i nodi.

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

Risultato:

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

Crea un cluster.

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

Risultato:

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

Abilita l'avvio del cluster all'avvio del sistema.

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

Risultato:

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

Utilizza il comando seguente per ottenere lo stato del cluster.

[root@node1 ~]# pcs cluster status

Risultato:

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

Esegui il comando seguente per ottenere informazioni dettagliate sul cluster, comprese le sue risorse, lo stato del pacemaker e i dettagli dei nodi.

[root@node1 ~]# pcs status

Risultato:

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

Dispositivi di scherma

Il dispositivo di recinzione è un dispositivo hardware/software che aiuta a disconnettere il nodo problematico reimpostando il nodo/scollegando l'archiviazione condivisa dall'accesso. Il mio cluster demo è in esecuzione sulla macchina virtuale VMware, quindi non ti sto mostrando una configurazione del dispositivo di scherma, ma puoi seguire questa guida per configurare un dispositivo di scherma.

Risorse del cluster

Prepara risorse

Server Web Apache

Installa il server web Apache su entrambi i nodi.

# yum install -y httpd wget

Modifica il file di configurazione.

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

Aggiungi il contenuto di seguito alla fine del file su entrambi i nodi del cluster.

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

Ora è necessario utilizzare l'archiviazione condivisa per archiviare il file di contenuto Web (HTML). Eseguire l'operazione seguente in uno qualsiasi dei nodi.

[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

Consenti il ​​servizio Apache nel firewall su entrambi i nodi.

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

# firewall-cmd --reload

Crea risorse

Crea una risorsa del filesystem per il server Apache. Usa lo spazio di archiviazione proveniente dal server iSCSI.

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

Risultato:

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

Crea una risorsa di indirizzo IP. Questo indirizzo IP fungerà da indirizzo IP virtuale per Apache e i client utilizzeranno questo indirizzo IP per accedere al contenuto Web anziché l'ip del singolo nodo.

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

Risultato:

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

Crea una risorsa Apache che monitorerà lo stato del server Apache e sposterà la risorsa su un altro nodo in caso di errore.

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

Risultato:

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

Dal momento che non stiamo usando la scherma, disabilitalo (STONITH). Devi disabilitare per avviare le risorse del cluster, ma non è consigliabile disabilitare STONITH nell'ambiente di produzione.

# pcs property set stonith-enabled=false

Controlla lo stato del cluster.

[root@node1 ~]# pcs status

Risultato:

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

Verifica cluster ad alta disponibilità

Una volta che il cluster è attivo e funzionante, punta un browser Web all'indirizzo IP virtuale di Apache. Dovresti ottenere una pagina web come quella di seguito.

Test del cluster ad alta disponibilità

Verifichiamo il failover della risorsa del nodo arrestando il cluster sul nodo attivo.

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

Conclusione

È tutto. In questo post, hai imparato come configurare un cluster ad alta disponibilità su CentOS 7. Facci sapere cosa ne pensi nella sezione commenti.


Cent OS
  1. Come configurare un'interfaccia di rete virtuale su RHEL 8 / CentOS 8

  2. CentOS / RHEL 7:come configurare il server dei nomi solo cache

  3. CentOS / RHEL 6,7 :Come configurare hugepages

  4. Come configurare il proxy in CentOS/RHEL/Fedora

  5. Come configurare la registrazione firewalld in CentOS/RHEL 8

Come configurare l'indirizzo IP statico in CentOS 8 / RHEL 8

Come installare e configurare Ansible su CentOS 8 / RHEL 8

Come configurare il server DNS (BIND) su CentOS 8 / RHEL 8

Come installare e configurare Jenkins su CentOS 8 / RHEL 8

Configura VCS su CentOS 8 | RHEL 8 passo dopo passo

Come configurare il server VNC su CentOS/RHEL 6