[Linux-ha-jp] Pacemakerのノードを再インストールするとMySQLのレプリケーションに失敗する

Back to archive index

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



Linux-ha-japan メーリングリストの案内
Back to archive index