Tag Archives

8 Articles
Tutorial Lengkap Patroni PostgreSQL
PostgreSQL database

Tutorial Lengkap Patroni PostgreSQL

Masih ingat tutorial saya tentang Patroni dahulu? Saya akan membuat tulisan lengkap dari nol sampai berjalan. Di akhir tutorial ini Anda bisa membuat kluster Patroni secara manual. Kalau Anda devops dan tertarik menulis resep untuk Ansible, Puppet, dan sejenisnya, saya harap artikel ini bisa menjadi acuan untuk mengerti Patroni.

Mesin-mesin yang Ada

Saya membagi setiap mesin yang digunakan dengan dua IP. Satu subnet IP internal yang digunakan untuk setiap mesin dalam kluster berkomunikasi dan satu subnet IP yang digunakan untuk akses luar. Implementasi fisik dengan menggunakan dua kartu jaringan (atau dua bonding fisik)  yang berbeda. Perbedaan jaringan untuk komunikasi internal dan komunikasi dengan klien ini selain menyediakan keamanan dalam isolasi, juga membuat koneksi internal atau pun eksternal tidak saling mengganggu.

 “Well, hell! PMP exam topics That’s no excuse for insulting me! You PMP exam topics 300-320 questions pdf are 300-320 questions pdf Ma’s PMP exam topics PMP exam topics own blood son, but did PMP exam topics she take on that time PMP exam topics Tony Fontaine shot you in the leg? 70-532 answer analysis No, she 70-532 answer analysis just 300-320 questions pdf sent for old Doc 70-532 answer analysis Fontaine to dress it and asked the doctor what ailed Tony’s aim. Said she guessed licker was spoiling his marksmanship. Remember how mad that made Tony?”Both boys yelled 70-532 answer analysis with laughter.“Ma’s a card!” said Brent with loving approval. “You can always count on her to do the right thing 300-320 questions pdf and 70-532 answer analysis not embarrass you in front of PMP exam topics folks.”  But Gerald remained Gerald. 300-320 questions pdf His habits PMP exam topics of living and his ideas changed, but his manners he would 300-075 certification exam not change, 300-075 certification exam even had he been 70-532 answer analysis able to change them. He admired 300-320 questions pdf the drawling 300-075 certification exam elegance of the 300-075 certification exam wealthy rice and cotton planters, who rode into Savannah from their moss-hung kingdoms, mounted 70-532 answer analysis on 300-320 questions pdf thoroughbred horses and followed by the carriages of their 300-320 questions pdf equally elegant ladies 70-532 answer analysis and the wagons 300-320 questions pdf of their slaves. But Gerald could never attain elegance. 70-532 answer analysis Their lazy, blurred voices fell pleasantly 300-075 certification exam 300-075 certification exam 300-320 questions pdf on PMP exam topics his PMP exam topics ears, but his 300-075 certification exam PMP exam topics own 300-075 certification exam brisk brogue clung to his tongue. He liked the casual 70-532 answer analysis 300-075 certification exam grace with which they PMP exam topics conducted affairs 300-320 questions pdf of importance, 300-320 questions pdf risking 300-320 questions pdf a fortune, a plantation or a slave 70-532 answer analysis 300-075 certification exam on the 300-075 certification exam turn 70-532 answer analysis of a card and writing off their losses with careless good humor and no more ado than when they scattered 300-320 questions pdf pennies to pickaninnies. But Gerald had known poverty, and PMP exam topics he could never PMP exam topics learn to lose money with 70-532 answer analysis good 300-075 certification exam humor or good 300-320 questions pdf 70-532 answer analysis 300-320 questions pdf grace. They were PMP exam topics a pleasant race, these coastal Georgians, with their soft-voiced, 70-532 answer analysis PMP exam topics quick rages and their charming inconsistencies, and Gerald liked them. But 300-075 certification exam there was a 300-075 certification exam brisk and 70-532 answer analysis restless vitality 300-075 certification exam about the young Irishman, fresh from a country where winds blew wet and chill, where misty swamps held no fevers, that 300-075 certification exam set him apart from these indolent gentle-folk of semi-tropical weather and malarial marshes.

Untuk mengurangi kompleksitas tutorial ini, saya hanya menyediakan satu mesin HAProxy dan satu mesin etcd. Fokus tulisan ini adalah untuk ketersediaan PostgreSQL. Untuk membuat ketersediaan HAProxy dan etcd akan dibahas lain kali bila ada waktu [baca: kalau tidak malas].

Agar tidak membingungkan, saya selalu mempraktikkan penamaan kluster ditambah dengan prefiks nama aplikasi. Hal ini penting karena di perawanan yang sudah semakin terotomatisasi, kadang kita suka bingung kalau konfigurasi sudah tidak ada lagi.

konfigurasi

Konfigurasi server yang dipakai

Yak, intinya ada 5 mesin untuk tutorial kali ini. Saya menggunakan GNU/Linux Debian 9 karena itu standar sistem operasi UI. Untuk sistem operasi lain saya rasa tidak ada yang berbeda karena kali ini saya tidak menggunakan paket repositori.

Untuk memudahkan, pastikan kelima mesin ini memiliki berkas /etc/hosts yang berisi kelima host.

$ sudo tee -a  /etc/hosts << EOF
192.168.100.1   haproxy0-nyata
192.168.100.2   etcd0-nyata
192.168.100.3   pg1-nyata
192.168.100.4   pg2-nyata
192.168.100.5   pg3-nyata
EOF

Selanjutnya, akan dibuatkan etcd terlebih dahulu sebagai inti yang mengatur kluster.

ETCD

Aplikasi etcd adalah sebuah basisdata konfigurasi yang digunakan status. Aplikasi etcd tidak ada di repositori Debian 9. Saya mengunduh versi terbaru dari CoreOS dan memasang manual.

wget https://github.com/coreos/etcd/releases/download/v3.3.1/etcd-v3.3.1-linux-amd64.tar.gz
tar xvfz etcd-v3.3.1-linux-amd64.tar.gz
sudo cp etcd-v3.3.1-linux-amd64/etcd /usr/local/bin

Konfigurasi

Aplikasi etcd berisi satu binari. Untuk konfigurasi, buat manual.

$ sudo /etc/etcd.conf.yml << EOF
# This is the configuration file for the etcd server.

# Human-readable name for this member.
name: 'etcd0-nyata'

# Path to the data directory.
data-dir: /var/lib/etcd/data

# Path to the dedicated wal directory.
wal-dir: /var/lib/etcd/wal

# Number of committed transactions to trigger a snapshot to disk.
snapshot-count: 10000

# Time (in milliseconds) of a heartbeat interval.
heartbeat-interval: 100

# Time (in milliseconds) for an election to timeout.
election-timeout: 1000

# Raise alarms when backend size exceeds the given quota. 0 means use the
# default quota.
quota-backend-bytes: 0

# List of comma separated URLs to listen on for peer traffic.
listen-peer-urls: http://192.168.100.2:2380

# List of comma separated URLs to listen on for client traffic.
listen-client-urls: http://localhost:2379,http://192.168.100.2:2379

# Maximum number of snapshot files to retain (0 is unlimited).
max-snapshots: 5

# Maximum number of wal files to retain (0 is unlimited).
max-wals: 5

# Comma-separated white list of origins for CORS (cross-origin resource sharing).
cors: 

# List of this member's peer URLs to advertise to the rest of the cluster.
# The URLs needed to be a comma-separated list.
initial-advertise-peer-urls: http://192.168.100.2:2380

# List of this member's client URLs to advertise to the public.
# The URLs needed to be a comma-separated list.
advertise-client-urls: http://192.168.100.2:2379

# Discovery URL used to bootstrap the cluster.
discovery: 

# Valid values include 'exit', 'proxy'
discovery-fallback: 'proxy'

# HTTP proxy to use for traffic to discovery service.
discovery-proxy: 

# DNS domain used to bootstrap initial cluster.
discovery-srv: 

# Initial cluster configuration for bootstrapping.
initial-cluster: etcd0-scele=http://192.168.100.2:2380,

# Initial cluster token for the etcd cluster during bootstrap.
initial-cluster-token: 'etcd-nyata-cluster'

# Initial cluster state ('new' or 'existing').
initial-cluster-state: 'new'

# Reject reconfiguration requests that would cause quorum loss.
strict-reconfig-check: false

# Valid values include 'on', 'readonly', 'off'
proxy: 'off'

# Time (in milliseconds) an endpoint will be held in a failed state.
proxy-failure-wait: 5000

# Time (in milliseconds) of the endpoints refresh interval.
proxy-refresh-interval: 30000

# Time (in milliseconds) for a dial to timeout.
proxy-dial-timeout: 1000

# Time (in milliseconds) for a write to timeout.
proxy-write-timeout: 5000

# Time (in milliseconds) for a read to timeout.
proxy-read-timeout: 0

# Enable debug-level logging for etcd.
debug: false

# Specify a particular log level for each etcd package (eg: 'etcdmain=CRITICAL,etcdserver=DEBUG'.
log-package-levels: 

# Force to create a new one member cluster.
force-new-cluster: true
EOF

Layanan

Agar dapat dijalankan secara sistem, perlu dibuatkan layanan systemd secara manual.

$ sudo tee -a /etc/systemd/system/etcd.service << EOF
[Unit]
Description=etcd key-value store
Documentation=https://github.com/coreos/etcd
After=network.target

[Service]
User=etcd
Group=etcd
Type=notify
ExecStart=/bin/bash --login -c "/usr/local/bin/etcd --config-file /etc/etcd.conf.yml"
Restart=always
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target
EOF

Pengaktifan Layanan etcd

Perhatikan bahwa untuk contoh kali ini saya menggunakan akun etcd dan grup etcd. Praktik aman selalu jalankan layanan sebagai pengguna biasa, bukan root. Buat pengguna baru ini.

sudo adduser --system --home /var/lib/etcd --group etcd

Bagian terakhir dari etcd adalah mengaktifkan dan menjalankan layanan etcd.

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd

Baris daemon-reload adalah agar systemd membaca konfigurasi yang baru saja dibuat. Baris enable untuk mendaftarkan etcd sebagai layanan yang dijalankan otomatis saat mesin baru mulai. Baris terakhir untuk menjalankan layanan etcd.

PostgreSQL

Berbeda dengan tutorial yang lalu, saya akan membuat konfigurasi per mesin agar lebih menggambarkan apa yang terjadi. Sebelum memulai, saya asumsikan bahwa setiap mesin PostgreSQL pengguna root memiliki kunci SSH sehingga antar mesin bisa masuk tanpa kunci.

Cara paling gampang, di salah satu mesin buat kunci.

ssh-keygen -t ecdsa

Lalu, taruh kunci publik dan privat ke root. Saya asumsikan bahwa kita bekerja di mesin pg1-nyata.

# asumsi kerja di mesin pg1-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys

# Transfer
scp ~/.ssh/id_ecdsa ~/.ssh/id_ecdsa.pub pg2-nyata:/tmp
scp ~/.ssh/id_ecdsa ~/.ssh/id_ecdsa.pub pg3-nyata:/tmp

# ke mesin pg2-nyata
ssh pg2-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys
rm /tmp/id_ecdsa*
exit

# ke mesin pg3-nyata
ssh pg3-nyata
sudo mkdir /root/.ssh/
sudo cp ~/.ssh/id_ecdsa /root/.ssh/
cat ~/.ssh/id_ecdsa.pub | sudo tee -a /root/.ssh/authorized_keys
rm /tmp/id_ecdsa*
exit

Ini saya pasang secara manual. Biasanya untuk Vagrant, Proxmox, dan sejenisnya sudah menyediakan opsi pemasangan kunci SSH di konfigurasi/plugin mereka. Namun, untuk kelengkapan tutorial ini saya tuliskan saja manual. Saya sendiri sebenarnya hanya memasang satu mesin; memasang PostgreSQL; dan baru diklon menjadi dua mesin lainnya.

Pemasangan PostgreSQL

Saya kali ini menggunakan PostgreSQL yang saya kompilasi sendiri. Mengapa? Karena hasil kompilasi lebih irit dan saya mau ada variasi tulisan. Di blog saya ada kok cara-caranya untuk memasang versi repo.

Pemasangan PostgreSQL setiap mesin sama. Untuk memasang paket ketergantungan di setiap mesin jalankan:

sudo apt -y install build-essential libreadline-dev zlib1g-dev flex bison libxml2-dev libxslt-dev libssl-dev pkg-config libsystemd-dev

Unduh PostgreSQL. Saya memakai versi stabil terbaru, 10.2. Kebetulan juga, saya ada peladen cermin di samping ruangan:

wget http://kambing.ui.ac.id/postgresql/source/v10.2/postgresql-10.2.tar.bz2
tar xvfj postgresql-10.2.tar.bz2
cd postgresql-10.2
sed -i '/DEFAULT_PGSOCKET_DIR/s@/tmp@/run/postgresql@' src/include/pg_config_manual.h
./configure --prefix=/usr --with-icu --with-openssl --with-systemd --enable-thread-safety --docdir=/usr/share/doc/postgresql-10.2 CFLAGS="-O3 -march=native -mtune=native -pipe"
make -j$(nproc)
sudo make install

Saya melakukan optimasi CFLAGS untuk kompilasi. Hal ini karena saya tahu bahwa peladen di tempat saya itu homogen. Tapi, kalau misalnya Anda memasang di penyedia awan, sebaiknya  CFLAGS jangan disertakan.

Selanjutnya pemasangan Patroni.

Patroni

Patroni merupakan skrip Python. Untuk memasang Patroni, pastikan Python PIP dipasang. Saya memilih Python3. Namun, biasanya yang digunakan Python2. Saya memakai Python3 karena saya keren.

sudo apt install python3-pip
sudo pip3 install --upgrade setuptools

Pasang Patroni dan plugin etcd-nya.

sudo pip3 install psycopg2-binary
sudo -E pip3 install patroni[etcd]

Buat pengguna postgres

sudo adduser --system --home /var/lib/postgresql --group postgres

Buatkan layanan sistem.

$ sudo tee /etc/systemd/system/patroni.service << EOF
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
 
[Service]
Type=simple
 
User=postgres
Group=postgres
 
Environment="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
ExecStart=/usr/local/bin/patroni /etc/patroni.yml
 
KillMode=process
 
TimeoutSec=30
 
Restart=no
 
[Install]
WantedBy=multi-user.target
EOF

Selanjutnya, buat konfigurasi per mesin.

Konfigurasi Per Mesin

Buat konfigurasi per mesin /etc/patroni.yml

scope: postgres
namespace: /pg-nyata/
name: pg1-nyata
 
restapi:
    listen: 192.168.100.3:8008
    connect_address: 192.168.100.3:8008
 
etcd:
    host: 192.168.100.2:2379
 
bootstrap:
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
            use_pg_rewind: true
 
    initdb:
    - encoding: UTF8
    - data-checksums
 
    pg_hba:
    - host replication replicator 127.0.0.1/32 md5
    - host replication replicator 192.168.100.3/0 md5
    - host replication replicator 192.168.100.4/0 md5
    - host replication replicator 192.168.100.5/0 md5
    - host all all 0.0.0.0/0 md5
 
    users:
        admin:
            password: aiwaQuaeHuojeuyai2fiemai6Reeneix
            options:
                - createrole
                - createdb
 
postgresql:
    listen: 192.168.100.3:5432
    connect_address: 192.168.100.3:5432
    data_dir: /var/lib/postgresql/10.2-patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: zee0ohjisai5ohCohsaegho5gaeN8Xei
        superuser:
            username: postgres
            password: saichae9Aich0xeen2Otethaduphiepo
    parameters:
        unix_socket_directories: '.'
 
tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false

Contoh konfigurasi yang tertulis untuk mesin pg1-nyata. Untuk pg2-nyata dan pg3-nyata ubah baris ke-3 name dengan nama mesin, dan setiap baris listen dan connect_address dengan IP per mesin.

Contoh perbedaan pg1-nyata dan pg2-nyata.

$ diff pg{1,2}-nyata/etc/patroni.yml -u
--- pg1-nyata/etc/patroni.yml   2018-03-08 10:03:26.502995392 +0700
+++ pg2-nyata/etc/patroni.yml   2018-03-08 10:08:35.869743378 +0700
@@ -1,14 +1,14 @@
 scope: postgres
 namespace: /pg-nyata/
-name: pg1-nyata
- 
+name: pg2-nyata
+
 restapi:
-    listen: 192.168.100.3:8008
-    connect_address: 192.168.100.3:8008
- 
+    listen: 192.168.100.4:8008
+    connect_address: 192.168.100.4:8008
+
 etcd:
     host: 192.168.100.2:2379
- 
+
 bootstrap:
     dcs:
         ttl: 30
@@ -17,28 +17,28 @@
         maximum_lag_on_failover: 1048576
         postgresql:
             use_pg_rewind: true
- 
+
     initdb:
     - encoding: UTF8
     - data-checksums
- 
+
     pg_hba:
     - host replication replicator 127.0.0.1/32 md5
     - host replication replicator 192.168.100.3/0 md5
     - host replication replicator 192.168.100.4/0 md5
     - host replication replicator 192.168.100.5/0 md5
     - host all all 0.0.0.0/0 md5
- 
+
     users:
         admin:
             password: aiwaQuaeHuojeuyai2fiemai6Reeneix
             options:
                 - createrole
                 - createdb
- 
+
 postgresql:
-    listen: 192.168.100.3:5432
-    connect_address: 192.168.100.3:5432
+    listen: 192.168.100.4:5432
+    connect_address: 192.168.100.4:5432
     data_dir: /var/lib/postgresql/10.2-patroni
     pgpass: /tmp/pgpass
     authentication:
@@ -50,7 +50,7 @@
             password: saichae9Aich0xeen2Otethaduphiepo
     parameters:
         unix_socket_directories: '.'
- 
+
 tags:
     nofailover: false
     noloadbalance: false

Semoga dengan ini tidak ada salah ganti atau terlewat.

Pengaktifan Layanan Patroni

Setelah konfigurasi dan unit layanan Patroni terpasang, layanan Patroni sudah bisa dijalankan. Untuk setiap mesin, jalankan:

sudo systemctl daemon-reload
sudo systemctl enable patroni
sudo systemctl start patroni

Satu langkah lagi.

HAProxy

Bagian yang paling mudah saya salin saja, ya, perintahnya.

sudo apt install haproxy

Konfigurasi:

$ sudo tee /etc/haproxy/haproxy.cfg << EOF
global
    maxconn 100
 
defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s
 
listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /
 
listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server postgresql_192.168.100.3_5432 192.168.100.3:5432 maxconn 100 check port 8008
    server postgresql_192.168.100.4_5432 192.168.100.4:5432 maxconn 100 check port 8008
    server postgresql_192.168.100.5_5432 192.168.100.5:5432 maxconn 100 check port 8008
EOF

Lalu,

sudo systemctl restart haproxy

Selesai.

Bacaan Lebih Lanjut

Solusi PostgreSQL dengan Patroni
PostgreSQL database

Solusi PostgreSQL dengan Patroni

Tahun baru dan Universitas Indonesia kedatangan peladen baru. Berhubung tim pengembang DSTI UI membuat pengembangan berbasis pelayan-mikro (microservice) dan ada pengembang yang iseng menantang saya menuju Kubernetes, saya pun tertantang membuat tutorial yang mendukung arsitektur tersebut. Kubernetes menyediakan fasilitas skalabilitas untuk menambah dan mengurangi peladen suatu layanan secara otomatis atau bisa diprogram manual.

Cara yang paling mudah untuk menyiapkan infrastruktur adalah dengan mengambil resep dari Ansible Playbook, menggunakan Juju, menggunakan helm, atau pemaket awan menurut keyakinan dan kepercayaan masing-masing. Namun, sebelum itu, saya tertarik untuk membahas bagaimana seandainya bila semua itu dibuat secara manual. Hal ini agar setiap kita dapat memahami bagaimana cara kerja masing-masing komponen yang nantinya diterbitkan dengan satu baris kode.

Tulisan ini sebenarnya mengikuti tutorial dari Linode. Hanya saja, saya menyesuaikan dengan lingkungan UI, Debian Stretch. Sehingga, ada yang saya modifikasi untuk keperluan dan keyakinan saya.

Arsitektur

PostgreSQL HA

PostgreSQL HA dengan 3 node dibalik haproxy

Untuk lingkungan ujicoba, saya membuat 5 mesin VM di VirtualBox dengan menggunakan 2 kartu jaringan (NIC). Satu NIC tipe NAT untuk keluar (standar VirtualBox) dengan DHCP. Satu lagi NIC tipe Jaringan Internal yang digunakan untuk setiap VM berkomunikasi satu sama lain.

pg1:

  • hostname: pg1
  • NIC: 192.0.2.11
  • Memori: 1GB

pg2:

  • hostname: pg2
  • NIC: 192.0.2.12
  • Memori: 1GB

pg3:

  • hostname: pg3
  • NIC: 192.0.2.13
  • Memori: 1GB

haproxy0:

  • hostname: haproxy0
  • NIC: 192.0.2.22
  • Memori: 512MB

etcd0:

  • hostname: etcd0
  • NIC: 192.0.2.21
  • Memori: 1GB

Berhubung komputer saya memiliki memori 32GB, saya agak royal mengalokasikan memori. Untuk keperluan pembelajaran, bisa, kok, dikurangi menjadi 512MB. Tapi, saya belum mencoba.

Sekedar tips untuk pengerjaan pg1 s.d. pg3. Sebaiknya kerjakan saja dulu pg1 lalu setelah rampung, klon dan ubah konfigurasi IP dan hostname sesuai dengan masing-masing mesin.

Konfigurasi Jaringan

Ada dua hal yang perlu dikerjakan:

  1. Konfigurasi IP pada NIC yang digunakan untuk berkomunikasi
  2. Tambahkan daftar hostname.

Konfigurasi IP

Pertama-tama kita perlu tahu NIC yang perlu dikonfigurasi. Debian Stretch sudah tidak lagi menyediakan ifconfig. Cara yang sahih sekarang untuk mengetahui ada antarmuka NIC apa saja yang tersedia:

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 08:00:27:86:ca:c3 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 08:00:27:20:b1:2b brd ff:ff:ff:ff:ff:ff

Pada konfigurasi VM saya, yang NIC yang perlu dikonfigurasi adalah enp0s8 — punya Anda bisa beda. Untuk menambahkan konfigurasi IP statik umpanya untuk mesin pg1:

$ sudo tee /etc/network/interfaces.d/enp0s8 << EOF
auto enp0s8
allow-hotplug enp0s8
iface enp0s8 inet static
  address 192.0.2.11
  netmask 255.255.255.0
EOF

Gunakan penyunting teks favorit Anda, tapi saya menggunakan cara heker. 😛

Lakukan ini untuk pg2, pg3, haproxy0, dan etcd0 dengan IP mereka masing-masing.

Untuk langsung mengaktifkan konfigurasi jaringan:

$ sudo ifup enp0s8

Lakukan ini di semua mesin.

Konfigurasi Hostname

Untuk VM, sebaiknya untuk setiap VM yang berhubungan dimasukkan namanya ke daftar /etc/hosts. Lakukan ini di semua mesin:

$ sudo tee -a  /etc/hosts << EOF
192.0.2.21      etcd0
192.0.2.22      haproxy0
192.0.2.11      pg1
192.0.2.12      pg2
192.0.2.13      pg3
EOF

Ganti nama hostname, umpanya untuk mesin pg1:

sudo hostnamectl set-hostname pg1

Keluar dari SSH lalu masuk kembali. Kalau tidak, nama sudah berganti tetapi shell Anda masih bernama yang lama.

Pemasangan etcd

TIPS: Pengerjaan yang saya lakukan adalah saya mematikan pg1. Lalu, saya klon dan saya ubah IP dan hostname.

Aplikasi etcd adalah sebuah repositori konfigurasi yang bisa diakses dari jaringan. Dia bisa dibuat kluster, tetapi untuk contoh kali ini dibuatkan satu saja. Saya asumsikan jaringan dan nama sudah terbuat.

Cara terbaik saat ini untuk lingkungan awan adalah menggunakan pemaket snapcraft untuk mendapatkan perangkat lunak terbaru yang stabil. Debian Stretch tidak memasang pemaket ini secara baku. Pasang dulu:

sudo apt update
sudo apt install snapd

Lalu, pasang etcd menggunakan snapcraft:

sudo snap install etcd

Konfigurasi aplikasi berbasis snapcraft ada di /var/snap. Berhubung konfigurasinya panjang, saya sudah sediakan unduhan. Saya jelaskan properti yang penting saja nanti. Cara pasang:

wget -q -O- https://raw.githubusercontent.com/jpmrblood/postgresql-ha-configuration/master/etcd.conf.yml | sudo tee /var/snap/etcd/common/etcd.conf.yml

Beberapa properti yang penting:

  • name: ‘etcd0’ — memberi nama mesin ini. Kalau ada lebih dari satu mesin etcd, pastikan masing-masing unik.
  • data-dir: /var/lib/etcd/data — tempat data etcd. Saya sesuaikan dengan FHS.
  • wal-dir: /var/lib/etcd/wal — tempat penampungan untuk jurnal etcd.
  • listen-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mendengarkan permintaan bergabung.
  • listen-client-urls: http://localhost:2379,http://192.0.2.21:2379 — Alamat TCP/IP untuk aplikasi ini beroperasi.
  • initial-advertise-peer-urls: http://192.0.2.21:2380 — Alamat TCP/IP untuk mengiklankan diri sendiri ke etcd yang lain. Saat ini tidak terpakai karena hanya ada satu saja.
  • advertise-client-urls: http://192.0.2.21:2379 — Alamat TCP/IP yang diberitahukan kepada yang lainnya.
  • initial-cluster: etcd0=http://192.0.2.21:2380, — Sejumlah alamat TCP/IP peladen etcd yang tergabung dalam kluster. Kali ini hanya satu.
  • initial-cluster-token: ‘etcd-cluster’ — Nama kluster etcd kita. Maaf kalau kurang kreatif.
  • initial-cluster-state: ‘new’ — Kondisi awal saat pertama kali etcd nanti dijalankan.

Kalau tutorial Linode memuat semua ini dalam variabel lingkungan. Sayangnya, Debian Stretch tidak ada etcd sehingga kita terpaksa memasangnya dari snapcraft.

Sebelum menjalankan etcd, jangan lupa membuat direktori yang dibutuhkan.

sudo mkdir -p /var/lib/etcd/data /var/lib/etcd/wal
sudo snap start etcd

TIPS #1: Kalau mau mencoba dulu, sebelum menggunakan snap start, gunakan snap run untuk menjalankan etcd langsung. Apabila sudah selesai diagnosis, tekan CTRL+C untuk selesai.

Bila sudah benar, maka akan terlihat:

$ snap services
Snap  Service  Startup  Current
etcd  etcd     enabled  active

Bila statusnya sudah aktif, sekarang saatnya memasang PostgreSQL beserta Patroni.

Pemasangan PostgreSQL (pg1, pg2, dan pg3)

Kecuali hostname dan IP, semua pemasangan PostgreSQL identik. Selain itu, saya menggunakan pwgen untuk membuat sandi. Mohon sandi Anda berbeda dengan tutorial ini!

Pasang PostgreSQL

Pasang seperti biasa.

echo "deb http://kambing.ui.ac.id/postgresql/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list
wget --quiet -O - http://kambing.ui.ac.id/postgresql/repos/apt/ACCC4CF8.asc | sudo apt-key add -
sudo apt update && sudo apt install postgresql-10

Saya sengaja memilih versi 10. Lebih baru dan keren.

Matikan layanan PostgreSQL karena kita mau menjalankannya dari Patroni:

sudo systemctl disable postgresql

Pasang Patroni

Patroni tersedia di Python PIP. Pasang PIP:

sudo apt install python3-pip
sudo pip3 install --upgrade setuptools

Baru pasang Patroni dan Python-etcd:

sudo pip3 install patroni[etcd]

Selanjutnya, buat konfigurasi Patroni:

$ sudo tee /etc/patroni.yml << EOF
scope: postgres
namespace: /db/
name: pg1

restapi:
    listen: 192.0.2.11:8008
    connect_address: 192.0.2.11:8008

etcd:
    host: 192.0.2.21:2379

bootstrap:
    dcs:
        ttl: 30
        loop_wait: 10
        retry_timeout: 10
        maximum_lag_on_failover: 1048576
        postgresql:
            use_pg_rewind: true

    initdb:
    - encoding: UTF8
    - data-checksums

    pg_hba:
    - host replication replicator 127.0.0.1/32 md5
    - host replication replicator 192.0.2.11/0 md5
    - host replication replicator 192.0.2.12/0 md5
    - host replication replicator 192.0.2.13/0 md5
    - host all all 0.0.0.0/0 md5

    users:
        admin:
            password: ioqu8ohqueh6kai5va0Hoigirae7Xaem
            options:
                - createrole
                - createdb

postgresql:
    listen: 192.0.2.11:5432
    connect_address: 192.0.2.11:5432
    data_dir: /var/lib/postgresql/10/patroni
    pgpass: /tmp/pgpass
    authentication:
        replication:
            username: replicator
            password: shohkaitahsee0er6eXoh0Ohghie2toh
        superuser:
            username: postgres
            password: exuush9shohlail6Cool9eeng3kae5iy
    parameters:
        unix_socket_directories: '.'

tags:
    nofailover: false
    noloadbalance: false
    clonefrom: false
    nosync: false
EOF

Jangan lupa mengganti IP pada setiap baris listen dan connect_address pada mesin pg2 dan pg3 dengan IP masing-masing. Jangan lupa mengganti sandi (password) agar tidak sama dengan tutorial ini!

Siapkan direktori data untuk PostgreSQL versi Patroni:

sudo -u postgres mkdir -p /var/lib/postgresql/10/patroni

Terakhir, pasang unit pelayan systemd Patroni:

$ sudo tee /etc/systemd/system/patroni.service << EOF
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target

[Service]
Type=simple

User=postgres
Group=postgres

Environment="PATH=/usr/lib/postgresql/10/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
ExecStart=/usr/local/bin/patroni /etc/patroni.yml

KillMode=process

TimeoutSec=30

Restart=no

[Install]
WantedBy=multi-user.target
EOF

Daftarkan dan jalankan Patroni:

sudo systemctl daemon-reload
sudo systemctl enable patroni
sudo systemctl start patroni

Kalau sudah benar, maka Patroni akan menjalankan PostgreSQL versinya.

$ systemctl status patroni
● patroni.service - Runners to orchestrate a high-availability PostgreSQL
   Loaded: loaded (/etc/systemd/system/patroni.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2018-01-26 11:18:14 WIB; 2min 27s ago
 Main PID: 9391 (patroni)
    Tasks: 12 (limit: 4915)
   CGroup: /system.slice/patroni.service
           ├─9391 /usr/bin/python3 /usr/local/bin/patroni /etc/patroni.yml
           ├─9417 postgres -D /var/lib/postgresql/10/patroni --config-file=/var/lib/postgresql/10/patroni/postgresql.conf --max_prepared_transactions=0 --port=5432 --cluster_name=postgres --max_locks_per_transaction
           ├─9420 postgres: postgres: checkpointer process   
           ├─9421 postgres: postgres: writer process   
           ├─9422 postgres: postgres: wal writer process   
           ├─9423 postgres: postgres: autovacuum launcher process   
           ├─9424 postgres: postgres: stats collector process   
           ├─9425 postgres: postgres: bgworker: logical replication launcher   
           └─9430 postgres: postgres: postgres postgres 192.0.2.11(44308) idle

Lakukan ini di pg2 dan pg3. Jangan lupa mengganti IP pada berkas /etc/patroni.yml.

Oh, iya, kalau menggunakan klon, jangan lupa /etc/network/interfaces.d/enp0s8 diubah sesuai dengan IP mesin. Jangan lupa juga ganti hostname.

Terus, kalau misalnya pg2 dan pg3 diklon dari pg1 saat Patroni sudah terkonfigurasi, jangan lupa kosongkan terlebih dahulu direktori data Patroni.

sudo systemctl stop patroni
sudo -u postgres rm -rf /var/lib/postgresql/10/patroni/
sudo -u postgres mkdir /var/lib/postgresql/10/patroni/
sudo systemctl start patroni

Kalau tidak, bisa aneh nanti.

Pemasangan HAProxy

Komponen terakhir yang hendak kita pasang adalah HAProxy. Untungnya, sudah ada paket Debian untuk HAProxy. Pasang seperti biasa:

sudo apt install haproxy

Konfigurasi HAProxy untuk menjadi proksi ketiga mesin  PostgreSQL kita.

$ sudo tee /etc/haproxy/haproxy.cfg << EOF
global
    maxconn 100

defaults
    log global
    mode tcp
    retries 2
    timeout client 30m
    timeout connect 4s
    timeout server 30m
    timeout check 5s

listen stats
    mode http
    bind *:7000
    stats enable
    stats uri /

listen postgres
    bind *:5000
    option httpchk
    http-check expect status 200
    default-server inter 3s fall 3 rise 2 on-marked-down shutdown-sessions
    server postgresql_192.0.2.11_5432 192.0.2.11:5432 maxconn 100 check port 8008
    server postgresql_192.0.2.12_5432 192.0.2.12:5432 maxconn 100 check port 8008
    server postgresql_192.0.2.13_5432 192.0.2.13:5432 maxconn 100 check port 8008
EOF

Setelah itu, muat ulang HAProxy untuk memuat konfigurasi baru.

sudo systemctl restart haproxy

Saya mengikuti Tutorial Linode untuk membuat port PostgreSQL pada port 5000. Anda bisa saja membuat port 5432. Kebetulan PC saya ada layanan PostgreSQL lain yang jalan pada port itu.

Untuk memonitor, silakan buka peramban Anda pada port 7000.

HAProxy interfacing Patriani's PostgreSQL nodes

HAProxy interfacing Patriani’s PostgreSQL nodes

Hanya ada satu yang hijau/aktif. Kalau tiga-tiganya, kemungkinan Anda mengklon tanpa mengubah konfigurasi dan mengosongkan direktori data PostgreSQL terlebih dahulu.

Selesai.

(Kulshekhar Kabra, 2017)

Daftar Pustaka

Kulshekhar Kabra (2017, September 19). Create a Highly Available PostgreSQL Cluster Using Patroni and HAProxy. Retrieved January 26, 2018 from https://linode.com/docs/databases/postgresql/create-a-highly-available-postgresql-cluster-using-patroni-and-haproxy/.^
Pasang Zabbix 3.2 di Debian Jessie

Pasang Zabbix 3.2 di Debian Jessie

 The twins looked at each other jubilantly but with some surprise. Although 70-534 answer analysis they 70-534 answer analysis considered themselves Scarlett’s favored suitors, they had never before gained tokens ADM-201 exam dumps of this favor so easily. Usually she made them beg and plead, while she put them off, CISSP exam topics refusing to give a 70-534 answer analysis Yes or No answer, laughing if they sulked, growing cool if they became angry. And here she had practically promised them 70-534 answer analysis the ADM-201 exam dumps whole of tomorrow—seats by her at 70-534 answer analysis the barbecue, all the waltzes (and they’d see to it that the dances were CISSP exam topics all waltzes!) and the supper intermission. This was worth getting expelled from the university.Filled ADM-201 exam dumps with new enthusiasm by their success, they CISSP exam topics lingered on, talking about the barbecue 70-534 answer analysis and the ball and Ashley Wilkes 300-208 study material CISSP exam topics and Melanie Hamilton, CISSP exam topics interrupting each other, making jokes and laughing at them, hinting broadly for invitations 300-208 study material to supper. ADM-201 exam dumps Some time had passed before they realized that Scarlett was having very little to say. The atmosphere had somehow changed. Just how, the twins did not know, but the fine glow had gone out of the afternoon. Scarlett seemed to ADM-201 exam dumps be paying little attention to 70-534 answer analysis what they 300-208 study material 70-534 answer analysis ADM-201 exam dumps said, although she made the correct answers. Sensing something they 300-208 study material could not understand, baffled and annoyed by it, the twins struggled along for a while, and then rose reluctantly, ADM-201 exam dumps looking at their 300-208 study material watches.The sun was low CISSP exam topics across the new-plowed fields and the tall woods across the river ADM-201 exam dumps were looming ADM-201 exam dumps blackly in silhouette. Chimney swallows were darting swiftly across the yard, and chickens, ducks and turkeys were waddling 70-534 answer analysis and strutting and straggling in from the fields.Stuart bellowed: “Jeems!” And after an interval a 70-534 answer analysis tall black boy of their own age ran breathlessly around CISSP exam topics the house and out toward the ADM-201 exam dumps tethered horses. Jeems was their 300-208 study material body servant and, like CISSP exam topics the dogs, accompanied them everywhere. He had been CISSP exam topics their childhood playmate and had been given to the twins for their own ADM-201 exam dumps on their tenth birthday. At the sight of him, CISSP exam topics CISSP exam topics the Tarleton hounds rose up out of the red dust and stood waiting expectantly for their masters. The 300-208 study material boys bowed, shook hands and 300-208 study material told CISSP exam topics Scarlett they’d be over 300-208 study material at the 300-208 study material Wilkeses’ early in the morning, waiting for her. Then CISSP exam topics they were ADM-201 exam dumps off down the 70-534 answer analysis walk CISSP exam topics at a rush, mounted their horses and, followed by ADM-201 exam dumps ADM-201 exam dumps Jeems, went down the avenue of cedars at a gallop, waving their hats and yelling back to her.When they had rounded the curve of the dusty road that hid them from Tara, Brent drew his horse to a ADM-201 exam dumps stop under a clump of dogwood. Stuart halted, 70-534 answer analysis too, and the darky boy pulled up a few paces behind 300-208 study material them. The horses, feeling slack reins, 300-208 study material stretched down their necks to crop the tender spring grass, and the patient hounds lay down again in the 300-208 study material CISSP exam topics soft red dust and looked up longingly at the chimney swallows circling in the gathering dusk. 300-208 study material Brent’s wide ingenuous face was puzzled and mildly indignant.“Look,” he said. “Don’t it look to you like she 70-534 answer analysis would of asked us to stay for supper?”  Nor did 70-534 answer analysis James and Andrew, who took him into their store in Savannah, regret his lack of education. His clear hand, his 300-208 study material accurate CISSP exam topics figures and his shrewd ADM-201 exam dumps ability in bargaining won their respect, where a knowledge 70-534 answer analysis of literature and a fine appreciation of music, had young 300-208 study material Gerald possessed them, would have moved them to snorts of contempt. America, in the early years of the century, had been kind to the Irish. James and Andrew, who had begun by hauling goods in covered wagons 70-534 answer analysis from Savannah to Georgia’s inland towns, had prospered into a store of their own, and Gerald prospered with them.

Pasang repositori resmi Zabbix 3.2 untuk Debian Jessie

wget http://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1+jessie_all.deb
sudo dpkg -i zabbix-release_3.2-1+jessie_all.deb
sudo apt update

Pasang peladen Zabbix dan antarmuka webnya:

sudo apt-get install zabbix-server-pgsql zabbix-frontend-php php5-pgsql

Peladen Zabbix

Buat basisdata PostgreSQL untuk digunakan Zabbix dengan sedikit sentuhan nama yang cukup kreatif (menurut saya, kayaknya).

sudo -u postgres createuser -DAP terjabiks
sudo -u postgres createdb -O terjabiks jabikdb

Buat skema Zabbix di basisdata yang sudah dibuat:

zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | psql -U terjabiks -h localhost jabikdb

Setelah itu, jangan lupa sesuaikan konfigurasi peladen Zabbix (/etc/zabbix/zabbix_server.conf) dengan login PostgreSQL yang sudah dibuat. Cari baris-baris yang berisi hal berikut dan ganti. Sandinya tentu saja ubah, ya, sesuai dengan sandi yang sudah dibuat sebelumnya. Saya menggunakan pwgen untuk membuat sandi.

DBHost=localhost
DBName=jabikdb
DBUser=terjabiks
DBPassword=P4S$WoRDYgDiBuatPak3PwG3nAja

Setelah itu, jalankan ulang peladen Zabbix agar menggunakan konfigurasi yang sudah diubah:

sudo systemctl restart zabbix-server

Peladen Antarmuka Web Zabbix

Ubah konfigurasi /etc/zabbix/apache.conf untuk menambahkan Timezone. Kebetulan saya di Asia/Jakarta (GMT+7).

sudo sed -i  -e"s/# php_value date.timezone.*$/php_value date.timezone Asia\/Jakarta/" /etc/zabbix/apache.conf

Jalankan ulang Apache2.

sudo systemctl restart apache2

Buka peladen dan arahkan ke http://<alamat.server.zabbix.anda>/zabbix

Konfigurasi Web Zabbix

Klik Next step terus sampai konfigurasi basisdata dan isi sesuai yang diset tadi.

Zabbix Web configuring database backend.

Lalu klik Next step. Masukkan nama Zabbix Anda kalau mau.

zabbix detail name

Zabbix detail name

Pencet terus Next step sampai Finish.

Selesai.

Admin awal loginnya: Admin dan sandinya zabbix bila ingin masuk.

 

 

Bacaan Lebih Lanjut

Create A Database and Its Owner on PostgreSQL
PostgreSQL database

Create A Database and Its Owner on PostgreSQL

In MySQL, these are the chants:

sudo mysql --defaults-file=/etc/mysql/debian.cnf
create database mydb;
grant all privileges on mydb.* to myuser identified by 'p@s$W0rd';

On PostgreSQL, the chants are:

sudo -u postgres createuser -DAP myuser
sudo -u postgres createdb -O myuser mydb

Very simple actually and Debian by default listen at localhost. Users can connect to its database via port 5432.

Of course, these chants are useful for developing apps. In Production, you should supply a user that can only Read/Write/Update a database. In fact, several frameworks like Laravel could setup another user just to Read the database.

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi
Wily Broke The Window

Membuat Aplikasi Berbasis Akonadi (KMail2) Keren Lagi

Saya punya problema KMail2 yang saya pasang di KDE semenjak KDE SC 4 sering crash. Bahkan, saya terpaksa menghapus ulang seluruh konfigurasi KDE demi bisa memasang ulang KMail2. Memang, saya bisa saja memasang Thunderbird. Tapi, saya jatuh cinta dengan cara pakai di KMail2.

Setelah pemasangan KDE Neon, distro baru berdasarkan Kubuntu LTS 16.04, saya menemukan bahwa saya tidak bisa menggunakan KMail2! Usut punya usut, ternyata karena sistem saya menggunakan Oracle MySQL 5.7. Ada sintaks SQL yang tidak lagi cocok dengan versi teranyar itu. Saya pun harus memilih pindah ke MariaDB 10.x.

Saya temukan lebih lanjut, ternyata pustaka Akonadi yang dipakai oleh KMail2 menggunakan abstraksi Qt SQL. Lah, ‘kan, Qt SQL mendukung banyak basisdata! Saya pun memilih untuk dari pada pindah ke MariaDB, pindah ke PostgreSQL.

Sedikit Noktah dalam Pemasangan

Saya memasang PostgreSQL seperti yang saya telah tulis sebelumnya. Oh, iya, bakal ada pesan kesalahan pada saat pemasangan paket Debian PostgreSQL pada Kubuntu 16.04 dan turunannya kalau menggunakan cara tersebut. Hal ini karena versi BASH yang disediakan memiliki aturan yang lebih ketat untuk mode ketat.

Solusinya adalah mengganti setiap “$1” menjadi “${1:-}” pada berkas /usr/share/postgresql-common/supported-versions. Pada ViM, regex yang dipakai:

:%s/\$1/\$\{1\:-\}/g

Baru, ulangi kembali pemasangan PostgreSQL.

sudo apt-get -f install

Mungkin Anda akan lebih beruntung dari saya dengan memasang paket dari Kubuntu. Tapi, setahu saya, sih, tidak bisa.

Kalau Anda tidak menggunakan PostgreSQL pada sistem Anda, matikan saja instan PostgreSQL yang berjalan di sistem.

sudo systemctl stop postgresql && sudo systemctl disable postgresql

Lumayan menghemat beberapa mega memori dan proses CPU.

Konfigurasi Akonadi Sebelum Dipasang

Pertama-tama, mari buat direktori konfigurasi Akonadi:

mkdir -p ~/.config/akonadi/

Lalu, buat berkas konfigurasi untuk Akonadi menggunakan PostgreSQL:

cat >> ~/.config/akonadi/akonadiserverrc << EOF
[Debug]
Tracer=null

[%General]
Driver=QPSQL

[QPSQL]
Host=/tmp/akonadi-jp.RqiEZ0
InitDbPath=/usr/lib/postgresql/9.5/bin/initdb
Name=akonadi
Options=
ServerPath=/usr/lib/postgresql/9.5/bin/pg_ctl
StartServer=true
EOF

Ganti 9.5 dengan versi PostgreSQL yang Anda pakai.

Pemasangan KMail2

Selanjutnya, tinggal pasang saja:

sudo apt-get install akonadi-backend-postgresql kmail

Bila sudah sampai sini, seharusnya pemasangan lancar. Begitu menjalankan KMail2, Akonadi akan mengonfigurasi dirinya untuk menjalankan instan PostgreSQL khusus.

Terakhir

Saya sering memakai laptop sampai baterai kosong. Komputer saya kadang kena mati lampu. Sampai detik ini, keduanya masih stabil dan saya sampai detik ini belum pernah menghapus ulang KMail2.

Semoga beruntung, silakan bertanya.

Memasang PostgreSQL Versi Terbaru

Masukkan repo PostgreSQL:

echo "deb http://kambing.ui.ac.id/postgresql/repos/apt/ `lsb_release -cs`-pgdg main" | sudo tee /etc/apt/sources.list.d/postgresql.list

Kalau Anda tidak memasang LSB, ganti lsb_release dengan wily, jessie, wheezy, dan sebagainya silakan lihat di sini.

Setelah selesai, impor kunci:

wget --quiet -O - http://kambing.ui.ac.id/postgresql/repos/apt/ACCC4CF8.asc | sudo apt-key add -

Setelah itu, lakukan hal yang biasa dilakukan:

sudo apt-get update
sudo apt-get install postgresql pgadmin3

Selesai.

Memasang Evergreen ILS
Evergreen Logo

Memasang Evergreen ILS

Kali ini saya akan membahas Evergreen, sebuah alternatif ILS lainnya. Evergreen menyediakan klien berbasis Windoze dan GNU/Linux. Yang saya suka dari Evergreen adalah dia menggunakan PostgreSQL.

Pemasangan ILS ini agak kotor karena banyak melakukan kompilasi. Namun, bila menggunakan instruksi yang disediakan cukup mudah dilakukan. Kompleksitas dari Evergreen ini menyebabkan dia sangat cocok untuk sebuah sistem yang sangat besar.

Karena galat Apache pada BlankOn, saya pun kali ini menggunakan GNU/Linux Debian Wheezy.

Pasang OpenSRF

Ada beberapa langkah besar yang harus dilakukan untuk memasang OpenSRF:

  1. Mengompilasi OpenSRF.
  2. Menyiapkan antarmuka tambahan.
  3. Mengonfigurasi ejabberd dan menambahkan pengguna.
  4. Mengonfigurasi OpenSRF untuk terhubung ke ejabberd.
  5. Memulai OpenSRF.

Semua ini sesuai dengan panduan tertulis, Anda cukup mengikuti langkah-langkah berikut.

Mengompilasi OpenSRF

Yang pertama yang harus dilakukan adalah memasang pustaka OpenSRF. Untuk itu perlu memasang paket-paket yang dibutuhkan

$ sudo apt-get install build-essential

Unduh dan buka

$ wget http://evergreen-ils.org/downloads/opensrf-2.2.1.tar.gz
$ tar xvfz opensrf-2.2.1.tar.gz
$ cd opensrf-2.2.1

Untuk memulai membangun OpenSRF perlu memasang paket-paket ketergantungan. Caranya dengan menjalankan perintah:

$ sudo make -f src/extras/Makefile.install debian-wheezy

Ambil kopi, mandi pagi, dan sapa keluarga Anda sambil menunggu kompilasi ini selesai. Setelah selesai, konfigurasi, kompilasi, dan pasang:

$ ./configure --prefix=/opt/openils --disable-static
$ make
$ sudo make install

Berbeda dengan instruksi, saya menaruh di direktori /opt/openils dari pada /openils agar sesuai dengan standar FHS.

Tambahkan pengguna sistem yang akan menjalankan OpenSRF.

$ sudo useradd -m -s /bin/bash opensrf
$ echo "export PATH=\$PATH:/opt/openils/bin" | sudo tee -a /home/opensrf/.bashrc
$ sudo passwd opensrf

Buat seluruh OpenSRF menjadi milik pengguna opensrf.

$ sudo chown -R opensrf:opensrf /opt/openils/

Daftarkan direktori pustaka OpenSRF ke sistem operasi.

$ echo /opt/openils/lib | sudo tee -a /etc/ld.so.conf.d/opensrf.conf
$ sudo ldconfig

Selanjutnya adalah menambahkan 2 antarmuka jaringan.

Konfigurasi Antarmuka Jaringan Tambahan

OpenSRF membutuhkan ejabberd dengan dua IP yang berbeda. Yang pertama untuk komunikasi publik dan yang kedua untuk komunikasi pribadi. Untuk sistem sendiri, kita dapat menambahkan dua antarmuka loopback.

Caranya adalah dengan menambahkan baris-baris berikut di /etc/network/interfaces dengan menggunakan penyunting favorit Anda.

auto lo:10 lo:20
iface lo:10 inet static
        address 127.0.1.2
        netmask 255.0.0.0

iface lo:20 inet static
        address 127.0.1.3
        netmask 255.0.0.0

Lalu, nyalakan kedua antarmuka:

$ sudo ifup lo:20 lo:10

Masukkan alamat penamaan palsu ke /etc/hosts dengan menggunakan penyunting favorit Anda.

127.0.1.2       public.localhost        public
127.0.1.3       private.localhost       private

Selanjutnya adalah mengonfigurasi peladen ejabberd.

Konfigurasi ejabberd

Evergreen menggunakan protokol XMPP sebagai alat komunikasi. Peladen ejabberd digunakan sebagai penyedia protokol tersebut. Anda dapat juga membuat gTalk Anda sendiri berbasis aplikasi ini. Tapi, itu di luar cakupan tulisan ini.

Sebelum mengonfigurasi, matikan ejabberd terlebih dahulu:

$ sudo invoke-rc.d ejabberd stop

Buka konfigurasi /etc/ejabberd/ejabberd.cfg dan ubah/tambahkan baris-baris berikut:

  • Tambahkan domain publik dan pribadi yang telah didefinisikan tadi. Contohnya saya mengubah baris ke-61 dari:
    {hosts, ["localhost"]}.
    menjadi:
    {hosts, ["localhost", "private.localhost", "public.localhost"]}.
  • Mematikan mod_offline pada baris ke-584.
  • Menambah max_user_sessions dari 10 menjadi 10000 pada baris ke-460.
  • Mengubah seluruh max_stanza_size menjadi 2000000 pada baris ke-118 dan ke-136.
  • Mengubah seluruh maxrate menjadi 50000 pada baris ke-409 dan baris ke-414.

Setelah selesai mengubah semua itu, hidupkan kembali ejabberd:

$ sudo invoke-rc.d ejabberd start

Selanjutnya membuat pengguna ejabber.

Konfigurasi Pengguna Ejabberd

Seperti yang sudah kita buat sebelumnya, Evergreen menggunakan dua saluran (yang ditandai dengan dua host yang berbeda) dalam berkomunikasi. Pada contoh kali ini, kita membuat saluran “public.localhost” untuk komunikasi publik dan “private.localhost” untuk saluran pribadi.

Setiap saluran harus memiliki dua pengguna yang berfungsi sebagai:

router
Pengguna ini digunakan untuk menjadi broker untuk setiap layanan OpenSPF. Itu sebabnya, nama pengguna ini tidak dapat diganti dan harus bernama router. (hardcoded)
opensrf
Pengguna ini digunakan oleh setiap klien OpenSRF untuk terhubung ke OpenSRF. Nama pengguna dapat diganti dengan yang lain.

 Karena masing-masing saluran ada dua pengguna, maka dibuat empat pengguna:

$ sudo ejabberdctl register router private.localhost passwd123
$ sudo ejabberdctl register opensrf private.localhost passwd123
$ sudo ejabberdctl register router public.localhost passwd123
$ sudo ejabberdctl register opensrf public.localhost passwd123

Jangan lupa mengganti “passwd123” dengan sandi yang aman dan berbeda satu sama lain.

Konfigurasi OpenSRF

Terakhir untuk OpenSRF adalah dengan mengonfigurasi sistem. Masuk sebagai pengguna opensrf dan pergi ke direktori konfigurasi. Lalu, salin contoh konfigurasi menjadi konfigurasi kita.

$ sudo su - opensrf
$ cd /opt/openils/etc
$ cp opensrf_core.xml.example opensrf_core.xml
$ cp opensrf.xml.example opensrf.xml

Berhubung dalam artikel ini tidak diubah nama pengguna, tetap menggunakan opensrf, tidak ada yang perlu diubah. Namun, bila Anda mengubah nama pengguna, ganti nama pengguna opensrf menjadi nama pengguna yang Anda tentukan di opensrf_core.xml.

Buka opensrf_core.xml dengan penyunting favorit Anda untuk mengganti nama pengguna (bila bukan opensrf) dan sandi yang telah kita buat sebelum ini. Contohnya:

  • Mengganti nama pengguna pada baris ke-37 dan sandinya pada baris ke-38 untuk pengguna saluran public.localhost.
     
    private.localhost 
    opensrf
    passwd123
    5222
    
  • Mengganti nama pengguna pada baris ke-86 dan sandi pada baris ke-87 untuk pengguna saluran
    
    public.localhost
    opensrf
    passwd123
    5222
    
  • Mengganti sandi pada baris ke-111 untuk router saluran public.localhost.
    
      public.localhost
      5222
      /opt/openils/var/sock/unix_sock 
      router 
      passwd123
      router
      10
      5 
    
  • Mengganti sandi pada baris ke-133 untuk router saluran public.localhost.
    
      private.localhost
      5222
      router
      passwd123
      router
      10
      5
    

Selanjutnya, salin srfsh.xml.example ke direktori rumah opensrf. Konfigurasi ini diperlukan agar pengguna opensrf dapat menjalankan konsol OpenSRF, srfsh. Anda dapat menyalin srfsh ke pengguna Anda sendiri bila ingin menjalankan srfsh dari pengguna tersebut. Jangan lupa sesuaikan nama pengguna dan sandi yang diperlukan.

$ cp srfsh.xml.example ~/.srfsh.xml

Buka ~/.srfsh.xml dalam penyunting favorit Anda, ubah nama pengguna (jika diubah) dan sandi. Berikut contoh berkas saya:

< ?xml version="1.0">


  router
  private.localhost
  opensrf
  passwd123
  5222
  /opt/openils/var/log/srfsh.log
  4
  true

Setelah itu, kita bisa memulai OpenSRF.

Memulai OpenSRF

Setelah konfigurasi panjang yang telah kita lalui, saatnya memulai layanan OpenSRF. Untuk memulai OpenSRF, jalankan perintah berikut sebagai pengguna opensrf.

$ osrf_ctl.sh -l -a start_all

Setelah memulai, kita dapat menguji salah satu salurannya. Caranya, dengan masuk ke konsol OpenSRF (srfsh).

$ srfsh

Lalu jalankan operasi penambahan:

srfsh# request opensrf.math add 2,2

Received Data: 4

------------------------------------
Request Completed Successfully
Request Time in seconds: 0.004293
------------------------------------

Kalau benar, data yang didapatkan “4”.

Sebagai catatan, kalau Anda ada keperluan untuk mematikan OpenSRF, jalankan perintah:

$ osrf_ctl.sh -l -a stop_all

Kalau ini semua sudah dilakukan, keluar dari pengguna opensrf untuk kembali menjadi pengguna biasa. Ada hal-hal lain yang hendak dikerjakan.

Anda masih antusias? Karena ini baru memasang OpenSRF. Selanjutnya kita akan memasang basisdata PostgreSQL untuk Evergreen. Semangat!

Memasang Evergreen

Memasang Evergreen cukup dengan beberapa langkah:

  1. Memasang paket-paket yang dibutuhkan.
  2. Mengompilasi dan memasang Evergreen.
  3. Mengonfigurasi peladen Apache HTTPd.

Memasang Paket-paket yang Dibutuhkan

Unduh Evergreen, ekstraksi paket unduhan, dan masuk ke direktori kode sumber.

$ wget http://evergreen-ils.org/downloads/Evergreen-ILS-2.5.2.tar.gz
$ tar xvfz Evergreen-ILS-2.5.2.tar.gz
$ cd Evergreen-ILS-2.5.2/

Jalankan perintah yang sama seperti OpenSPF untuk memeriksa ketergantungan paket.

$ sudo make -f Open-ILS/src/extras/Makefile.install debian-wheezy

Sedikit catatan, skrip ini memasang paket-paket CPAN. Berikut beberapa pertanyaan yang saya jawab. Intinya, saya memilih KAMBING.ui.ac.id sebagai repositori CPAN berhubung fisiknya ada di ruang sebelah.

Would you like me to automatically choose some CPAN mirror
sites for you? (This means connecting to the Internet) [yes] no

Would you like to pick from the CPAN mirror list? [yes] yes

(1) Africa
(2) Asia
(3) Europe
(4) North America
(5) Oceania
(6) South America
Select your continent (or several nearby continents) [] 2

(1) China
(2) India
(3) Indonesia
(4) Iran
(5) Israel
(6) Japan
(7) Kazakhstan
(8) Pakistan
(9) Republic of Korea
(10) Singapore
(11) Taiwan
(12) Thailand
(13) Turkey
(14) Viet Nam
Select your country (or several nearby countries) [] 3

(1) http://cpan.cermin.lipi.go.id/
(2) http://cpan.mirrors.gudangteknologi.com/
(3) http://kambing.ui.ac.id/cpan/
(4) http://kartolo.sby.datautama.net.id/CPAN/
Select as many URLs as you like (by number),
put them on one line, separated by blanks, hyphenated ranges allowed
 e.g. '1 4 5' or '7 1-4 8' [] 3

Enter another URL or ENTER to quit: []

Yang terakhir saya hanya menekan tombol ENTER. Saya sengaja memisahkan setiap keterangan dan pertanyaan dengan baris kosong. Semoga ini membantu Anda.

Mengompilasi Evergreen

Saatnya mengompilasi Evergreen dengan tiga langkah:

$ PATH=/opt/openils/bin:$PATH ./configure --prefix=/opt/openils --disable-static
$ make
$ sudo make install

Seperti OpenSRF, saya memasang Evergreen di /opt/openils agar sesuai dengan FHS. Sebenarnya variabel STAFF_CLIENT_STAMP_ID tidak perlu dituliskan. Di dokumentasi disebutkan saat make install harus:

$ sudo make STAFF_CLIENT_STAMP_ID=rel_2_5_2 install

Tapi, toh, sebenarnya ia akan dipasang di tempat yang sama seperti versi yang ada. Ada atau pun tidak ada variabel itu, pasti akan ditaruh juga di tempat yang sama.

Selanjutnya membuat sebuah tautan simbolik sebagai peladen.

$ sudo ln -sf /opt/openils/var/web/xul/rel_2_5_2/server /opt/openils/var/web/xul/server

Pasang konfigurasi opensrf.xml dan opensrf_core.xml versi Evergreen.

$ sudo su opensrf -c "cp -b /opt/openils/conf/opensrf_core.xml.example /opt/openils/conf/opensrf_core.xml"
$ sudo su opensrf -c "cp -b /opt/openils/conf/opensrf.xml.example /opt/openils/conf/opensrf.xml"

Jangan lupa sunting kembali opensrf_core.xml dengan mengganti nama-nama pengguna dan sandi sesuai yang telah kita konfigurasi sebelumnya di OpenSRF.

Selanjutnya betulkan kembali kepemilikan /opt/openils menjadi milik opensrf.

$ sudo chown -R opensrf:opensrf /opt/openils

Memasang Konfigurasi Basisdata

Jalankan skrip konfigurasi basisdata

$ sudo make -f Open-ILS/src/extras/Makefile.install postgres-server-debian-wheezy

Skrip akan memasang libdbd-postgres ke /usr/local/lib/dbd. Tambahkan pustaka tersebut ke dalam pustaka sistem.

$ echo "/usr/local/lib/dbd" | sudo tee -a /etc/ld.so.conf.d/eg.conf
$ sudo ldconfig

Buat pengguna evergreen dan isi sandinya dengan sandi yang aman.

$ sudo su postgres -c "createuser -s -P evergreen"

Selanjutnya jalankan skrip untuk mempopulasi basisdata.

$ perl Open-ILS/src/support-scripts/eg_db_config --update-config \
     --service all --create-database --create-schema --create-offline \
     --user evergreen --password passwd123 --hostname localhost --port 5432 \
     --database egdb --admin-user egadmin --admin-pass passwd123

Kalau Anda mau mencoba Evergreen dengan data contoh, tambahkan –load-all-sample sebagai parameter sehingga menjadi:

$ perl Open-ILS/src/support-scripts/eg_db_config --update-config \
     --service all --create-database --create-schema --create-offline \
     --user evergreen --password passwd123 --hostname localhost --port 5432 \
     --database egdb --admin-user egadmin --admin-pass passwd123 --load-all-sample

Pengguna evergreen sesuai dengan nama pengguna yang diciptakan oleh postgres. Sandinya mohon diganti.

Untuk inang peladen PostgreSQL memakai localhost dan port baku 5432. Basis data saya pilih egdb, bisa diganti namanya.

Untuk nama admin saya gunakan egadmin agar mudah diingat. Mohon sandinya diganti.

Pokoknya untuk setiap sandi selalu saya isi passwd123, karena ini cuma tutorial sesederhana mungkin. Namun, Anda tidak boleh melakukannya untuk mesin produksi.

Memasang Konfigurasi Apache2

Pasang konfigurasi Evergreen untuk peladen Apache2.

$ sudo cp Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/
$ sudo cp  Open-ILS/examples/apache/eg_{startup,vhost.conf} /etc/apache2/

Kalau Anda menggunakan Apache2 versi 2.4, salin konfigurasi yang ada di Open-ILS/examples/apache_24 ke direktori masing-masing.

Pasang SSL untuk Apache2

Untuk memasang SSL, buat sertifikat dengan melakukan perintah berikut:

$ sudo mkdir /etc/apache2/ssl
$ cd /etc/apache2/ssl
$ sudo openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key
Generating a 2048 bit RSA private key
......................................................................+++
...+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ID
State or Province Name (full name) [Some-State]:Jawa Barat
Locality Name (eg, city) []:Depok
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Universitas Indonesia
Organizational Unit Name (eg, section) []:PPSI
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:jp@localhost

Ganti organisasi dengan organisasi Anda. Ganti FQDN dengan alamat peladen yang benar. Dan seterusnya.

Evergreen meminta agar Apache2 dijalankan oleh pengguna opensrf, bukan www-data.

$ sudo sed -i.bak s/www-data/opensrf/g /etc/apache2/envvars
$ sudo chown -R opensrf:opensrf /var/lock/apache2

Aktifkan Evergreen dan matikan situs bawaan.

$ sudo a2dissite default
$ sudo a2ensite eg.conf

Selanjutnya menjalankan Evergreen.

Memperbaharui Konfigurasi

Jalankan perintah berikut setiap kali mengubah hierarki config.cgi.

$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin autogen.sh -u"

Menjalankan Evergreen

Jalankan ulang layanan-layanan yang diperlukan.

$ sudo invoke-rc.d ejabberd restart
$ sudo invoke-rc.d memcached restart

Jalankan ulang Evergreen.

$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin osrf_ctl.sh -l -a stop_all"
$ sudo su opensrf -c "PATH=$PATH:/opt/openils/bin osrf_ctl.sh -l -a start_all"

Jalankan ulang Apache2:

$ sudo invoke-rc.d apache2 restart

Terakhir, buka peramban dan pergi ke situs ini. Maka, akan didapati:

OPAC on Evergreen

OPAC on Evergreen

 

Bacaan Lebih Lanjut