Friday, October 21, 2016

GeoIP

GeoIP adalah singkatan dari Geolocation IP Adress. Sesuai dengan namanya, GeoIP merupakan suatu metode untuk mengetahui lokasi geografis suatu komputer berdasarkan ip address. Biasanya ip address yang terdaftar pada database dan dapat dilacak adalah ip publik baik ipv4 ataupun ipv6.

GeoIP biasanya digunakan pada sebuah situs untuk mengetahui darimana pengunjung web berasal(traffic analysis). GeoIP ini juga sangat membantu ketika ada orang yang iseng kepada web kita, dan kita ingin melacak darimana ip tersebut berasal.

Lalu bagaimana kita menggunakan/meng-aplikasikan GeoIP ke dalam source code kita?, untungnya maxmind yang menyediakan GeoIP ini menyediakan api client untuk beberapa beberapa bahasa pemrogram seperti :
  • .NET(C#)
  • Java
  • Javascript
  • Perl
  • PHP
  • Python
untuk bahasa pemrograman lain bisa langsung mengakses REST API maxmind sendiri yang hasilnya tentu saja dalam bentuk json. Untuk lebih jelasnya silahkan lihat disini maxmind documentation. Maxmind juga menyediakan user premium alias berbayar untuk fitur yang lebih banyak seperti deteksi anonymous ip, connection type, domain, isp dll.

Pada artikel ini, saya hanya akan memperlihatkan bagaimana menggunakan api client GeoIP ini dengan bahasa Python dan menggunakan internet modem usb dengan kartu 3. Berikut langkah – langkah nya :

  • download geolite free database dari link berikut ini (yang city dengan format Maxmind DB) : http://dev.maxmind.com/geoip/geoip2/geolite2/
  • install api client untuk python : pip install geoip2 (saya menggunakan python3)
  • setelah langkan pertama dan kedua selesai, anda bisa mencoba menggunakan script code python berikut ini :

import geoip2.database

# read mmdb database
reader = geoip2.database.Reader('GeoLite2-City.mmdb')

# assign ip address, example 124.153.33.3
ipAddress = '124.153.33.3'
response = reader.city(ipAddress)

print("IP : "+ipAddress)

# get country name
print("Country : "+response.country.name)

# get city name
print("City : "+response.city.name)

# get Lat and Long
print("Lat : "+str(response.location.latitude))
print("Long : "+str(response.location.longitude))

Ini adalah hasil dari program di atas


Mari kita cari dengan google map berdasarkan latitude dan longitude nya


Hasilnya seperti di atas, mengarah ke kota Bandung dan dekat dengan gedung sate. lalu, apakah itu lokasi komputer saya yang terhubung dengan internet?. Tentu saja bukan, kira" berajarak 3KM dari lokasi asli saya. Sebenarnya ini tergantung anda menggunakan ISP apa, disini saya menggunakan kartu "tri" dimana beberapa provider internet seperti tri contohnya, hanya memberikan ip private kepada client yang kemudian untuk ter koneksi dengan internet akan melalui router yang sudah dikonfigurasi NAT. Jadi ip address di atas yang berlokasi di Bandung dan dekat gedung sate tersebut adalah ip router dari provider tri yang saya gunakan untuk terhubung dengan internet.

untuk lebih jelasnya mengenai api client geoip khususnya yang menggunakan bahasa python, bisa mengujungi situs berikut ini : http://geoip2.readthedocs.io/en/latest/

sekian artikel kali ini, mohon maaf apabila ada kesalahan dari materi yang saya sampaikan. terima kasih sudah membaca.

referensi :
http://geoip2.readthedocs.io/en/latest/
https://docs.nexcess.net/article/what-is-geoip.html

Monday, August 15, 2016

Database Replication (Master to Slave) MySQL

Hallo gengs, sudah lama rasanya blog ini tidak diupdate. Pada tutorial kali ini saya akan membahas cara setup database replication (master to slave) di MySQL. 

Apa itu database replication ?, seperti nama nya database replication berarti membuat replika/copy an dari satu lebih database secara otomatis. Biasanya terdapat istilah database master(sebagai sumber data) dan database slave(sebagai tujuan data).

Terdapat pula beberapa jenis replikasi database yaitu :
  • Dilihat dari arah replikasinya:
    • master to slave -> replikasi ini bersifat 1 arah, hanya dari master menuju slave
    • master to master -> replikasi 2 arah, pada tipe replikasi ini suatu database bisa menjadi database master(sumber data) dan juga menjadi database slave yang berarti menerima data dari database lain.
  • Dari jenis komunikasinya:
    • synchronous -> biasanya digunakan ketika kita membutuhkan real time database database application
    • asynchronous
Kira - kira seperti inilah gambaran replikasi database master to slave maupun master to master

Untuk lebih jelas mengenai jenis komunikasi synchronous dan asynchronous silahkan googling :D

Karna pada tutorial kali ini kita hanya akan membuat "simple database replication" maka saya hanya menggunakan 2 buat database server, satu berperan sebagai master satu lagi berperan sebagai slave dan menggunakan jenis komunikasi asynchronous(default mysql). Kira" seperti ini ilustrasinya :
berikut ip address yang akan saya gunakan pada masing" server
master : 192.168.1.1
slave : 192.168.1.2

NOTE : JIKA TEMAN" MENGGUNAKAN VIRTUALBOX, JANGAN MENG CLONE UNTUK MEMBUAT 2 BUAH SERVER KARENA AKAN MEMILIKI UUID YANG SAMA.

Pertama kita akan mengsetting ip address dikedua server (saya menggunakan ubuntu server 16.04) :



Langkah selanjutnya adalah membuat database di database master dan slave (nama database harus sama) disini database yang saya buat adalah "test" :



Selanjutnya adalah konfigurasi database master letak file konfigurasi mysql di ubuntu 16.04 berada di direktori /etc/mysql/mysq.conf.d/mysqld.cnf edit menjadi seperti dibawah ini (binlog_do_db adalah nama database yang akan di replikasi)  :



restart mysql : /etc/init.d/mysql restart

Masuk kembali ke command line mysql, kali ini kita akan membuat user untuk database replication :


Pada tutorial kali ini replication bekerja berdasarkan log database dan position, setiap ada perubahan pada database "test" (pada kasus ini) nama file dan position akan berubah.

Langkah selanjutnya adalah konfigurasi database slave, letak konfigurasi nya sama seperti pada database master yakni di /etc/mysql/mysq.conf.d/mysqld.cnf, edit menjadi seperti dibawah ini (perhatikan server id harus berbeda dari database master) :


restart mysql : /etc/init.d/mysql restart

Hal terakhir yang harus kita lakukan adalah mengaktifkan database replication pada database slave :


Ketik show slave status; (di slave) untuk melihat apakah replikasi berhasil. coba juga untuk membuat table kemudian memasukan data ke table tersebut(di master) kemudian lihat kembali di database slave.

Demikian tutorial kali ini. Mohon maaf apabila ada kekurangan maupun kesalahan. Harap koreksi jika ada yang salah, terima kasih :)

note : jika terdapat error untuk mysql bisa dilihat di /var/log/mysql/error.log
untuk informasi lebih lanjut mengenai database replication bisa kunjungi link berikut ini :  
http://dev.mysql.com/doc/refman/5.7/en/replication.html

referensi :
http://dev.mysql.com/doc/refman/5.7/en/replication.html
https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql