Menyebarkan layanan Tersedia Tinggi dengan Keepalived + HAproxy di server Ubuntu

High Available memiliki nama Vietnam yang ramah yang "ketersediaan tinggi" - merujuk pada layanan, aplikasi, atau sesuatu yang selalu tersedia untuk pengguna. Di era teknologi informasi saat ini, sebuah layanan dapat memiliki puluhan penyedia yang berbeda. Oleh karena itu, untuk meningkatkan daya saing serta efisiensi bisnis, selain layanan yang baik, pemasok juga harus memastikan faktor "selalu siap melayani" dari layanan yang mereka berikan.
Bayangkan, dengan layanan surat, misalnya. Anda adalah pengguna usus beberapa layanan abc@mail, tiba-tiba hari yang indah di pagi dan bulan, Anda perlu menerima email dari pelanggan atau teman. Tetapi layanan surat tiba-tiba berhenti 404 dengan 505 jenis burung unta! Anda tidak dapat memeriksa surat yang Anda butuhkan. Kemudian Anda menghubungi pelanggan, teman, dan mengeluh bahwa Anda tidak dapat memeriksa surat Anda karena tidak berfungsi! Teman dan pelanggan Anda segera memberi Anda nasihat bahwa "Mengapa Anda tidak menggunakan surat xyzitu, itu jauh lebih baik, tidak pernah seperti itu !!". Maka, e-mail, layanan e-mail abc@mailtiba-tiba kehilangan pengguna yang setia ke tangannya xyz@mailkarena server e-mail digigit oleh mouse =)).
Untuk mencegah masalah gangguan layanan di atas, tentu saja kita harus melanjutkan untuk melakukan root kill di area pengaturan server =)). Selain tikus, ada perusahaan lain yang menyebabkan layanan kami terganggu. Sekarang prinsip abadi "tidak pernah meninggalkan telur dalam keranjang yang sama" secara maksimal. Pada artikel sebelumnya, saya menunjukkan kepada Anda bagaimana memisahkan server dan load balancing dan fail-over dengan HAproxy. Anda bisa merujuk di sini .
Dalam model yang saya terapkan pada artikel sebelumnya seperti di atas. Mudah untuk mengenali kelemahan sistem yang terletak di Brother Loadbalancer HAproxy! Jika dia tidak sengaja mati, tampaknya meningkatkan jumlah pengunjung web di latar belakang hampir tidak ada artinya dalam meningkatkan kegagalan layanan. Jadi, solusi untuk meningkatkan model tentu saja akan membangun lebih banyak HAproxy. Saat membangun lebih banyak Loadbalancers dan berjalan secara paralel, masalah lain muncul - di mana pengguna akan mengakses? Pada layanan yang sama, kami tidak dapat memberikan pengguna akses ke IP 2. Untuk mengatasi masalah itu, kami memiliki solusi yang menggunakan Virtual IP (virtual IP) untuk mengakses pengguna. Loadbalacer kami sekarang hanya akan berfungsi dengan V-IP yang sama. Ada banyak solusi untuk menyediakan fitur IP Virtual seperti UCARP, Keepalived ...

Pendahuluan yang disimpan.

Keepalived (Listen to Scorpions 'song 1)) adalah bentuk perutean "lunak" yang ditulis dalam C. Tujuannya adalah untuk menyediakan Loadbalacing dan fitur yang tersedia untuk sistem Linux. Versi pertama dirilis pada Desember 2000, sejauh ini telah mengalami 16 tahun pengembangan. Anda dapat membaca lebih lanjut di www.keepalived.org Untuk membuatnya lebih mudah untuk memahami fitur dan perilaku keepalived, kita akan langsung menuju ke pengaturan dan konfigurasi.

Instal dan konfigurasi.

Karena masalah putaran dan putaran tidak dapat menjalankan banyak mesin virtual, dan sebagian besar ..... malas, saya hanya akan membangun 2 server, dengan setiap server saya akan menginstal semua 3 layanan keepalived, HAproxy dan Apache2. Modelnya adalah sebagai berikut:
– Test1
Hostname: test1
OS: Ubuntu server 16.04
Service : Keepalived + HAproxy + Apahce2
Private IP: 172.17.3.98

– Test2
Hostname: test2
OS: Ubuntu server 16.04
Service : Keepalived + HAproxy + Apache2
Private IP: 172.17.3.99

Menginstal server:

Pada setiap server, kami pada gilirannya menginstal layanan berikut:
sudo apt-get update
sudo apt-get install apache2 
sudo apt-get keepalived 
sudo apt-get install haproxy

#hoặc lười gì gõ luôn

sudo apt-get install apache2 keepalived haproxy

Setelah instalasi, Anda dapat memeriksa versi yang diinstal dengan perintah berikut:
apache2 --v
haproxy --v
keepalived --v
Pada gilirannya setiap mesin test1 dan test2, Anda mengubah konten halaman index.htmldefault /var/www/html/index.htmluntuk mempersiapkan langkah pengujian yang mudah.Secara 😄 khusus, saya melakukan hal berikut: Pada mesin test1
sudo sh -c "test1 : 172.17.3.98  >> /var/www/index.html"
Pada mesin test2
sudo sh -c "test2 : 172.17.3.99 >> /var/www/index.html"
Akses ke 2 alamat di browser web untuk melihat hasilnya.

Config Keepalived:

Langkah 1:

Layanan Keepalived akan membantu kami membuat 1 Virtual IP untuk digunakan untuk server, dengan kata lain, server akan menggunakan IP karena kami mendefinisikan oleh Keepalived oleh diri kami sendiri, tidak menggunakan IP pada antarmuka server (diberikan karena DHCP tertentu ditugaskan sendiri oleh kami.). Untuk melakukan ini, kita perlu pergi ke file /etc/sysctl.confdan menambahkan baris berikut ke file sysctl.conf:
net.ipv4.ip_nonlocal_bind=1
Lalu Anda simpan dan keluar. Lanjutkan untuk mengeksekusi perintah yang ditetapkan dengan me-restart server atau menjalankan perintah berikut:
test1@ubuntu:~$ sudo sysctl -p
Lakukan ini satu per satu di kedua server!

Langkah 2: Config Keepalived

File konfigurasi Keepalived akan disimpan /etc/keepalived/keepalived.conf. Perhatikan jika file tidak tersedia, buat file baru. Anda dapat menggunakan editor teks apa saja di Linux. Saya akan menggunakannya di sini nano.
Di server test1
test1@ubuntu:~$ sudo nano /etc/keepalived/keepalived.conf
Isi file konten berikut:
global_defs {
  router_id test1                            #khai báo route_id của keepalived
}
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
vrrp_instance VI_1 {
  virtual_router_id 51
  advert_int 1
  priority 100
  state MASTER
  interface ens33                            #thông tin tên interface của server, bạn dùng lệnh `ifconfig` để xem và điền cho đúng
  virtual_ipaddress {
    172.17.3.222 dev ens33           #Khai báo Virtual IP cho interface tương ứng
  }
 authentication {
     auth_type PASS
     auth_pass 123456                    #Password này phải khai báo giống nhau giữa các server keepalived
     }
  track_script {
    chk_haproxy
  }
}
Sama pada mesin test2
global_defs {
  router_id test2
}
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}
vrrp_instance VI_1 {
  virtual_router_id 51
  advert_int 1
  priority 99
  state BACKUP
  interface ens33
  virtual_ipaddress {
    172.17.3.222 dev ens33
  }
authentication {
        auth_type PASS
        auth_pass 123456
        }
track_script {
    chk_haproxy
    }
  }
Setelah mendeklarasikan file keepalived.confdi kedua mesin, ingat sudo service keepalived start.
Itu harus dicatat dalam dua deklarasi di atas: Dengan mesin test1
vrrp_instance VI_1 {
  virtual_router_id 51
  advert_int 1
  priority 100
  state MASTER
  interface ens33
dan mesin test2
vrrp_instance VI_1 {
  virtual_router_id 51
  advert_int 1
  priority 99
  state BACKUP
  interface ens33
Kami melihat deklarasi dengan test1 state adalah MASTERpriority 100 Berbeda dari test2 state BACKUP danpriority 99
Deklarasi di atas berarti inisialisasi awal mesin test1 akan menjadi MASTER dan hak untuk memegang VIP 172.17.3.222 ditugaskan ke antarmuka ens33Kita dapat memeriksa dengan pernyataan bahwa kita ip addr shakan melihat yang berikut: test1 machine
test1@ubuntu:/var/log$ ip addr sh
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  link/ether 00:0c:29:f5:30:5b brd ff:ff:ff:ff:ff:ff
  inet 172.17.3.98/24 brd 172.17.3.255 scope global ens33
     valid_lft forever preferred_lft forever
  inet 172.17.3.222/32 scope global ens33
     valid_lft forever preferred_lft forever
  inet6 fe80::20c:29ff:fef5:305b/64 scope link 
     valid_lft forever preferred_lft forever
mesin test2
test2@ubuntu:/var/log$ ip addr sh
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  link/ether 00:0c:29:21:87:40 brd ff:ff:ff:ff:ff:ff
  inet 172.17.3.99/24 brd 172.17.3.255 scope global ens33
     valid_lft forever preferred_lft forever
  inet6 fe80::20c:29ff:fe21:8740/64 scope link 
     valid_lft forever preferred_lft forever

Virtual IP ditugaskan hanya untuk antarmuka ens33mesin test1 tidak ditugaskan untuk mesin test2 meskipun kami telah menyatakan pada 2 mesin. Karena inisialisasi awal test1 berperanMASTER
Selanjutnya, dengan deklarasi vrrp_scriptpada kedua mesin
vrrp_script chk_haproxy {
script "killall -0 haproxy"           #check pid của dịch vụ haproxy có tồn tại hay không
interval 2                                     #thời gian lặp lại đoạn script đơn vị là second
weight 2                                      #trọng số khấu trừ priority 2
}
track_script {
  chk_haproxy                             #khai báo tên đoạn script 
  }
Dalam file konfigurasi Keepalived dari kedua mesin, test1 dan test2 tersedia track_script- yaitu, kedua server akan menjalankan skrip memeriksa status layanan ID proses (PID) yang dinyatakan dalam skrip (di sini saya menyatakan periksa layanan haproxy). Misalkan layanan haproxy pada test1 (diinisialisasi dengan state MASTERdan priotiry 100) karena beberapa alasan tidak berfungsi, Keepalived akan mengurangi bobot (prioritas 100-2 = 98) pada mesin test1 . Kali ini prioritydari test1 akan 98dan kurang dari priority=99dinyatakan awalnya di test2 , sehingga keepalived akan mengubah status test2 dari BACKUPkota MASTERdantest2 akan tetap dinyatakan VIP.

Tes konfigurasi Keepalived

Untuk membuatnya lebih mudah untuk membayangkan, kita akan pergi untuk memeriksa keadaan awal kedua mesin, dan mencoba mematikan layanan haproxy pada mesin test1 untuk melihat apa yang terjadi.
Pada mesin test1
test1@ubuntu:~$ sudo tail /var/log/syslog -n 100
Lihat hasil yang dikembalikan bersama
Jan 24 21:58:28 ubuntu Keepalived_vrrp[21757]: VRRP_Script(chk_haproxy) succeeded
Jan 24 21:58:29 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 24 21:58:29 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) Received higher prio advert
Jan 24 21:58:29 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jan 24 21:58:30 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) forcing a new MASTER election
Jan 24 21:58:30 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) forcing a new MASTER election
Jan 24 21:58:31 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 24 21:58:32 ubuntu Keepalived_vrrp[21757]: VRRP_Instance(VI_1) Entering MASTER STATE
Sama pada mesin test2
test2@ubuntu:~$ sudo tail /var/log/syslog -n 100
Jan 24 21:58:07 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Dropping received VRRP packet...
Jan 24 21:58:28 ubuntu Keepalived_vrrp[11335]: receive a 0 auth, expecting 1!
Jan 24 21:58:28 ubuntu Keepalived_vrrp[11335]: bogus VRRP packet received on ens33 !!!
Jan 24 21:58:28 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Dropping received VRRP packet...
Jan 24 21:58:29 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jan 24 21:58:29 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jan 24 21:58:30 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received higher prio advert
Jan 24 21:58:30 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Entering BACKUP STATE
Sekarang saya akan mematikan HAproxypada test1
test1@ubuntu:~$ sudo service haproxy stop
Dan periksa test1
  test1@ubuntu:~$ sudo tail /var/log/syslog -n 100
  
Jan 24 22:46:13 ubuntu systemd[1]: Stopping HAProxy Load Balancer...
Jan 24 22:46:13 ubuntu systemd[1]: Stopped HAProxy Load Balancer.
Jan 24 22:46:14 ubuntu Keepalived_vrrp[21757]: VRRP_Script(chk_haproxy) failed
Periksa mesin test2 belum
    test2@ubuntu:~$ sudo tail /var/log/syslog -n 100
    
 Jan 24 21:58:28 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Dropping received VRRP packet...
Jan 24 21:58:29 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jan 24 21:58:29 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Jan 24 21:58:30 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Received higher prio advert
Jan 24 21:58:30 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Entering BACKUP STATE
Jan 24 22:17:01 ubuntu CRON[19914]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jan 24 22:46:15 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) forcing a new MASTER election
Jan 24 22:46:15 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) forcing a new MASTER election
Jan 24 22:46:17 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jan 24 22:46:18 ubuntu Keepalived_vrrp[11335]: VRRP_Instance(VI_1) Entering MASTER STATE
Periksa juga antarmuka mesin test2
    test2@ubuntu:~$ ip addr sh
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:21:87:40 brd ff:ff:ff:ff:ff:ff
    inet 172.17.3.99/24 brd 172.17.3.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 172.17.3.222/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe21:8740/64 scope link 
       valid_lft forever preferred_lft forever
Kita lihat di keadaan awal, mesin test1 akan MASTER STATEsementara mesin test2 akan BACKUP STATESetelah layanan HAproxy dimatikan pada test1 , test2 telah menjadi MASTERdan ditugaskan Virtual IP pada antarmuka test2 , konfigurasi keepalived telah selesai.
Sekarang kita mengkonfigurasi haproxy.

Konfigurasi HAproxy

HAproxy dalam artikel ini karena pengetahuan yang terbatas jadi saya juga ingin mendapatkan izin konfigurasi dasar cukup untuk menggunakan ^^. Secara umum, konfigurasi tidak berbeda dari posting sebelumnya. Pada gilirannya pada kedua server kami melanjutkan untuk mengedit file konfigurasi haproxy
sudo nano /etc/haproxy/haproxy.cfg
Isi file adalah sebagai berikut:
global
        daemon
        maxconn 256

    defaults
        mode http
        timeout connect 5000ms
        timeout client 50000ms
        timeout server 50000ms

    frontend http-in
        bind *:80
        default_backend app
    backend static
        balance roundrobin
        server static 172.17.3.222:80
    backend app
        balance roundrobin
        server test1 172.17.3.98:8080 check
        server test2 172.17.3.99:8080 check
Catatan: Ingatlah untuk mengganti listen portapache2 ke port lain. Karena saya menginstal semua layanan haproxy dan http yang menggunakan port 80 pada mesin yang sama sehingga akan konflik. Khususnya, di sini saya akan mengonversi port default mendengarkan apache ke 8080. Saya akan memodifikasinya di kedua server secara bergantian. Edit kedua file di setiap server sudo nano /etc/apache2/ports.confdansudo nano /etc/apache2/sites-available/000-default.conf
Oke, jadi ketika konfigurasi selesai, mari kita menguji hasilnya dengan mengunjungi V_IP. Buka browser dan ketik 172.17.3.222
F5 untuk melihat perbedaannya

Kesimpulan:

Kami telah menyelesaikan penyebaran sistem dengan toleransi kesalahan yang tinggi. Sekarang, mari kita pergi dan minum tanpa takut bahwa layanan akan setengah jalan 😄Keepalived dan HAproxy adalah alat gratis dengan banyak fitur. Di atas saya hanya menerapkan konfigurasi dasar mereka. Saya ingin belajar lebih banyak dan lebih dalam. Anda dapat merujuk ke beranda keepalived dan haproxy . Semoga kalian semua bahagia Tet😃


EmoticonEmoticon