Nur Hamim
Nur Hamim Anak desa yang gemar berkomunitas, suka menulis dan mencari hal baru seputar Unix/Linux dan Cloud. Saat ini sedang menempuh pendidikan S1 TI di Unindra dan kebetulan bekerja di PT Biznet GIO Nusantara

WordPress High Availability Menggunakan Haproxy di CentOS 8


WordPress High Availability Menggunakan Haproxy di CentOS 8

WordPress salah satu CMS yang paling sering dan banyak digunakan untuk website, baik untuk website pribadi ataupun korporasi.

Pada tutorial kali ini kami akan mencoba mengkombinasikan WordPress dengan beberapa teknologi proxy dan load balancing, tujuannya untuk menciptakan high availability WordPress.

Tutorial – Tutorial sebelumnya kita sudah mencoba set up load balancing untuk database galera cluster menggunakan MariaDB MaxScale dan kali ini akan kami gunakannya sebagai database WordPress.

Berikut topologi yang akan kami gunakan

Pada topologi diatas terdapat 2 Load Balancing diantaranya

_ 1. Load Balancing Database Menggunakan MariaDB MaxScale yang menggunakan 4 Node. _

Node01, Node02 dan Node03: Digunakan sebagai Galera Cluster
Node04: Digunakan sebagai proxy atau LB dari Galera Cluster.

_ 2. Load Balancing CMS WordPress menggunakan HAProxy yang terdiri dari 3 Node. _

Node05, Node06: Digunakan sebagai CMS WordPress
Node07: Digunakan sebagai HAProxy.

Berikut detail IP dari node05 – node07:
Node05:
Hostname: wp1.nurhamim.my.id
IP: 192.168.10.2

– Node06
Hostname: wp2.nurhamim.my.id
IP: 192.168.10.24

Node07:
Hostname: haproxy.nurhamim.my.id
IP Local: 192.168.10.23
IP Public: 103.93.52.117

Jadi setiap service (web server) dan (database server) di load balancing semua tujuannya adalah

  1. Load Balancing HAProxy: Jika Web CMS di Node05 down, maka masih ada backup Node06
  2. Load Balancing MariaDB MaxScale: Jika terdapat node di salah satu cluster down maka database masih dapat di handling oleh node yang lainnya.

Untuk mengikuti tutorial kali ini pastikan Anda sudah melakukan instalasi Galera Cluster dan Instalasi Mariadb MaxScale terlebih dahulu panduannya dapat Anda lihat pada link berikut: Memanfaatkan MariaDB MaxScale Sebagai Load Balancing Untuk Galera Cluster pada CentOS 8

Pertama yang akan kita lakukan yaitu menyiapkan database CMS WordPress melalui database galera cluster, Anda dapat membuat database di salah satu node Galera Cluster, bisa di node01, node02 atau di node03.

Disini kami akan setup database WordPress di node01

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@galera01 ~]#
[root@galera01 ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 167
Server version: 10.3.17-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 wordpress;
Query OK, 1 row affected (0.021 sec)

MariaDB [(none)]> GRANT ALL ON wordpress.* TO userwp@192.168.10.2 IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.025 sec)

MariaDB [(none)]> GRANT ALL ON wordpress.* TO userwp@192.168.10.24 IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.030 sec)

MariaDB [(none)]> GRANT ALL ON wordpress.* TO userwp@192.168.10.15 IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.033 sec)

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

MariaDB [(none)]> exit
Bye
[root@galera01 ~]#

Noted: Create database, dan grant user ke masing – masing IP node web server yaitu 192.168.10.2, 192.168.10.24 serta grant ke IP Proxy MariaDB MaxScale 192.168.10.15

Selanjutnya menyiapkan CMS WordPress di node05, karena CMS WordPress membutuhkan PHP oleh karena itu pastikan di setiap node webserver (node05 & node06) sudah terinsall PHP, disini kami menggunakan PHP 7.2 untuk instalasi PHP Anda dapat merujuk pada link berikut: Cara Instalasi PHP 7 di CentOS 8

Verifikasi PHP di masing – masing node web server

Node05

1
2
3
4
5
6
[root@wp1 ~]# php -v
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( 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
[root@wp1 ~]#

Node06

1
2
3
4
5
6
[root@wp2 ~]# php -v
PHP 7.2.24 (cli) (built: Oct 22 2019 08:28:36) ( 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
[root@wp2 ~]#

Berikutnya kita akan mengunduh dan menyiapkan CMS WordPress, web server yang aka kami gunakna yaitu Nginx untuk tahapan unduh, konfigurasi Nginx Anda dapat merujuk pada link berikut: _ Cara Instalasi WordPress menggunakan Nginx di CentOS 8 _

Kemudian, pada konfigurasi database WordPress di _ wp-config.php _ silakan isikan IP proxy Mariadb MaxScale contoh nya

Selanjutnya kita akan mensikronisasi data dan file antara node05 dengan node06.

Untuk sinkronisasi node05 dengan node06 akan menggunakan lsyncd.

Lsyncd akan kami install di tinggal node05 (sebagai master) node06 (sebagai backup/slave). Untuk instalasi dan Lsyncd Anda dapat merujuk pada tutorial berikut: Cara Instalasi dan Menggunakan Lsyncd di CentOS 8

Berikut contoh full konfigurasi lsyncd di node05

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
----
-- 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.24:/var/www/html",
}

sync { default.rsync,
        source = "/etc/php-fpm.d",
        target = "192.168.10.24:/etc/php-fpm.d",
}

sync {
        default.rsync,
        source = "/etc/nginx/conf.d",
        target = "192.168.10.24:/etc/nginx/conf.d",
}
rsync = {
        update = true,
        perms = true,
        owner = true,
        group = true,
        rsh = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa"
}

Berikut contoh log sinkronisasi antara node05 dan node06 menggunakan lsyncd

1
2
3
4
5
6
7
8
9
10
11
12
[root@wp1 ~]#
[root@wp1 ~]# tail -f /var/log/lsyncd/lsyncd.log
/wordpress/wp-config.php
Wed Sep 2 12:41:03 2020 Normal: Finished a list after exitcode: 0
Wed Sep 2 12:41:14 2020 Normal: --- TERM signal, fading ---
Wed Sep 2 12:41:14 2020 Normal: --- Startup ---
Wed Sep 2 12:41:14 2020 Normal: recursive startup rsync: /var/www/html/ -> 192.168.10.24:/var/www/html/
Wed Sep 2 12:41:14 2020 Normal: recursive startup rsync: /etc/php-fpm.d/ -> 192.168.10.24:/etc/php-fpm.d/
Wed Sep 2 12:41:14 2020 Normal: recursive startup rsync: /etc/nginx/conf.d/ -> 192.168.10.24:/etc/nginx/conf.d/
Wed Sep 2 12:41:14 2020 Normal: Startup of /etc/nginx/conf.d/ -> 192.168.10.24:/etc/nginx/conf.d/ finished.
Wed Sep 2 12:41:14 2020 Normal: Startup of /etc/php-fpm.d/ -> 192.168.10.24:/etc/php-fpm.d/ finished.
Wed Sep 2 12:41:14 2020 Normal: Startup of /var/www/html/ -> 192.168.10.24:/var/www/html/ finished.

Jika sudah tahapan selanjutnya yaitu melakukan instalasi load balancer menggunakan HAProxy.

High Availability Proxy adalah kepanjangan dari HAProxy sebuah perangkat lunak open source dibawah GPLv2 license. HAProxy digunakan untuk membagi beban request atau load balancer TCP/HTTP dan solusi proxy yang dapat dijalankan di sistem operasi Linux, Solaris, dan FreeBSD.

Pembagian bebannya pun beragam sesuai dengan algoritma yang ada. HAProxy sudah umum digunakan untuk meningkatkan kinerja dan kehandalan sebuah server dengan mendistribusikan beban kerja dari beberapa server lain seperti web server, database server, smtp server dan yang lainnya.

Load Balancer menggunakan HAProxy bekerja sesuai dengan algoritma yang ditentukan. Terdapat 3 algoritma yang dapat digunakan diantaranya:

1. Roundrobin

Algoritma Roundrobin salah satu algoritma default yang umum digunakan, cara kerjanya yaitu memilih secara bergantian antara host 1 dengan bost 2 dan seterusnya apabila terdapat request dari client.

2. Leastconn

Jika Anda menggunakan algoritma Lestconn maka Anda dapat menentukan host mana yang akan menjadi beban atau tumpuan bila terdapat request dari client. Namun di sisi Backend Anda masih dapat menggunakan algoritma roundrobin.

3. Source

Algoritma Source adalah salah satu metode yang dapat digunakan untuk memastikan bahwa pengguna akan terhubung ke server yang sama. Anda dapat memilih berdasarkan hash dari IP sumber yaitu alamat IP pengguna (Client).

Untuk melakukan instalasi HAProxy di CentOS 8 Anda hanya perlu menjalankan satu baris perintah berikut:

1
2
[root@haproxy ~]#
[root@haproxy ~]# dnf install haproxy -y

Tunggu proses instalasi sampai selesai, dan jika sudah silakan simpan konfigurasi default haproxy kita akan menggunakan konfigurasi custom

1
2
3
4
5
6
[root@haproxy ~]#
[root@haproxy ~]# cd /etc/haproxy/
[root@haproxy haproxy]#
[root@haproxy haproxy]# cp haproxy.cfg haproxy.cfg-org
[root@haproxy haproxy]#
[root@haproxy haproxy]# vim haproxy.cfg

Berikut full konfigurasi HAProxy nya

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 wp1.nurhamim.my.id 192.168.10.2:80 check
        server wp2.nurhamim.my.id 192.168.10.24:80 check

Noted: Disini kami menggunakan algoritma roundrobin.

Jika sudah silakan simpan, dan restart dan pastikan status HAProxy running

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@haproxy haproxy]# systemctl restart haproxy
[root@haproxy haproxy]# systemctl status haproxy -l
● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/usr/lib/systemd/system/haproxy.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-09-02 10:42:08 UTC; 6s ago
  Process: 4947 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q (code=exited, status=0/SUCCESS)
 Main PID: 4949 (haproxy)
    Tasks: 2 (limit: 11328)
   Memory: 2.3M
   CGroup: /system.slice/haproxy.service
           ├─4949 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
           └─4950 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

Sep 02 10:42:08 haproxy.nurhamim.my.id systemd[1]: Starting HAProxy Load Balancer...
Sep 02 10:42:08 haproxy.nurhamim.my.id haproxy[4949]: Proxy http_front started.
Sep 02 10:42:08 haproxy.nurhamim.my.id haproxy[4949]: Proxy http_front started.
Sep 02 10:42:08 haproxy.nurhamim.my.id haproxy[4949]: Proxy http_back started.
Sep 02 10:42:08 haproxy.nurhamim.my.id haproxy[4949]: Proxy http_back started.
Sep 02 10:42:08 haproxy.nurhamim.my.id systemd[1]: Started HAProxy Load Balancer.
[root@haproxy haproxy]#
[root@haproxy haproxy]#

Disini kami sudah mengarahkan subdomain wp-ha.nurhamim.my.id ke IP Public HAProxy

Verifikasi subdomain diatas menggunakan ping

Akses HAProxy menggunakan IP Public atau subdomain diatas contohnya: http://IP_SERVER_ANDA/haproxy?stats

Saat ini web server node05 dan node06 sudah berhasil di load balancing, selanjutnya install CMS WordPress

Isikan semua yang dibutuhkan lalu klik Install WordPress

Selamat proses instalasi CMS WordPress sudah berhasil di lakukan, berikut tampilan default page CMS WordPress.

Pastikan semua database sudah tereplikasi

Selanjutnya kita akan mencoba melihat koneksi di sisi proxy atau load balancing MariaDB MaxScale di node04

Selamat mencoba 😁

comments powered by Disqus