Keepalived mengonfigurasi ketersediaan tinggi dan IP mengambang di CentOS 7

Pada artikel ini, kita akan melihat konfigurasi konfigurasi failover dari dua proxy squid bagi pengguna untuk mengakses Internet dari jaringan perusahaan dengan penyeimbangan beban sederhana melalui Round Robin DNS. Untuk membangun konfigurasi failover, kami akan membuat cluster HA menggunakan tetap hidup.

Cluster HA - Ini adalah sekelompok server dengan redundansi tertanam, yang dibuat untuk meminimalkan waktu henti aplikasi, jika terjadi masalah perangkat keras atau perangkat lunak dari salah satu anggota grup. Berdasarkan definisi ini, untuk pengoperasian kluster HA, perlu untuk mengimplementasikan yang berikut:

  • Memeriksa status server;
  • Peralihan sumber daya secara otomatis jika terjadi kegagalan server;

Kedua tugas ini memungkinkan Anda untuk tetap hidup. Keepalived - daemon sistem pada sistem Linux yang memungkinkan pengorganisasian toleransi kesalahan suatu layanan dan penyeimbangan muatan. Toleransi kesalahan dicapai karena alamat IP "mengambang", yang beralih ke server cadangan jika terjadi kegagalan yang utama. Protokol digunakan untuk secara otomatis mengganti alamat IP antara server yang disimpan VRRP (Virtual Router Redundancy Protocol), standar, dijelaskan dalam RFC (https://www.ietf.org/rfc/rfc2338.txt).

Konten:

  • Prinsip-prinsip VRRP
  • Instal dan konfigurasikan keepalived pada CentOS
  • Keepalived: memantau aplikasi dan kesehatan antarmuka
  • Keepalived: pengujian failover

Prinsip-prinsip VRRP

Pertama-tama, Anda perlu mempertimbangkan teori dan definisi dasar protokol VRRP.

  • VIP - Virtual IP, alamat IP virtual yang dapat secara otomatis beralih antar server jika terjadi kegagalan;
  • Master - server tempat VIP saat ini aktif;
  • Cadangan - server tempat VIP akan beralih jika wizard gagal;
  • VRID - Virtual Router ID, server yang disatukan oleh IP virtual umum (VIP) membentuk router virtual, yang pengenal uniknya mengambil nilai dari 1 hingga 255. Server secara bersamaan dapat terdiri dari beberapa VRID, dengan alamat IP virtual unik untuk setiap VRID.

Algoritma kerja umum:

  • Server master mengirimkan paket VRRP ke alamat broadcast multicast (multicast) yang dicadangkan 224.0.0.18 dengan interval yang ditentukan, dan semua server slave mendengarkan alamat ini. Pengiriman multicast adalah ketika pengirimnya satu, dan mungkin ada banyak penerima.
    Itu penting. Agar server dapat bekerja dalam mode multicast, peralatan jaringan harus mendukung transmisi lalu lintas multicast.
  • Jika server Slave tidak menerima paket, ia memulai prosedur pemilihan Master dan jika beralih ke status Master berdasarkan prioritas, ia mengaktifkan VIP dan racun ARP serampangan. ARP serampangan adalah jenis khusus tanggapan ARP yang memperbarui tabel MAC pada sakelar yang terhubung untuk memberi tahu Anda tentang perubahan kepemilikan alamat IP virtual dan alamat mac untuk mengarahkan lalu lintas.

Instal dan konfigurasikan keepalived pada CentOS

Instalasi dan konfigurasi akan dilakukan pada contoh server proxy-serv01 dan proxy-serv02 pada Centos 7 dengan Squid diinstal. Dalam skema kami, kami akan menggunakan metode penyeimbangan beban (penyeimbangan) yang paling sederhana - Round Robin DNS. Metode ini mengasumsikan bahwa untuk satu nama beberapa alamat DNS terdaftar dalam DNS, dan klien, berdasarkan permintaan, menerima satu alamat pada suatu waktu, kemudian yang lain. Oleh karena itu, kita akan memerlukan dua alamat IP virtual yang akan didaftarkan dalam DNS dengan nama yang sama dan yang nantinya akan dihubungi klien. Diagram jaringan:

Setiap server Linux memiliki dua antarmuka jaringan fisik: eth1 dengan alamat IP putih dan akses Internet, dan eth0 pada jaringan lokal.

Berikut ini digunakan sebagai alamat IP server nyata:
192.168.2.251 - untuk proxy-server01
192.168.2.252 - untuk proxy-server02

Berikut ini digunakan sebagai alamat IP virtual yang akan secara otomatis beralih antar server jika terjadi kegagalan:
192.168.2.101
192.168.2.102

Itu penting. Saat mengatur VRRP, alamat server yang sebenarnya tidak digunakan sebagai alamat untuk IP virtual, karena, jika terjadi kegagalan, alamatnya akan dipindahkan ke yang tetangga, dan setelah restorasi, itu akan diisolasi dari jaringan. Masalahnya, untuk mengembalikan alamat Anda, Anda perlu mengirim paket ke jaringan VRRP, tetapi tidak akan ada alamat IP yang dapat dilakukan.

Instal paket keepalived di kedua server menggunakan perintah:

yum instal keepalived

Setelah instalasi selesai di kedua server, edit file konfigurasi

/etc/keepalived/keepalived.conf

Garis warna yang disorot dengan parameter berbeda:

di server proxy-serv01di server proxy-serv02

Kami akan menganalisis opsi secara lebih rinci:

  • vrrp_instance - Bagian pendefinisian instance VRRP;
  • state - state awal saat startup;
  • interface - antarmuka tempat VRRP akan dijalankan;
  • virtual_router_id - pengidentifikasi unik dari instance VRRP, harus cocok pada semua server;
  • prioritas - menetapkan prioritas saat memilih MASTER, server dengan prioritas tertinggi menjadi MASTER;
  • virtual_ipaddress - blok alamat IP virtual yang akan aktif di server dalam status MASTER. Harus cocok pada semua server dalam instance VRRP.
Catatan. Anda dapat menemukan banyak contoh di mana opsi VRRP digunakan otentikasi. Namun dalam dokumentasi tetap hidup disebutkan bahwa otentikasi dihapus dari VRRPv2 dalam spesifikasi RFC3768 (https://tools.ietf.org/html/rfc3768) pada tahun 2004, karena tidak memberikan keamanan nyata. Dianjurkan untuk menghindari menggunakan opsi ini..

Jika konfigurasi jaringan saat ini tidak memungkinkan multicast, keepalived memiliki opsi untuk menggunakan unicast, mis. mengirim paket VRRP langsung ke server yang ditentukan daftar. Untuk menggunakan unicast, Anda perlu opsi:

  • unicast_src_ip - alamat sumber untuk paket VRRP;
  • unicast_peer - blok alamat IP server yang paket VRPP akan dikirim.

Dengan demikian, konfigurasi kami mendefinisikan dua instance VRRP, proxy_ip1 dan proxy_ip2. Selama operasi normal, server proxy-serv01 akan menjadi MASTER untuk IP virtual 192.168.2.101 dan BACKUP untuk 192.168.2.102, dan server proxy-serv02 akan menjadi MASTER untuk IP virtual 192.168.2.102, dan BACKUP untuk 192.168.2.101.

Jika firewall diaktifkan di server, maka Anda perlu menambahkan aturan permisif untuk lalu lintas multicast dan protokol vrrp menggunakan iptables:

iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j MENERIMA
iptables -A INPUT -p vrrp -i eth0 -j MENERIMA

Kami mengaktifkan startup dan memulai layanan keepalived di kedua server:

systemctl memungkinkan keepalived
systemctl mulai disimpan

Setelah memulai layanan keepalived, IP virtual akan ditugaskan ke antarmuka dari file konfigurasi. Mari kita lihat alamat IP saat ini di antarmuka server eth0:

ip a show eth0

Di server proxy-serv01:

Di server proxy-serv02:

Keepalived: memantau aplikasi dan kesehatan antarmuka

Berkat protokol VRRP, dimungkinkan untuk memantau status server, misalnya, selama kegagalan fisik lengkap dari server, atau port jaringan pada server atau switch. Namun, situasi bermasalah lainnya mungkin terjadi:

  • kesalahan dalam layanan server proxy - klien yang sampai ke alamat virtual server ini akan menerima pesan di browser dengan kesalahan bahwa server proxy tidak tersedia;
  • penolakan antarmuka internet kedua - klien yang masuk ke alamat virtual server ini akan menerima pesan di browser dengan kesalahan bahwa koneksi tidak dapat dibuat.

Untuk menangani situasi di atas, kami akan menggunakan opsi berikut:

  • track_interface - memantau keadaan antarmuka, letakkan instance VRRP dalam status FAULT jika salah satu antarmuka yang tercantum dalam status BAWAH;
  • track_script - pemantauan menggunakan skrip yang seharusnya mengembalikan 0 jika verifikasi berhasil, 1 - jika verifikasi gagal.

Perbarui konfigurasi, tambahkan pemantauan antarmuka eth1 (secara default, instance VRRP akan memeriksa antarmuka yang terikat, mis. Dalam konfigurasi eth0 saat ini):

track_interface eth1 

Arahan track_script menjalankan skrip dengan parameter yang ditentukan dalam blok vrrp_script, yang memiliki format berikut:

vrrp_script interval skrip - frekuensi skrip, default 1 detik jatuh - berapa kali skrip mengembalikan nilai bukan nol, di mana untuk beralih ke kenaikan status FAULT - berapa kali skrip mengembalikan nilai nol, untuk keluar dari status batas waktu FAULT - batas waktu hingga skrip mengembalikan hasil, setelah itu mengembalikan nilai bukan nol. weight - nilai dimana prioritas server akan berkurang jika transisi ke status FAULT. Nilai default adalah 0, yang berarti bahwa server akan beralih ke status FAULT setelah eksekusi skrip yang gagal untuk berapa kali ditentukan oleh parameter jatuh.  

Konfigurasikan pemantauan kinerja Squid. Anda dapat memverifikasi bahwa prosesnya aktif menggunakan perintah:

squid -k periksa

Buat vrrp_script, dengan parameter frekuensi eksekusi setiap 3 detik. Blok ini didefinisikan di luar blok. vrrp_instance.

vrrp_script chk_squid_service script "/ usr / sbin / squid -k check" interval 3 

Tambahkan skrip kami ke pemantauan, di dalam kedua blok vrrp_instance:

track_script chk_squid_service

Sekarang, jika layanan proxy Squid gagal, alamat IP virtual akan beralih ke server lain.

Anda bisa menambahkan tindakan tambahan ketika status server berubah.

Jika Squid dikonfigurasikan untuk menerima koneksi dari antarmuka apa pun, mis. http_port 0.0.0.0 128, lalu ketika mengganti alamat IP virtual, tidak akan ada masalah, Squid akan menerima koneksi pada alamat baru. Tetapi, jika alamat IP tertentu dikonfigurasi, misalnya:

http_port 192.168.2.101 128 http_port 192.168.2.102haps128

maka Squid tidak akan tahu bahwa alamat baru telah muncul di sistem di mana Anda perlu mendengarkan permintaan dari klien. Untuk menangani situasi seperti itu, ketika Anda perlu melakukan tindakan tambahan saat mengganti alamat IP virtual, keepalived berisi kemampuan untuk mengeksekusi skrip ketika suatu peristiwa terjadi ketika keadaan server berubah, misalnya, dari MASTER ke BACKUP, atau sebaliknya. Diimplementasikan oleh opsi:

beri tahu "path ke file yang dapat dieksekusi"

Keepalived: pengujian failover

Setelah menyiapkan IP virtual, kami akan memeriksa seberapa benar pemrosesan kegagalan terjadi. Tes pertama adalah untuk mensimulasikan kegagalan salah satu server. Kami memutuskan dari jaringan antarmuka jaringan internal eth0 dari server proxy-serv01, sementara itu berhenti mengirim paket VRRP dan server proxy-serv02 harus mengaktifkan alamat IP virtual 192.168.2.101. Kami akan memeriksa hasilnya dengan perintah:

ip a show eth0

Di server proxy-serv01:

Di server proxy-serv02:

Seperti yang diharapkan, server proxy-serv02 mengaktifkan alamat IP virtual 192.168.2.101. Mari kita lihat apa yang terjadi di log dengan perintah:

cat / var / log / messages | grep -saya terus hidup

di server proxy-serv01di server proxy-serv02
Keepalived_vrrp [xxxxx]: Kernel melaporkan: antarmuka eth0 BAWAH Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasuki State FAULT Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) menghapus protokol VIP. Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Sekarang dalam status FAULT
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Transisi ke MASTER STATE
Keepalived menerima sinyal bahwa antarmuka eth0 dalam status BAWAH, dan menempatkan instance VRRP dari proxy_ip1 dalam status FAULT, membebaskan alamat IP virtual.Keepalived menempatkan instance VRRP dari proxy_ip1 dalam status MASTER, mengaktifkan alamat 192.168.2.101 pada eth0 dan mengirimkan ARP serampangan.

Dan kami akan memeriksa bahwa setelah antarmuka eth0 pada server proxy-serv01 terhubung ke jaringan, IP virtual 192.168.2.101 akan beralih kembali.

di server proxy-serv01di server proxy-serv02
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) memaksa pemilihan MASTER baru Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Transisi ke MASTER STATE Keepalived_vrrp [Keepback] VIP Keepalived_vrrp [xxxxx]: Mengirim ARP serampangan pada eth0 untuk 192.168.2.101
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Menerima iklan dengan prioritas lebih tinggi 255, milik kami 100 Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasuki BACKUP STATE Keepalived_vrrp [xxxxx]: VRRP__string).
Keepalived menerima sinyal untuk mengembalikan antarmuka eth0 dan memulai pemilihan MASTER baru untuk instance VRRP dari proxy_ip1. Setelah beralih ke negara MASTER, itu mengaktifkan alamat 192.168.2.101 pada antarmuka eth0 dan mengirimkan ARP serampangan.Keepalived menerima paket prioritas tinggi untuk instance VRRP dari proxy_ip1 dan menempatkan proxy_ip1 dalam status CADANGAN dan membebaskan alamat IP virtual.

Tes kedua adalah untuk mensimulasikan kegagalan antarmuka jaringan eksternal, untuk ini kami putuskan sambungan antarmuka jaringan eksternal eth1 dari server proxy-serv01 dari jaringan. Kami akan memeriksa hasil pemeriksaan oleh log.

di server proxy-serv01di server proxy-serv02
Keepalived_vrrp [xxxxx]: Kernel melaporkan: antarmuka eth1 BAWAH Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasuki State FAULT Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) menghapus protokol VIP. Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Sekarang dalam status FAULT
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Transisi ke MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasukkan STATE MASTER Keepalived_vrrp [xxxxx]: VRRP_Insts. Proxy Protokol. Proxy. Protokol. Keepalived_vrrp [xxxxx]: Mengirim ARP serampangan pada eth0 untuk 192.168.2.101
Keepalived menerima sinyal bahwa antarmuka eth1 dalam status BAWAH, dan menempatkan instance VRRP dari proxy_ip1 dalam status FAULT, membebaskan alamat IP virtual.Keepalived menempatkan instance VRRP dari proxy_ip1 dalam status MASTER, mengaktifkan alamat 192.168.2.101 pada eth0 dan mengirimkan ARP serampangan.

Pemeriksaan ketiga adalah tiruan dari kegagalan layanan proxy Squid, untuk ini kami akan secara manual meninggalkan layanan dengan perintah: systemctl menghentikan squid Kami akan memeriksa hasil pemeriksaan oleh log.

di server proxy-serv01di server proxy-serv02
Keepalived_vrrp [xxxxx]: VRRP_Script (chk_squid_service) gagal Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasuki STATE DAGING Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1). Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Sekarang dalam status FAULT
Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Transisi ke MASTER STATE Keepalived_vrrp [xxxxx]: VRRP_Instance (proxy_ip1) Memasukkan STATE MASTER Keepalived_vrrp [xxxxx]: VRRP_Insts. Proxy Protokol. Proxy. Protokol. Keepalived_vrrp [xxxxx]: Mengirim ARP serampangan pada eth0 untuk 192.168.2.101
Skrip pemeriksaan aktivitas layanan proxy squid gagal. Keepalived menempatkan instance VRRP dari proxy_ip1 dalam status FAULT, membebaskan alamat IP virtual.Keepalived menempatkan instance VRRP dari proxy_ip1 dalam status MASTER, mengaktifkan alamat 192.168.2.101 pada eth0 dan mengirimkan ARP serampangan.

Ketiga pemeriksaan berhasil, disimpan dengan konfigurasi yang benar. Dalam kelanjutan artikel ini, kami akan mengonfigurasi cluster HA menggunakan Pacemaker, dan mempertimbangkan spesifikasi masing-masing alat ini..

File konfigurasi akhir /etc/keepalived/keepalived.conf untuk server proxy-serv01:

vrrp_script chk_squid_service script "/ usr / sbin / squid -k periksa" interval 3 vrrp_instance proxy_ip1 state MASTER antarmuka eth0 virtual_router_id 1 prioritas 255 virtual_roadd_id 1 prioritas 255 virtual_ipaddress 192.168.2.101/24 dev eth0 label eth0: 1 track1inter_interface text1 track_inter text track_inter  vrrp_instance proxy_ip2 status antarmuka BACKUP eth0 virtual_router_id 2 prioritas 100 virtual_ipaddress 192.168.2.102/24 dev eth0 label eth0: 2 track_interface eth1 track_script chk_squid_service 

File konfigurasi akhir /etc/keepalived/keepalived.conf untuk server proxy-serv02:

vrrp_script chk_squid_service script "/ usr / sbin / squid -k check" interval 3 vrrp_instance proxy_ip1 state BACKUP antarmuka eth0 virtual_router_id 1 prioritas 100 virtual_ipaddress 192.168.2.101/24 dev eth0 label eth0: 1 eth1 track_inter ethter intertreter teks track_inter ethter antarmuka eth_ track_inter ethter interketer teks_jaringan interketer_jaringan interkejata_jaringan interkejata_jaringan interkejata_jaringan_interktk interkt_transkrip]  vrrp_instance proxy_ip2 status MASTER antarmuka eth0 virtual_router_id 2 prioritas 255 virtual_ipaddress 192.168.2.102/24 dev eth0 label eth0: 2 track_interface eth1 track_script chk_squid_service