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/
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
Catat Ulasan
Comment