Rabu, 26 Juni 2024

HAPROXY STATS DEBIAN 11

        Halo teman-teman pada chapter kali ini kita akan belajar untuk membuat haproxy stat, pada chapter sebelumnya kita sudah mencoba load balance nah load balance ini bisa kita monitoring menggunakan haproxy stats. Haproxy stat menggunakan tampilan GUI sehingga kita mudah untuk memonitoringnya. Konfigurasinya sangat mudah untuk mengaktifkannya kita hanya perlu menambahkan sedikit konfigurasi pada backend

root@srv-debian3:/etc/haproxy# nano haproxy.cfg


# tambahkan script dibawah ini pada backend kits 

        stats enable

        stats hide-version

        stats refresh 10s

        stats show-node

        stats auth admin:123   #user:password

        stats uri /haproxy?



root@srv-debian3:/etc/haproxy# systemctl restart haproxy.service


# verifikasi 

root@srv-debian3:/etc/haproxy# curl 192.168.100.52/haproxy?

<html><body><h1>401 Unauthorized</h1>

You need a valid user and password to access this content.

</body></html>


# nah bisa dilihat disini kita membutuhkan yang namanya user dan password yang sudah kita setting sebelumnya untuk melihat haproxy stat nya, ini digunakan agar web monitoring tetap aman

akses web server


http://192.168.100.52/haproxy?


masukkan user dan password yang diset di haproxy

Tampilan jika kita sudah berhasil 


LOAD BALANCER DEBIAN 11 DENGAN HAPROXY

Halo teman-teman pada kali ini kita akan belajar load balancer menggunakan haproxy pada debian 11, sebelum ke tutorial kita kenalkan singkat apa itu load balancer...

Load balance adalah metode pendistribusian traffic ke beberapa server yang fungsinya untuk menjaga request client agar bisa tetap dilayani oleh server. HAProxy adalah open source software untuk melakukan load balancing pada layer 4 (TCP) dan layer 7 (HTTP)

Type – type load balance :

1.round robin : mengarahkan traffic ke server utama kemudian traffic berikutnya diarahkan ke server kedua, dan berlaku seterusnya

2. least connection : sama seperti roundrobin namun dengan kelebihan yaitu jika sebuah server memiliki traffic yang besar maka permintaan data akan didistribusikan ke server yang lebih luang.

3. IP Hash / mode source : menjamin client mendapat server yang sama ketika melakukan request 

Topologi yang kita gunakan pada lab ini, kita menggunakan VirtualBox sebagai platform virtualization

# preparing dan cek connection 


# setting hosts ke semua vm 

nano /etc/hosts 

# tambahkan ip lokal dan hostname nya

192.168.100.48  srv-debian

192.168.100.50  srv-debian2

192.168.100.52  srv-debian3


# ping dari srv-debian3

root@srv-debian3:~# ping srv-debian -c 2

PING srv-debian (192.168.100.48) 56(84) bytes of data.

64 bytes from srv-debian (192.168.100.48): icmp_seq=1 ttl=64 time=3.12 ms

64 bytes from srv-debian (192.168.100.48): icmp_seq=2 ttl=64 time=0.522 ms


root@srv-debian3:~# ping srv-debian2 -c 2

PING srv-debian2 (192.168.100.50) 56(84) bytes of data.

64 bytes from srv-debian2 (192.168.100.50): icmp_seq=1 ttl=64 time=2.30 ms

64 bytes from srv-debian2 (192.168.100.50): icmp_seq=2 ttl=64 time=0.561 ms

root@srv-debian3:~# ping srv-debian3 -c 2

PING srv-debian3 (192.168.100.52) 56(84) bytes of data.

64 bytes from srv-debian3 (192.168.100.52): icmp_seq=1 ttl=64 time=0.043 ms

64 bytes from srv-debian3 (192.168.100.52): icmp_seq=2 ttl=64 time=0.065 ms 


# siapkan web server di srv-debian dan srv-debian2

root@srv-debian:~# nano /var/www/html/index.html

<center><h1> hi, ini web server 1 </h1><center>

root@srv-debian2:~# nano /var/www/html/index.html

<center><h1> hi, ini web server 1 </h1><center>



Konfigurasi Haproxy 

# install haproxy di srv-debian3

root@srv-debian3:~# apt install haproxy -y


HAProxy mode round robin

root@srv-debian3:~# cd /etc/haproxy/

root@srv-debian3:/etc/haproxy# cp haproxy.cfg haproxy.cfg.backup

root@srv-debian3:/etc/haproxy# ls

errors  haproxy.cfg  haproxy.cfg.backup


# edit file haproxy

root@srv-debian3:/etc/haproxy# nano haproxy.cfg

# tambahkan script 

frontend sysadmin

        bind *:80

        bind *:443

        default_backend kits

        option forwardfor


backend kits

        balance roundrobin

        server srv-debian  192.168.100.48:80 check

        server srv-debian2 192.168.100.50:80 check 


root@srv-debian3:/etc/haproxy# systemctl restart haproxy.service


# verifikasi 

# curl (ip srv-debian3) --- > maka server akan berpindah traffic secara bergantian

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hi, ini web server 1 </h1><center>

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hai, ini web server 2 </h1><center>

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hi, ini web server 1 </h1><center>

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hai, ini web server 2 </h1><center>


akses web server

Ketika di refresh akan berganti server kedua


HAProxy mode source atau IP Hash

root@srv-debian3:/etc/haproxy# nano haproxy.cfg


# line 44 : ubah mode round robin jadi source

        balance source 


# verifikasi 

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hi, ini web server 1 </h1><center>

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hi, ini web server 1 </h1><center>

root@srv-debian3:/etc/haproxy# curl 192.168.100.52

<center><h1> hi, ini web server 1 </h1><center>


Direfresh berkali kali pun server akan mendapat server yang sama 



Okee konfigurasi load balance kita sudah selesai, see you next chapter...



Docker Architecture & Dockerfile

Halo teman-teman section ini akan melanjutkan dari section sebelumnya yaa...

Pada docker kita akan mengenal 3 stage yaitu build, ship and run seperti yang kita pelajari di bab sebelumnya.

Build akan diwakilkan oleh Dockerfile, ship dengan Docker image lalu yang terakhir adalah run dengan Containers.

pada Docker kita akan mengenal Docker client, Docker Host, dan juga Docker registry.

Docker Client itu berupa Docker CLI /Docker API yaitu kita sebagai pengguna itu berarti docker client. Lalu Docker Host adalah docker itu sendiri berupa docker daemon, container dan images. Lalu yang terakhir adalah docker registry yaitu tempat kita menyimpan image kalo docker kita bisa mengaksesnya melalui https://hub.docker.com/ disini sudah ada image docker secara official yang sudah disediakan oleh docker dan kita juga bisa mengupload image yang kita punya juga disini.

Pada bab kali ini kita akan mempelajari tentang Dockerfile, berikut adalah ciri dari Dockerfile : 

note : 

  1. serangkaian instruksi berurutan yang dimaksudkan untuk diproses oleh daemon Docker. Ketersediaan format tersebut menggantikan sekumpulan perintah yang dimaksudkan untuk membangun image tertentu sehingga membantu menjaga semuanya tetap teratur.

  2. Seiring berjalannya waktu, ini juga telah menjadi cara utama untuk berinteraksi dengan Docker dan bermigrasi ke container secara umum.

  3. Mengenai cara kerja, setiap instruksi berurutan Dockerfile diproses secara individual dan menghasilkan file yang bertindak sebagai lapisan image docker akhir yang akan dibangun.

  4. Tumpukan lapisan berurutan tersebut, yang dikelola oleh sistem file menjadi image docker.

  5. Tujuan di balik ini adalah untuk memungkinkan caching dan memudahkan pemecahan masalah. Jika dua file Docker akan menggunakan lapisan yang sama pada tahap tertentu, daemon Docker dapat menggunakan kembali lapisan yang telah dibuat sebelumnya untuk tujuan tersebut.


Dockerfile tidak mempunyai extension jadi dia hanya dituliskan sebagai “Dockerfile”

Dockerfile berisi 3 stage yaitu Fundamental, Configuration dan Execution

Fundamental Instruction

download source file dari udemy, lalu kirim ke server melalui scp karena kita menggunakan ec2 instance jika kalian menggunakan local berarti tidak perlu : scp -i aws.pem Final+Codes.zip ubuntu@34.233.133.138:/home/ubuntu

lalu install paket unzip untuk mengekstrak file zip

lalu unzip file yang sudah kita upload tadi dengan command unzip (nama file)

jika sudah masuk ke directory Final Codes/CC_Docker/S2/D1, maka di directory inilah kita akan belajar structure docker file yang pertama yaitu fundamental.

lalu buat Dockerfile atau lebih mudahnya kita bisa cp template yang sudah disiapkan.

note : 

ARG → untuk menyimpan variabel contoh disini adalah version OS

FROM → wajib ada disetiap docker file, menentukan image apa yang akan digunakan container


lalu jika sudah kita bisa membuatnya menjadi image dengan perintah docker build -t (nama image) (path file) → disini . dikarenakan kita ingin semua file di directory tersebut dimasukan kedalam image

bisa dilihat dari proses build image maka akan akan ada step dan layer nya, 1/2 dia akan pull/download image terlebih dahulu, lalu 2/2 dia menjalankan perintah apt-get update -y sesuai dengan yang ada di Dockerfile. Jangan lupa cek image menggunakan docker images

Configuration Instruction

selanjutnya adalah struktur yang kedua yaitu configuration, sama seperti sebelumnya kita bisa membuat file baru atau copy dari template. Pindah ke directory D2

disini saya sedikit memodifikasi template yang sudah disediakan menjadi seperti ini

note : 

FROM → based image for container

RUN → command yang akan dijalankan di OS container, jadi nanti dia akan otomatis update lalu install curl, clean, dan rm sebuah directory juga membuat directory baru. tenang dia dijalankan di OS container bukan host OS milik kita.

ENV → digunakan untuk setting environment di dalam container, disini kita setting user,shell dan logname


Jika sudah kita bisa lanjut membuatnya menjadi image seperti sebelumnya dengan command docker build -t (nama image) (path) 

sama seperti sebelumnya ketika proses pembuatan image dia juga akan bertahap dan berlayer sesuai dengan Dockerfile yang kita buat. Cek dengan docker images

testing dengan membuat container dengan image tersebut, --itd(interactive, teletype, and detached). option -it agar container bisa menerima input dari user, sedangkan option -d digunakan agar container running in background.

lalu masuk ke container dengan perintah docker exec -it (nama container) bash

jika sudah berhasil masuk mari kita test 

cek environment dan juga apakah directory sudah terbuat, jika sudah kita bisa keluar dengan menggunakan perintah exit.


Expose Instructions

Lanjut ke structure yang terakhir yaitu expose, pindah ke directory D6 dan copy ataupun buat file baru sama seperti sebelumnya

isi filenya seperti berikut

note : 

FROM → based image for container

RUN → command yang akan dijalankan di OS container yaitu update, install nginx, clean dan hapus directory

EXPOSE → menunjukan listening port container 

CMD → menjalankan perintah nginx -g daemon off, dijalankan ketika container nginx dimulai


-g "daemon off;" adalah opsi khusus untuk mengonfigurasi nginx agar berjalan di foreground. Ini penting karena kontainer Docker secara default berjalan di latar belakang, dan nginx perlu berjalan di depan agar kontainer tidak segera berhenti setelah dimulai


RUN VS CMD

1. RUN Instruction

  • Tujuan: Digunakan untuk mengeksekusi perintah saat proses pembangunan (build) image Docker.

  • Waktu Eksekusi: Perintah-perintah yang ditentukan dengan RUN dieksekusi saat docker build untuk membuat lapisan baru dalam image Docker.

  • Contoh Penggunaan: Menginstal paket, menyalin file, membuat direktori, dan konfigurasi lain yang dibutuhkan selama build image.

2. CMD Instruction

  • Tujuan: Menentukan perintah default yang akan dijalankan saat sebuah kontainer berdasarkan image Docker dijalankan.

  • Waktu Eksekusi: Perintah yang ditentukan dengan CMD dieksekusi saat kontainer Docker dimulai.

  • Contoh Penggunaan: Menentukan perintah atau proses yang harus berjalan secara default dalam kontainer, seperti menjalankan aplikasi atau layanan.

Perbedaan Utama:

  • Waktu Eksekusi: RUN dieksekusi saat build image Docker, sementara CMD dieksekusi saat container Docker berjalan.

  • Tujuan: RUN digunakan untuk setup dan konfigurasi selama build image, sedangkan CMD digunakan untuk menentukan perintah default yang harus dijalankan saat kontainer dimulai.

  • Jumlah Kehadiran: Anda dapat memiliki beberapa instruksi RUN dalam Dockerfile untuk menambahkan lapisan-lapisan dalam image, tetapi hanya ada satu instruksi CMD dalam Dockerfile yang efektif. Jika ada lebih dari satu CMD, hanya yang terakhir yang akan berlaku.

lalu build image seperti sebelumnya dan cek apakah images sudah tersedia.

create container from images, docker run -itd –rm –name (nama container) -p (port luar):(port asli) (nama image)

note : opsi –rm berarti container akan langsung terhapus jika distop

untuk verifikasi akses (ip address):(port luar)


menghapus docker, kita harus stop terlebih dahulu container jika sudah maka baru bisa di hapus,disini kita hanya perlu menghapus “test-container” karena “cont_expose” akan langsung terhapus jika ke stop

bila sebelumnya kita menggunakan nginx pada kali ini kita akan mencoba menggunakan apache, move ke directory D7

ini adalah isi dari Dockerfile, coba anda analisis structure docker berikut ya guys…

jika sudah lanjut dibuat image dan analisis juga layer yang terbuat dari proses tersebut.

jika sudah buat container dan jalankan pada port 8080

lalu cek sama seperti sebelumnya.


sudah selesai ya kawan kawan, see you in the next chapter...


source : free course from udemy Docker essentials click on there

HAPROXY STATS DEBIAN 11

          Halo teman-teman pada chapter kali ini kita akan belajar untuk membuat haproxy stat, pada chapter sebelumnya kita sudah mencoba lo...