ちょっと古い(v.1.2.0)のRancher を Versionアップしたら、動かなくなった。
作り直してもいいのですが、せっかくなのでいろいろ見てみました。
1. アップデート前
v1.2.0で稼働は確認済
2. アップデート
アップデートした手順は、以下
Rancher v1.2.0へのアップデートについて - Qiita
http://qiita.com/cyberblack28/items/05170d68bd3de56d6382
3. アップデート後
画面は真っ白
4. Rancherサーバーコンテナーがどうなっているか確認する。
4-1. 外からRancherサーバーコンテナのログを見る
$ sudo docker logs 8446ed857c11
~~~~中略~~~~
DEFAULT_CATTLE_WEBHOOK_SERVICE_EXECUTE=true
07:50:21.701 [main] INFO ConsoleStatus - Loading configuration
2017-04-06 07:50:26,522 INFO [main] [ConsoleStatus] Starting DB migration
$
DBのマイグレーションはスタートしているようだ。
それ以上のエラーは出てない。問題なさそう。
4-2. ログインしてプロセス確認
sudo docker exec -it 8446ed857c11 /bin/bash
root@8446ed857c11:/var/lib/cattle/logs# ps axww
PID TTY STAT TIME COMMAND
1 ? Ss 0:00 /usr/bin/s6-svscan /service
7 ? S 0:00 s6-supervise mysql
8 ? S 0:00 s6-supervise cattle
9 ? Ssl 0:56 java -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Xms128m -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/cattle/logs -Dlogback.bootstrap.level=WARN -cp /usr/share/cattle/d0f45a1e258116e91e59c971546c04fe:/usr/share/cattle/d0f45a1e258116e91e59c971546c04fe/etc/cattle io.cattle.platform.launcher.Main
25 ? Ssl 0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
131 ? Ss 0:00 /bin/bash
164 ? R+ 0:00 ps axww
プロセス良し。起動している。
4-3. ポート確認
root@8446ed857c11:/var/lib/cattle/logs# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 localhost:41910 localhost:mysql ESTABLISHED
tcp 0 0 localhost:mysql localhost:41910 ESTABLISHED
tcp 0 0 localhost:41960 localhost:mysql ESTABLISHED
tcp 0 0 localhost:mysql localhost:41960 ESTABLISHED
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 487228 /var/run/mysqld/mysqld.sock
unix 2 [ ] STREAM CONNECTED 496846
ポート、あれ??8080開いてない。。
4-4. cattleのログを見る。
root@8446ed857c11:/# cd /var/lib/cattle/logs/
root@8446ed857c11:/# less cattle-debug.log
2017-04-06 08:11:03,126 WARN [:] [] [] [] [main ] [nnotationConfigWebApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibaseCore' defined in io.cattle.platform.app.Sy
stemConfig: Invocation of init method failed; nested exception is liquibase.exception.LockException: Could not acquire change log lock. Currently locked by 254a9016f30d (172.17.0.2) since 4/6/17 7:32 AM
2017-04-06 08:11:03,233 ERROR [:] [] [] [] [main ] [o.s.web.context.ContextLoader ] Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibaseCore' defined in io.cattle.platform.app.SystemConfig: Invocation of init method failed; nested
exception is liquibase.exception.LockException: Could not acquire change log lock. Currently locked by 254a9016f30d (172.17.0.2) since 4/6/17 7:32 AM
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) ~[spring-beans-4.3.2.RELEASE.jar:4.3.2.RELEASE]
エラーでてる。。
5. ググった。
ヒットしたのは以下。
liquibase.exception.LockException: Could not acquire change log lock. Currently locked by b4f9bbee3bde (fe80:0:0:0:42:acff:fe11:2%14) since 9/26/16 10:36 AM · Issue #6057 · rancher/rancher
https://github.com/rancher/rancher/issues/6057
どうもこれのようだ。
原因はこれ。
FAQS about Rancher Server
http://docs.rancher.com/rancher/v1.2/en/faqs/server/#why-is-rancher-server-frozen-or-why-could-my-upgrade-have-failed
MySQLのロックを外してみる。
6. MySQL の中身を確認
mysql> select * from DATABASECHANGELOG;
+------------------+---------------------------+-----------------+---------------------+---------------+----------+------------------------------------+---------------------------------------------------+----------+------+-----------+
| ID | AUTHOR | FILENAME | DATEEXECUTED | ORDEREXECUTED | EXECTYPE | MD5SUM | DESCRIPTION | COMMENTS | TAG | LIQUIBASE |
+------------------+---------------------------+-----------------+---------------------+---------------+----------+------------------------------------+---------------------------------------------------+----------+------+-----------+
| dump1 | darren (generated) | db/core-001.xml | 2015-09-15 23:21:58 | 1 | EXECUTED | 7:7804898bf856df0c94c17a1b6124775d | createTable | | NULL | 3.1.0 |
| dump2 | darren (generated) | db/core-001.xml | 2015-09-15 23:21:58 | 2 | EXECUTED | 7:b15f282d3fc93ca53935cbd47997f265 | createTable | | NULL | 3.1.0 |
| dump3 | darren (generated) | db/core-001.xml | 2015-09-15 23:21:58 | 3 | EXECUTED | 7:f3466a18a83797c81a53c3f44422b61d | createTable | | NULL | 3.1.0 |
| dump4 | darren (generated) | db/core-001.xml | 2015-09-15 23:21:58 | 4 | EXECUTED | 7:1374399fc3af8bd4098d25f05ca213bf | createTable | | NULL | 3.1.0 |
~~~~だーっとマイグレーションログがでる(後略)~~~~
mysql> select * from DATABASECHANGELOGLOCK;
+----+--------+---------------------+---------------------------+
| ID | LOCKED | LOCKGRANTED | LOCKEDBY |
+----+--------+---------------------+---------------------------+
| 1 | | 2017-04-06 07:32:11 | 254a9016f30d (172.17.0.2) |
+----+--------+---------------------+---------------------------+
1 row in set (0.00 sec)
たしかに、何かロックされるっぽい。
7. ロックを解除する
FAQS about Rancher Server
http://docs.rancher.com/rancher/v1.5/en/faqs/server/#why-is-rancher-server-frozen-or-why-could-my-upgrade-have-failed
のインストラクションに沿って、ロックを解除してみる。
※ロックの解除は、マイグレーションが終了していない可能性もあるので無闇に解除してはいけません。
root@8446ed857c11:/# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
~~~~中略~~~
mysql> use cattle
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from DATABASECHANGELOGLOCK;
+----+--------+---------------------+---------------------------+
| ID | LOCKED | LOCKGRANTED | LOCKEDBY |
+----+--------+---------------------+---------------------------+
| 1 | | 2017-04-06 07:32:11 | 254a9016f30d (172.17.0.2) |
+----+--------+---------------------+---------------------------+
1 row in set (0.00 sec)
mysql> update DATABASECHANGELOGLOCK set LOCKED="", LOCKGRANTED=null, LOCKEDBY=null where ID=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from DATABASECHANGELOGLOCK;
+----+--------+-------------+----------+
| ID | LOCKED | LOCKGRANTED | LOCKEDBY |
+----+--------+-------------+----------+
| 1 | | NULL | NULL |
+----+--------+-------------+----------+
1 row in set (0.00 sec)
mysql> quit
Bye
どうかな?
8. 結果
動きませんでした。
というか、もっと酷くなりました。
DB のマイグレーションが開始後に、
2017-04-06 09:05:51,761 INFO [main] [ConsoleStatus] Starting DB migration
2017-04-06 09:05:54,063 ERROR [main] [liquibase] classpath:db/changelog.xml: db/core-113.xml::dump2::alena (generated): Change Set db/core-113.xml::dump2::alena (generated) failed. Error: Error executing SQL ALTER TABLE cattle.instance ADD CONSTRAINT fk_instance__service_id FOREIGN KEY (service_id) REFERENCES cattle.service (id) ON UPDATE NO ACTION ON DELETE NO ACTION: (conn:7) Can't create table 'cattle.#sql-19_7' (errno: -1)
Query is : ALTER TABLE cattle.instance ADD CONSTRAINT fk_instance__service_id FOREIGN KEY (service_id) REFERENCES cattle.service (id) ON UPDATE NO ACTION ON DELETE NO ACTION liquibase.exception.DatabaseException: Error executing SQL ALTER TABLE cattle.instance ADD CONSTRAINT fk_instance__service_id FOREIGN KEY (service_id) REFERENCES cattle.service (id) ON UPDATE NO ACTION ON DELETE NO ACTION: (conn:7) Can't create table 'cattle.#sql-19_7' (errno: -1)
と言われて、 「cattle.#sql-19_7
などというテーブルはない」というエラーが出て、
マイグレーションプロセスが落ちてしまい、コンテナーが再起動、
そして、また、マイグレーションが始まって、エラーでマイグレーションプロセスが落ちて、
コンテナーが再起動するというエンドレス状態に陥りました。
9. どうしたか
残念ではありますが、諦めました...。
Rancherサーバー側をアップデートする前に、インフラコンテナーをアップデートしてしまったのも良くなかったようです。
他の環境では、v1.2.0 から問題なくアップデートできているのを確認しています。こちらは、Rancher サーバーを先にアップデートしてから、インフラコンテナーをアップデートしました。
アップデートの順番には気をつける必要がありそうです。