Analisa Sistem dan Infrastruktur untuk pemecahan masalah ( khusus pemula )

halo semua, seperti biasa, nulis untuk kebutuhan catatan saja bagi saya. atau bisa juga sebagai Portofolio, kali aja artikel saya ini di lirik sama seseorang yang sedang membutuhan jasa saya. hehehe wkwkwk. judulnya itu analisa sistem dan infrastruktur untuk pemecahan masalah.

oiya, artikel ini khusus pemula, untuk yang sudah Pro = Profesional, jangan dibaca. karena saya bisa diketawain. wkwkwkwkw begitu. karena ini analisa abal-abal alias sembarangan. saya sendiri baru pertama kali melakukan analisa se kompleks ini. permasalah ini sudah beberapa bulan terjadi, dan saya baru sempat nulisnya sekarang.

berawal dari laporan client, bahwa aplikasinya lambat di akses. errornya itu lo yang bikin menarik. :

error tcp

error tcp

dari error diatas, rata-rata mahluk hidup di muka bumi ini pasti menduga ada masalah dengan jaringan, lalu mereka akan berasumsi bahwa bandwith di servernya bermasalah. karena mereka buka yutub aman kok, dan web-web lain aman. bandwith servernya nih pasti. gitchu~~~

btw, wait… eh, itu di akses jam 11 malam loh, (lihat pojok kiri atas). harusnya, jam segitu bandwith server gak tinggi. oke deh, untuk memanstikan, saya terpaksa hubungi pihak provider, apakah benar, pada jam segitu bandwith mentok. dan jawabannya, tidak. mentoknya kalo siang wkwkwkw.

oke, kita bahas yang benerannya, error tersebut terjadi karena ada lost koneksi dari client (HP) ke server aplikasi. penyebabnya ? bisa jaringan di client, jaringan di server, query, bandwith, daaaaaaaann server yang terlalu sibuk, gak tau deh ngapain dan lain-lain, banyak deh. oke, kita eliminasi masalah, ini yang penting, bisa eliminasi. seperti indonesian idol aja ya. wkwkkw

A. eliminasi permasalahan

  1. internet client bermasalah? tidak mungkin. karena doi bisa buka yutub dan web web lain
  2. trafik network server bermasalah, ? tidak mungkin juga. karena itu diakses jam 11 malam, yang begitu di konfirmasi ke pihak provider juga aman.
  3. logic dari aplikasi, ? bisa jadi. mari kita cek untuk memastikan.
  4. utilitas server bermasalah ? bisa jadi, mari kita cek untuk memastikan.

B. cek utilisasi server

kemudian, saya akses server. hal pertama yang dilakukan adalah ketik htop . wkwkw, ini perintah paling lazim dilakukan untuk liat kondisi server.

dan ternyata, benar… resourcenya CPU nya tinggi banget. nah, ada apa ini ? wah wah.. kok bisa. ini yang bikin error disisi usernya

mentok cuk

mentok cuk

wealah, kok bisa ya CPU 16 core mentok. ini server ngapain ya ? seperti sedang dipakai mining Bitcoin ajah, wkwkkw. sek. kok ya jadi kepikiran ya mining Bitcoin pake server, lumayan juga buat nambah asupan gizi dimasa pandemi gini, wkwkwkw. wes wes sadar.

agak aneh bagi saya, dan bagi teman-teman yang saya tanyai. apalagi setelah melihat dari fungsi aplikasi, kegunaan, jumlah user akses, dan logicnya. 16 core VCPU harusnya udah lebih dari cukup.

nah, bagi orang yang panikan, biasanya langsung buru-buru untuk menjustifikasi masalah pada cpu yang penuh, dan harus di tambah, tidak main-main, 4 kali lipat sekaligus. wew, emangnya mau bikin Data Center Bos pakai 64 core ??? 😀 lagian, belum tentu kan masalahnya teratasi ????. tenang, mari kita cari tau masalahnya lebih dalam.

C. cek aplikasi yang memakan resource

ada dua aplikasi yang tertinggi memakan resource dari server tersebut, yang pertama database, yang kedua web server. saya melakukan penangkapan slow query log pada kedua aplikasi tersebut. yang pertama backend web server hasilnya :

Screenshot_2

benar, aplikasi tersebut menggunakan engine php untuk menjalankannya. perlu diingat, php itu bukan akronim dari Pemberi Harapan Palsu , ya.

dari error php tersebut mengarah ke database.

Screenshot_1

benar, satu query di eksekusi sampai dengan 15 -20 detik, panteslah error disisi clientnya TCP error.karena server gagal melayani permintaan dari client.

sampai disini, sysadmin harus berkomunikasi dengan Programmer dan Database Engineer. harus ada hubungan yang harmonis antara ketiga elemen tersebut.

hubungan ini tidak akan terjadi jika sebuah project hanya di handle oleh satu orang saja. biasa di sebut Full Stack Developer. dia programmernya, dia database enginernya, dia juga sysadminnya. bisa mabok darat doi. wkwkwkw

sysadmin menanyakan kepada Database engineer, apakah query pada aplikasi sudah di sederhanakan secara maksimal. jika jawabannya sudah, namun masih terdapat error slow query log. maka harus mencari penyebab lainnya.

D. pengecekan di sisi perangkat.

pengecekan dilanjutkan disisi perangkat. yang berhubungan dengan itu adalah perangkat Input Output. ada dua, NIC dan Disk. saya cek NIC terlebih dahulu. setelah di cek, NIC dalam kondisi baik. NIC dengan 10 Gbps dapat dilewati dengan mulus oleh data-data yang di transfer.

kemudian say cek Disk. untuk cek disk, bisa menggunakan hdparm, fdisk, dll, banyak toolsnya, disini saya menggunakan fio. yaitu aplikasi untuk mengecek Read & Write pada Disk. dan, setelah di cek ini hasilnya :

iops

iops

FYI, server ini masih menggunakan HDD , IOPS segitu untuk digunakan aplikasi yang trafik dan Read Write datanya tinggi, sangat jelek, bahkan bisa dikatakan jeblok. lihat saja Readnya, hanya 38.

beberapa orang yang pasrah dengan keadaan, maksudnya ya hanya punya server itu dan gak mungkin upgrade, maka akan mengakali dengan memecahnya menjadi banyak bagian aplikasi pada server.

untuk aplikasi, bisa menggunakan teknologi kekinian yang biasa di kenal Microservices. bisa di baca disini : https://medium.com/codelabs-unikom/microservices-apaan-tuh-b9f5d56e8848

untuk database, bisa upgrade ke yang lebih mumpuni untuk pengolahan data besar, Postgresql, atau Monggo DB lebih sangat bagus. setelah itu di cluster. Read dan Write database di pisah, menggunakan Proxy. pasti akan jadi pekerjaan berat nan keren. ya gimana lagi, adanya server itu. wkwkwkw

solusi yang kedua, upgrade SSD, maka masalah IOPS beres. begini penampakan IOPS yang menggunakan SSD

iops2

jauh banget kan ya ? hehehe

oke. lanjut.

pada kasus ini, server sudah upgrade menggunakan SSD, dan ternyata, aplikasi sudah beres, aman dan kenceng.

coba deh di lihat CPU nya, pasti tidak load mentok lagi. karena query yang di Read dan Write di Dsik tidak antri, tidak lama lagi waktunya, otomatis, CPU juga tidak bekerja keras lagi. dan loadnya menurun.

sampai disini saya tidak cek server lagi dari sisi sistem Operasi, karena sudah di handle oleh sysadminnya. saya hanya menyediakan SSD.

jadi, tidak perlu upgrade CPU kan ? bayangkan saja jika harus upgrade CPU, larang regone Rekkkkkk. dan kerjaannya ribet Rekkkk. kudu backup data, matiin server, bongkar, halah, mumet. semetara aplikasi diburu kudu running dan yang lebih kacau, bisa jadi setelah upgrade CPU masalah tidak teratasi.

Mal Praktek Rekkkk jenenge neng dunia kedokteran. 😀

yoweslah, sekian aja, yang penting client udah tersenyum lebar karena aplikasinya udah aman. disitu saya merasa dipuasin oleh client . walaupun clientnya LANANGAN.

Bagikan saja, itu tidak berat

Postgresql database auto restore

Halo, hari yang lelah, setelah membuat automation dump restore database mariadb/mysql, kali ini membuat script untuk auto dump dan restore untuk database Postgresql.

saya tidak akan mengulang, saya mau merujuk dari artikel saya sebelumnya : http://mandrivaputri.info/2020/08/membangun-data-ware-house-yang-aman/

artikel diatas memang sulit di pahami, karena basic nya saya memang bukan penulis apalagi pengajar, wkwkwkw, tapi setidaknya ini catatan bagi saya jika suatu saat ada pekerjaan serupa, jadi saya bisa lihat lagi dokumentasi saya. atau catatan ini bisa jadi portofolio saya jika saya hendak melamar pekerjaan di tempat lain :p

langsung saja ke script yah, script ini di jalankan di server :

{DATA WARE HOUSE}

yang pertama, kamu pastikan dulu kalau database server untuk postgresqlnya sudah terinstall.

bisa membaca artikel disini : https://computingforgeeks.com/how-to-install-postgresql-12-on-centos-7/

setelah itu, jalankan script dan cronjobnya pada user postgres

[root@db-warehouse ~]# su postgres

bash-4.2$ vi importpostgre.sh
#import db postgre
echo “halo bos”
dropdb database
createdb database
echo “buat db selesai”
cd /home/postgre/db
tar -xf *.tar.bz2
echo “extrac rampung”
rm -rf *.tar.bz2
echo “tar bz sudah di hapus”
for i in `find /home/postgre/db -type f -ctime -1`
do
psql database < $i
done
cd /home/postgre/db
rm -rf *
echo “rampung”

nah, jadi seperti itu scriptnya. jalankan di cronjob pada user postgres.

bash-4.2$ crontab -e

ya pokoknya gitulah, hehehe :*

Bagikan saja, itu tidak berat

Membangun data Ware House yang aman

Halo, kebetulan saat ini saya sedang membangun sebuah data Ware House.

apa itu data ware house ? yaitu sekumpulan database dari bermacam aplikasi yang di kumpulkan dalam satu server.

tujuan adalah untuk melakukan pengolahan data yang sumber datanya di ambil dari bermacam aplikasi tersebut. besar dong ? tentu, namanya juga ware house = gudang data.

kenapa tidak dilakukan pengolahan langsung di aplikasinya ? -sudah, tapi terkadang ada kebutuhan khusus diluar dari aplikasi. karena untuk melakukan perubahan di Production aplikasi sangat tidak di sarankan. SANGAT TIDAKKKKKKKK. JANGAN, TIDAK BOLEH. TITIK.

caranya bagaimana, ? logikanya simple, implementasinya yang gak simple wkwkwkwk

bahan-bahan yang di butuhkan :

1. server Production Aplikasi

2. server backup

3. server data ware house

tahapannya adalah :

{SERVER PRODUCTION}

  1. melakukan backup rutin pada server aplikasi production, caranya : http://mandrivaputri.info/2019/07/membuat-auto-backup-database-server-mariadb/

hal diatas dilakukan di semua server aplikasi yang ingin ditarik databasenya. oh ya, tutorial diatas adalah server dengan database mysql. jika databasenya berbeda, postgre misalnya, lakukan backup dengan cara yang ada di gugel, gampang, asalkan mau.

{SERVER BACKUP}

2. menarik ( get ) database hasil backup di server aplikasi production ke server backup, ini pakai rsync. contohnya seperti ini :

rsync -rzhav –update -e ‘ssh -p 220’ root@192.168.10.3:/home/centos/backupdb/ /data/192.168.10.3/db/

script diatas adalah contoh. jalankan ini di server backup, jalankan di cronjob secara rutin pakai bash script. cara nya cari di google, banyak.

kemudian, mengirim file hasil tarikan di server backup ke server Data ware house.

Screenshot_71

oh iya, siapa bilang sysadmin itu gak perlu ngerti programming. sysadmin harus ngerti programming, komunikasi antar mesin, itu perlu programming, bahasa pemograman yang sering digunakan untuk mesin adalah Python dan Shell Script. diatas adalah sedikit contoh bahasa pemograman shell script dengan bash command.

soalnya saya nyari-nyari di google gak nemu, akhirnya saya bongkar kitab lama saya. hahaha

saya jabarkan code diatas :

untuk i , temukan file yang modifikasi waktunya -1 hari di dalam folder /data/192.168.10.3/db

lalu

kirim data yang di temukan tersebut ke user root yang berada di server 192.168.11.4 di folder /root/db

selesai

{SERVER DATA WARE HOUSE}

setelah server Data ware house menerima kiriman backup database server Production dari server Backup, server Data Ware House bertugas untuk melakukan import database kiriman itu ke database server di Server Data Ware House. bingung ? ngopi dulu gih~~

saya membuat sebuah bash script yang saya jalankan secara rutin. oiya, timing waktu sangat penting, antara :

-server production melakukan backup internal

-server backup menarik data dari server production

-server backup mengirim data ke server data ware house

-server data ware house melakukan import database

timing waktu harus di perhatikan agar tidak miskom. hehehe

begini scriptnya :

Screenshot_72

penjabaran :

baris pertama : melakukan penghapusan database

baris kedua : membuat database baru

baris ketiga : untuk i , temukan file yang modifikasi waktunya -1 hari di dalam folder /root/xxx

baris ke empat : maka

baris ke lima : import file database hasil backupan di folder i ke database server

baris ke enam : selesai

baris ke tujuh : masuk ke folder /root/xxx

baris ke delapan : hapus semua file di folder tsb.

sampai disini, data ware house sudah selesai di bangun, kamu bebas mengolah data di data ware house tersebut tanpa harus menyentuh database aplikasi production. lebih aman bukan ?

disini kamu bisa mengolah data dengan melakukan query, terserah, mau pakai PHP, atau pun tools pengolah data seperti tableau.

sistem ini berjalan secara automatic, data di update sesuai dengan data asli di aplikasi production dengan waktu yang di tentukan oleh cronjob.

kamu tinggal bobok manis, biarkan tim pengolah data yang menggunakan layanan ini, kamu paling tinggal troubleshoot tipis-tipis aja kalau ada masalah. 🙂

Bagikan saja, itu tidak berat

Disable akses root pada phpMyAdmin

phpmyadmin

phpmyadmin

jutaan orang tidak menyadari, bahwa root akses dapat membayakan dirinya sendiri..

melakukan disable root, baik itu login maupun akses, itu memang pedih. bagi sebagian orang yang tidak tau, hehe

metode ini disebut-sebut merenggut kenyamanan dari seorang developer, padahal, yang namanya developer, itu kan sebelum live di production, ya dibuatnya di developer. nah, di production, itu memang harus benar-benar di konfigurasi dengan aman, salah satunya dengan disable root login/akses. jadi kalau production, jangankan root akses, phpmyadmin juga pasti tidak ada, port database juga tidak ada. ya pokoknya seperti itulah, hehehe,

mudah-mudahan kalian mengerti, karena saya tidak sedang berhasrat menulis saat ini. 😀

studi kasusnya linux ubuntu 16

pertama, edit file konfigurasi :

vi /etc/phpmyadmin/config.inc.php

allowroot

allowroot

temukan kata-kata tersebut dalam file yang di edit, pastikan valuenya FALSE

jika belum ada, bisa ditambahkan sendiri

$cfg[‘Servers’][$i][‘AllowRoot’] =FALSE;

kemudian save, dan restart web servernya.

systemctl restart apache2

 

Bagikan saja, itu tidak berat

menambahkan kapasitas “diluar jangkauan” pada nextcloud

kasusnya begini, pada server nextcloud yang saya buat, kapasitas penyimpanan hanya saya sediakan sebesar 10 TeraByte, sementara ada user yang meminta kapasitas penyimpanan lebih besar daripada itu, saya juga bingung, doi mau nyimpan apa di server sampai minta sebesar itu, film india kali, hehehehe…

untuk menyelesaikan kasus tersebut. hal yang saya lakukan adalah :

  1. menambahkan kapasitas harddisk server nextcloud
  2. membuat pastisi terpisah pada server untuk user tersebut
  3. attach harddisk tersebut pada akun yang meminta.

point 1 saya selesaikan dengan membuat volume, FIY , cloud servernya menggunakan openstack, jadi saya bisa membuat volume untuk saya attach pada server nexcloudnya. tutorialnya belum ada, nanti nyusul deh.

point ke 2, saya selesaikan setelah membuat volume pada point satu, caranya :

Mempartisi harddisk linux yang lebih dari 2 TB

point ke 3, saya selesaikan dengan langkah-langkah berikut :

login nextcloud

login nextcloud

yang pertama harus login admin dulu, tanpa login admin, kamu bukan apa-apa,. hehehe

setelah login, pada admin, pilih menu settings

setting

setting

kemudian, kamu pilih menu external storages pada Administration

nextcloud

nextcloud

kemudian mulai untuk attach pada akun nextcloud. disini karena bentuknya volume yang saya atatach pada server tersebut, maka saya pilih metodenya local , memasukkan folder berikut akun mana yang di kehendaki. lalu klik centang di sebelahnya.

external storages

external storages

Bai the wayyy, selain metode local, ada juga metode-metode lain, misalnya SFTP , amazon dan lain lain.

sampai disini , sudah selesai. mudah kan.?

Bagikan saja, itu tidak berat

Mempartisi harddisk linux yang lebih dari 2 TB

halo, pada tutorial kali ini adalah cara bagaimana mempartisi harddisk linux yang lebih dari 2 TB.

kasusnya adalah saya membuat volume hdd sebesar 20 TB dan saya attach ke instance server, namun gagal mempartisi menggunakan perintah yang umum, yaitu fdisk.

setelah saya cari tau melalui om google, perintah untuk mempartisi harddisk di linux yang lebih dari 2 TB itu menggunakan perintah parted. oke, cekidot.

fdisk

fdisk

langkah awal adalah memastikan hdd sudah ada di server dan termuat dalam disk mana dengan mengetik perintah :

fdisk -l

dari gambar diatas, hdd sudak berada diserver yang termount di /dev/vdc sebesar 20 TB

parted

parted

langkah selanjutnya adalah mengetikkan perintah parted :

parted /dev/vdc

lalu masukkan perintah-perintah seperti gambar diatas sampai dengan perintah quit.

setelah quit, kini saatnya membuat file system pada harddisk dengan perintah :

mkfs.ext4 /dev/vdc

mkfs.ext4 /dev/sdb1

mkfs.ext4 /dev/vdc

sampai done.

kemudian membuat folder untuk mounting harddisk tersebut, bisa juga di folder yang telah ada, misalnya /media atau /mnt. setelah folder tersedia, berikutnya ketikkan perintah mount :

mount /dev/vdc /mnt

kemudian cek dengan perintah : df -h

Screenshot_1059

harddisk sudah termounting ke folder dan dapat digunakan.

Bagikan saja, itu tidak berat

menambah kapasitas volume pada project di openstack

hai, tutorial kali ini adalah menambahkan kapasitas volume pada project di openstack.

kasusnya adalah, sewaktu project di buat, kapasitas volume pada project tersebut hanya di buat sebesar 19 TeraByte. sementara, saya ingin membuat sebuah volume yang lebih besar dari itu. otomatis donk, jadi limited. untuk menambahkan, berikut caranya, mudah kok lewat GUI.

project openstack

project openstack

yang pertama, dari dashboard menuju menu admin, kemudian cari menu project, lalu kamu pilih project mana yang akan di edit jumlah volumenya.

edit

edit

setelah itu, pilih menu edit project > quotas. maka akan tampil seperti dibawah ini :

Screenshot_1053

kamu tinggal edit sesuai keinginan, lalu klik save. tapi yang perlu di ingat, kamu harus tau besaran fisik dari harddisk yang kamu miliki agar tidak over.

sampai disini, volume sudah berubah

Screenshot_1050

Bagikan saja, itu tidak berat

troubleshoot No route to host setelah ganti port SSH di centOS

hmmm, ceritanya, saya baru saja ganti port SSH di linux untuk alasan keamanan. cara gantinya ada pada artikel ini

Hardening Server #1 . merubah default port akses SSH pada linux

tapi yang muncul malah error seperti ini

ssh error

ssh error

setelah saya googling, rupanya karena selinux dan firewall saya aktif. cara solvednya bukan dengan mematikan selinux maupun firewall, tapi saya menambahkan port SSH costum saya pada rules firewall dan selinux.

semanage port -a -t ssh_port_t -p tcp #PORTCOSTUM

kemudian di firewallnya juga.

firewall-cmd –permanent –add-port=#PORTCOSTUM/tcp
firewall-cmd –reload

jika muncul tulisan success, silahkan coba remote lagi servernya menggunakan port yang baru.

terima kasih telah membaca,

Bagikan saja, itu tidak berat

Membuat instance di openstack

tulisan kali ini adalah cara membuat instance di openstack. openstack itu virtualizor, sama seperti proxmox dan vmware vspare.

*PERHATIAN : tutorial ini hanya untuk orang yang belum pernah berurusan dengan openstack, yang sudah PRO dan hebat, harap SKIP*

sedangkan instance, adalah virtual private server.

pertama-tama, kamu harus login ke dashboard openstack.

login openstack

login openstack

setelah login, pastikan kamu mau buat intance nya di project mana. kemudian klik launch instance.

lauch

setelah itu, mulai memberi nama instance, pada percobaan kali ini, saya memang benar akan membuat server dummy untuk scan vulnerability di aplikasi berbasis web

name instance

name instance

kemudian memilih image, image disini maksudnya adalah jenis sistem operasi apa yang akan dijalankan di server.

image

image

setelah itu, memilih flavor, flavor artinya spesifikasi yang akan dimuat pada server

flavor

flavor

kemudian pilih network, network disini, pilihlah yang internal dari openstack, yaitu network yang berkomunikasi didalam lingkup openstack

network

network

kemudian, pilih keypair. kamu juga bisa inport keypair yang kamu miliki. keypair ini berguna untuk akses server nantinya

keypair

keypair

security group. ini adalah firewall, membatasi port mana saja yang bisa melewati server, defaultnya kita beri all saja, karena biasanya untuk firewall ada diperangkat terpisah.

security

setelah semua yang berbintang diisi, kemudian klik launch instance, tunggu beberapa detik/menit, maka instance akan terbentuk.

dummy server

setelah terbentuk, kemudian menambahkan network eksternal agak server bisa di remote. klik assosiate IP

assosiasi ip

assosiasi ip

klik logo tambah

tambah

jangan lupa diberi namabah, biar mudah tracenya. kemudian klik alocate IP

nama network

nama network

karena sistemnya DHCP, maka IP akan tertambah otomatis.

sukses penambahan ip

sampai tutorial ini selesai ditulis, server sudah bisa di remote menggunakan IP ( dijaringan internal ) dan keypair yang ditambahkan.

setelah selesai membaut instance, kamu bisa melakukan hardening server terlebih dahulu. banyak metodenya, bisa dimulai dari hardening SSH seperti dibawah ini

Hardening Server #1 . merubah default port akses SSH pada linux

atau melakukan instalasi malware detect seperti dibawah ini

Hardening Server #2 Instalasi dan konfigurasi Malware Detect pada linux server

 

 

Bagikan saja, itu tidak berat

solusi harddisk server VPS tidak berubah setelah di tambah

Salah satu VPS saya penuh disknya, tapi harddisk server VPS tidak berubah setelah di tambah. setelah saya cari-cari solusinya, akhirnya nemu, walaupun awalnya saya riskan karena bisa saja datanya kehapus setelah di eksekusi. 😀

penampakan hdd tidak berubah

penampakan hdd tidak berubah

padahal sudah saya tambah jadi 1 TB. tapi yang terbaca si sistem masih 20 GB.

solusinya :

melepaskan disknamenya dulu dengan perintah

ant@linux:~$ growpart /dev/sda 1

setelah itu, serize sekaligus memberi diskname baru

ant@linux:~$ resize2fs /dev/vda1

sudah, beres.

penampakan disk sudah jadi 1 TB

penampakan disk sudah jadi 1 TB

sekian, terima gaji.

Bagikan saja, itu tidak berat