High Avaibility Load Balancer Nginx


Pada coretan kali ini akan membahas mengenai high avaibility, sebelumnya telah membahas mengenai konfigurasi Nginx sebagai load balancer. apa sih high avaibility?
untuk menjawab pertanyaan diatas, kita perlu tahu yang dimaksud dengan high avaibility. High Avaibility (HA) adalah sebuah desain yang dapat meminimalisir kegagalan dalam sistem atau server, sehingga proses produksi tidak terganggu, kondisi dengan high avaibility ini disebut Fault-tolerant dimna setiap komponen didalam sistem memiliki duplikat yang secara otomatis dapat menjadi pengganti komponen lainya yang mengalami kegagalan. sebenarnya loadbalancer juga bisa dikatakan high avaibility, karena sudah menunjang untuk meminimalisir kegagaln pada server, tapi pada coretan kali ini akan menerapkan high avaibility dengan cronsynce pacemaker pada sistem operasi CentOS 7. melanjutkan dari coretan sebelemunya

IP server 1 : 192.168.100.10 --> node1
IP server 2 : 192.168.100.20 --> node2
IP LB         : 192.168.100.30
edit pada setiap node lalu tambahkan konfigurasi berikut

  • vi /etc/hosts
    • 192.168.100.10  web1
    • 192.168.100.20 web2
simpan perubahan
selanjutnya lakukan instalasi pacemaker, corosync dan pcs pada setiap node
  • yum install corosynce pacemaker pcs
jalankan pcs daemon
  • systemctl enable pcsd
  • systemctl start pcsd
  • systemctl status pcsd
Didalam proses instalasi, terdapat hacluster yang telah dibuat, jadi perlu mengatur otentikasi untuk pcs, maka perlu membuat password untuk pengguna hacluster
  • passwd hacluster
selanjutnya pada salah satu node, jalankan perintah berikut untuk mengatur otentikasi , misalnya menggunakan node1 
  • pcs cluster auth web1 web2 -u hacluster -p password_anda --force
kemudian buat cluster, sebagai contoh disini menggunakan nama cluster1, berikut perintahnya
  • pcs cluster setup --name cluster1 web1 web2   
    web1 dan web2 adalah nama yang di set pada /etc/hosts, tunggu hingga proses selesai
    aktifkan cluster saat boot dan memulai layanan
    • pcs cluster enable --all
    • pcs cluster start --all
    untuk melakukan pngecekan apakan layanan cluster sudah berjalan dengan menggunakan perintah berikut
    • pcs status 
      • atau
    • crm_mon -1

    jika tidak terdapat error maka tampilanya akan seperti diatas.Tetapi jika terdapat error atau peringatan STONITH cobalah menjalankan perintah berikut
    • sudo pcs property set stonith-enable=false
    • sudo pcs property set no-quorum-policy=ignore
    kemudian jalankan perintah berikut untuk melihat daftar properti 
    • pcs property list
    Pada bagian ini saya mencoba menambahkan sumber daya cluster, dengan menambahkan floating_ip dan http_server, dalam hal ini digunakan untuk mendukung filover, floating_ip sebenarnya bukan hanya untk sitasu failover, tetapi juga bisa digunakan untuk beberapa kasus lainya. Berikut perintahnya
    • pcs resource create floating_ip ofc:hearbeat:IPaddr2 ip=192.168.100.30 cidr_netmask=24 op monitor interval=60s
    • pcs resource create http_server ocf:heartbeat:nginx configfile=" /etc/nginx/conf.d/load_balance.conf" op monitor timeout="20s" interval="60s"

    izinkan semua lalulintas Nginx melalui firewall untuk memastikan komunikasi yang baik antar node
    • firewall-cmd --add-service=http --permanent
    • firewall-cmd --permanent --add-service=high-avaibility
    • firewall-cmd --reload
    untuk melakukan test avaibility dengan menjalankan ip loadbalancer 192.168.100.30, maka hasilnya bisa telihat


    Load Balance dengan NGINX 


    Pada coretan kali ini, akan mencoba melakukan simulasi Load Balancer pada Virtual Machine. Untuk sistem operasi menggunakan CentoS7 .
    Load Balancing adalah teknik untuk mendistribusikan beban trafik pada dua atau lebih jalur koneksi secara seimbang, agar trafik dapat berjalan dengan optimal, memaksimalkan troughput, dan memperkecil waktu tanggap dari server serta menghindari overload pada salah satu jalur koneksi.

    Berikut topologi yang akan di gunakan :


    Pada topologi di atas, di simulasikan dengan menggunakan virtual machine, dimana terdapat 3 buah vm dan saling terkoneksi
    • Load Balancer  = Nginx
    • Webserver 1     = Apache
    • Webserver 2     = Apache
    Untuk instalasi Nginx pada server jalankan perintah berikut
    • yum install epel-release -y
    • yum install nginx -y
    kemudian ubahlah konfigurasi berikut dengan memberikan tanda "#" pada 
    • vi /etc/nginx/nginx.conf

    Setelah itu buatlah sebuah konfigurasi untuk setting LB nya
    • vi /etc/nginx/conf.d/load_balance.conf


    upstream backend {
            server 192.168.100.10:80;
            server 192.168.100.20:80;
        }

        server {
            listen 80;
            server_name 192.168.100.30;
            access_log /var/log/nginx/access_log;
            error_log /var/log/nginx/error_log;

            location / {
                proxy_pass http://backend;
            }
        }

    Jalankan Nginx
    • systemctl start nginx
    • systemctl enable nginx
    • systemctl status nginx
    Jika ada kendala coba lakukan pengecekan SeLinux, atau dengan menambahkan firewall
    • firewall-cmd --add-port=80/tcp --permanent
    • firewall-cmd --reload
    kemduian jalankan IP LB di browser 192.168.100.30

    GIT 


    Pada coretan kali ini akan membahas mengenai GIT, yang akan di terapkan pada sistem operasi linux CentOS.

    Gitlab merupakan manager repository git berbasis web. Gitlab sudah memiliki fitur CI/CD sehingga memudahkan developer untuk mendeploy aplikasi ke server dengan cepat dan aman. Aman karena gitlab menyediakan fitur security seperti SAST DAST dan Dependency Scanning (versi enterprise).

    Selain tersedia versi software as a service (SaaS), Gitlab juga dapat di install di on premise, sehingga pengguna dapat membuat private repository di local server mereka. Versi Gitlab on premise menawarkan 2 product, yaitu Gitlab community edition atau Gitlab CE dan Gitlab enterprise edition atau Gitlab EE. Gitlab EE memiliki fitur yang lebih advanced disbanding Gitlab CE, diantaranya fitur integrated SAST dan DAST, multiple Kubernetes cluster, dll.


    Instalasi

    1. lakukan update epel-release
      #yum update epel-release
    2. Kemudian lakukan instalasi awal GIT
      #sudo yum install -y curl policycoreutils-python openssh-server

    3. Lakukan instalasi postfix
      #sudo yum install postfix
    4. Dan jalankan postfix
      #sudo systemctl enable postfix
      #sudo systemctl start postfix
    5. Tambahkan Repository GIT
      #curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
    6. Lakukan instalasi gitlab-ce
      #sudo EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ee
    7. Jika telah selesai jalankan pada browser dengan mengetikan
      #http://IP-server-git/
    Jika masih bingung coba kunjungi situs resmi disini.

    GRAFANA


    Pada coretan kali ini, akan membahas instalasi grafana, yang berfungsi sebagai media antarmuka untuk melakukan monitoring.
    Grafana adalah analitik open source multi-platform dan perangkat lunak visualisasi interaktif yang tersedia sejak 2014. Grafana menyediakan grafik, dan peringatan untuk web ketika terhubung ke sumber data yang didukung.

    Jadi grafana ini berfungsi sebagai media antarmuka untuk melakukan monitoring, grafana mengambil data dari Exporter dan di baca dengan prometheus kemudian di tampilkan dalam bentuk grafik di grafana.

    Instalasi 

    1. Buatlah sebuah repositori pada sistem operasi
      #vi /etc/yum.repos.d/grafana.repo
    2. Masukan konfigurasi berikut
      [grafana]

      name=grafana
      baseurl=https://packages.grafana.com/oss/rpm
      repo_gpgcheck=1
      enabled=1
      gpgcheck=1
      gpgkey=https://packages.grafana.com/gpg.key
      sslverify=1
      sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    3. Lakukan instalasi dengan perintah
      #yum install grafana
    4. Jalankan dengan perintah
      #systemctl enable grafana-server
      #systemctl start grafana-server
    5. Untuk pengecekan bisa dilakaukn dengan perintah
      #systemctl status grafana
    6. Jalankan di browser dengan menggunakan http://Ip-Server:3000, default port untuk grafana 3000
    7. Agar tampilan grafana lebih menarik lakukan instalasi berikut
      #yum install fontconfig#yum install freetype*#yum install urw-fonts

    Ex Error

    1. bukalah port grfana
      #firewall-cmd --add-port=3000/tcp --permanent
      #firewall-cmd --reload

    Node_Exporter


    Node_exporter adalah sebuah aplikasi yang di pasang pada server atau target yang akan dilakukan monitorin, juga bisa disebut sebagai agent dari prometheus. Ada banyak yang bisa digunakan sebagai Exporter, seperti mysqlexporter, tetapi pada coretan kali ini yang akan digunakan untuk memantau penggunaan memory disk pada server atau target


    1. Instalasi node_exporter dengan mendownload file pada situ resmi Link atau bisa menggunakan perintah
      #wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
    2. Jika proses telah selesai, maka extrak file yang telah di download dengan menggunakan perintah
      #tar -xvzf node_exporter-0.18.1.linux-amd64.tar.gz
    3. Salin atau pindahkan file node exporter dengan perintah
      #mv node_exporter-0.17.0.linux-amd64/node_exporter /usr/local/bin/
    4. Kemudian buatlah service node_exporter dengan perintah
      #vim /etc/systemd/system/node_exporter.service
    5. Isikan konfigurasi berikut

      [Unit]
      Description=Node Exporter
      After=network.target

      [Service]
      User=nodeusr
      Group=nodeusr
      Type=simple
      ExecStart=/usr/local/bin/node_exporter

      [Install]
      WantedBy=multi-user.target
    6. Lakukan restart dengan perintah berikut
      #systemctl start node_exporter
    7. Buka port node exporter
      #firewall-cmd --zone=public --add-port=9100/tcp --permanent
      #firewall-cmd --reload
    8. Agar node_exporter mengirimkan informasi mengenai perangkat atau server ke prometheus,  edit file prometheus dengan perintah
      #vim /etc/prometheus/prometheus.yml
    9. Kemudian tambah dengan konfigurasi berikut

      - job_name: 'node_exporter_centos'
          scrape_interval: 5s
          static_configs:
            - targets: ['10.94.10.209:9100']
    10. Lakukan restart Prometheus
      #systemctl restart prometheus

    PROMETHEUS 


    Kali ini saya akan berbagi pengalaman tentang instalasi dan konfigurasi prometheus.
    Prometheus adalah sebuah aplikasi open source untuk monitoring system dan alerting yang dibuat oleh soundclouud. Pada awal tahun 2012 banyak perusahaan dan organisasi yang sudah mengadopsi  prometheus. Prometheus sangat aktif di development dan komunitas pengguna

    Tahapan instalasi dari prometheus banyak sekali caranya, tetapi dalam coretan kali ini saya membagikan pengalaman cara instalasi prometheus berdasarkan pengalaman. Didalam coretan ini saya menggunakan prometheus di sistem operasi CentOS. Berikut tahapan instalasi dan konfigurasinya.
    1. Sebelum melakukan instalasi prometheus, download dahulu prometheus dengan menggunakan perintah berikut
      "wget https://github.com/prometheus/prometheus/releases/download/v2.15.2/prometheus-2.15.2.linux-amd64.tar.gz " atau bisa mengunjungi situs Prometheus
    2. kemudian cek SeLinux, untuk mengeceknya sudah di jelaskan pada coretan disini
    3. Buatlah sebuah directory atau folder
       mkdir /etc/prometheus 
       mkdir /var/lib/prometheus 
    4. Ubah ownernya sesuai dengan user yang digunakan contohnya
      chown irfan:irfan /etc/prometheus
      chown irfan:irfan /var/lib/prometheus 
    5. Extrak hasil download tadi dengan perintah
      tar -xvzf prometheus-2.15.2.linux-amd64.tar.gz
    6. Untuk memudahkan, ubahlah prometheus prometheus-2.15.2.linux-amd64 dengan perintah
      mv prometheus-2.15.2.linux-amd64 prometheus package 
    7. Salin file yang ada pada directory prometheuspackage
      cp prometheuspackage/prometheus /usr/local/bin
      cp prometheuspackage/promtool /usr/local/bin
      cp -r prometheuspackage/consoles  /etc/prometheus
      cp -r prometheuspackage/console_libraries  /etc/prometheus
    8. Kemudian ubah kembali ownernya
      chown irfan:irfan /usr/local/bin/prometheus
      chown irfan:irfan /usr/local/bin/promtool
      chown -R irfan:irfan /
      etc/prometheus/consoles
      chown -R irfan:irfan /etc/prometheus/console_libraries
    9. Buatlah sebuah file prometheus.yml
      touch /etc/prometheus/prometheus.yml dan buka dengan perintah vi /etc/prometheus/prometheus.yml
    10. Kemudian isikan seperti berikut ini

      global: 
          scrape_interval: 10s

      scrape_configs:
         
         -  job_name: 'prometheus_master'
           
            scrape_interval: 5s
           
            static_configs:
                -  targets: ['localhost:9090']
    11. Lalu buat sebuah service prometheus agar dapat dijalankan secara otomatis
      vi /etc/systemd/system/prometheus.service
    12. Isikan dengan perintah berikut

      [Unit]
      Description=Prometheus
      Wants=network-online.target
      After=network-online.target

      [Service]
      User=irfan
      Group=irfan
      Type=simple
      ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/etc/prometheus/consoles --web.console.libraries=/etc/prometheus/console_libraries

      [install]
      WantedBy=multi-user.target
    13. Jalankan service daemon dan jalankan service prometheus
      systemctl daemon-reload
      systemctl enable prometheus
      systemctl start prometheus
    14. Lakukan pengecekan dengan perintah
      systemctl status prometheus
    15. Kemudian buka pada web browser dengan memasukan IP address dan port, untuk default port prometheus 9090
      contoh 192.168.10.1:9090

    EX ERROR

    Jika terjadi error, coba lakukan pengecekan SeLinux atau membuka port 9090 pada firewall
    1. SeLinux 
    2. Untuk Firewall bisa dengan perintah
      firewall-cmd --add-port=9090/tcp --permanent
      firewall-cmd --reload
    3. Coba buka kembali.

    SeLinux CentOS 7


    SeLinux adalah suatu fitur pengaturan keamanan yang membatasi akses ke modul kernel tertentu. fitur ini biasanya digunakan secara standar pada sistem operasi CentOS dan RHEL, yang berguna untuk memberikan keamanan tambahan untuk sistem operasi tersebut. 
    Di dalam seLinux terdriri dari policies , yaitu peraturan yang memperbolehkan atan tidaknya penggunakan aplikasi tertentu. 
    Terdapat tiga status dalam SeLinux, antara lain :
    • Enforcing, artinya semua akses tanpa memberikan hak kepada seseorang yang menggunakan sistem, dengan di ikuti peringatan
    • Permissive, artinya membolehkan akses tanpa memberikan hak kepada seseorang yang menggunakan sistem, dengan diikuti peringatan.
    • Disable, artinya memberikan hak kepada seseorang tanpa memberi peringatan

    Mematikan SeLinux

    Ada beberapa cara dalam mematikan seLinux, yaitu secara sementara dan  permanen, jika dimatikan secara sementara, kita tidak perlu mengorbankan kemanan dari server, seLinux akan kembali aktif setelah sistem dinyalakan ulang (restart). Jika dimatikan secara permanen, kita dapat melakukan apapun di server tanpa mendapat peringatan, akan tetapi, server tidak terlindungi dengan semurna.

    Cara Disable Sementara

    sebelum melakukan disable, cek dahulu status SeLinux dengan perintah
    • sestatus
    jika dalam status tersebut seLinux masih dalam keadaan enforcing, maka untuk melakukan disable sementara dengan menjalankan perintah 
    • setenforce 0
    selanjutnya cek kembali apakah sudah berubah menjadi permissive

    Cara Disable Permanen

    Sama halnya dengan sebelumnya, cek dahulu status seLinux. 
    Untuk melakukan disable permanen dengan menggunakan perintah
    • vi /etc/sysconfig/selinux   "vi" adalah text edito

    yang perlu diubah dari SeLinux adalah dengan mengganti value SELINUX menjadi disable
    • SELINUX=disable

    .....Sekian Terimakasih......