PENDAHULUAN

CMS WordPress salah satu CMS yang sering dan sangat banyak digunakan baik untuk personal maupun corporate. Panduan kali ini kami akan bahas bagaimana membangun sebuah website dengan high availability menggunakan layanan Cloud Computing.

Disini kami menggunakan NEO Cloud dari Biznet GIO salah satu penyedia layanan Cloud Computing yang handal dan terpercaya tentunya.

Kenapa Menggunakan NEO Cloud?

Alasan terbaik menggunakan NEO Cloud karena NEO Cloud salah satu provider Cloud Computing yang bagus dan terpercaya digunakan untuk mengimplementasikan sebuah service atau aplikasi di dunia Cloud Computing dan mudah digunakan tentunya. Dari segi Infrastruktur sendiri telah menggunakan Infrastruktur yang up to date yaitu OpenStack. Di NEO Cloud Anda dapat menyesuaikan dengan kebutuhan Anda masing - masing mulai dari Network IP, IP Router, Instance.

Selengkapnya terkait NEO Cloud dapat merujuk pada link berikut: NEOCLOUD PRODUK

Berikut ini merupakan desain topologi yang akan digunakan:

Kebutuhan:

  • 1 Server Load Balancer
    • Private IP: 192.168.10.10
    • Public IP: 103.58.XX.XX
  • 2 Server Web server + CMS WordPress
    • srv-web01 WordPress , Private IP: 192.168.10.7
    • srv-web02 WordPress , Private IP: 192.168.10.9
  • 1 Server Database
    • srv-database WordPress , Private IP: 192.168.10.17
  • NEO Object Storage

Note: Untuk IP silakan disesuaikan dengan kondisi dan keinginan Anda masing - masing dan untuk sistem operasi yang digunakan pada panduan kali ini yaitu CentOS 7 dan untuk akses ke masing - masing Instance NEO disini kami menggunakan ssh key. Dan pada Security Group telah di allow untuk port default seperti SSH, MySQL,

Keterangan:

WordPress digunakan sebagai CMS atau website yang ingin digunakan, pada website tersebut menggunakan 2 Web server dengan data yang sama tersinkronisasi antara srv-web01 dan srv-web02 menggunakan metode Lsyncd. Database yang digunakan yaitu MariaDB untuk menyimpan data dari CMS WordPress dan S3 Protokol digunakan untuk menyimpan data dan file statik misalnya foto, video, music, dan yang lainnya. Load Balancer sendiri digunakan untuk membagi beban traffic antara srv-web01 dan srv-web02.

LANGKAH KERJA

Langkah 1: Instalasi Web Server + PHP + Unduh WordPress

Silakan akses “srv-web01” update sistem operasi CentOS 7 Anda terlebih dahulu menggunakan perintah

[[email protected] ~]#
[[email protected] ~]# yum update -y 

Jika sudah silakan install web server yang ingin Anda gunakan, pada panduan kali ini kami menggunakan web server apache gunakan perintah berikut untuk install repositori epel dan apache pada CentOS 7

[[email protected] ~]# yum install epel-release
[[email protected] ~]# yum install httpd -y    

Apabila sudah selesai silakan start, enable, dan pastikan service apache telah berjalan dengan normal

[[email protected] ~]# systemctl start httpd   
[[email protected] ~]# systemctl enable httpd
[[email protected] ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-10-27 18:22:25 UTC; 1 day 1h ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1013 (httpd)
   Status: "Total requests: 1460; Current requests/sec: 0; Current traffic:   0 B/sec"     
   CGroup: /system.slice/httpd.service
           ├─1013 /usr/sbin/httpd -DFOREGROUND
           ├─1633 /usr/sbin/httpd -DFOREGROUND
           ├─1634 /usr/sbin/httpd -DFOREGROUND
           ├─1635 /usr/sbin/httpd -DFOREGROUND
           ├─1636 /usr/sbin/httpd -DFOREGROUND
           ├─1637 /usr/sbin/httpd -DFOREGROUND
           ├─2855 /usr/sbin/httpd -DFOREGROUND
           ├─2856 /usr/sbin/httpd -DFOREGROUND
           ├─8523 /usr/sbin/httpd -DFOREGROUND
           ├─8524 /usr/sbin/httpd -DFOREGROUND
           └─8525 /usr/sbin/httpd -DFOREGROUND

Oct 27 18:22:24 nur-srv-web01.novalocal systemd[1]: Starting The Apache HTTP Server...     
Oct 27 18:22:25 nur-srv-web01.novalocal systemd[1]: Started The Apache HTTP Server.        
[[email protected] ~]#

Selanjutnya melakukan instalasi php untuk kebutuhan WordPress, disini kami menggunakan php 7.2. Sebelum melakukan instalasi php 7.2 pada CentOS 7 terlebih dahulu Anda memasang repository remi dan paket manager yang akan digunakan untuk management php 7 pada CentOS 7 berikut beberapa perintah yang digunakan:

[[email protected] ~]# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[[email protected] ~]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Instalasi paket manager

[[email protected] ~]# yum install yum-utils

Enable php 7.2 

[[email protected] ~]# yum-config-manager --enable remi-php72 

Instalasi module php yang dibutuhkan untuk setup CMS WordPress sebagai berikut

[[email protected] ~]# yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo -y 

Jika sudah untuk memastikan versi php 7.2 ketikan perintah berikut:

[[email protected] ~]#
[[email protected] ~]# php -v
PHP 7.2.24 (cli) (built: Oct 22 2019 11:15:01) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24, Copyright (c) 1999-2018, by Zend Technologies
[[email protected] ~]# 
[[email protected] ~]# 

Sampai langkah ini silakan Anda remote server “srv-web02” dan install web server apache, php 7.2 sesuai dengan perintah di atas apabila sudah diinstall dan service apache beserta php sudah berjalan dengan normal kiranya dapat pindah atau beralih ke server “srv-web01” untuk setup wordpress nya.

Berikutnya pindah direktori ke direktori /var/www/html dan unduh CMS WordPress menggunakan wget, melalui link berikut: Get WordPress

[[email protected] ~]# 
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# 
[[email protected] html]# wget https://wordpress.org/latest.zip

Unzip file WordPress menggunakan perintah

[[email protected] html]# unzip latest.zip 

Kemudian, membuat VirtualHost untuk WordPress, untuk membuatnya silakan pindah direktori ke /etc/httpd/conf.d dan buka editor untuk membuat file VirtualHost disini kami menggunakan vim , untuk editor silakan sesuaikan dengan kebiasaan Anda masing - masing. sebagai berikut

[[email protected] home]#
[[email protected] home]# cd /etc/httpd/conf.d/
[[email protected] conf.d]# 
[[email protected] conf.d]# vim wordpress.conf 

Isikan konfigurasi sebagai berikut:

<VirtualHost *:80>
        ServerName wordpress.domainanda.id
        DocumentRoot /var/www/html/wordpress
        ErrorLog logs/wordpress-domainanda.id-error_log
        CustomLog logs/wordpress-domainanda.id-access_log combined

<IfModule dir_module>
        DirectoryIndex index.php index.html
</IfModule>
</VirtualHost>

Keterangan:

  • ServerName: Isikan IP atau Domain atau subdomain yang ingin Anda gunakan.
  • DocumentRoot: Sesuaikan dengan letak dimana file WordPress Anda berada pada panduan ini letak nya berada di /var/ww/html/wordpress.
  • ErrorLog: Letak dari error_log WordPress Anda.
  • CustomLog: Letak dari access_log WordPress Anda.

Selanjutnya memberi hak akses 755 dan hak owner pada direktori root wordpress sebagai berikut:

[[email protected] conf.d]# chown -R apache:apache /var/www/html/wordpress/
[[email protected] conf.d]# chmod -R 755 /var/www/html/wordpress/

Silakan restart service web server apache Anda gunakan perintah berikut:

[[email protected] conf.d]#
[[email protected] conf.d]# systemctl restart httpd
[[email protected] conf.d]#

Langkah 2: Singkronisasi Direktori Server (srv-web01 & srv-web02)

Pada langkah ini kita akan melakukan singkronisasi direktori dari server srv-web01 dengan srv-web02. Direktori yang akan di singkronisasi hanyalah direktori /var/www/html/wordpress sebagai direktori dari CMS WordPress dan direktori VirtualHost /etc/httpd/conf.d singkronisasi disini secara live apabila di sisi srv-web01 melakukan perubahan pada direktori WordPress dan VirtualHost, maka srv-web02 akan mengikuti perubahan yang telah dilakukan pada srv-web01.

Untuk sinkronisasi Direktori disini kami menggunakan service Lsyncd.

Apa itu Lsyncd?

Lsyncd singkatan dari “Live Syncing Daemon”, sebuah service yang digunakan untuk menyinkronkan atau mereplikasi file dan direktori secara lokal dan jarak jauh setelah interval waktu tertentu menggunakan rsync dan ssh di backend untuk authentication.

Apa bedanya dengan rsync?

Apabila Anda menggunakan rsync Anda perlu “job” sebagai perintah untuk sinkronisasi, dengan lsyncd Anda tidak perlu membuat “cron job” untuk menjalankan sinkronisasi.

Lsyncd bekerja pada arsitektur Master dan Slave di mana ia memantau direktori pada server master, jika ada perubahan atau modifikasi yang dilakukan maka lsyncd akan mereplikasi yang sama pada server slave-nya setelah interval waktu tertentu.

Selengkapnya tentang Lsyncd dapat merujuk pada link berikut: Lsyncd - Live Syncing (Mirror) Daemon

Lsyncd disini akan di install hanya di server srv-web01 saja untuk instalasinya sebagai berikut:

Enable repository epel dan install lsyncd gunakan perintah berikut:

[[email protected] conf.d]# yum install epel-release 
[[email protected] conf.d]# yum install lsyncd -y

Jika instalasi telah selesai sekarang menghubungkan antara srv-web01 dan srv-web02 menggunakan ssh key authentication, silakan generate key di sisi srv-web01 dengan cara menjalalankan perintah berikut:

[[email protected] ~]#
[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:e5Uc/1Xtwq7/1auuPNqZ8IQIyR1lv53JZtIuP/Q7vAQ [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|         o       |
|        o .     .|
|       .   ..   o|
|    . o .  .==o..|
|     + .S  o+E+ o|
|      . ....=o.oo|
|       ..o.o..+.+|
|         .*.=o.+o|
|         ..B==+==|
+----[SHA256]-----+
[[email protected] ~]#

Jika sudah selanjutnya Anda remote server srv-web02 dan enable PermitRootLogin yes dan atur root password dari srv-web02 karena default dari NEO Cloud tidak aktif.

Kenapa di aktifkan? Nanti tidak aman? Bagaimana sih?

Pada topologi ini kita menghubungkan antara srv-web01 dan srv-web02 via private IP dan tidak akan di expose ke public yang di expose ke publik hanyalah IP Load Balancer saja.

Selanjut copy publik key ke server tujuan yaitu srv-web02 menggunakan ssh-copy-id seperti berikut

[[email protected] ~]# ssh-copy-id [email protected]
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.10.9 (192.168.10.9)' can't be established.
ECDSA key fingerprint is SHA256:gzAdjdYg/H4jns0gQXoChNXZD4R9PjNpHxYeqz8xv/0.
ECDSA key fingerprint is MD5:f0:a1:40:5a:94:13:7b:e5:bb:12:f7:ab:2f:d8:fd:b1.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

[[email protected] ~]#

Pastikan srv-web02 sudah dapat diakses tanpa password dari srv-web01 seperti berikut:

[[email protected] ~]#
[[email protected] ~]# ssh [email protected]
Last failed login: Mon Oct 28 20:55:32 UTC 2019 from nur-srv-web01.neo.internal on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Oct 28 20:50:54 2019
[[email protected] ~]# 
[[email protected] ~]#

Saat ini srv-web01 dan srv-web02 sudah saling terkoneksi.

Berikutnya melakukan konfigurasi Lsyncd, default direktori konfigurasi dari Lsyncd berada di /etc/lsyncd sebagai berikut:

[[email protected] ~]#
[[email protected] ~]# vim /etc/lsyncd.conf 

Berikut contoh konfigurasinya:

----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}

settings {
        logfile         = "/var/log/lsyncd/lsyncd.log",
        statusFile      = "/tmp/lsyncd.stat",
        statusInterval  = 1,
}

sync {
        default.rsync,
        source  = "/var/www/html",
        target  = "192.168.10.9:/var/www/html",
}

sync {
        default.rsync,
        source  = "/etc/httpd/conf.d",
        target  = "192.168.10.9:/etc/httpd/conf.d",
}

rsync = {
        update  = true,
        perms   = true,
        owner   = true,
        group   = true,
        rsh     = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa"
}

Keterangan:

  • Pada menu settings merupakan konfigurasi dari stat dan log dari lsyncd
  • Pada sync pertama merupakan konfigurasi source dan target/destination dari direktori yang akan di sinkronkan diatas contohnya direktori /var/www/html/wordpress akan di sinkronkan ke srv-web02 dengan IP 192.168.10.9 dan tujuan direktorinya sama yakni /var/www/html/wordpress
  • Pada sync kedua untuk keterangannya hampir sama dengan yang pertama perbedaanya hanya di sisi source direktori yang ingin di sinkronkan saja.
  • Pada rsync lah yang mengirimkan semua perintah dari sync melalui ssh key.

Simpan konfigurasi di atas dan restart, enable dan pastikan semua service lsyncd telah berjalan dengan normal sebagai berikut:

[[email protected] ~]# systemctl restart lsyncd
[[email protected] ~]# systemctl enable lsyncd
[[email protected] ~]# systemctl status lsyncd
● lsyncd.service - Live Syncing (Mirror) Daemon
   Loaded: loaded (/usr/lib/systemd/system/lsyncd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-28 21:14:55 UTC; 17s ago
 Main PID: 1629 (lsyncd)
   CGroup: /system.slice/lsyncd.service
           └─1629 /usr/bin/lsyncd -nodaemon /etc/lsyncd.conf

Oct 28 21:14:55 srv-web01 systemd[1]: Started Live Syncing (Mirror) Daemon.
[[email protected] ~]# 

Selanjutnya melihat log sinkronisasi direktori yang telah ditentukan hasilnya sebagai berikut

[[email protected] ~]#
[[email protected] ~]# tail -f /var/log/lsyncd/lsyncd.log 
Mon Oct 28 21:45:38 2019 Normal: recursive startup rsync: /var/www/html/ -> 192.168.10.9:/var/www/html/
Mon Oct 28 21:45:38 2019 Normal: recursive startup rsync: /etc/httpd/conf.d/ -> 192.168.10.9:/etc/httpd/conf.d/
Mon Oct 28 21:45:38 2019 Normal: Startup of /etc/httpd/conf.d/ -> 192.168.10.9:/etc/httpd/conf.d/ finished.
Mon Oct 28 21:45:39 2019 Normal: Startup of /var/www/html/ -> 192.168.10.9:/var/www/html/ finished.
Mon Oct 28 21:45:48 2019 Normal: --- TERM signal, fading ---
Mon Oct 28 21:45:48 2019 Normal: --- Startup ---
Mon Oct 28 21:45:48 2019 Normal: recursive startup rsync: /var/www/html/ -> 192.168.10.9:/var/www/html/
Mon Oct 28 21:45:48 2019 Normal: recursive startup rsync: /etc/httpd/conf.d/ -> 192.168.10.9:/etc/httpd/conf.d/
Mon Oct 28 21:45:48 2019 Normal: Startup of /etc/httpd/conf.d/ -> 192.168.10.9:/etc/httpd/conf.d/ finished.
Mon Oct 28 21:45:48 2019 Normal: Startup of /var/www/html/ -> 192.168.10.9:/var/www/html/ finished.

Selanjutnya cek hasil singkronisasi di sisi srv-web02 pastikan sama semua baik isi, permission direktori dan yang lainnya sebagai berikut hasilnya

Hasil srv-web01 seperti berikut

[[email protected] wordpress]# ls -lah
total 200K
drwxr-xr-x   5 apache apache 4.0K Oct 14 20:37 .
drwxr-xr-x.  3 root   root     41 Oct 28 21:43 ..
-rwxr-xr-x   1 apache apache  420 Nov 30  2017 index.php
-rwxr-xr-x   1 apache apache  20K Jan  1  2019 license.txt
-rwxr-xr-x   1 apache apache 7.3K Apr  8  2019 readme.html
-rwxr-xr-x   1 apache apache 6.8K Jan 12  2019 wp-activate.php
drwxr-xr-x   9 apache apache 4.0K Oct 14 20:37 wp-admin
-rwxr-xr-x   1 apache apache  369 Nov 30  2017 wp-blog-header.php
-rwxr-xr-x   1 apache apache 2.3K Jan 21  2019 wp-comments-post.php
-rwxr-xr-x   1 apache apache 2.9K Jan  8  2019 wp-config-sample.php
drwxr-xr-x   4 apache apache   52 Oct 14 20:37 wp-content
-rwxr-xr-x   1 apache apache 3.8K Jan  9  2019 wp-cron.php
drwxr-xr-x  20 apache apache 8.0K Oct 14 20:37 wp-includes
-rwxr-xr-x   1 apache apache 2.5K Jan 16  2019 wp-links-opml.php
-rwxr-xr-x   1 apache apache 3.3K Nov 30  2017 wp-load.php
-rwxr-xr-x   1 apache apache  39K Jun 10 13:34 wp-login.php
-rwxr-xr-x   1 apache apache 8.3K Nov 30  2017 wp-mail.php
-rwxr-xr-x   1 apache apache  19K Mar 28  2019 wp-settings.php
-rwxr-xr-x   1 apache apache  31K Jan 16  2019 wp-signup.php
-rwxr-xr-x   1 apache apache 4.7K Nov 30  2017 wp-trackback.php
-rwxr-xr-x   1 apache apache 3.0K Aug 17  2018 xmlrpc.php
[[email protected] wordpress]#
[[email protected] wordpress]#

Hasil srv-web02 seperti berikut

[[email protected] wordpress]# ls -lah
total 200K
drwxr-xr-x   5 apache apache 4.0K Oct 14 20:37 .
drwxr-xr-x.  3 root   root     41 Oct 28 22:43 ..
-rwxr-xr-x   1 apache apache  420 Nov 30  2017 index.php
-rwxr-xr-x   1 apache apache  20K Jan  1  2019 license.txt
-rwxr-xr-x   1 apache apache 7.3K Apr  8  2019 readme.html
-rwxr-xr-x   1 apache apache 6.8K Jan 12  2019 wp-activate.php
drwxr-xr-x   9 apache apache 4.0K Oct 14 20:37 wp-admin
-rwxr-xr-x   1 apache apache  369 Nov 30  2017 wp-blog-header.php
-rwxr-xr-x   1 apache apache 2.3K Jan 21  2019 wp-comments-post.php
-rwxr-xr-x   1 apache apache 2.9K Jan  8  2019 wp-config-sample.php
drwxr-xr-x   4 apache apache   52 Oct 14 20:37 wp-content
-rwxr-xr-x   1 apache apache 3.8K Jan  9  2019 wp-cron.php
drwxr-xr-x  20 apache apache 8.0K Oct 14 20:37 wp-includes
-rwxr-xr-x   1 apache apache 2.5K Jan 16  2019 wp-links-opml.php
-rwxr-xr-x   1 apache apache 3.3K Nov 30  2017 wp-load.php
-rwxr-xr-x   1 apache apache  39K Jun 10 13:34 wp-login.php
-rwxr-xr-x   1 apache apache 8.3K Nov 30  2017 wp-mail.php
-rwxr-xr-x   1 apache apache  19K Mar 28  2019 wp-settings.php
-rwxr-xr-x   1 apache apache  31K Jan 16  2019 wp-signup.php
-rwxr-xr-x   1 apache apache 4.7K Nov 30  2017 wp-trackback.php
-rwxr-xr-x   1 apache apache 3.0K Aug 17  2018 xmlrpc.php
[[email protected] wordpress]#
[[email protected] wordpress]#

Langkah 3: Setup Database WordPress

Pada Langkah ke 3 silakan remote server database Anda disini kita akan setup server database. Untuk Database kita akan menggunakan MariaDB versi 10.3 silakan update terlebih dahulu sistem operasi CentOS 7 Anda gunakan perintah berikut:

[[email protected] ~]#
[[email protected] ~]# yum update -y 

Tunggu proses update sampai selesai, jika sudah menambahkan repositori MariaDB 10.3 letaknya berada di direktori /etc/yum.repos.d seperti berikut:

[[email protected] ~]#
[[email protected] ~]# vim  /etc/yum.repos.d/MariaDB.repo 

Isikan repository database MariaDB 10.3 seperti berikut

# MariaDB 10.3 CentOS repository list - created 2018-05-25 19:02 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Simpan repository dan update kembali sistem operasi CentOS 7 Anda dan install database MariaDB menggunakan perintah sebagai berikut:

[[email protected] ~]#
[[email protected] ~]# yum update -y
[[email protected] ~]# yum install MariaDB-server MariaDB-client -y 

Tunggu proses instalasi sampai selesai, jika sudah start, enable dan pastikan service sudah berjalan dengan normal sebagai berikut:

[[email protected] ~]#
[[email protected] ~]# systemctl status mariadb
● mariadb.service - MariaDB 10.3.18 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Sun 2019-10-27 18:21:52 UTC; 1 day 3h ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 948 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─948 /usr/sbin/mysqld

Konfigurasi password root database jalankan perintah berikut

[[email protected] ~]# 
[[email protected] ~]# mysql_secure_installation 

Selengkapnya untuk instalasi dan konfigurasi database merujuk pada referensi berikut: Instalasi Dan Konfigurasi Database MariaDB Di CentOS 7.

Berikutnya akses database Anda dan membuat user dan database wordpress serta grant ke setiap ip private dari srv-web01 dan srv-web02 sebagai berikut:

[[email protected] ~]#
[[email protected] ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 62
Server version: 10.3.18-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> create database wp-db;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> grant all privileges on wp-db.* to 'wp-user'@'192.168.10.7' identified by 'Isikan_password';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> grant all privileges on jangkrikbos.* to 'wp-user'@'192.168.10.9' identified by 'Isikan_password';
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> exit
Bye
[[email protected] ~]# 

Kemudian allow database ke 0.0.0.0 sebagai berikut

[[email protected] ~]#
[[email protected] ~]# vim /etc/my.cnf.d/server.cnf 

Pada bind-address Ubah seperti berikut ini

#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
#

Jika sudah silakan restart service mariadb dan pastikan statusnya running sebagai berikut:

[r[email protected] ~]#
[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# systemctl status mariadb
● mariadb.service - MariaDB 10.3.18 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Mon 2019-10-28 22:25:29 UTC; 5s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 19619 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 19572 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
  Process: 19570 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 19587 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─19587 /usr/sbin/mysqld

Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] InnoDB: 10.3.18 started; log sequence number 2684709; transaction id 764
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] Plugin 'FEEDBACK' is disabled.
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] InnoDB: Buffer pool(s) load completed at 191028 22:25:29
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] Server socket created on IP: '0.0.0.0'.
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] Reading of all Master_info entries succeeded
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] Added new Master_info '' to hash table
Oct 28 22:25:29 srv-database mysqld[19587]: 2019-10-28 22:25:29 0 [Note] /usr/sbin/mysqld: ready for connections.
Oct 28 22:25:29 srv-database mysqld[19587]: Version: '10.3.18-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Oct 28 22:25:29 srv-data

Selanjutnya akses server srv-web01 dan srv-web02 sebagai berikut:

  • Akses Melalui srv-web01

    [[email protected] ~]#
    [[email protected] ~]# mysql -u wp-user -p -h 192.168.10.17
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 12
    Server version: 10.3.18-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> show databases;
    +--------------------+  
    | Database           |  
    +--------------------+  
    | information_schema |  
    | wp-db              |  
    +--------------------+  
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> exit  
    Bye
    [[email protected] ~]# 
    
  • Akses Melalui srv-web02

    [[email protected] ~]#
    [[email protected] ~]# mysql -u wp-user -p -h 192.168.10.17
    Enter password: 
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 13
    Server version: 10.3.18-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> show databases;
    +--------------------+  
    | Database           |  
    +--------------------+  
    | information_schema |  
    | wp-db              |  
    +--------------------+  
    2 rows in set (0.00 sec)
    
    MariaDB [(none)]> exit  
    Bye
    [[email protected] ~]# 
    

Hasilnya database sudah bisa di akses dengan normal baik dari sisi srv-web01 dan srv-web02

Saat ini ini kita telah berhasil setup 2 web server dan 1 database. Sebagai catatan di CentOS 7 biasanya terdapat Selinux, dengan demikian kami sarankan untuk disable Selinux di seluruh server database dan web server.

Langkah 4: Instalasi Dan Konfigurasi Load Balancer

Pada langkah ini kita akan setup Load Balancer menggunakan HAProxy Di CentOS 7.

Apa itu Load Balancer?

Load balancer adalah solusi yang digunakan untuk mendistribusikan aplikasi web secara horizontal di beberapa host sekaligus memberikan pengguna satu titik akses ke layanan.

HAProxy adalah salah satu perangkat lunak penyeimbang beban yang open-source dan yang paling populer, yang juga menawarkan ketersediaan tinggi dan fungsionalitas proxy.

HAProxy bertujuan untuk mengoptimalkan penggunaan sumber daya, memaksimalkan throughput, meminimalkan waktu respons, dan menghindari kelebihan sumber daya tunggal.

HAProxy sangat cocok untuk situs web dengan lalu lintas sangat tinggi dan karenanya sering digunakan untuk meningkatkan keandalan dan kinerja layanan web untuk konfigurasi multi-server.

Berikut ini merupakan tahapan installasi HAProxy pada CentOS 7:

Update terlebih dahulu sistem operasi CentOS 7 Anda gunakan perintah

[[email protected] ~]#
[[email protected] ~]# yum update -y

Tunggu proses update sampai selesai, selanjutnya instalasi dependensi yang dibutuhkan sebagai berikut

[[email protected] ~]#              
[[email protected] ~]# yum install gcc pcre-devel tar make -y

Kali ini kami menggunakan HAProxy versi 2.0, silakan untuk HAProxy sebagai berikut:

[[email protected] ~]#
[[email protected] ~]# wget http://www.haproxy.org/download/2.0/src/haproxy-2.0.7.tar.gz -O ~/haproxy.tar.gz

Ekstrak file HAProxy gunakan perintah berikut:

[[email protected] ~]#
[[email protected] ~]# tar xzvf ~/haproxy.tar.gz -C ~/

Pindah ke directori HAProxy

[[email protected] ~]#
[[email protected] ~]# cd ~/haproxy-2.0.7
[[email protected] haproxy-2.0.7]# 

Melakukan compile gunakan perintah berikut:

[[email protected] haproxy-2.0.7]# 
[[email protected] haproxy-2.0.7]# make TARGET=linux-glibc

Tunggu proses compile selesai, jika sudah install HAProxy menggunakan perintah berikut

[[email protected] haproxy-2.0.7]#
[[email protected] haproxy-2.0.7]# sudo make install

Selanjutnya membuat direktori HAProxy dan file stats untuk HAProxy sebagai berikut

[[email protected] haproxy-2.0.7]# mkdir -p /etc/haproxy
[[email protected] haproxy-2.0.7]# mkdir -p /var/lib/haproxy 
[[email protected] haproxy-2.0.7]# touch /var/lib/haproxy/stats

Konfigurasi HAProxy

Pada dasarnya, yang perlu Anda lakukan adalah memberi tahu HAProxy jenis koneksi dari source dan tujuannya.

Untuk melakukan konfigurasi tersebut kiranya dapat membuat file pada direktori /etc/haproxy/haproxy.cfg untuk konfigurasinya. Untuk mempelajari lebih lanjut terkait HAProxy dapat melalui dokumentasi resmi sebagai berikut: Configuration Manual.

Berikut ini contoh konfigurasi yang akan digunakan pada panduan ini sebagai berikut:

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats timeout 30s
   user haproxy
   group haproxy
   daemon

defaults
   log global
   mode http
   option httplog
   option dontlognull
   timeout connect 5000
   timeout client 50000
   timeout server 50000

frontend http_front
   bind *:80
   stats uri /haproxy?stats
   default_backend http_back

backend http_back
   balance roundrobin
   server srv_web01-wordpress 192.168.10.7:80 check
   server srv-web02-wordpress 192.168.10.9:80 check

Simpan konfigurasi diatas dan restart haproxy dan pastikan service nya running gunakan perintah sebagai berikut

[[email protected] haproxy]#
[[email protected] haproxy]# systemctl restart haproxy
[[email protected] haproxy]# systemctl status haproxy
● haproxy.service - SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments.
   Loaded: loaded (/etc/rc.d/init.d/haproxy; bad; vendor preset: disabled)
   Active: active (running) since Mon 2019-10-28 23:40:48 UTC; 6s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 11851 ExecStop=/etc/rc.d/init.d/haproxy stop (code=exited, status=0/SUCCESS)
  Process: 11753 ExecReload=/etc/rc.d/init.d/haproxy reload (code=exited, status=0/SUCCESS)
  Process: 11861 ExecStart=/etc/rc.d/init.d/haproxy start (code=exited, status=0/SUCCESS)
 Main PID: 11870 (haproxy)
   CGroup: /system.slice/haproxy.service
           └─11870 /usr/sbin/haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid

Oct 28 23:40:48 srv-lb systemd[1]: Stopped SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments..   
Oct 28 23:40:48 srv-lb systemd[1]: Starting SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments....
Oct 28 23:40:48 srv-lb haproxy[11869]: Proxy http_front started.
Oct 28 23:40:48 srv-lb haproxy[11861]: Starting haproxy: [  OK  ]
Oct 28 23:40:48 srv-lb systemd[1]: Started SYSV: HA-Proxy is a TCP/HTTP reverse proxy which is particularly suited for high availability environments..   
[[email protected] haproxy]# 

Silakan akses HAProxy menggunakan IP Public Server Anda atau domain/subdomain yang telah terpointing ke IP Public HA sebagai berikut contohnya: http://IP_SERVER_ANDA/haproxy?stats

Langkah 5

Pada langkah sebelumnya web server telah terhubung dan langkah saat ini yaitu instalasi CMS WordPress silakan akses IP SERVER Load Balancer Anda maka akan muncul tampilan setup dari CMS WordPress seperti berikut:

Klik Let’s go! untuk lanjut ke tahapan selanjutnya,

Isikan semua credential database WordPress yang telah dibuat sebelumnya sebagai berikut

Klik Run the Installation untuk melanjutkan ke proses instalasi WordPress

Selanjutnya isikan semua informasi dan credential untuk login ke Dashboard CMS WordPress sebagai berikut

Instalasi telah selesai dilakukan silakan klik login untuk login ke Dashboard CMS WordPress

Isi dengan credential yang telah dibuat sebelumnya pada saat proses instalasi

Berikut tampilan Dashboard dari CMS WordPress

Langkah 6: Integrasi S3 Protokol Pada WordPress

Pada langkah ini sesuai dengan topologi yang telah dibuat kami akan mengintegrasikan S3 Protokol dengan CMS WordPress.

Fungsi dari hal ini yaitu semua file statik pada WordPress baik itu gambar, foto, video, musik, dan yang lainnya akan tersimpan otomatis ke S3 Protokol jadi tidak server web server tidak perlu menggunakan storage yang besar untuk penyimpanan.

Untuk integrasi ini kami menggunakan plugin WordPress yaitu Media Cloud.

Silakan akses Dashboard WordPress Anda dan pilih menu Plugins >> Installed Plugins >> Add New >> Search (Media Cloud) >> Install Now

Klik Aktivate untuk megaktifkan plugin

Konfigurasi Plugin Media Cloud, aktifkan Cloud Storage

Siapkan credential S3 Storage Anda masing - masing, disini kami menggunakan NEO Object Storage. Yang harus disiapkan diantaranya adalah Access Key, Private Key, Endpoint

Selanjutnya membuat bucket di S3 Storage Anda, disini kami mengakses S3 Storage menggunakan Dragondisk,

Konfigurasi Media Cloud, seperti gambar berikut ini

Simpan konfigurasinya, dan silakan mencoba post atau add gambar ke library CMS WordPress

Pada gambar diatas terlihat Copy Link telah mengarah ke URL Endpoint dari S3 Storage, silakan akses hasil post baru Anda dan hasilnya akan seperti berikut:

Jika di view images akan terlihat bahwa gambar nya sudah ada di S3 Storage sebagai berikut

Sekian untuk panduan ini semoga bermanfaat bagi kita semua

See You :)