Dockerで動かしているPostgresqlのアップデートを行う
Last-modified: Wed, 30 Sep 2020 20:59:30 JST (1532d)
Top > Dockerで動かしているPostgresqlのアップデートを行う
Dockerで動かしているZabbixサーバのPostgreSQLを11から13にアップグレードしたのでメモ。
MySQLコンテナと違い、PostgreSQLのDockerコンテナはバージョンを上げて起動したら勝手にアップグレードしてくれたりしません。
この辺りの日本語情報は何故かあまりなかったので。
流れとしては、セオリー通り現在のPostgreSQLサーバからDMPファイルを作成し、新しいサーバへリストアします。
(個人的には、レプリケーションなど複雑な手順を使うと、その分ミスが増えると考えるので、完全無停止なんて幻想はさっさと捨てて、ガッツり停止してメンテしろと思っています。複雑な手順はミスった時のリカバリも複雑ですし、どうせトラブった時は停止しないといけない訳なんだから最初から停止して作業させろと小一時間・・・)
前提:
ZabbixやPostgreSQLをdocker-composeで動かしている。ボリュームはデータボリューム
厳密にはpostgresql.confの調整などがいるが、説明しない。
手順:
- 現在のZabbixサーバのdocker-compose.ymlから、PostgreSQLだけを抜き出したdocker-compose-pgsql.ymlを作る。
その時、バックアップ用DMP格納場所を指定する。(これは一時利用なのでローカルマウントにしておく。あとで確認もできるし)
以下参考version: '2' volumes: zabbix_pgsql_data: driver: local services: zabbix_pgsql: image: postgres:11 volumes: - zabbix_pgsql_data:/var/lib/postgresql/data - ./backup:/tmp/ environment: POSTGRES_PASSWORD: ************** POSTGRES_USER: zabbix POSTGRES_DB: zabbix POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C
- 稼働中のZabbixサーバ、DBサーバをすべて停止させる。
docker-compose down
- 先ほど作成したdocker-compose-pgsql.ymlを使って、DBのみ起動させる
docker-compose -f docker-compose-pgsql.yml up -d
- Postgresqlコンテナ内に入り、DBのDMPを取得する。
- Zabbix専用DBの場合
docker exec -it zabbix_zabbix_pgsql_1 /bin/bash root@**********:/# pg_dump -Uzabbix zabbix > /tmp/zabbix_db.dmp exit
- ほかのDBも共存している場合
docker exec -it zabbix_zabbix_pgsql_1 /bin/bash root@**********:/# pg_dumpall -U postgres > /tmp/all_dmp.dmp exit
- Zabbix専用DBの場合
- pg_dumpの正常終了を確認後、コンテナを終了させる
docker-compose down
- ファイルがあることを確認する。
ls -lah ./backup/ -rw-r--r-- 1 root root 512M 12月 26 15:40 zabbix_db.dmp
- Zabbix用のPostgreSQLのデータボリュームを確認する。
docker volume ls local zabbix_zabbix_pgsql_data local zabbix_zabbix_server_mib
- PosgreSQLのデータボリュームを削除する。
docker volume rm zabbix_zabbix_pgsql_data
- docker-compose-pgsql.ymlのバージョンを上げる。
version: '2' volumes: zabbix_pgsql_data: driver: local services: zabbix_pgsql: image: postgres:13 volumes: - zabbix_pgsql_data:/var/lib/postgresql/data - ./backup:/tmp/ environment: POSTGRES_PASSWORD: ************** POSTGRES_USER: zabbix POSTGRES_DB: zabbix POSTGRES_INITDB_ARGS: --encoding=UTF-8 --locale=C
- PostgreSQLを起動する。
docker-compose -f docker-compose-pgsql.yml up -d
- 正常起動を確認する。
docker-compose logs -f
- コンテナに入り、先ほどバックアップしたDMPをリストアする。
docker exec -it zabbix_zabbix_pgsql_1 /bin/bash root@**********:/# psql -Uzabbix zabbix < /tmp/zabbix_db.dmp exit
- 正常終了したら、PostgreSQLコンテナを落とす。
docker-compose down
- Zabbix用docker-compose.ymlのPostgreSQLのバージョンを上げる
- Zabbix用docker-composeを使ってZabbixサーバを起動する。
docker-compose up -d
- エラーが出ていないかを確認する
docker-compose logs -f
- Zabbixにアクセスし、グラフなどが表示されること、最新データが取得され、表示されていることを確認する。
Counter: 2422,
today: 5,
yesterday: 3
このページの参照回数は、2422です。