Cluster High-Availability alias Failover-cluster (cluster aktif-pasif) adalah salah satu jenis cluster yang paling banyak digunakan di lingkungan produksi. Jenis cluster ini memberi Anda ketersediaan layanan yang berkelanjutan bahkan salah satu node cluster gagal. Jika server yang menjalankan aplikasi gagal karena suatu alasan (kegagalan perangkat keras), perangkat lunak cluster (alat pacu jantung) akan memulai ulang aplikasi di node lain.
Ketersediaan Tinggi terutama digunakan untuk database, aplikasi khusus, dan juga untuk berbagi file. Fail-over tidak hanya memulai aplikasi. Ini memiliki beberapa rangkaian operasi yang terkait dengannya seperti, memasang sistem file, mengonfigurasi jaringan, dan memulai aplikasi yang bergantung.
Lingkungan
CentOS 7 / RHEL 7 mendukung Fail-over cluster menggunakan alat pacu jantung. Di sini, kita akan melihat konfigurasi server Apache (web) sebagai aplikasi yang sangat tersedia.
Seperti yang saya katakan, fail-over adalah serangkaian operasi, jadi kita perlu mengonfigurasi sistem file dan jaringan sebagai sumber daya. Untuk sistem file, kami akan menggunakan penyimpanan bersama dari penyimpanan iSCSI.
Nama Inang | Alamat IP | OS | Tujuan |
---|---|---|---|
node1.itzgeek.local | 192.168.1.11 | CentOS 7 | Simpul Kluster 1 |
node2.itzgeek.local | 192.168.1.12 | Simpul Kluster 1 | |
server.itzgeek.local | 192.168.1.20 | Penyimpanan Bersama iSCSI | |
192.168.1.100 | IP Kluster Virtual (Apache) |
Semua berjalan di VMware Workstation.
Penyimpanan Bersama
Penyimpanan bersama adalah salah satu sumber daya penting dalam cluster ketersediaan tinggi karena menyimpan data aplikasi yang sedang berjalan. Semua node dalam cluster akan memiliki akses ke penyimpanan bersama untuk data terbaru. Penyimpanan SAN adalah penyimpanan bersama yang paling banyak digunakan di lingkungan produksi. Untuk demo ini, kami akan mengonfigurasi cluster dengan penyimpanan iSCSI untuk tujuan demonstrasi.
Instal Paket
Server iSCSI
[root@server ~]# yum install targetcli -y
Node Klaster
Saatnya untuk mengonfigurasi node cluster untuk menggunakan penyimpanan iSCSI, lakukan langkah-langkah di bawah ini pada semua node cluster Anda.
# yum install iscsi-initiator-utils -y
Setel Disk
Di sini, kami akan membuat disk LVM 10GB di server iSCSI untuk digunakan sebagai penyimpanan bersama untuk node cluster kami. Mari buat daftar disk yang tersedia yang terpasang ke server target menggunakan perintah.
[root@server ~]# fdisk -l | grep -i sd
Keluaran:
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
Dari output di atas, Anda dapat melihat bahwa sistem saya memiliki hard disk 10GB (/dev/sdb). Buat LVM dengan /dev/sdb (ganti /dev/sdb dengan nama disk Anda)
[root@server ~]# pvcreate /dev/sdb [root@server ~]# vgcreate vg_iscsi /dev/sdb [root@server ~]# lvcreate -l 100%FREE -n lv_iscsi vg_iscsi
Buat Penyimpanan Bersama
Dapatkan detail inisiator node.
cat /etc/iscsi/initiatorname.iscsi
Simpul 1:
InitiatorName=iqn.1994-05.com.redhat:b11df35b6f75
Simpul 2:
InitiatorName=iqn.1994-05.com.redhat:119eaf9252a
Masukkan perintah di bawah ini untuk mendapatkan iSCSI CLI untuk prompt interaktif.
[root@server ~]# targetcli
Keluaran:
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 ~]#
Aktifkan dan mulai ulang layanan target.
[root@server ~]# systemctl enable target [root@server ~]# systemctl restart target
Konfigurasikan firewall untuk mengizinkan lalu lintas iSCSI.
[root@server ~]# firewall-cmd --permanent --add-port=3260/tcp [root@server ~]# firewall-cmd --reload
Temukan Penyimpanan Bersama
Di kedua node cluster, temukan target menggunakan perintah di bawah ini.
# iscsiadm -m discovery -t st -p 192.168.1.20
Keluaran:
192.168.1.20:3260,1 iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5
Sekarang, login ke target dengan perintah di bawah ini.
# iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5 -p 192.168.1.20 -l
Keluaran:
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.
Mulai ulang dan aktifkan layanan inisiator.
# systemctl restart iscsid # systemctl enable iscsid
Setup Cluster Nodes
Masukan Tuan Rumah
Buat entri host pada setiap node untuk semua node. Cluster akan menggunakan nama host untuk berkomunikasi satu sama lain.
# vi /etc/hosts
Entri host akan seperti di bawah ini.
192.168.1.11 node1.itzgeek.local node1 192.168.1.12 node2.itzgeek.local node2
Penyimpanan Bersama
Pergi ke semua node Anda dan periksa apakah disk baru terlihat atau tidak. Di node saya, /dev/sdb adalah disk yang berasal dari penyimpanan iSCSI kami.
# fdisk -l | grep -i sd
Keluaran:
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
Di salah satu node Anda (Misalnya, node1), buat sistem file untuk server web Apache untuk menyimpan file situs web. Kami akan membuat sistem file dengan 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
Sekarang, pergi ke node lain dan jalankan perintah di bawah ini untuk mendeteksi sistem file baru.
[root@node2 ~]# pvscan [root@node2 ~]# vgscan [root@node2 ~]# lvscan
Terakhir, verifikasi LVM yang kita buat di node1 tersedia untuk Anda di node lain (Mis. node2) menggunakan perintah di bawah ini.
[root@node2 ~]# lvdisplay /dev/vg_apache/lv_apache
Keluaran: Anda akan melihat /dev/vg_apache/lv_apache di 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:3Jika sistem tidak menampilkan volume logis, pertimbangkan untuk me-reboot node kedua.
Instal Paket
Instal paket cluster (alat pacu jantung) di semua node menggunakan perintah di bawah ini.
# yum install pcs fence-agents-all -y
Izinkan semua aplikasi ketersediaan tinggi di firewall memiliki komunikasi yang tepat antar node. Anda dapat melewati langkah ini jika sistem tidak memiliki firewall yang terpasang.
# firewall-cmd --permanent --add-service=high-availability # firewall-cmd --add-service=high-availability
Gunakan perintah di bawah ini untuk membuat daftar aplikasi yang diizinkan di firewall.
# firewall-cmd --list-service
Keluaran:
ssh dhcpv6-client high-availability
Tetapkan kata sandi untuk pengguna hacluster. Akun pengguna ini adalah akun administrasi cluster. Kami menyarankan Anda menyetel sandi yang sama untuk semua node.
# passwd hacluster
Mulai layanan klaster. Juga, aktifkan untuk memulai secara otomatis pada startup sistem.
# systemctl start pcsd # systemctl enable pcsd
Ingatlah untuk menjalankan perintah di atas pada semua node cluster Anda.
Buat Cluster Ketersediaan Tinggi
Otorisasi node menggunakan perintah di bawah ini. Jalankan perintah di bawah ini di salah satu node untuk mengotorisasi node.
[root@node1 ~]# pcs cluster auth node1.itzgeek.local node2.itzgeek.local
Keluaran:
Username: hacluster Password: << Enter Password node1.itzgeek.local: Authorized node2.itzgeek.local: Authorized
Buat kluster.
[root@node1 ~]# pcs cluster setup --start --name itzgeek_cluster node1.itzgeek.local node2.itzgeek.local
Keluaran:
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
Aktifkan cluster untuk memulai saat startup sistem.
[root@node1 ~]# pcs cluster enable --all
Keluaran:
node1.itzgeek.local: Cluster Enabled node2.itzgeek.local: Cluster Enabled
Gunakan perintah di bawah ini untuk mendapatkan status cluster.
[root@node1 ~]# pcs cluster status
Keluaran:
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
Jalankan perintah di bawah ini untuk mendapatkan informasi mendetail tentang cluster, termasuk resource, status alat pacu jantung, dan detail node.
[root@node1 ~]# pcs status
Keluaran:
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
Perangkat Pagar
Perangkat pagar adalah perangkat keras/lunak yang membantu untuk memutuskan simpul masalah dengan mengatur ulang simpul / memutuskan penyimpanan bersama dari mengaksesnya. Cluster demo saya berjalan di atas mesin Virtual VMware, jadi saya tidak menunjukkan kepada Anda pengaturan perangkat pagar, tetapi Anda dapat mengikuti panduan ini untuk menyiapkan perangkat pagar.
Sumber Daya Klaster
Siapkan sumber daya
Server Web Apache
Instal server web Apache di kedua node.
# yum install -y httpd wget
Edit file konfigurasi.
# vi /etc/httpd/conf/httpd.conf
Tambahkan konten di bawah ini di akhir file di kedua node cluster.
<Location /server-status> SetHandler server-status Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
Sekarang kita perlu menggunakan penyimpanan bersama untuk menyimpan file konten web (HTML). Lakukan operasi di bawah ini di salah satu node.
[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
Izinkan layanan Apache di firewall di kedua node.
# firewall-cmd --permanent --add-service=http # firewall-cmd --reload
Buat Sumber Daya
Buat sumber daya sistem file untuk server Apache. Gunakan penyimpanan yang berasal dari server iSCSI.
# pcs resource create httpd_fs Filesystem device="/dev/mapper/vg_apache-lv_apache" directory="/var/www" fstype="ext4" --group apache
Keluaran:
Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')
Buat sumber daya alamat IP. Alamat IP ini akan bertindak sebagai alamat IP virtual untuk Apache dan klien akan menggunakan alamat ip ini untuk mengakses konten web alih-alih ip node individu.
# pcs resource create httpd_vip IPaddr2 ip=192.168.1.100 cidr_netmask=24 --group apache
Keluaran:
Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')
Buat sumber daya Apache yang akan memantau status server Apache dan memindahkan sumber daya ke node lain jika terjadi kegagalan.
# pcs resource create httpd_ser apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group apache
Keluaran:
Assumed agent name 'ocf:heartbeat:apache' (deduced from 'apache')
Karena kami tidak menggunakan anggar, nonaktifkan (STONITH). Anda harus menonaktifkan untuk memulai sumber daya cluster, tetapi menonaktifkan STONITH di lingkungan produksi tidak disarankan.
# pcs property set stonith-enabled=false
Periksa status cluster.
[root@node1 ~]# pcs status
Keluaran:
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
Verifikasi Cluster Ketersediaan Tinggi
Setelah cluster aktif dan berjalan, arahkan browser web ke alamat IP virtual Apache. Anda akan mendapatkan halaman web seperti di bawah ini.
Uji Cluster Ketersediaan Tinggi
Mari kita periksa failover resource node dengan menghentikan cluster pada node yang aktif.
[root@node1 ~]# pcs cluster stop node1.itzgeek.local
Kesimpulan
Itu saja. Dalam posting ini, Anda telah mempelajari cara menyiapkan cluster Ketersediaan Tinggi di CentOS 7. Beri tahu kami pendapat Anda di bagian komentar.