Apa yang perlu dilakukan jika kuasa satu pelayan tidak mencukupi untuk memproses semua permintaan, dan pengeluar perisian tidak menyediakan pengimbangan beban? Terdapat banyak pilihan, daripada membeli pengimbang beban kepada mengehadkan bilangan permintaan. Mana satu yang betul mesti ditentukan oleh keadaan, dengan mengambil kira keadaan sedia ada. Dalam artikel ini kami akan memberitahu anda apa yang boleh anda lakukan jika belanjawan anda terhad dan anda mempunyai pelayan percuma.
Sebagai sistem yang diperlukan untuk mengurangkan beban pada salah satu pelayan, kami memilih DLP (sistem pencegahan kebocoran maklumat) daripada InfoWatch. Ciri pelaksanaan adalah penempatan fungsi pengimbang pada salah satu pelayan "tempur".
Salah satu masalah yang kami hadapi ialah ketidakupayaan untuk menggunakan Source NAT (SNAT). Mengapa ini diperlukan dan bagaimana masalah itu diselesaikan, kami akan menerangkan lebih lanjut.
Jadi, pada mulanya rajah logik sistem sedia ada kelihatan seperti ini:
Trafik ICAP, SMTP, peristiwa daripada komputer pengguna telah diproses pada pelayan Traffic Monitor (TM). Pada masa yang sama, pelayan pangkalan data mudah mengatasi beban selepas memproses peristiwa pada TM, tetapi beban pada TM itu sendiri adalah berat. Ini terbukti daripada kemunculan baris gilir mesej pada pelayan Monitor Peranti (DM), serta daripada beban CPU dan memori pada TM.
Pada pandangan pertama, jika kami menambah pelayan TM lain pada skim ini, maka sama ada ICAP atau DM boleh ditukar kepadanya, tetapi kami memutuskan untuk tidak menggunakan kaedah ini, kerana toleransi kesalahan telah dikurangkan.
Penerangan tentang penyelesaian
Dalam proses mencari penyelesaian yang sesuai, kami menyelesaikan perisian percuma
Apa yang kami ingin capai (mengurangkan beban pada TM dan mengekalkan tahap toleransi kesalahan semasa) sepatutnya berfungsi mengikut skema berikut:
Apabila menyemak kefungsian, ternyata pemasangan RedHat tersuai yang dipasang pada pelayan tidak menyokong SNAT. Dalam kes kami, kami merancang untuk menggunakan SNAT untuk memastikan bahawa paket masuk dan respons kepada mereka dihantar dari alamat IP yang sama, jika tidak, kami akan mendapat gambar berikut:
Ini tidak boleh diterima. Sebagai contoh, pelayan proksi, setelah menghantar paket ke alamat IP Maya (VIP), akan mengharapkan respons daripada VIP, tetapi dalam kes ini ia akan datang daripada IP2 untuk sesi yang dihantar ke sandaran. Penyelesaian ditemui: adalah perlu untuk mencipta jadual penghalaan lain pada sandaran dan menyambungkan dua pelayan TM dengan rangkaian berasingan, seperti ditunjukkan di bawah:
Tetapan
Kami akan melaksanakan skim dua pelayan dengan perkhidmatan ICAP, SMTP, TCP 9100 dan pengimbang beban dipasang pada salah satu daripadanya.
Kami mempunyai dua pelayan RHEL6, dari mana repositori standard dan beberapa pakej telah dialih keluar.
Perkhidmatan yang perlu kita seimbangkan:
β’ ICAP β tcp 1344;
β’ SMTP β tcp 25.
Perkhidmatan penghantaran trafik dari DM β tcp 9100.
Pertama, kita perlu merancang rangkaian.
Alamat IP maya (VIP):
β’ IP: 10.20.20.105.
Pelayan TM6_1:
β’ IP Luaran: 10.20.20.101;
β’ IP Dalaman: 192.168.1.101.
Pelayan TM6_2:
β’ IP Luaran: 10.20.20.102;
β’ IP Dalaman: 192.168.1.102.
Kemudian kami membolehkan penghantaran IP pada dua pelayan TM. Bagaimana untuk melakukan ini diterangkan pada RedHat
Kami memutuskan pelayan mana yang akan kami miliki adalah yang utama dan yang mana satu akan menjadi sandaran. Biarkan induk menjadi TM6_1, sandaran menjadi TM6_2.
Pada sandaran kami mencipta jadual penghalaan pengimbang baharu dan peraturan penghalaan:
[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
Arahan di atas berfungsi sehingga sistem dibut semula. Untuk memastikan bahawa laluan dikekalkan selepas but semula, anda boleh memasukkannya /etc/rc.d/rc.local, tetapi lebih baik melalui fail tetapan /etc/sysconfig/network-scripts/route-eth1 (nota: sintaks berbeza digunakan di sini).
Pasang keepalived pada kedua-dua pelayan TM. Kami menggunakan rpmfind.net sebagai sumber pengedaran:
[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 tetapan keepalived, kami menetapkan salah satu pelayan sebagai induk, yang lain sebagai sandaran. Kemudian kami menetapkan VIP dan perkhidmatan untuk pengimbangan beban. Fail tetapan biasanya terletak di sini: /etc/keepalived/keepalived.conf.
Tetapan untuk Pelayan 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
}
}
}
Tetapan untuk Pelayan 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
}
}
Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π½Π° master LVS, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠΊ. ΠΠ»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»Π° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊ, Ρ. ΠΊ. Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ Π½Π°Ρ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π° ΡΠ΅ΡΠ²Π΅ΡΠ°.
[root@tm6_1 ~]##yum install https://rpmfind.net/linux/centos/6.10/os/x86_64/Packages/ipvsadm-1.26-4.el6.x86_64.rpm
Pengimbang akan diuruskan oleh keepalived, yang telah kami konfigurasikan.
Untuk melengkapkan gambar, mari tambah keepalived ke autostart pada kedua-dua pelayan:
[root@tm6_1 ~]#chkconfig keepalived on
Kesimpulan
Menyemak keputusan
Mari jalankan keepalived pada kedua-dua pelayan:
service keepalived start
Menyemak ketersediaan alamat maya VRRP
Mari pastikan bahawa VIP berada di induk:
Dan tiada VIP pada sandaran:
Menggunakan arahan ping, kami akan menyemak ketersediaan VIP:
Kini anda boleh mematikan master dan menjalankan arahan itu semula ping
.
Hasilnya harus tetap sama, dan pada sandaran kita akan melihat VIP:
Menyemak pengimbangan perkhidmatan
Mari kita ambil SMTP sebagai contoh. Mari lancarkan dua sambungan ke 10.20.20.105 serentak:
telnet 10.20.20.105 25
Pada master kita harus melihat bahawa kedua-dua sambungan aktif dan disambungkan ke pelayan yang berbeza:
[root@tm6_1 ~]#watch ipvsadm βLn
Oleh itu, kami telah melaksanakan konfigurasi toleransi kesalahan perkhidmatan TM dengan memasang pengimbang pada salah satu pelayan TM. Untuk sistem kami, ini mengurangkan separuh beban pada TM, yang memungkinkan untuk menyelesaikan masalah kekurangan penskalaan mendatar menggunakan sistem.
Dalam kebanyakan kes, penyelesaian ini dilaksanakan dengan cepat dan tanpa kos tambahan, tetapi kadangkala terdapat beberapa had dan kesukaran dalam konfigurasi, sebagai contoh, apabila mengimbangi trafik UDP.
Sumber: www.habr.com