Rabu, 30 Oktober 2019

Konfigurasi Apache ZooKeeper Sebagai Service Pada Ubuntu 18.04

Pindahkan folder ZooKeeper ke dalam /opt/
sudo cp -R zookeeper_dir /opt/

Buat symbolic link ke direktori tersebut
sudo ln -s /opt/zookeeper_dir /opt/zookeeper

Buat file zookeeper.service di systemd
sudo nano /etc/systemd/system/zookeeper.service

Masukkan konten zookeeper.sevice berikut, sesuaikan jika perlu
[Unit]
Description=Zookeeper Daemon
Documentation=http://zookeeper.apache.org
Requires=network.target
After=network.target

[Service]
Type=forking
WorkingDirectory=/opt/zookeeper
User=zookeeperone
Group=zookeeper
ExecStart=/opt/zookeeper/bin/zkServer.sh start /opt/zookeeper/conf/zoo.cfg
ExecStop=/opt/zookeeper/bin/zkServer.sh stop/ opt/zookeeper/conf/zoo.cfg
ExecReload=/opt/zookeeper/bin/zkServer.sh restart /opt/zookeeper/conf/zoo.cfg
TimeoutSec=30
Restart=on-failure
StartLimitInterval=60
StartLimitBurst=30

[Install]
WantedBy=default.target
Pada kasus saya, tricky part ada di User dan Group, dimana saya harus memasukkan user yang digunakan pada waktu instalasi zookeeper, dalam hal ini zookeeperone.

Update .bashrc
source ~/.bashrc

Untuk mengaktifkan service
sudo systemctl enable zookeeper

Command lain terkait service zookeeper tersebut
systemctl start zookeeper
service zookeeper start
systemctl stop zookeeper
service zookeeper stop
systemctl reload zookeeper
service zookeeper reload


Catatan Command Ubuntu Server 18.04

Menjalankan aplikasi di background

Pause aplikasi dengan menekan  CTRL+Z  lalu jalankan command

bg

Mengecek hardware specs, brand

dmidecode | grep -A3 '^System Information'

Mengecek serial number

dmidecode -s system-serial-number 

Mengecek apakah system running di KVM

systemd-detect-virt

Mengecek hardware (CPU RAM dll) dan running processes

htop

Menambah maksimum heap JVM

sudo nano /etc/profile 
Tambahkan baris berikut: 
export _JAVA_OPTIONS=-Xmx2048m
Kemudian 
sudo reboot
Untuk mengecek heap JVM 
java -XshowSettings:vm

Menambah user kedalam sebuah group

sudo usermod -aG group username

Menghapus user dari sebuah group

sudo deluser username group

Mengecek apakah suatu port sedang digunakan

Dapat menggunakan salah satu command berikut: 
sudo lsof -i -P -n | grep LISTEN 
sudo netstat -tulpn | grep LISTEN 
sudo lsof -i:[port_number] 
sudo nmap -sTU -0 [ip_address]

Menambahkan directory ke dalam $PATH

sudo nano /etc/environment
Tambahkan directory ke dalam $PATH 
sudo reboot

Mengecek ketersediaan slot memory (RAM)

sudo lshw -class memory

Membuat file executable (misal: .sh bash script)

chmod +x path

Command cheatsheet

A ; B        # Run A then B, regardless of success of A 
A && B   # Run B if and only if A succeeded 
A || B       # Run B if and only if A failed 
A &         # Run A in background

Catatan Command Apache Kafka di Ubuntu Server 18.04

Hanya sebagai pengingat saja.

List all topic
kafka_dir/bin/kafka-topics.sh --list --zookeeper zklist:port

Detail topic
kafka_dir/bin/kafka-topics.sh --describe --zookeeper zklist:port --topic [topic-name]

Membuat topic
kafka_dir/bin/kafka-topics.sh --create --zookeeper zklist:port --replication-factor [x] --partitions [y] --topic [topic-name]

Menghapus topic
kafka_dir/bin/kafka-topics.sh --delete --zookeeper zklist:port --topic [topic-name]

Konfigurasi waktu rebalance
leader.imbalance.check.inverval.second
(default 5 menit)

Rebalance manual
kafka_dir/bin/kafka-preferred-replica-election.sh --zookeeper zklist:port

Melihat daftar broker di cluster
Melalui server dedicated zookeeper
zk_dir/bin/zkCli.sh -server addr:port
ls /brokers/ids # daftar broker aktif
ls /brokers/topics # daftar topic
get /brokers/id/[x] # detail broker dengan id [x]
deleteall /brokers/topics/[abc] # konfigurasi ulang topic [abc]

Mengaktifkan JMX Monitoring
$KAFKA_JMX_OPTS JMX_PORT=[your_port_number] ./kafka-server-start.sh -daemon ../config/server.properties

Selasa, 29 Oktober 2019

Mengatasi Kafka Error Group Coordinator Not Available

Saya melakukan instalasi Kafka pada 3 node. Untuk melakukan pengujian fault tolerance, saya melakukan pengujian dengan cara mematikan salah satu node untuk memastikan data tetap mengalir. Yang unik adalah, jika saya mematikan node 2 atau node 3, Consumer tetap dapat menerima data dengan baik. Dalam hal ini menunjukkan bahwa rebalance berhasil dilakukan dengan baik oleh ZooKeeper. Namun, jika node 1 dimatikan, Consumer gagal menerima pesan, dengan error GROUP COORDINATOR NOT AVAILABLE.

Setelah melalui beberapa tahap googling, akhirnya saya berhasil menemukan penyebabnya. Yaitu:
  1. Node 1 adalah GroupCoordinator, dimana itu berarti ia adalah node yang bekerja sebagai leader, mengatur node lainnya (follower) dalam menangani topic sebagai sebuah cluster, dalam hal ini adalah proses yang dilakukan oleh Producer dan Consumer.
  2. Seharusnya, pada saat sebuah GroupCoordinator mati, ZooKeeper akan melakukan reassignment tugas leader dari node tersebut ke node lainnya. Namun, hal ini tidak terjadi sehingga Consumer gagal mendapatkan data karena cluster tidak memiliki leader.
Pertanyaannya, bagaimana proses reassignment ini tidak terjadi?

Kafka memiliki sebuah topic yang di-generate secara otomatis, yaitu __consumer_offsets yang berada di GroupCoordinator dan topic ini diperlukan agar Kafka dapat bekerja dengan normal. Namun ternyata, secara default, replication factor Kafka Topic adalah 1. Termasuk dalam hal ini adalah topic __comsumer_offsets tersebut. Dengan demikian, apabila GroupCoordinator mati, maka Kafka tidak dapat bekerja karena tidak ada topic tersebut di node lainnya.

Untuk mengecek topic __consumer_offsets
kafka_dir/bin/kafka-topics.sh --describe --zookeeper ip_address:port --topic __consumer_offsets 

Oleh karena itu, untuk menangani error tersebut di atas, cukup dengan mereplikasi topic __consumer_offsets, langkahnya:
  1. Matikan semua node Kafka
    kafka_dir/bin/kafka-server-stop.sh
  2. Tambahkan konfigurasi default replication factor
    nano kafka_dir/config/server.properties
    Tambahkan baris berikut:
    offsets.topic.replication.factor=3
    default.replication.factor=3
  3. Konfigurasi ulang topic __consumer_offsetsMasuk ke server Zookeeper
    zookeeper_dir/zkCli.sh -server localhost:2181
    rmr /brokers/topics/__consumer_offsets

    Pada versi ZooKeeper terbaru
    deleteall /brokers/topics/__consumer_offsets
  4. Restart semua node Kafka
    kafka_dir/bin/kafka-server-start.sh kafka_dir/config/server.properties
Demikian.

Minggu, 27 Oktober 2019

Konfigurasi IP Statik Pada Ubuntu Server 18.04

Konfigurasi IP pada Ubuntu 18.04 berbeda dengan versi sebelumnya, yaitu mengunakan netplan. Langkah yang dilakukan adalah sebagai berikut:

1. Generate file yaml
sudo netplan generate

2. Edit file konfigurasi yaml
sudo nano /etc/netplan/01-xxxxxx.yaml
(sesuaikan nama file)

3. Tambahkan atau edit baris berikut
        addresses: [10.102.235.74/24]
        gateway4: 10.102.235.240
        nameservers:
            addresses: [8.8.8.8]
        dhcp4: false
(dhcp4 dirubah ke false)



4. Apply konfigurasi
sudo netplan apply

Demikian.

Sabtu, 26 Oktober 2019

Menangani Error KVM guest hangs at Escape character is ^]

UPDATE

tambahkan --extra-args earlyprint=serial,ttyS0,115200 saat instalasi berhasil mengatasi masalah ini.

OLD POST

Setelah instalasi guest VM pada host, kita dapat mengaksesnya melalui host console menggunakan command:
virsh console VM_NAME
Namun, apabila terjadi error
KVM guest hangs at Escape character is ^]
Silahkan coba langkah berikut:

  1. Matikan guest VM jika masih running
    virsh shutdown VM-NAME
  2. Kita perlu mount guest VM ke host
    sudo guestmount -d VM-NAME -i /mnt
  3. Edit file GRUB
    sudo nano /mnt/etc/default/grub
  4. Ubah baris
    GRUB_CMDLINE_LINUX=''"
    menjadi
    GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
    (sesuaikan baudrate dengan baudrate host)
  5. Ubah baris
    GRUB_CMDLINE_LINUX_DEFAULT="quite splash"
    menjadi
    GRUB_CMDLINE_LINUX_DEFAULT="... console=ttyS0"
  6. Pastikan baris berikut ada
    GRUB_TERMINAL=serial
    GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1"

    (sesuaikan baudrate dengan baudrate host)
  7. Untuk melakukan update-grub, edit file grub.cfg
    sudo nano /mnt/boot/grub/grub.cfg
  8. Cari blok dengan kode menuentry 'Ubuntu' --class ubuntu --class gnu-linux
  9. Masukkan kode berikut di belakang parameter ro di dalam blok tersebut (menggantikan parameter ro yang sudah ada)
    console=ttyS0,115200 earlyprint=serial,ttyS0,115200
    (sesuaikan baudrate dengan baudrate host)
  10. Umount guest VM
    sudo guestunmount /mnt
  11. Terakhir, start guest VM dan jalankan console
    virsh start VM-NAME && virsh console VM-NAME
 Semoga membantu.

Konfigurasi Static IP Pada Ubuntu Server 16.04

Untuk merubah konfigurasi IP pada Ubuntu Server 16.04 menjadi static, lakukan langkah sebagai berikut:
sudo nano /etc/network/interfaces
(dapat menggunakan editor lain selain nano)
Pada interface yang akan digunakan, ubah dhcp menjadi static, lalu tambahkan baris berikut:
address 192.168.1.33
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
(ganti IP address dan parameter lainnya sesuai dengan konfigurasi yang akan diterapkan)
Simpan konfigurasi, reboot.

Konfigurasi ini hanya berlaku untuk versi 16, Ubuntu 18 menggunakan tools lain untuk konfigurasi network interface.

Setup Guest Virtual Machine KVM Pada Ubuntu Server 18.04

Untuk melakukan setup guest VM menggunakan KVM pada Ubuntu Server 18.04, gunakan command sebagai berikut sebagai contoh:
sudo virt-install  \
-n KafkaOne  \
--description "Kafka Node One"  \
--os-type=Linux  \
--os-variant=ubuntu16.04  \
--ram=4000  \
--vcpus=4  \
--disk path=/var/lib/libvirt/images/kafkaone.img,bus=virtio,size=80  \
--network bridge:br0 \
--graphics none  \
--location ~/ubuntu-16.04.5-server-amd64.iso \
--extra-args console=ttyS0 \

Keterangan command di atas sebagai berikut:
sudo virt-install --> command untuk melakukan instalasi guest VM;
-n --> identitas guest VM;
--description --> deskripsi guest VM;
--os-type --> tipe OS yang akan diinstal pada guest VM;
--os-variant --> varian OS yang akand diinstal pada guest VM;
--ram --> ram yang akan diinstal pada guest VM, dengan satuan kilobytes;
--vcpus --> jumlah core CPU yang akan diinstal pada guest VM;
--disk --> konfigurasi storage pada guest VM;
--network --> konfigurasi jaringan antara guest VM dengan host VM;
--graphics --> konfigurasi graphics pada guest VM;
--location --> lokasi image dari OS yang akan kita instal;
Setelah menjalankan command tersebut, KVM akan melakukan setup guest VM pada KVM dan secara otomatis melakukan instalasi OS yang akan diinstal. Silahkan ikuti wizard yang ada sesuai dengan kebutuhan.

Rabu, 14 Agustus 2019

Perkenalkan Blog Baru Saya

Blog ini hanya sebagai catatan pribadi saya. Tidak ada yang penting disini.