前段時間負責一個政務雲項目的升級,從單機容器環境,升級到kubernetes集羣環境。考慮到現場環境以及穩定性等因素,決定採取冷備份的方式。
實際生產環境中,使用的是posgres數據庫,數據庫運行在一個docker容器中,運行七個數據庫,有web,coreapi,以及openstack相關的五個組件:keystone,nova,glance,cinder,neutron。
Postgres數據庫已經提供了備份還原工具,因此只需要執行簡單的導入導出數據庫文件操作即可。數據庫文件的移動,可使用scp命令來下載或上傳。
可以不用進入容器,而直接進入數據庫中操作:
#psql –U postgres –h 127.0.0.1
進入之後,就可以查看相應的數據庫,以及進行備份恢復等操作了
Postgres=#\? 使用”\?”來查看可以執行的操作
Postgres=#\c 使用”\c”來切換數據庫
Postgres=#select * from nova 查看nova數據庫中所有表數據
Postgres=#create database mydb 使用create database命令來創建數據庫
Postgres=#drop database mydb 使用drop database命令來刪除數據庫
-----------------------------------------------------------------------------------------------------------------------
假設現場的單機版環境爲10.10.10.10,集羣版環境爲10.10.10.20
此處備份數據庫用自帶工具pg_dump來完成,詳細參數直接執行pg_dump查看。
備份數據庫的操作,在單機上操作(備份還原操作可以不用進入容器中):
Postgres=#pg_dump –h 127.0.0.1 –U postgres nova > /tmp/nova.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres cinder > /tmp/cinder.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres glance > /tmp/glance.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres keystone > /tmp/keystone.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres neutron > /tmp/neutron.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres core_api > /tmp/core_api.sql
Postgres=#pg_dump –h 127.0.0.1 –U postgres core_web > /tmp/core_web.sql
把備份的數據庫文件都放進了tmp文件夾中,然後使用scp命令把此文件夾上傳到集羣環境中:
#cd /
#scp –r /tmp [email protected]:/tmp/
Scp命令的格式爲: scp + 參數(-r爲傳輸文件夾)+源文件路徑 + 目的文件路徑
此處需要輸入連接目的路徑所在主機的root密碼。
備份文件上傳成功後,在集羣環境中,使用該數據庫文件進行還原操作。
還原數據庫用自帶工具psql來完成:
Postgres=# psql –h 127.0.0.1 –U postgres nova < /tmp/nova.sql
Postgres=# psql –h 127.0.0.1 –U postgres cinder < /tmp/cinder.sql
Postgres=# psql –h 127.0.0.1 –U postgres glance < /tmp/glance.sql
Postgres=# psql –h 127.0.0.1 –U postgres keystone < /tmp/keystone.sql
Postgres=# psql –h 127.0.0.1 –U postgres neutron < /tmp/neutron.sql
Postgres=# psql –h 127.0.0.1 –U postgres core_api < /tmp/core_api.sql
Postgres=# psql –h 127.0.0.1 –U postgres core_web < /tmp/core_web.sql
現場環境中,由於數據庫的表結構有變化,需要升級,因此要把原服務全部停掉。由於kubernetes集羣環境監測到某個服務終止時,會立即自動拉起對應的新服務,所以在此的方案是:暫時把所有rc都刪除,停止所有服務。待數據庫恢復之後,再從新創建rc。
之後,在新環境中驗證數據是否和舊環境中一致,至此,數據恢復完成。
也可以根據實際情況,使用整體備份的方法工具:pg_dumpall