Dockerで動かしているPostgresqlのアップデートを行う

Last-modified: Fri, 14 Jun 2019 13:17:01 JST (70d)
Top > Dockerで動かしているPostgresqlのアップデートを行う

Dockerで動かしているZabbixサーバのPostgreSQLを9.6から11にアップグレードしたのでメモ。
MySQLコンテナと違い、PostgreSQLのDockerコンテナはバージョンを上げて起動したら勝手にアップグレードしてくれたりしません。
この辺りの日本語情報は何故かあまりなかったので。
流れとしては、セオリー通り現在のPostgreSQLサーバからDMPファイルを作成し、新しいサーバへリストアします。
(個人的には、レプリケーションなど複雑な手順を使うと、その分ミスが増えると考えるので、完全無停止なんて幻想はさっさと捨てて、ガッツり停止してメンテしろと思っています。複雑な手順はミスった時のリカバリも複雑ですし、どうせトラブった時は停止しないといけない訳なんだから最初から停止して作業させろと小一時間・・・)

前提:

ZabbixやPostgreSQLをdocker-composeで動かしている。ボリュームはデータボリューム
厳密にはpostgresql.confの調整などがいるが、説明しない。

手順:

  1. 現在のZabbixサーバのdocker-compose.ymlから、PostgreSQLだけを抜き出したdocker-compose-pgsql.ymlを作る。
    その時、バックアップ用DMP格納場所を指定する。(これは一時利用なのでローカルマウントにしておく。あとで確認もできるし)
    以下参考
    version: '2'
    volumes:
      zabbix_pgsql_data:
        driver: local
    services:
      zabbix_pgsql:
        image: postgres:9.6
        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
  2. 稼働中のZabbixサーバ、DBサーバをすべて停止させる。
    docker-compose down
  3. 先ほど作成したdocker-compose-pgsql.ymlを使って、DBのみ起動させる
    docker-compose -f docker-compose-pgsql.yml up -d
  4. Postgresqlコンテナ内に入り、DBのDMPを取得する。
    1. Zabbix専用DBの場合
      docker exec -it zabbix_zabbix_pgsql_1 /bin/bash
      
      root@**********:/# pg_dump -Uzabbix zabbix > /tmp/zabbix_db.dmp
      exit
    2. ほかのDBも共存している場合
      docker exec -it zabbix_zabbix_pgsql_1 /bin/bash
      
      root@**********:/# pg_dumpall -U postgres > /tmp/all_dmp.dmp
      exit
  5. pg_dumpの正常終了を確認後、コンテナを終了させる
    docker-compose down
  6. ファイルがあることを確認する。
    ls -lah ./backup/
    
    -rw-r--r-- 1 root     root     512M 12月 26 15:40 zabbix_db.dmp
  7. Zabbix用のPostgreSQLのデータボリュームを確認する。
    docker volume ls
    local               zabbix_zabbix_pgsql_data
    local               zabbix_zabbix_server_mib
  8. PosgreSQLのデータボリュームを削除する。
    docker volume rm zabbix_zabbix_pgsql_data
  9. docker-compose-pgsql.ymlのバージョンを上げる。
    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
  10. PostgreSQLを起動する。
    docker-compose -f docker-compose.pgsql.yml up -d
  11. 正常起動を確認する。
    docker-compose logs -f
  12. コンテナに入り、先ほどバックアップしたDMPをリストアする。
    docker exec -it zabbix_zabbix_pgsql_1 /bin/bash
    
    root@**********:/# psql -Uzabbix zabbix < /tmp/zabbix_db.dmp
    exit
  13. 正常終了したら、PostgreSQLコンテナを落とす。
    docker-compose down
  14. Zabbix用docker-compose.ymlのPostgreSQLのバージョンを上げる
  15. Zabbix用docker-composeを使ってZabbixサーバを起動する。
    docker-compose up -d
  16. エラーが出ていないかを確認する
    docker logs -f
  17. Zabbixにアクセスし、グラフなどが表示されること、最新データが取得され、表示されていることを確認する。

Counter: 293, today: 1, yesterday: 3

このページの参照回数は、293です。