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
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-serv01 | di 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.
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-serv01 | di 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-serv01 | di 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-serv01 | di 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-serv01 | di 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