# PostgreSQL 維運管理 ## 架構設計 #### HA + daily backup (PITR) ## PostreSQL 部屬 #### [root]Create user (在安裝前先創好帳號 他在 db 就會直接建好postgres帳號) ``` $ groupadd -g 800 postgres $ useradd -u 800 -g 800 postgres $ passwd postgres ``` #### [root]安裝postgresql ``` $ yum install -y postgresql12-server $ yum install -y postgresql12-contrib.x86_64 ``` #### 檢查系統上是否有缺套件 ``` $rpm -aq |grep postgres $yum install postgresql12-server-12.12-1PGDG.rhel7.x86_64 àpg server basic $yum install postgresql12-contrib-12.12-1PGDG.rhel7.x86_64 àpg server basic $yum install postgresql12-12.12-1PGDG.rhel7.x86_64 àpg lib 非必要,後須裝其他模組就會需要 $yum install pg_repack_12-1.4.7-1.rhel7.x86_64 àrepack 需要必須裝 ``` ### 資料庫路徑配置 #### 相關環境變數可以記錄在 postgres12_env.sh ``` echo "=======================" echo "PostgreSQL cmd env:" echo "=======================" export PATH=/usr/pgsql-12/bin:$PATH export PGData=/data/postgresql_data/database export PGDATABASE=postgres export PGUSER=postgres export PGPORT=5435 export PGLOCALEDIR=/usr/pgsql-12/share/locale export MANPATH=$MANPATH:/postgres/pgsql-12/share/man export LD_LIBRARY_PATH=/usr/pgsql-12/lib echo "PostgreSQL started, port: $PGPORT" ``` 套用 $source postgres12_env.sh #### postgresql.conf 基本設定 ``` $ vi /data/postgresql_data/database/postgresql.conf $ pg_ctl start -D /data/postgresql_data/database/ -l /data/postgresql_data/database/logfile ``` #### 修改 pg_hba.conf ``` $ vi /data/postgresql_data/database/pg_hba.conf $ pg_ctl reload -D /data/postgresql_data/database/ ``` #### check logfile ``` $ vim /data/postgresql_data/database/logfile ``` #### check postgrelog ``` $ vi /data/postgresql_data/database/log/postgresql-XXX.log ``` # login postgres & setting passwd $ psql ``` porsgres # : \password => XXXXXXX \q ``` # 把pg_wal 改成 128M ,原本預設 16M 很快就會不夠使用 => 服務記得關要,帶 --wal-segsize=128 去開啟又或者在一開始 initdb 時候就 帶這個 option 如 : ($initdb --wal-segsize=128 -D /data/postgresql_data/database/) ### PGadmin 4 checkout 安裝pgadmin4 ,連結db check 並創 user 和 DB 。  ## # Monitor 套件 1. postgres_exporter 2. node_exporter 下載 postgres_exporter 套件包 https://github.com/prometheus-community/postgres_exporter/releases ### 會有幾個重要的檔案 ``` postgres_exporter.env =>環境變數 queries.yaml => query 設定 postgres_exporter => 主程式 ``` #### postgres_exporter ``` $ vim etc/systemd/system/postgres_exporter.service chown -R postgres:postgres /data/exporter/ systemctl daemon-reload systemctl enable postgres_exporter systemctl start postgres_exporter.service systemctl status postgres_exporter.service ``` #### node_exporter ``` wget https://github.com/prometheus/node_exporter/releases/download/v*/node_exporter-*.*-amd64.tar.gz tar xvfz node_exporter-*.*-amd64.tar.gz cd node_exporter-*.*-amd64 ./node_exporter $ vim /etc/systemd/system/node_exporter.service / systemctl daemon-reload systemctl enable node_exporter systemctl start node_exporter.service systemctl status node_exporter.service ``` #### 報錯時候檢查 journalctl `journalctl -u postgres_exporter.service journalctl -u node_exporter.service` ### Monitor 服務是否正常 #### 以上的 monitor 配置後 請至 promethus 去添加此 target 收 metric,即可於 grafana 上有 visulaiztion dashborad.   ## HA fail-over ## pg_repack ## Commvault ## 復原演練 ## Command 調wal segments 數量 &file 大小 ``` pg_ctl stop -D /data/postgresql_data/database -m fast pg_resetwal --wal-segsize=256 /data/postgresql_data/database pg_ctl start -D /data/postgresql_data/database source ~/avatar_12.sh (env 變數) psql postgres=# show wal_keep_segments; postgres=# show wal_keep_segments; ```  ## Postgre的一些重要文件 * postgresql.conf :主要的設定擋 * 9.6版支援用 `altersystem` 指令做修改,改完的資訊會寫在postgresql.auto.conf下,透過 reload 或者 restart 來生效 * pg_hba.conf : 設置黑白名單 * pg_controldata 可以查閱 controlfile * redo 日誌 (WAL): 存在 pg_wal * WAL的手動切換 : `select pg_switch_wal();` ## Postgres 的 proccess 查詢 * 背景程序 `ps -ef | grep postgres` * 查運行 pid: `select pid from pg_stat_activity;` ## 其他 Postgres 功能程序 * Postmaster 程序 * SysLogger 程序 * BgWriter 後臺寫入程序 * WalWriter 預日的寫入程序 * PgArch 歸檔程序 * 因為 PITR(Point-In-Time-Recovery)技術,可以讓DB恢復到歷史紀錄裡有紀錄的時間點,是一個WAL file 歸檔功能。 * AutoVacuum 自動清理程序 * PgStat統計資料收集程序 * CheckPoint檢查點
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up