Kiwamu Okabe
kiwam****@debia*****
2015年 8月 3日 (月) 21:54:31 JST
はじめまして、岡部と申します。 Pacemakerのノードを再インストールするとMySQLのレプリケーション に失敗してしまい、悩んでいます。以下のようなエラーが /var/log/mysqld.log に出力されますが、データベースのバックアップをリストアしていますし、 ユーザを指定してパスワードを元のものに変更しても同じエラーになります。 > [ERROR] Slave I/O thread: error connecting to master 'repl @ vagrant-db1:3306': Error: 'Access denied for user 'repl'@'vagrant-db2' (using password: YES)' 具体的には以下のようなテストをしています。環境はCentOS 5.7です。 ## 0. vagrant-db1とvagrant-db2にCentOS 5.7を新規インストールする ## 1. vagrant-db1とvagrant-db2にPacemaker等をインストールする ``` vagrant-db1$ sudo yum install mysql-server which vagrant-db1$ cd /tmp vagrant-db1$ wget 'http://osdn.jp/frs/redir.php?m=iij&f=%2Flinux-ha%2F61792%2Fpacemaker-1.0.13-2.1.el5.x86_64.repo.tar.gz' vagrant-db1$ tar xfz pacemaker-1.0.13-2.1.el5.x86_64.repo.tar.gz vagrant-db1$ cd pacemaker-1.0.13-2.1.el5.x86_64.repo vagrant-db1$ sudo yum -c pacemaker.repo install heartbeat.x86_64 pacemaker.x86_64 ``` ## 2. vagrant-db1とvagrant-db2でMySQLの設定をする ``` vagrant-db1$ sudo vi /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=1 # <= vagrant-db1では1、vagrant-db2では2 ... vagrant-db1$ sudo /sbin/service mysqld start vagrant-db1$ mysql -u root -p mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'slavepass'; mysql> GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass'; mysql> FLUSH PRIVILEGES; mysql> QUIT; vagrant-db1$ sudo /sbin/chkconfig mysqld on ``` ## 3. vagrant-db1とvagrant-db2でHeartbeatの設定をする ``` vagrant-db1$ sudo vi /etc/ha.d/ha.cf pacemaker on logfacility local1 debug 0 udpport 694 keepalive 2 warntime 20 deadtime 24 initdead 48 bcast eth1 node vagrant-db1 node vagrant-db2 vagrant-db1$ sudo vi /etc/ha.d/authkeys auth 1 1 sha1 centabcdefg vagrant-db1$ sudo chown root:root /etc/ha.d/authkeys vagrant-db1$ sudo chmod 600 /etc/ha.d/authkeys vagrant-db1$ sudo /sbin/service heartbeat start ``` ## 4. Pacemakerの設定をする ``` vagrant-db1$ sudo bash vagrant-db1# export PATH=$PATH:/usr/sbin vagrant-db1# crm node standby vagrant-db2 vagrant-db1# crm configure crm(live)configure# primitive vip_192.168.179.100 ocf:heartbeat:IPaddr2 params ip="192.168.179.100" cidr_netmask="24" nic="eth1" crm(live)configure# property no-quorum-policy="ignore" stonith-enabled="false" crm(live)configure# node vagrant-db1 crm(live)configure# node vagrant-db2 crm(live)configure# commit crm(live)configure# quit vagrant-db1# crm crm(live)# cib new mysql_repl crm(mysql_repl)# configure primitive mysql ocf:heartbeat:mysql params binary=/usr/bin/mysqld_safe pid=/var/run/mysqld/mysqld.pid replication_user=repl replication_passwd=slavepass op start interval=0 timeout=120s op stop interval=0 timeout=120s op monitor interval=20s timeout=30s op monitor interval=10s role=Master timeout=30s op monitor interval=30s role=Slave timeout=30s op promote interval=0 timeout=120s op demote interval=0 timeout=120s op notify interval=0 timeout=90s crm(mysql_repl)# cib commit mysql_repl crm(mysql_repl)# quit vagrant-db1# crm configure ms mysql-clone mysql meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true vagrant-db1# crm configure colocation vip_on_mysql inf: vip_192.168.179.100 mysql-clone:Master vagrant-db1# crm configure order vip_after_mysql inf: mysql-clone:promote vip_192.168.179.100:start vagrant-db1# crm node online vagrant-db2 ``` ## 5. この時点ではレプリケーションとフェイルオーバーは上手く動作しています ## 6. vagrant-db1に障害が起きたとして、新規インストールします CentOS 5.7を新規インストールした後、以下を実行します。 1. vagrant-db1とvagrant-db2にPacemaker等をインストールする 3. vagrant-db1とvagrant-db2でHeartbeatの設定をする ## 7. データベースをレストアします ``` vagrant-db2# mysql -u root -p vagrant-db2# mysqldump -u root -p -x --all-databases > /vagrant_data/db.dump vagrant-db2# mysqldump -u root -p -x --allow-keywords mysql > /vagrant_data/dbuser.dump ``` ``` vagrant-db1$ sudo vi /etc/my.cnf [mysqld] log-bin=mysql-bin server-id=1 ... vagrant-db1# /sbin/service mysqld start vagrant-db1# /sbin/chkconfig mysqld on vagrant-db1# mysql -u root -p < /vagrant_data/db.dump vagrant-db1# mysql -u root -p mysql < /vagrant_data/dbuser.dump vagrant-db1# mysql -u root -p mysql> FLUSH PRIVILEGES; ``` ## 8. crm_monとしては正常に見えるが、MySQLではエラーが発生しています ``` vagrant-db1# /sbin/service heartbeat restart vagrant-db1# crm_mon Online: [ vagrant-db1 vagrant-db2 ] OFFLINE: [ vagrant-db1 ] vip_192.168.179.100 (ocf::heartbeat:IPaddr2): Started vagrant-db2 Master/Slave Set: mysql-clone Masters: [ vagrant-db1 ] Slaves: [ vagrant-db2 ] ``` ``` vagrant-db2# mysql -u root -p mysql> SHOW SLAVE STATUS\G ... Slave_IO_Running: No Slave_SQL_Running: Yes ... vagrant-db2# tail -1 /var/log/mysqld.log 150803 21:27:59 [ERROR] Slave I/O thread: error connecting to master 'repl @ vagrant-db1:3306': Error: 'Access denied for user 'repl'@'vagrant-db2' (using password: YES)' 0 ``` おそらくPacemakerよりもMySQLの知識が不足していると思うのですが、アドバイスをいただけないでしょうか。 以上よろしくお願いします。 -- Kiwamu Okabe