10 Jun 2013

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 




Tiada ulasan:

Catat Ulasan

Demo sero guano?