Langkau ke kandungan utama

Linux HA - Corosync Pacemaker DRBD dengan MySQL Replication.



Aku setup 2 server dengan DRBD + Corosync + Pacemaker.

Salah satu servis yang diselia adalah mysql.

Namun, aku jadikan server ini sebagai slave untuk mysql replication. Data diambil dari server lain.




Servis :


root@server1:~# crm_mon
============
Last updated: Mon Jun 10 12:17:21 2013
Last change: Sun Jun  9 16:40:19 2013 via cibadmin on server1
Stack: openais
Current DC: server1 - partition with quorum
Version: 1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff
2 Nodes configured, 2 expected votes
11 Resources configured.
============

Online: [ server1 server2 ]

Master/Slave Set: ms_drbd [drbd]
    Masters: [ server1 ]
    Slaves: [ server2 ]
Resource Group: servergrp
    ip_server (ocf::heartbeat:IPaddr2): Started server1
    fs_drbd (ocf::heartbeat:Filesystem): Started server1
    nfs_exports (ocf::heartbeat:exportfs): Started server1
    mysqld (lsb:mysql): Started server1
    app_apache (lsb:apache2): Started server1
    nfs_server (lsb:nfs-kernel-server): Started server1
    nagios (lsb:nagios): Started server1
Clone Set: cl_ping [p_ping]
    Started: [ server2 server1 ]



Masalah :

Apabila server1 yang menjadi master, mysql melarikan replication dengan baik. Namun, apabila server1 mati, mysql replication akan keluar ralat setelah mysql diambilalih oleh server2


- mysql di server1
--- FAILOVER
- mysql di server2
-- replication error.. 

Punca : 
mysql replication akan membaca fail mysqlbin.log yang berada dalam folder /var/log/mysql ( dalam debian )
 

oleh kerana folder ini tidak berada dalam storan berkongsi, setelah server2 mengambil alih servis mysql daripada server1, server2 akan menggunakan set bin.log yang lain iaitu yang berada di server2.

Error la keluar..

Penyelesaian.. :
Sama juga seperti semasa setkan servis MySQL untuk corosync/pacemaker. 
/var/lib/mysql perlu berada dalam storan terkongsi.

dalam setting mysql untuk corosync, kandungan dalam /var/lib/mysql dipindahkan kedalam storan terkongsi antara server1 dan server2 iaitu dalam bahagian DRBD


katakan /var/data adalah folder di dalam bahagian DRBD

salin dulu kandungan asal 
root@server1:~# cp -r /var/lib/mysql /var/lib/mysql.old

pindah
root@server1:~# mv /var/lib/mysql /var/data

cipta link
root@server1:~# ln -s /var/data/mysql /var/lib/


Untuk server2

pindah/ubah nama kandungan asal 
root@server2:~# mv /var/lib/mysql /var/lib/mysql.old

cipta link
root@server2:~# ln -s /var/data/mysql /var/lib/



jika kita perhatikan daripada ls -las dalam /var/lib..

root@server1:/var/lib# ls -las | grep mysql
 0 lrwxrwxrwx  1 root      root        15 May 28 16:47 mysql -> /var/data/mysql
 4 drwx------  4 root      root      4096 May 28 16:18 mysql.old

Sama juga kes untuk setkan replication mysql diatas DRBD + corosync + pacemaker. mysql replication perlu membaca fail log yang berada dalam /var/log/mysql. Oleh kerana itu, folder ini perlulah berada dalam storan terkongsi..

anda boleh lihat di dalam fail konfigurasi mysql anda.. Dalam kes aku ni, aku guna my.cnf dalam folder /etc/mysql

root@server1:~# cat /etc/mysql/my.cnf
.
.
.
.
#
# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
#
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
#
# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
server-id = 126111
relay-log = /var/log/mysql/mysql-relay-bin.log
report-host = serverAplikasi
log_bin = /var/log/mysql/mysql-bin.log
.
.
.

Perhatikan fail log berada dalam folder /var/log/mysql. Folder ini perlu dipindahkan kedalam folder terkongsi.


* Peringatan, jika anda telahpun melarikan pacemaker+corosync, perlu pastikan anda lakukan aktiviti ini di dalam master server yang sedang larian mysql.

* Periksa dengan melarikan crm_mon -1 dan lihat pada server mana ianya dilarikan.

* contohnya dalam kes aku sekarang ni, jika lihat dalam segmen servis diatas, mysql dilarikan pada server1


salin dulu kandungan /var/log/mysql
root@server1:~# cp -r /var/log/mysql /var/log/mysql.old

pindahkan kedalam folder terkongsi
root@server1:~# mv /var/log/mysql /var/data

cipta link ke sana
root@server1:~# ln -s /var/data/mysql /var/log


untuk server2
pindahkan folder untuk salinan
root@server2:~# mv /var/log/mysql /var/log/mysql.old

cipta link
root@server2:~# ln -s /var/data/mysql /var/log

sebelum anda mula-semula servis mysql, pastikan kebenaran folder adalah untuk mysql:adm ( dalam kes debian )

root@server1:~# ls -las /var/data/log | grep mysql
4 drwxr-x---  2 mysql adm  4096 Jun 10 12:40 mysql

jika tidak, mysql tidak dapat akses kepada folder tersebut..

ubah kebenaran kepada folder tersebut dengan arahan dibawah

root@server1:~# chown -R mysql.adm /var/data/log/mysql

* untuk server2, anda perlu lakukan failover server1 sebelum anda menukar kebenaran untuk folder ini.

anda boleh mula-semula servis mysql.

jika dalam pacemaker+corosync
root@server1:~# crm resource mysqld restart

jika tidak
root@server1:~# service mysql restart


semoga bermanfaat, insyaAllah 




Ulasan

Catatan popular daripada blog ini

Apa Maksud RON dalam pengkelasan Petrol?

RON dan Petrol Oleh yusdirman, Oktober 2014 RON adalah singkatan daripada Research Octane Number Ianya kaedah penarafan bahan api. Lebih tinggi nilai RON, lebih mahal harga PETROL. Adakah minyak RON 97 lebih berkuasa berbanding RON 95? RON merujuk kepada tahap bahan api menahan rintangan "ketukan" semasa proses pembakaran oleh palam pencucuh dalam enjin. Ianya merujuk kepada tahap ketahanan bahan api untuk tidak terbakar sebelum dinyalakan oleh palam pencucuh dalam enjin. "ketukan" dalam konteks RON ini adalah apabila campuran bahan api dan udara dalam enjin terbakar lebih awal sebelum api dari palam pencucuh menbakarnya. Pembakaran awal ini mungkin disebabkan enjin terlalu panas. Haba dari silinder enjin itu sendiri mungkin telah menyalakan bahan api sebelum palam pencucuh menyala. Ini boleh menurunkan prestasi dan mungkin boleh memudaratkan enjin! Jadi, RON bukannya bermaksud LEBIH KUASA! Ianya bermaksud bahan api itu dapat menahan tekanan dari

Load Balancing dengan Nginx dan Puma

Load Balancing dengan Nginx dan Puma Tutorial ini adalah sangat ringkas hanya untuk menunjukkan kebolehan nginx sebagai load balancer yang dapat menjadi 'orang tengah' antara banyak server di belakangnya Keperluan 1. Paling kurang 2 server aplikasi 2. Satu server diinstall nginx Contoh Persekitaran yang sekarang 1. server1: os: debian application: ruby on rails web server : puma dns : myaplication1.yusdirman.com 2. server2: myaplication2.yusdirman.com os:debian application: ruby on rails web server : puma dns : myaplication1.yusdirman.com 3. nginx diinstall di server1 /ets/nginx/nginx.conf setup (default): worker_processes  2; worker_processes  auto; worker_rlimit_nofile 65536; error_log  logs/error.log  notice; error_log  logs/error.log  info; events {   worker_connections  65536; } http {   include       mime.types;   default_type  application/octet-stream;   sendfile        on;   tcp_nopush on;   tcp_nodelay on;   keepalive_tim

Server Redundancy - Pertindanan Komputer Pelayan

alkisahnya tercari-cari untuk buat server redundancy ( pertindihan komputer pelayan ) atas sebab perlunya server yang sentiasa on-line tanpa ada downtime yang lama. Dan, cabarannya adalah memang kami tak pernah jalani apa-apa latihan, pengalaman dan apa jua pengetahuan berkenaan teknologi ini. Yang pastinya, perlu banyak mengoogle. Setakat ini, ada banyak kaedah untuk memastikan aplikasi masih terus boleh berfungsi walaupun server mati/rosak. 1. guna 2 server yang sama. Bila satu mati, satu lagi yang masih hidup dapat terus melayan pengguna. 2. guna 2 talian rangkaian yang berbeza. Bila satu talian rosak/putus, masih ada satu lagi talian rangkaian yang berfungsi. 3. storan di server guna raid ( redundant array of independent disk ) atau dalam bahasa melayu : barisan disk berlainan yang bertindan. Raid dapat menjadikan sebilangan hd menjadi 1 dengan semua data pada 1 hd adalah sama dengan data pada hd 2. (mirroring) 4. satu IP maya untuk sebilangan server. 2 server yang mena