Apa yang harus saya lakukan jika kekuatan satu server tidak cukup untuk memproses semua permintaan, dan produsen perangkat lunak tidak menyediakan untuk load balancing? Ada banyak opsi - mulai dari membeli penyeimbang beban hingga membatasi jumlah permintaan. Mana yang benar, Anda perlu melihat situasinya, dengan mempertimbangkan kondisi yang ada. Pada artikel ini kami akan memberi tahu Anda apa yang dapat dilakukan jika anggaran terbatas dan ada server gratis yang tersedia.
Sebagai sistem yang diperlukan untuk mengurangi beban pada salah satu server, kami memilih InfoWatch DLP (Information Leak Prevention System). Fitur implementasi adalah penempatan fungsi penyeimbang pada salah satu server "tempur".
Salah satu masalah yang kami temui adalah ketidakmampuan untuk menggunakan Source NAT (SNAT). Untuk apa yang dibutuhkan dan bagaimana masalah itu diselesaikan, kami akan menjelaskan lebih lanjut.
Jadi, diagram logis awal dari sistem yang ada adalah sebagai berikut:

Lalu lintas ICAP, SMTP, acara dari komputer pengguna diproses di server Traffic Monitor (TM). Pada saat yang sama, server database dengan mudah mengatasi beban setelah memproses peristiwa pada TM, tetapi beban pada TM itu sendiri besar. Ini terbukti dengan terjadinya antrian pesan pada server Device Monitor (DM), serta oleh pemuatan prosesor dan memori pada TM.
Pada pandangan pertama, jika kita menambahkan server TM lain ke skema ini, baik ICAP atau DM bisa dialihkan ke sana, tetapi kami memutuskan untuk tidak menggunakan metode ini, karena toleransi kesalahan berkurang.
Deskripsi Solusi
Dalam proses menemukan solusi yang tepat, kami memutuskan untuk menggunakan perangkat lunak yang disimpan bersama dengan LVS . Karena keepalived memecahkan masalah membuat cluster failover, itu juga dapat mengelola penyeimbang LVS.
Apa yang kami inginkan (kurangi beban pada TM dan pertahankan tingkat toleransi kesalahan saat ini) harus bekerja sesuai dengan skema berikut:

Ketika memeriksa kinerja, ternyata rakitan RedHat khusus yang diinstal pada server tidak mendukung SNAT. Dalam kasus kami, kami berencana untuk menggunakan SNAT sehingga paket dan balasan yang masuk dikirim dari alamat IP yang sama, jika tidak kita akan mendapatkan gambar berikut:

Ini tidak bisa diterima. Misalnya, server proxy, yang mengirim paket ke alamat IP Virtual (VIP), akan menunggu respons dari VIP, tetapi dalam hal ini akan berasal dari IP2 untuk sesi yang dikirim ke cadangan. Solusinya ditemukan: perlu membuat tabel routing lain pada cadangan dan menghubungkan dua server TM dengan jaringan terpisah, seperti yang ditunjukkan di bawah ini:

Pengaturan
Kami menerapkan skema dua server dengan layanan ICAP, SMTP, TCP 9100 dan load balancer yang diinstal pada salah satunya.
Kami memiliki dua server RHEL6, dari mana repositori standar dan bagian dari paket telah dihapus.
Layanan yang perlu kita keseimbangan:
β’ ICAP - tcp 1344;
β’ SMTP - tcp 25.
Layanan lalu lintas DM - tcp 9100.
Pertama, kita perlu merencanakan jaringan.
Alamat IP Virtual (VIP):
β’ IP: 10.20.20.105.
Server TM6_1:
β’ IP eksternal: 10.20.20.101;
β’ IP Internal: 192.168.1.101.
Server TM6_2:
β’ IP eksternal: 10.20.20.102;
β’ IP Internal: 192.168.1.102.
Kemudian aktifkan penerusan IP pada dua server TM. Cara melakukannya di RedHat dijelaskan di sini .
Kami memutuskan server mana yang akan kami miliki, dan yang mana - cadangannya. Biarkan master menjadi TM6_1, cadangan menjadi TM6_2.
Pada cadangan, buat tabel perutean penyeimbang baru dan aturan perutean:
[root@tm6_2 ~]echo 101 balancer >> /etc/iproute2/rt_tables [root@tm6_2 ~]ip rule add from 192.168.1.102 table balancer [root@tm6_2 ~]ip route add default via 192.168.1.101 table balancer
Perintah di atas berfungsi hingga sistem reboot. Untuk menjaga rute setelah reboot, Anda dapat memasukkannya di /etc/rc.d/rc.local , tetapi lebih baik melalui file pengaturan / etc / sysconfig / network-scripts / route-eth1 (catatan: ini menggunakan sintaks yang berbeda).
Instal keepalived di kedua server TM. Sebagai sumber distribusi, kami menggunakan rpmfind.net:
[root@tm6_1 ~]#yum install https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/keepalived-1.2.13-5.el6_6.x86_64.rpm
Dalam pengaturan yang disimpan, kami menetapkan salah satu server master, yang lain - cadangan. Kemudian kami mengatur VIP dan layanan untuk load balancing. File pengaturan biasanya terletak di sini: /etc/keepalived/keepalived.conf .
Pengaturan untuk server TM1 vrrp_sync_group VG1 { group { VI_1 } } vrrp_instance VI_1 { state MASTER interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 151 advert_int 1 authentication { auth_type PASS auth_pass example } virtual_ipaddress { 10.20.20.105 } } virtual_server 10.20.20.105 1344 { delay_loop 6 lb_algo wrr lb_kind NAT protocol TCP real_server 192.168.1.101 1344 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 1344 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.1.102 1344 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 1344 nb_get_retry 3 delay_before_retry 3 } } } virtual_server 10.20.20.105 25 { delay_loop 6 lb_algo wrr lb_kind NAT protocol TCP real_server 192.168.1.101 25 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 25 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.1.102 25 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 25 nb_get_retry 3 delay_before_retry 3 } } } virtual_server 10.20.20.105 9100 { delay_loop 6 lb_algo wrr lb_kind NAT protocol TCP real_server 192.168.1.101 9100 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 9100 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.1.102 9100 { weight 1 TCP_CHECK { connect_timeout 3 connect_port 9100 nb_get_retry 3 delay_before_retry 3 } } }
Pengaturan untuk Server TM2 vrrp_sync_group VG1 { group { VI_1 } } vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass example } virtual_ipaddress { 10.20.20.105 } }
Instal pada master LVS, yang akan menyeimbangkan lalu lintas. Untuk server kedua, tidak masuk akal untuk menginstal penyeimbang, karena dalam konfigurasi kami hanya memiliki dua server.
[root@tm6_1 ~]##yum install https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/ipvsadm-1.26-4.el6.x86_64.rpm
Penyeimbang akan dikelola oleh keepalived yang telah kami konfigurasikan.
Untuk melengkapi gambar, tambahkan keepalived ke autorun di kedua server:
[root@tm6_1 ~]#chkconfig keepalived on
Kesimpulan
Memeriksa Hasil
Jalankan keepalived di kedua server:
service keepalived start
Verifikasi ketersediaan alamat virtual VRRP
Pastikan VIP menguasai:
Dan tidak ada VIP di cadangan:
Menggunakan perintah ping, periksa ketersediaan VIP:
Sekarang Anda dapat mematikan master dan menjalankan perintah ping
lagi.
Hasilnya harus tetap sama, dan pada cadangan kita akan melihat VIP:
Periksa Penyeimbangan Layanan
Ambil SMTP, misalnya. Jalankan dua koneksi ke 10.20.20.105 secara bersamaan:
telnet 10.20.20.105 25
Pada master, kita akan melihat bahwa kedua koneksi aktif dan terhubung ke server yang berbeda:
[root@tm6_1 ~]#watch ipvsadm βLn
Dengan demikian, kami menerapkan konfigurasi gagal-aman dari layanan TM dengan pemasangan penyeimbang di salah satu server TM. Untuk sistem kami, ini mengurangi beban pada TM hingga setengahnya, yang memungkinkan kami untuk menyelesaikan masalah kurangnya penskalaan horizontal melalui sistem.
Dalam kebanyakan kasus, solusi ini diimplementasikan dengan cepat dan tanpa biaya tambahan, tetapi kadang-kadang ada sejumlah keterbatasan dan kesulitan dalam pengaturan, misalnya, ketika menyeimbangkan lalu lintas UDP.