nah loh, judulnya pakai bahasa inggris , yaitu High avaibility moodle server using nginx load balancer and nfs server , biar keren aja sih, karena saya akan tetap menulisnya dalam bahasa indonesia, saya kan cinta negeri ini, hehehe
oiya, hari ini saya sedang cukup bahagia, sebabnya saya iseng-iseng cek judul artikel, eh, muncul di page one nya google. gimana gak bahagia coba, artikel saya bersaing paling banyak di lihat dengan website-website kelas kakap di dunia. hahaha.
artikel yang mana ? yang ini http://mandrivaputri.info/2018/07/cara-load-balancing-web-server-dengan-haproxy-dan-glusterfs/
nah, artikel yang saya tulis ini adalah sambungan dari artikel diatas, hanya berbeda metode dan kebutuhan. maksudnya tetap sama.
selamat membaca dan selamat berbahagia untuk kalian yang sedang berlibur panjang dengan keluarga. salam hangat dari saya yang tersandar sendirian di kamar kosan. apalah daya, keluarga jauh. semoga harapan kita semua bisa tercapai 🙂 🙂 🙂 🙂 🙂 😉 😉 🙁 🙁 ;'(
jadi, saya mendapatkan tugas, ya sekalian saya anggap sebagai tantangan, sejauh mana kemampuan otak dan tenaga saya mampu menyelesaikan tugas tersebut.
tugasnya adalah : membangun dan mengoptimasi website learning manajement system dengan moodle
sebelumnya, website ini sudah ada, tapi diaksesnya lambat, dan terdapat beberapa trouble yang lumayan bikin bingung untuk mengatasinya.
sebelum melakukan aksi, terlebih dahulu saya menggali informasi tentang aplikasi tersebut, khususnya user akses. yang perlu di ketahui adalah :
- berapa banyak user yang akan mengakses aplikasi tersebut ?
- apakah random, atau concurrent ?
- berapa besar BW internet yang tersedia?
- berapa besar resource server yang tersedia ?
dari analisa diatas, dapat dihitung kebutuhannya. misalnya BW yang dibutuhkan, jumlah core CPU, jumlah RAM dan disk. disini saya memutuskan awal menggunakan total RAM 15 GB , CPU 4 core pada setiap server.
setelah melakukan analisa, saya mulai mengeksekusi tugas tersebut. oh, hal ini yang dinamakan analis sistem. tugasnya seorang sistem analis, tapi pada kasus kebanyakan, yang analis juga yang mengeksekusi, wkwkwkw. ya gapapalah, yang penting nambah ilmu, minimal jadi portofolio kali aja saya ditendang dari sini dan pindah ke tempat baru hahahaha
solusi dari permasalah diatas adalah saya menawarkan load balancing server. karena menggunakan moodle, yaitu sebuah aplikasi open source, maka kita tidak terlalu banyak bisa mengoptimasi sari sisi codingnya.
nah, mahalnya disini. ketika ada solusi. 😀 , kalau eksekusi kan hanya tinggal jalankan saja.
load balancing adalah membagi beban aplikasi yang di distribusikan ke beberapa server.
metode diatas menggunakan tiga buah server apps, satu buah server load balancer, satu buah server database, dan satu buah server NFS. akan lebih baik jika server databasenya juga ada tiga, di cluster. tapi ya itu nantilah, dipengembangan berikutnya, dan seberapa penting ini aplikasi digunakan :p
senjata yang saya gunakan adalah :
- nginx
- nfs
- postgresql
- server load balancer IP 192.168.85.10
- server A IP 192.168.85.1
- server B IP 192.168.85.2
- server C IP 192.168.85.3
- server NFS IP 192.168.87.3
- server database IP 192.168.87.4
A. install dan konfig server load balancer
yang pertama adalah instalasi nginx load balancer pada server load balancer. ini instalasi nginx seperti biasa, hanya script untuk configurasinya menggunakan load balancer dengan metode round robind. yang pernah kuliah harusnya tau nih :p . ada beberapa metode, seperti least conn, ya tergantung kebutuhan aja sih, silangkan di explore.
ant@loadbalancer:~$ yum update -y
ant@loadbalancer:~$ yum install -y nginx
ant@loadbalancer:~$ systemctl enable nginx
ant@loadbalancer:~$ systemctl start nginx
ant@loadbalancer:~$ systemctl status nginx
membuat script configurasi vhost pada nginx
ant@loadbalancer:~$ vi /etc/nginx/conf.d/loadbalancer.conf
isinya :
upstream backend {
server 192.168.85.1;
server 192.168.85.2;
server 192.168.85.3;
}server {
listen 80;
server_name xxxx.id;
return 301 https://$server_name$request_uri;
location / {
proxy_buffering on;
proxy_buffer_size 1k;
proxy_buffers 24 4k;
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://backend;
}
}upstream backendssl {
server 192.168.85.1:443;
server 192.168.85.2:443;
server 192.168.85.3:443;
}server {
listen 443 ssl;
server_name xxxx.id;
ssl_certificate /etc/nginx/serti/bundle.crt;
ssl_certificate_key /etc/nginx/serti/priv.key;location / {
proxy_buffering on;
proxy_buffer_size 1k;
proxy_buffers 24 4k;
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://backendssl;
}
}
disini, SSL dari aplikasi akan di handle oleh server loadbalancer.
B. Instalasi nginx pada semua server A,B,C
ant@server-A:~$ yum update -y
ant@server-A:~$ yum install -y nginx
ant@server-A:~$ systemctl enable nginx
ant@server-A:~$ systemctl start nginx
ant@server-A:~$ systemctl status nginx
membuat konfigurasi vhost pada server A,B dan C
server {
listen *:443 ssl;
listen [::]:443 ssl;
root /usr/share/nginx/html/moodle/moodle/;
index index.php index.html index.htm;
server_name 192.168.85.1;ssl_certificate /etc/nginx/serti/bundle.crt;
ssl_certificate_key /etc/nginx/serti/priv.key;location / {
try_files $uri $uri/ =404;
}location /dataroot/ {
internal;
alias /data/moodledata/;
}location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
include fastcgi_params;
proxy_buffering on;
proxy_buffer_size 1k;
proxy_buffers 24 4k;
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}}
disini, moodledata diarahkan pada server NFS.
C. instalasi postgresql server.
ant@db-server:~$ rpm -Uvh https://yum.postgresql.org/11/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
ant@db-server:~$ yum -y install postgresql11-server postgresql11
ant@db-server:~$ /usr/pgsql-11/bin/postgresql-11-setup initdb
ant@db-server:~$ systemctl enable postgresql-11.service
ant@db-server:~$ systemctl start postgresql-11.service
konfigurasi agar server database postgresql dapat di akses dari luar server. tutorialnya banyak di google, hehe
D. instalasi dan konfigurasi server NFS ke server A,B,C
ant@nfs-server:~$ yum install nfs-utils
ant@nfs-server:~$ mkdir /data/moodledata
ant@nfs-server:~$ vi /etc/exports
/data/moodledata 192.168.85.1(rw,sync,no_root_squash,no_all_squash)
/data/moodledata 192.168.85.2(rw,sync,no_root_squash,no_all_squash)
/data/moodledata 192.168.85.3(rw,sync,no_root_squash,no_all_squash)ant@nfs-server:~$ systemtl enable nfs-server
ant@nfs-server:~$ systemctl start nfs-server
disini, saya membuat folder /data/moodledata untuk di mount ke server A,B,C
E. mounting disk pada server NFS ke server A,B,C
ant@nfs-server:~$ mkdir /data
ant@nfs-server:~$ mount 192.168.87.3:/data/moodledata /data
tambahkan script ini agar auto mount saat server restart
ant@nfs-server:~$ vi /etc/fstab
192.168.87.3:/data/moodledata /data nfs defaults 0 0
cek, apakah disk server NFS sudah termount dengan perintah df -h
fuih,, capek ya. selanjutnya, siap untuk instalasi moodle nya.
oiya, saya males nulis tutorial install moodle, karena sudah banyak di internet, bisa di pelajari disini : https://docs.moodle.org/39/en/Installing_Moodle
yang perlu diperhatikan pada saat instalasi moodle :
- pastikan database sudah di buat di server database postgresql
- arahkan moodledata pada folder /data
- arahkan database pada IP 192.168.87.4
udah, sekian dulu, kalau tidak berhasil alias gagal, coba di perhatikan gagalnya dimana, atau bisa bertanya pada kolom komentar ya. capek banget saya nulisnya wkwkwkwk.
sekian dulu tulisan tentang High avaibility moodle server using nginx load balancer and nfs server.
sampai bertemu di lain artikel…. :*