2013年12月14日土曜日

wsrep_sst_authでハマったメモ

Percona XtraDB Clusterでクラスターの初期化中に、

wsrep_sst_method= xtrabackup
wsrep_sst_auth= username:password
としてても、JOINER側で

131212 17:22:05 [Note] WSREP: State transfer required:
        Group state: 64863b36-62f7-11e3-bef2-a746941be182:1
        Local state: 00000000-0000-0000-0000-000000000000:-1
131212 17:22:05 [Note] WSREP: New cluster view: global state: 64863b36-62f7-11e3-bef2-a746941be182:1, view# 10: Primary, numbe
r of nodes: 2, my index: 1, protocol version 2
131212 17:22:05 [Warning] WSREP: Gap in state sequence. Need state transfer.
131212 17:22:07 [Note] WSREP: Running: 'wsrep_sst_xtrabackup --role 'joiner' --address '192.168.xxx.xxx' --auth '' --datadir '/xxx' --defaults-file '/xxx/my.cnf' --parent '3382''
WSREP_SST: [INFO] Streaming with tar (20131212 17:22:08.058)
WSREP_SST: [INFO] Using socat as streamer (20131212 17:22:08.063)
WSREP_SST: [INFO] Evaluating socat -u TCP-LISTEN:4444,reuseaddr stdio | tar xfi - --recursive-unlink -h; RC=( ${PIPESTATUS[@]}
 ) (20131212 17:22:08.092)
131212 17:22:08 [Note] WSREP: Prepared SST request: xtrabackup|192.168.xxx.xxx:4444/xtrabackup_sst
131212 17:22:08 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
131212 17:22:08 [Note] WSREP: Assign initial position for certification: 1, protocol version: 2
131212 17:22:08 [Warning] WSREP: Failed to prepare for incremental state transfer: Local state UUID (00000000-0000-0000-0000-000000000000) does not match group state UUID (64863b36-62f7-11e3-bef2-a746941be182): 1 (Operation not permitted)
         at galera/src/replicator_str.cpp:prepare_for_IST():445. IST will be unavailable.
131212 17:22:08 [Note] WSREP: Node 1 (xxx) requested state transfer from '*any*'. Selected 0 (xxx)(SYNCED) as donor.
131212 17:22:08 [Note] WSREP: Shifting PRIMARY -> JOINER (TO: 1)
131212 17:22:08 [Note] WSREP: Requesting state transfer: success, donor: 0
tar: これは tar アーカイブではないようです
tar: 処理中にエラーが起きましたが、最後まで処理してからエラー終了させました
WSREP_SST: [ERROR] Error while getting data from donor node:  exit codes: 0 2 (20131212 17:22:09.063)
WSREP_SST: [ERROR] Cleanup after exit with status:32 (20131212 17:22:09.068)
131212 17:22:09 [Warning] WSREP: 0 (xxx): State transfer to 1 (xxx) failed: -1 (Operation not permitted)
131212 17:22:09 [ERROR] WSREP: gcs/src/gcs_group.c:gcs_group_handle_join_msg():719: Will never receive state. Need to abort.

SSTに失敗したログが出てて、DONOR側でも、

131214 16:12:12 [Note] WSREP: Shifting SYNCED -> DONOR/DESYNCED (TO: 4)
131214 16:12:12 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
131214 16:12:12 [Note] WSREP: Running: 'wsrep_sst_xtrabackup --role 'donor' --address '192.168.xxx.xxx:4444/xtrabackup_sst' --au
th '(null)' --socket '/xxx/mysql.sock' --datadir '/xxx/' --defaults-file '/xxx/my.cnf'
--gtid '64863b36-62f7-11e3-bef2-a746941be182:4''
131214 16:12:12 [Note] WSREP: sst_donor_thread signaled with 0
WSREP_SST: [INFO] Streaming with tar (20131214 16:12:13.133)
WSREP_SST: [INFO] Using socat as streamer (20131214 16:12:13.138)
WSREP_SST: [INFO] Streaming the backup to joiner at 192.168.xxx.xxx 4444 (20131214 16:12:13.154)
WSREP_SST: [INFO] Evaluating innobackupex --defaults-file=/xxx/my.cnf $INNOEXTRA --galera-info --stream=$sfmt ${T
MPDIR} 2>${DATA}/innobackup.backup.log | socat -u stdio TCP:192.168.xxx.xxx:4444; RC=( ${PIPESTATUS[@]} ) (20131214 16:12:13.159
)
WSREP_SST: [ERROR] innobackupex finished with error: 1.  Check /xxx//innobackup.backup.log (20131214 16:12:13.569
)
WSREP_SST: [ERROR] Cleanup after exit with status:22 (20131214 16:12:13.574)
131214 16:12:13 [ERROR] WSREP: Failed to read from: wsrep_sst_xtrabackup --role 'donor' --address '192.168.xxx.xxx:4444/xtraback
up_sst' --auth '(null)' --socket '/xxx/mysql.sock' --datadir '/xxx/' --defaults-file '/xxx/my.cnf' --gtid '64863b36-62f7-11e3-bef2-a746941be182:4'
131214 16:12:13 [ERROR] WSREP: Process completed with error: wsrep_sst_xtrabackup --role 'donor' --address '192.168.xxx.xxx:4444/xtrabackup_sst' --auth '(null)' --socket '/xxx/mysql.sock' --datadir '/xxx/' --defaults-file '/xxx/my.cnf' --gtid '64863b36-62f7-11e3-bef2-a746941be182:4': 22 (Invalid argument)
131214 16:12:13 [Warning] WSREP: 1 (xxx): State transfer to 0 (xxx) failed: -1 (Operation not permitted)

innobackupexが失敗したログが出る。

innobackupexのログを見てみると、

131214 16:47:12  innobackupex: Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_file=/xxx/my.cnf;mysql_read_default_group=xtrabackup' (using password: NO).
innobackupex: Error: Failed to connect to MySQL server: DBI connect(';mysql_read_default_file=/xxx/my.cnf;mysql_read_default_group=xtrabackup','',...) failed: Access denied for user 'mysql'@'localhost' (using password: NO) at /usr/local/bin/innobackupex line 2954

うーん、wsrep_sst_authでユーザー名とパスワードを指定してるのに、まるっと無視されている様子。取り敢えず、my.cnfの[xtrabackup]セクションに
[xtrabackup]
user= username
password= password
を追加して通るようにはなったけど、これバグなのか調べ方が悪いのかよく判らん。。


上手く行ってからメモ用にわざと失敗させてログを吐かせてるので、時間がバラバラなのはご愛嬌。


【2013/12/16 18:00】
Indeed, this is not a bug.

wsrep_sst_auth=username:password

でいけた。スペース入れるとダメぽい。

【2013/12/17 10:34】
違う、判った。
wsrep_sst_authはドナーノードに設定しないといけないオプションであり、しかも、mysqldセクションに書いている限り再起動しないと再読み込みされないので、ドナーノードを再起動してやるか、SET GLOBAL wsrep_sst_auth= ..で設定してやらないといけない。

_| ̄|○

0 件のコメント :

コメントを投稿