Skip to content

This repository was created to document the results of work from Practicum 3 Computer Networks

Notifications You must be signed in to change notification settings

Caknoooo/Jarkom-Modul-3-A09-2023

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Jarkom-Modul-3-A09-2023

Praktikum Jaringan Komputer Modul 3 Tahun 2023

Author

Nama NRP Github
Andika Laksana Putra 5025211001 https://github.com/DikaPutra07
M. Naufal Badruttamam 5025211240 https://github.com/Caknoooo

Laporan Resmi

Daftar Isi

Topologi

image

Config

  • Aura (DHCP Relay)
auto eth0
iface eth0 inet dhcp
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -s 192.173.0.0/16

auto eth1
iface eth1 inet static
	address 192.173.1.0
	netmask 255.255.255.0

auto eth2
iface eth2 inet static
	address 192.173.2.0
	netmask 255.255.255.0

auto eth3
iface eth3 inet static
	address 192.173.3.0
	netmask 255.255.255.0

auto eth4
iface eth4 inet static
	address 192.173.4.0
	netmask 255.255.255.0

  • Himmel (DHCP Server)
auto eth0
iface eth0 inet static
	address 192.173.1.1
	netmask 255.255.255.0
	gateway 192.173.1.0

  • Heiter (DNS Server)
auto eth0
iface eth0 inet static
	address 192.173.1.2
	netmask 255.255.255.0
	gateway 192.173.1.0
  • Denken (Database Server)
auto eth0
iface eth0 inet static
	address 192.173.2.1
	netmask 255.255.255.0
	gateway 192.173.2.0
  • Eisen (Load Balancer)
auto eth0
iface eth0 inet static
	address 192.173.2.2
	netmask 255.255.255.0
	gateway 192.173.2.0
  • Frieren (Laravel Worker)
auto eth0
iface eth0 inet static
	address 192.173.4.3
	netmask 255.255.255.0
	gateway 192.173.4.0

hwaddress ether 9e:d5:2c:df:39:32
  • Flamme (Laravel Worker)
auto eth0
iface eth0 inet static
	address 192.173.4.2
	netmask 255.255.255.0
	gateway 192.173.4.0

hwaddress ether da:cc:d9:29:59:e8
  • Fern (Laravel Worker)
auto eth0
iface eth0 inet static
	address 192.173.4.1
	netmask 255.255.255.0
	gateway 192.173.4.0

hwaddress ether 8a:31:c6:e6:a2:7b
  • Lawine (PHP Worker)
auto eth0
iface eth0 inet static
	address 192.173.3.3
	netmask 255.255.255.0
	gateway 192.173.3.0

hwaddress ether 8e:c1:16:c2:6d:4b
  • Linie (PHP Worker)
auto eth0
iface eth0 inet static
	address 192.173.3.2
	netmask 255.255.255.0
	gateway 192.173.3.0

hwaddress ether 7a:e7:1c:d2:ae:44
  • Lugner (PHP Worker)
auto eth0
iface eth0 inet static
	address 192.173.3.1
	netmask 255.255.255.0
	gateway 192.173.3.0

hwaddress ether 8a:02:fd:bb:05:be
  • Revolte, Richter, Sein, dan Stark (Client)
auto eth0
iface eth0 inet dhcp

Sebelum Memulai

setiap node, kita inisiasi pada .bashrc menggunakan nano

  • DNS Server
    echo 'nameserver 192.168.122.1' > /etc/resolv.conf
    apt-get update
    apt-get install bind9 -y  
  • DHCP Server
    echo 'nameserver 192.173.1.2' > /etc/resolv.conf   # Pastikan DNS Server sudah berjalan 
    apt-get update
    apt install isc-dhcp-server -y
  • DHCP Relay
    apt-get update
    apt install isc-dhcp-relay -y
  • Database Server
    echo 'nameserver 192.173.1.2' > /etc/resolv.conf
    apt-get update
    apt-get install mariadb-server -y
    service mysql start
    
    Lalu jangan lupa untuk mengganti [bind-address] pada file /etc/mysql/mariadb.conf.d/50-server.cnf menjadi 0.0.0.0 dan jangan lupa untuk melakukan restart mysql kembali
  • Load Balancer
    echo 'nameserver 192.173.1.2' > /etc/resolv.conf
    apt-get update
    apt-get install apache2-utils -y
    apt-get install nginx -y
    apt-get install lynx -y
    
    service nginx start
  • Worker PHP
    echo 'nameserver 192.173.1.2' > /etc/resolv.conf
    apt-get update
    apt-get install nginx -y
    apt-get install wget -y
    apt-get install unzip -y
    apt-get install lynx -y
    apt-get install htop -y
    apt-get install apache2-utils -y
    apt-get install php7.3-fpm php7.3-common php7.3-mysql php7.3-gmp php7.3-curl php7.3-intl php7.3-mbstring php7.3-xmlrpc php7.3-gd php7.3-xml php7.3-cli php7.3-zip -y
    
    service nginx start
    service php7.3-fpm start
  • Worker Laravel
    echo 'nameserver 192.173.1.2' > /etc/resolv.conf
    apt-get update
    apt-get install lynx -y
    apt-get install mariadb-client -y
    # Test connection from worker to database
    # mariadb --host=192.173.2.1 --port=3306   --user=kelompoka09 --password=passworda09 dbkelompoka09 -e "SHOW DATABASES;"
    apt-get install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2
    curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
    sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
    apt-get update
    apt-get install php8.0-mbstring php8.0-xml php8.0-cli   php8.0-common php8.0-intl php8.0-opcache php8.0-readline php8.0-mysql php8.0-fpm php8.0-curl unzip wget -y
    apt-get install nginx -y
    
    service nginx start
    service php8.0-fpm start
  • Client
    apt update
    apt install lynx -y
    apt install htop -y
    apt install apache2-utils -y
    apt-get install jq -y

Soal 1

Lakukan konfigurasi sesuai dengan peta yang sudah diberikan.

Pertama kita perlu mempersiapkan konfigurasi topologi dan setup seperti aturan diatas. Selanjutnya untuk kebutuhan testing, kita perlu menambahkan register domain berupa riegel.canyon.a09.com untuk worker Laravel dan granz.channel.a09.com untuk worker PHP yang mengarah pada worker dengan IP 192.173.x.1. Karena pada konfirgurasi topologi sebelumnya seluruh worker sudah menggunakan DHCP, maka kita perlu modifikasi sedikit pada node Lugner dan Fern seperti dibawah ini

  • Lugner (PHP Worker)
auto eth0
iface eth0 inet static
	address 192.173.3.1
	netmask 255.255.255.0
	gateway 192.173.3.0
  • Fern (Laravel Worker)
auto eth0
iface eth0 inet static
	address 192.173.4.1
	netmask 255.255.255.0
	gateway 192.173.4.0

Selanjutnya pada DNS Server (Heiter), kita perlu menjalankan command dibawah ini

Script

echo 'zone "riegel.canyon.a09.com" {
    type master;
    file "/etc/bind/sites/riegel.canyon.a09.com";
};

zone "granz.channel.a09.com" {
    type master;
    file "/etc/bind/sites/granz.channel.a09.com";
};

zone "1.173.192.in-addr.arpa" {
    type master;
    file "/etc/bind/sites/1.173.192.in-addr.arpa";
};' > /etc/bind/named.conf.local

mkdir -p /etc/bind/sites
cp /etc/bind/db.local /etc/bind/sites/riegel.canyon.a09.com
cp /etc/bind/db.local /etc/bind/sites/granz.channel.a09.com
cp /etc/bind/db.local /etc/bind/sites/1.173.192.in-addr.arpa

echo ';
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     riegel.canyon.a09.com. root.riegel.canyon.a09.com. (
                        2023111401      ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      riegel.canyon.a09.com.
@       IN      A       192.173.4.1     ; IP Fern
www     IN      CNAME   riegel.canyon.a09.com.' > /etc/bind/sites/riegel.canyon.a09.com

echo '
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     granz.channel.a09.com. root.granz.channel.a09.com. (
                        2023111401      ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      granz.channel.a09.com.
@       IN      A       192.173.3.1     ; IP Lugner
www     IN      CNAME   granz.channel.a09.com.' > /etc/bind/sites/granz.channel.a09.com

echo 'options {
      directory "/var/cache/bind";

      forwarders {
              192.168.122.1;
      };

      // dnssec-validation auto;
      allow-query{any;};
      auth-nxdomain no;    # conform to RFC1035
      listen-on-v6 { any; };
}; ' >/etc/bind/named.conf.options

service bind9 start

Result

image

image

Soal 2

Semua CLIENT harus menggunakan konfigurasi dari DHCP Server. Client yang melalui Switch3 mendapatkan range IP dari [prefix IP].3.16 - [prefix IP].3.32 dan [prefix IP].3.64 - [prefix IP].3.80

Sebelum mengerjakan perlu untuk melakukan setup untuk DHCP Server terlebih dahulu. Selanjutnya kita perlu menjalankan command dibawah ini pada DHCP Server

Script

echo 'subnet 192.173.1.0 netmask 255.255.255.0 {
}

subnet 192.173.2.0 netmask 255.255.255.0 {
}

subnet 192.173.3.0 netmask 255.255.255.0 {
    range 192.173.3.16 192.173.3.32;
    range 192.173.3.64 192.173.3.80;
    option routers 192.173.3.0;
}' > /etc/dhcp/dhcpd.conf

Soal 3

Client yang melalui Switch4 mendapatkan range IP dari [prefix IP].4.12 - [prefix IP].4.20 dan [prefix IP].4.160 - [prefix IP].4.168

Selanjutnya kita perlu menambahkan beberapa konfigurasi baru untuk switch4 dengan menjalankan command dibawah ini

Script

echo 'subnet 192.173.1.0 netmask 255.255.255.0 {
}

subnet 192.173.2.0 netmask 255.255.255.0 {
}

subnet 192.173.3.0 netmask 255.255.255.0 {
    range 192.173.3.16 192.173.3.32;
    range 192.173.3.64 192.173.3.80;
    option routers 192.173.3.0;
}

subnet 192.173.4.0 netmask 255.255.255.0 {
    range 192.173.4.12 192.173.4.20;
    range 192.173.4.160 192.173.4.168;
    option routers 192.173.4.0;
} ' > /etc/dhcp/dhcpd.conf

Soal 4

Client mendapatkan DNS dari Heiter dan dapat terhubung dengan internet melalui DNS tersebut

kita akan menambahkan beberapa konfigurasi seperti option broadcast-address dan option domain-name-server agar dapat DNS yang telah disiapkan sebelumnya dapat digunakan

Script

subnet 192.173.3.0 netmask 255.255.255.0 {
    ...
    option broadcast-address 192.173.3.255;
    option domain-name-servers 192.173.1.2;
    ...
}

subnet 192.173.4.0 netmask 255.255.255.0 {
    option broadcast-address 192.173.4.255;
    option domain-name-servers 192.173.1.2;
} 

Lalu gunakan shell script sebagai berikut

echo 'subnet 192.173.1.0 netmask 255.255.255.0 {
}

subnet 192.173.2.0 netmask 255.255.255.0 {
}

subnet 192.173.3.0 netmask 255.255.255.0 {
    range 192.173.3.16 192.173.3.32;
    range 192.173.3.64 192.173.3.80;
    option routers 192.173.3.0;
    option broadcast-address 192.173.3.255;
    option domain-name-servers 192.173.1.2;
}

subnet 192.173.4.0 netmask 255.255.255.0 {
    range 192.173.4.12 192.173.4.20;
    range 192.173.4.160 192.173.4.168;
    option routers 192.173.4.0;
    option broadcast-address 192.173.4.255;
    option domain-name-servers 192.173.1.2;
} ' > /etc/dhcp/dhcpd.conf

service isc-dhcp-server start

Selanjutnya kita perlu untuk melakukan setup untuk DHCP Relay terlebih dahulu. Selanjutnya kita perlu menjalankan command dibawah ini pada DHCP Relay

echo '# Defaults for isc-dhcp-relay initscript
# sourced by /etc/init.d/isc-dhcp-relay
# installed at /etc/default/isc-dhcp-relay by the maintainer scripts

#
# This is a POSIX shell fragment
#

# What servers should the DHCP relay forward requests to?
SERVERS="192.173.1.1"

# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
INTERFACES="eth1 eth2 eth3 eth4"

# Additional options that are passed to the DHCP relay daemon?
OPTIONS=""' > /etc/default/isc-dhcp-relay

service isc-dhcp-relay start 

Lalu pada file /etc/sysctl.conf lakukan uncommented pada net.ipv4.ip_forward=1

Terakhir jangan lupa untuk restart seluruh client agar dapat melakukan leasing IP dari DHCP Server

Result

image

image

Soal 5

Lama waktu DHCP server meminjamkan alamat IP kepada Client yang melalui Switch3 selama 3 menit sedangkan pada client yang melalui Switch4 selama 12 menit. Dengan waktu maksimal dialokasikan untuk peminjaman alamat IP selama 96 menit

Kita perlu menggunakan bantuan fungsi default-lease-time dan max-lease-team dimana satuannya adalah detik.

Karena pada switch3 dapat meminjamkan IP selama 3 Menit dan Switch4 dapat meminjamkan IP selama 12 Menit. Sehingga pada Switch3 membutuhkan waktu 180 s dan Switch4 membutuhkan waktu 720 s dan untuk max-lease-time nya adalah 96 menit dimana akan menjadi 5760 s

Selanjutnya kita perlu menambahkan beberapa konfigurasi baru untuk mengatur leasing time pada switch3 dan switch4 sesuai dengan aturan soal. Kita dapat menjalankan command berikut pada DHCP Server

Script

echo 'subnet 192.173.1.0 netmask 255.255.255.0 {
}

subnet 192.173.2.0 netmask 255.255.255.0 {
}

subnet 192.173.3.0 netmask 255.255.255.0 {
    range 192.173.3.16 192.173.3.32;
    range 192.173.3.64 192.173.3.80;
    option routers 192.173.3.0;
    option broadcast-address 192.173.3.255;
    option domain-name-servers 192.173.1.2;
    default-lease-time 180;
    max-lease-time 5760;
}

subnet 192.173.4.0 netmask 255.255.255.0 {
    range 192.173.4.12 192.173.4.20;
    range 192.173.4.160 192.173.4.168;
    option routers 192.173.4.0;
    option broadcast-address 192.173.4.255;
    option domain-name-servers 192.173.1.2;
    default-lease-time 720;
    max-lease-time 5760;
}

service isc-dhcp-server restart

Result

image

image

Soal 6

Pada masing-masing worker PHP, lakukan konfigurasi virtual host untuk website berikut dengan menggunakan php 7.3. (6)

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu pada seluruh PHP Worker. Jika sudah, silahkan untuk melakukan konfigurasi tambahan sebagai berikut untuk melakukan download dan unzip menggunakan command wget

wget -O '/var/www/granz.channel.a09.com' 'https://drive.google.com/u/0/uc?id=1ViSkRq7SmwZgdK64eRbr5Fm1EGCTPrU1&export=download'
unzip -o /var/www/granz.channel.a09.com -d /var/www/
rm /var/www/granz.channel.a09.com
mv /var/www/modul-3 /var/www/granz.channel.a09.com

Script

Setelah melakukan download dan unzip. Sekarang kita bisa melakukan konfigurasi pada nginx sebagai berikut:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/granz.channel.a09.com
ln -s /etc/nginx/sites-available/granz.channel.a09.com /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default

echo 'server {
    listen 80;
    server_name _;

    root /var/www/granz.channel.a09.com;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.3-fpm.sock;  # Sesuaikan versi PHP dan socket
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}' > /etc/nginx/sites-available/granz.channel.a09.com

service nginx restart

Result

Jalanin Perintah lynx localhost pada masing-masing worker dan hasilnya akan sebagai berikut:

image

Soal 7

Kepala suku dari Bredt Region memberikan resource server sebagai berikut: Lawine, 4GB, 2vCPU, dan 80 GB SSD. Linie, 2GB, 2vCPU, dan 50 GB SSD. Lugner 1GB, 1vCPU, dan 25 GB SSD. Aturlah agar Eisen dapat bekerja dengan maksimal, lalu lakukan testing dengan 1000 request dan 100 request/second. (7)

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah melakukan konfigurasi diatas, sekarang lakukan konfigurasi Load Balancing pada node Eisen sebagai berikut

Script

Sebelum melakukan setup soal 7. Buka kembali Node DNS Server dan arahkan domain tersebut pada IP Load Balancer Eisen

echo ';
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     riegel.canyon.a09.com. root.riegel.canyon.a09.com. (
                        2023111401      ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      riegel.canyon.a09.com.
@       IN      A       192.173.2.2     ; IP LB Eiken
www     IN      CNAME   riegel.canyon.a09.com.' > /etc/bind/sites/riegel.canyon.a09.com

echo '
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     granz.channel.a09.com. root.granz.channel.a09.com. (
                        2023111401      ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      granz.channel.a09.com.
@       IN      A       192.173.2.2     ; IP LB Eiken
www     IN      CNAME   granz.channel.a09.com.' > /etc/bind/sites/granz.channel.a09.com

Lalu kembali ke node Eisen dan lakukan konfigurasi pada nginx sebagai berikut

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/lb_php

echo ' upstream worker {
    server 192.173.3.1;
    server 192.173.3.2;
    server 192.173.3.3;
}

server {
    listen 80;
    server_name granz.channel.a09.com www.granz.channel.a09.com;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        proxy_pass http://worker;
    }
} ' > /etc/nginx/sites-available/lb_php

ln -s /etc/nginx/sites-available/lb_php /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default

service nginx restart

Setelah itu lakukan konfigurasi pada salah satu client. Disini kami melakukan konfigurasi pada client Revolte

Result

Jalankan perintah berikut pada client Revolte

ab -n 1000 -c 100 http://www.granz.channel.a09.com/ 

dan akan mendapatkan hasil seperti berikut

image

dan waktu yang dihasilkan adalah Requests per second: 269.06 [#/sec] (mean) serta yang dibutuhkan adalah sebagai berikut

image

Soal 8

Karena diminta untuk menuliskan grimoire, buatlah analisis hasil testing dengan 200 request dan 10 request/second masing-masing algoritma Load Balancer dengan ketentuan sebagai berikut: 1. Nama Algoritma Load Balancer; 2. Report hasil testing pada Apache Benchmark; 3.Grafik request per second untuk masing masing algoritma; 4. Analisis

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Selebihnya untuk konfigurasinya sama dengan Soal 7

Untuk laporan grimoire nya kami membuatnya di google.docs pada link ini.

Script

Jalankan command berikut pada client Revolte

ab -n 200 -c 10 http://www.granz.channel.a09.com/ 

Result

Round Robin

Screenshot (1015)

Least-connection

Screenshot (1019)

IP Hash

Screenshot (1020)

Generic Hash

Screenshot (1021)

Grafik

image

Soal 9

Dengan menggunakan algoritma Round Robin, lakukan testing dengan menggunakan 3 worker, 2 worker, dan 1 worker sebanyak 100 request dengan 10 request/second, kemudian tambahkan grafiknya pada grimoire. (9)

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah melakukan setup pada node Eisen sekarang lakukan testing pada load balancer yang telah dibuat sebelumnya. Yang menjadi pembeda adalah kita harus melakukan testing menggunakan 1 worker, 2 worker, dan 3 worker.

Script

Jalankan command berikut pada client Revolte

ab -n 100 -c 10 http://www.granz.channel.a09.com/ 

Result

3 Worker

Screenshot (1022)

Request per second 303.87 [#/sec] (mean)

2 Worker

Screenshot (1023)

Request per second 336.77 [#/sec] (mean)

1 Worker

Screenshot (1024)

Request per second 393.40 [#/sec] (mean)

Grafik

image

Soal 10

Selanjutnya coba tambahkan konfigurasi autentikasi di LB dengan dengan kombinasi username: “netics” dan password: “ajkyyy”, dengan yyy merupakan kode kelompok. Terakhir simpan file “htpasswd” nya di /etc/nginx/rahasisakita/

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu, lakukan beberapa konfigurasi sebagai berikut

Script

mkdir /etc/nginx/rahasisakita
htpasswd -c /etc/nginx/rahasisakita/htpasswd netics

Lalu, masukkan passwordnya ajka09

Jika sudah memasukkan password dan re-type password. Sekarang bisa dicoba dengan menambahkan command berikut pada setup nginx.

auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/rahasisakita/htpasswd;

Result

Jadi, ketika kita mengakses kembali url http://www.granz.channel.a09.com/ akan terdapat unauthorized sebagai berikut

image

image

image

Setelah berhasil Autentikasi

image

Soal 11

Lalu buat untuk setiap request yang mengandung /its akan di proxy passing menuju halaman https://www.its.ac.id. (11) hint: (proxy_pass)

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu, lakukan beberapa konfigurasi tambahan pada nginx sebagai berikut

Script

location ~ /its {
    proxy_pass https://www.its.ac.id;
    proxy_set_header Host www.its.ac.id;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

Berikut adalah full scriptnya

echo 'upstream worker {
    server 192.173.3.1;
    server 192.173.3.2;
    server 192.173.3.3;
}

server {
    listen 80;
    server_name granz.channel.a09.com www.granz.channel.a09.com;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        proxy_pass http://worker;
    }

    location ~ /its {
        proxy_pass https://www.its.ac.id;
        proxy_set_header Host www.its.ac.id;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}' > /etc/nginx/sites-available/lb_php

Maksudnya adalah ketika kita melakukan akses pada endpoint yang mengandung /its akan diarahkan oleh proxy_pass menuju https://www.its.ac.id. Jadi ketika melakukan testing pada client Revolte dengan menggunakan perintah berikut

lynx www.granz.channel.a09.com/its

Result

image

Soal 12

Selanjutnya LB ini hanya boleh diakses oleh client dengan IP [Prefix IP].3.69, [Prefix IP].3.70, [Prefix IP].4.167, dan [Prefix IP].4.168.

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu, Kami hanya menambahkan beberapa konfigurasi di nginx sebagai berikut

Script

location / {
    allow 192.173.3.69;
    allow 192.173.3.70;
    allow 192.173.4.167;
    allow 192.173.4.168;
    deny all;
    proxy_pass http://worker;
}

Berikut adalah full scriptnya

echo 'upstream worker {
    server 192.173.3.1;
    server 192.173.3.2;
    server 192.173.3.3;
}

server {
    listen 80;
    server_name granz.channel.a09.com www.granz.channel.a09.com;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    location / {
        allow 192.173.3.69;
        allow 192.173.3.70;
        allow 192.173.4.167;
        allow 192.173.4.168;
        deny all;
        proxy_pass http://worker;
    }

    location /its {
        proxy_pass https://www.its.ac.id;
        proxy_set_header Host www.its.ac.id;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}' > /etc/nginx/sites-available/lb_php

Disini kami hanya mengizinkan beberapa IP saja sesuai dengan ketentual soal dan kamu menolak seluruh IP selain yang telah ditentukan soal. Untuk melakukan testingnya. Bisa dilakukan dengan membuka client yang mendapatkan IP 192.173.3.69 atau 192.173.3.70 atau 192.173.4.167 atau 192.173.4.168

Result

IP Deny

image

image

IP Allow

Disini terdapat 2 cara untuk mengimplementasikannya

Cara 1

Karena IP yang diberikan random, sekarang kami akan melakukan tambahan allow pada IP 192.173.3.19 pada konfigurasi sebelumnya

image

location / {
    allow 192.173.3.69;
    allow 192.173.3.70;
    allow 192.173.3.19;
    allow 192.173.4.167;
    allow 192.173.4.168;
    deny all;
    proxy_pass http://worker;
}

image

Cara 2

Gunakan fixed address pada client Revolte dimana kita bisa menambahkan konfigurasi berikut pada dhcp server

host Revolte {
    harware ethernet fe:c0:13:f5:1c:02;
    fixed-address 192.173.3.69;
}

Lakukan stop dan start ulang pada node Revolte

Hasilnya akan seperti ini

image

image

Soal 13

Semua data yang diperlukan, diatur pada Denken dan harus dapat diakses oleh Frieren, Flamme, dan Fern. (13)

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu kita buka Database Server nya yaitu Denken dan lakukan konfigurasi sebagai berikut

Script

# Db akan diakses oleh 3 worker, maka 
echo '# This group is read both by the client and the server
# use it for options that affect everything
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

# Options affecting the MySQL server (mysqld)
[mysqld]
skip-networking=0
skip-bind-address
' > /etc/mysql/my.cnf

Lalu jangan lupa untuk mengganti [bind-address] pada file /etc/mysql/mariadb.conf.d/50-server.cnf menjadi 0.0.0.0

cd /etc/mysql/mariadb.conf.d/50-server.cnf

# Changes
bind-address            = 0.0.0.0

Jangan lupa untuk restart mysql nya service mysql restart

Setelah itu jalankan perintah berikut:

mysql -u root -p
Enter password: 

CREATE USER 'kelompoka09'@'%' IDENTIFIED BY 'passworda09';
CREATE USER 'kelompoka09'@'localhost' IDENTIFIED BY 'passworda09';
CREATE DATABASE dbkelompoka09;
GRANT ALL PRIVILEGES ON *.* TO 'kelompoka09'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'kelompoka09'@'localhost';
FLUSH PRIVILEGES;

image

Result

Setelah itu lakukan pengecekan di salah satu Laravel Worker. Disini kami akan melakukan pengecekan pada worker Fern dengan melakukan perintah shell berikut

mariadb --host=192.173.2.1 --port=3306 --user=kelompoka09 --password=passworda09 dbkelompoka09 -e "SHOW DATABASES;"

image

Soal 14

Frieren, Flamme, dan Fern memiliki Granz Channel sesuai dengan quest guide berikut. Jangan lupa melakukan instalasi PHP8.0 dan Composer

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu, lakukan konfigurasi lagi sebagai berikut

Script

Lakukan install composer

wget https://getcomposer.org/download/2.0.13/composer.phar
chmod +x composer.phar
mv composer.phar /usr/local/bin/composer

Setelah itu install git dan lakukan cloning terhadap resource yang telah diberikan

apt-get install git -y
cd /var/www && git clone https://github.com/martuafernando/laravel-praktikum-jarkom
cd /var/www/laravel-praktikum-jarkom && composer update

Setelah melakukan clone pada resource tersebut. Sekarang lakukan konfigurasi sebagai berikut pada masing-masing worker

cd /var/www/laravel-praktikum-jarkom && cp .env.example .env
echo 'APP_NAME=Laravel
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=192.173.2.1
DB_PORT=3306
DB_DATABASE=dbkelompoka09
DB_USERNAME=kelompoka09
DB_PASSWORD=passworda09

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MEMCACHED_HOST=127.0.0.1

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_MAILER=smtp
MAIL_HOST=mailpit
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1

VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"' > /var/www/laravel-praktikum-jarkom/.env
cd /var/www/laravel-praktikum-jarkom && php artisan key:generate
cd /var/www/laravel-praktikum-jarkom && php artisan config:cache
cd /var/www/laravel-praktikum-jarkom && php artisan migrate
cd /var/www/laravel-praktikum-jarkom && php artisan db:seed
cd /var/www/laravel-praktikum-jarkom && php artisan storage:link
cd /var/www/laravel-praktikum-jarkom && php artisan jwt:secret
cd /var/www/laravel-praktikum-jarkom && php artisan config:clear
chown -R www-data.www-data /var/www/laravel-praktikum-jarkom/storage

Setelah berhasil menjalankan semuanya dan tidak mendapatkan error. Sekarang lakukan konfigurasi nginx sebagai berikut pada masing-masing worker dimana port nya adalah sebagai berikut

192.173.4.1:8001; # Fern 
192.173.4.2:8002; # Flamme
192.173.4.3:8003; # Frieren

dan berikut merupakan konfigurasi nginx nya

echo 'server {
    listen <X>;

    root /var/www/laravel-praktikum-jarkom/public;

    index index.php index.html index.htm;
    server_name _;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    # pass PHP scripts to FastCGI server
    location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
    }

    location ~ /\.ht {
            deny all;
    }

    error_log /var/log/nginx/implementasi_error.log;
    access_log /var/log/nginx/implementasi_access.log;
}' > /etc/nginx/sites-available/laravel-worker

dimana <X> merupakan port masing-masing Worker.

Result

Setelah berhasil melakukan keseluruhan konfigurasi pada masing-masing worker. Saatnya melakukan testing sebagai berikut

lynx localhost:[PORT]

dimana PORT yang ada adalah 8001 8002 dan 8003. Sesuaikan dengan setup nginx sebelumnya.

image

Soal 15

Granz Channel memiliki beberapa endpoint yang harus ditesting sebanyak 100 request dengan 10 request/second. Tambahkan response dan hasil testing pada grimoire. Untuk POST /api/auth/register

Untuk mengerjakan soal ini. Diperlukan melakukan testing menggunakan Apache Benchmark pada salah satu worker saja. Disini kami akan menggunakan worker laravel Fern yang nantinya akan menjadi worker yang akan ditesting oleh client Revolte. Sebelum dilakukan testing, kami menggunakan bantuan file .json yang akan digunakan sebagai body yang akan dikirim pada endpoint /api/auth/register nantinya sebagai berikut

Script

echo '
{
  "username": "kelompokA09",
  "password": "passwordA09"
}' > register.json

Lalu, lakukanlah perintah berikut dari sisis client Revolte

ab -n 100 -c 10 -p register.json -T application/json http://192.173.4.1:8001/api/auth/register

Result

Terdapat error dalam pengiriman sebanyak 100 request. Dikarenakan pada table users adalah unique. Dimana data username yang dimasukkan tidak boleh sama. Sehingga menyebabkan hanya 1 request saja yang diproses. 99 proses lainnya tidak diproses

image

Berikut merupakan grafik dan report yang didapat

image

Soal 16

Granz Channel memiliki beberapa endpoint yang harus ditesting sebanyak 100 request dengan 10 request/second. Tambahkan response dan hasil testing pada grimoire. Untuk POST /api/auth/login

Untuk mengerjakan soal ini. Diperlukan melakukan testing menggunakan Apache Benchmark pada salah satu worker saja. Disini kami akan menggunakan worker laravel Fern yang nantinya akan menjadi worker yang akan ditesting oleh client Revolte. Sebelum dilakukan testing, kami menggunakan bantuan file .json yang akan digunakan sebagai body yang akan dikirim pada endpoint /api/auth/login nantinya sebagai berikut

Script

echo '
{
  "username": "kelompokA09",
  "password": "passwordA09"
}' > login.json

Lalu, lakukanlah perintah berikut dari sisis client Revolte

ab -n 100 -c 10 -p login.json -T application/json http://192.173.4.1:8001/api/auth/login

Result

Terdapat error dalam pengiriman sebanyak 100 request. Karena satu worker saja tidak kuat untuk mendapatkan request sebanyak itu 100 dalam waktu yang telah diberikan atau dengan kata lain CPU yang diterima tidak sanggup untuk memproses banyaknya request. Sehingga menyebabkan hanya 63 request saja yang berhasil di proses sedangkan 37 lainnya tidak berhasil di proses

image

image

Soal 17

Granz Channel memiliki beberapa endpoint yang harus ditesting sebanyak 100 request dengan 10 request/second. Tambahkan response dan hasil testing pada grimoire. Untuk GET /api/me

Untuk mengerjakan soal ini. Diperlukan melakukan testing menggunakan Apache Benchmark pada salah satu worker saja. Disini kami akan menggunakan worker laravel Fern yang nantinya akan menjadi worker yang akan ditesting oleh client Revolte. Sebelum dilakukan testing. Ada beberapa konfigurasi yang harus disiapkan sebagai berikut

Script

Dapatkan tokennya terlebih dahulu sebelum mengakses endpoint /api/me

curl -X POST -H "Content-Type: application/json" -d @login.json http://192.173.4.1:8001/api/auth/login > login_output.txt

image

Lalu jalankan perintah berikut untuk melakukan set token secara global

token=$(cat login_output.txt | jq -r '.token')

Setelah itu jalankan perintah berikut untuk melakukan testing

ab -n 100 -c 10 -H "Authorization: Bearer $token" http://192.173.4.1:8001/api/me

Result

Terdapat error dalam pengiriman sebanyak 100 request. Karena satu worker saja tidak kuat untuk mendapatkan request sebanyak itu 100 dalam waktu yang telah diberikan atau dengan kata lain CPU yang diterima tidak sanggup untuk memproses banyaknya request. Sehingga menyebabkan hanya 62 request saja yang berhasil di proses sedangkan 38 lainnya tidak berhasil di proses

image

image

Soal 18

Untuk memastikan ketiganya bekerja sama secara adil untuk mengatur Granz Channel maka implementasikan Proxy Bind pada Eisen untuk mengaitkan IP dari Frieren, Flamme, dan Fern.

Sebelum mengerjakan perlu untuk melakukan setup terlebih dahulu. Setelah itu, karena hanya diberikan perintah ketiga worker berjalan secara adil, kami memberikan implementasi dari Load Balancing karena sesuai dengan definisi nya yaitu membagi rata beban kerja. Maka dari itu, berikut merupakan konfigurasi nginx

Script

echo 'upstream worker {
    server 192.173.4.1:8001;
    server 192.173.4.2:8002;
    server 192.173.4.3:8003;
}

server {
    listen 80;
    server_name riegel.canyon.a09.com www.riegel.canyon.a09.com;

    location / {
        proxy_pass http://worker;
    }
} 
' > /etc/nginx/sites-available/laravel-worker

ln -s /etc/nginx/sites-available/laravel-worker /etc/nginx/sites-enabled/laravel-worker

service nginx restart

Notes Hati-hati port tabrakan dengan load balancer dari php worker

Result

Setelah melakukan konfigurasi pada load balancer pada Eisen. Sekarang waktunya melakukan testing pada client Revolte dengan menjalankan perintah berikut

ab -n 100 -c 10 -p login.json -T application/json http://www.riegel.canyon.a09.com/api/auth/login

akan memperoleh hasil sebagai berikut

image

Fern

image

Flamme

image

Frieren

image

Soal 19

Untuk meningkatkan performa dari Worker, coba implementasikan PHP-FPM pada Frieren, Flamme, dan Fern. Untuk testing kinerja naikkan -> pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers sebanyak tiga percobaan dan lakukan testing sebanyak 100 request dengan 10 request/second kemudian berikan hasil analisisnya pada Grimoire.

Untuk mengerjakan soal ini terdapat beberapa penjelasan sebagai berikut

pm.max_children Menentukan jumlah maksimum pekerja PHP (proses anak) yang dapat berjalan secara bersamaan. Nilai ini sebaiknya disesuaikan dengan kapasitas sumber daya server. Jika terlalu rendah, server mungkin tidak dapat menangani banyak permintaan secara bersamaan, sementara jika terlalu tinggi, dapat menyebabkan kelebihan beban dan kekurangan sumber daya.

pm.start_servers Menentukan jumlah pekerja PHP yang akan dimulai secara otomatis ketika PHP-FPM pertama kali dijalankan atau direstart. Ini membantu dalam mengoptimalkan performa pada saat server pertama kali dimulai.

pm.min_spare_servers Menentukan jumlah minimum pekerja PHP yang tetap berjalan saat server berjalan. Ini membantu menjaga agar server tetap responsif terhadap permintaan bahkan saat lalu lintas rendah.

pm.max_spare_servers Menentukan jumlah maksimum pekerja PHP yang dapat berjalan tetapi tidak menangani permintaan. Jumlah ini disesuaikan dengan kebutuhan untuk menangani lonjakan lalu lintas tanpa menambahkan terlalu banyak sumber daya ketika beban rendah.

Akan ada 4 konfigurasi terhadap proses package manager pada masing-masing worker yang nantinya akan dilakukan untuk testing.

Script

Script 1

# Setup Awal
echo '[www]
user = www-data
group = www-data
listen = /run/php/php8.0-fpm.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off

; Choose how the process manager will control the number of child processes.

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3' > /etc/php/8.0/fpm/pool.d/www.conf

service php8.0-fpm restart

Script 2

echo '[www]
user = www-data
group = www-data
listen = /run/php/php8.0-fpm.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off

; Choose how the process manager will control the number of child processes.

pm = dynamic
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10' > /etc/php/8.0/fpm/pool.d/www.conf

service php8.0-fpm restart

Script 3

echo '[www]
user = www-data
group = www-data
listen = /run/php/php8.0-fpm.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off

; Choose how the process manager will control the number of child processes.

pm = dynamic
pm.max_children = 50
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 15' > /etc/php/8.0/fpm/pool.d/www.conf

service php8.0-fpm restart

Script 4

echo '[www]
user = www-data
group = www-data
listen = /run/php/php8.0-fpm.sock
listen.owner = www-data
listen.group = www-data
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off

; Choose how the process manager will control the number of child processes.

pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20' > /etc/php/8.0/fpm/pool.d/www.conf

service php8.0-fpm restart

Result

Script 1

image

Script 2

image

Script 3

image

Script 4

image

Soal 20

Nampaknya hanya menggunakan PHP-FPM tidak cukup untuk meningkatkan performa dari worker maka implementasikan Least-Conn pada Eisen. Untuk testing kinerja dari worker tersebut dilakukan sebanyak 100 request dengan 10 request/second. (20)

Karena proses yang telah di konfigurasi sebelumnya pada masing-masing worker tepatnya pada package manager dan ternyata hasil yang diberikan juga tidak cukup untuk meningkatkan performa worker. Oleh karena itu, ditambahkan algoritma pada load balancer tersebut dengan menggunakan Least-connection dimana algoritma ini akan melakukan prioritas pembagian dari beban kinerja yang paling rendah. Node master akan mencatat semua beban dan kinerja dari semua node, dan akan melakukan prioritas dari beban yang paling rendah. Sehingga diharapkan tidak ada server dengan beban yang rendah.

Script

echo 'upstream worker {
    least_conn;
    server 192.173.4.1:8001;
    server 192.173.4.2:8002;
    server 192.173.4.3:8003;
}

server {
    listen 80;
    server_name riegel.canyon.a09.com www.riegel.canyon.a09.com;

    location / {
        proxy_pass http://worker;
    }
} 
' > /etc/nginx/sites-available/laravel-worker

service nginx restart

Notes Disini kami masih menggunakan setup pada package manager sebagai berikut

pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

Result

Jika ditambahkan Algoritma Load Balancing Least-connection. Hasil yang didapatkan cukup signifikan sebagai berikut

image

Dapat disimpulkan bahwa algoritma Least-connection dapat berkerja dengan baik

About

This repository was created to document the results of work from Practicum 3 Computer Networks

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages