環(huán)境準備
序號 | IP | 標(biāo)識(hostname) | CPU/內(nèi)存配置 | 系統(tǒng)盤 | 數(shù)據(jù)盤 |
---|---|---|---|---|---|
1 | 192.168.8.190 | pg01 | 8C+16G | 80G | 500G |
2 | 192.168.8.191 | pg02 | 8C+16G | 80G | 500G |
3 | 192.168.8.192 | pg03 | 8C+16G | 80G | 500G |
規(guī)劃的文件夾目錄(所有主機):
## 以下目錄為本文規(guī)劃的目錄,可以提前創(chuàng)建,也可以跟著說明一步步創(chuàng)建。
## 可以根據(jù)各自情況自行規(guī)劃,注意更改后替換后文里面對應(yīng)的路徑。
# app目錄為數(shù)據(jù)盤掛載目錄,將所有程序和數(shù)據(jù)保存在該目錄下
/app
# postgresql應(yīng)用的安裝目錄
/app/pg15
# 保存解壓后的應(yīng)用源代碼
/app/source
# 存儲臨時文件(如下載的應(yīng)用壓縮包)
/app/temp-files
#保存應(yīng)用數(shù)據(jù)
/app/appdata
# postgresql15的數(shù)據(jù)目錄 即是環(huán)境變量$PGDATA (建議用postgres用戶創(chuàng)建或創(chuàng)建后給postgres授權(quán))
/app/appdata/pg15/data
# postgresql15的日志 即是環(huán)境變量$PGLOG(建議用postgres用戶創(chuàng)建或創(chuàng)建后給postgres授權(quán))
/app/appdata/pg15/logs
系統(tǒng)和組件版本(所有主機):
# 操作系統(tǒng):
OpenEuler:22.03 (LTS-SP2)
# 數(shù)據(jù)庫:
postgresql:15.5
系統(tǒng)環(huán)境狀態(tài)(所有主機):
# SeLinux(cat /etc/selinux/config)變更需重啟系統(tǒng)
SELINUX=permissive
# Firewalld 防火墻保持開啟狀態(tài)(systemctl status/start/stop/restart firewalld)
active
更新系統(tǒng)并安裝必備組件
*(如無特殊說明代表所有主機)
# 查看系統(tǒng)版本
[root@pg01 ~]$ cat /etc/os-release
NAME="openEuler"
VERSION="22.03 (LTS-SP2)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP2)"
ANSI_COLOR="0;31"
# 更新系統(tǒng)
[root@pg01 ~]$ dnf upgrade -y
關(guān)于“dnf update” 和“dnf upgrade”的說明:
update:更新源里的軟件列表。一般指量的變化,側(cè)重更新的意思,主要是為原有的東西增加新功能,或者對已有的部分做出更改等。更新數(shù)據(jù)源。
upgrade:升級你系統(tǒng)里的軟件。一般指質(zhì)的變化,側(cè)重升級的意思,是指從較低級版本升級到高級的版本,這種升級往往伴有新功能的增加,因此也有update的意思。
更新資源
sudo dnf update
軟件更新升級,包括升級語言包等
sudo dnf upgrade
#安裝缺失組件,OpenEuler默認最小化安裝
#不同系統(tǒng)安裝鏡像默認安裝的基礎(chǔ)組件可能不一樣,根據(jù)情況安裝(gcc、make有的鏡像安裝時默認安裝,有的鏡像則沒有默認安裝)
[root@pg01 ~]$ dnf install gcc make tar readline-devel zlib-devel
掛載數(shù)據(jù)盤
#查看磁盤情況
[root@pg01 ~]$ fdisk -l
#給“/dev/vdb分區(qū)”
[root@pg01 ~]$ fdisk /dev/vdb
輸入指令如下:
# 再次查看分區(qū)情況
[root@pg01 ~]$ fdisk -l
# 顯示結(jié)果已創(chuàng)建vdb1分區(qū)
Device Boot Start End Sectors Size Id Type
/dev/vdb1 2048 1048575999 1048573952 500G 83 Linux
# 格式化分區(qū)
[root@pg01 ~]$ mkfs.ext4 /dev/vdb1
# 根目錄下創(chuàng)建data掛載目錄
[root@pg01 ~]$ mkdir /app
# 掛載/vdb1分區(qū)到/app
[root@pg01 ~]$ mount /dev/vdb1 /app
# 查看掛載情況
[root@pg01 ~]$ df -lh
# 將掛載添加到啟動項,否則掛載在重啟后失效
[root@pg01 ~]$ vi /etc/fstab
# 末尾添加一行
/dev/vdb1 /app ext4 defaults 0 0
保存關(guān)閉fstab文件,數(shù)據(jù)盤掛載完畢。
PostgreSQL安裝
下載PostgreSQL 15.5
PostgreSQL官方下載地址:PostgreSQL: File Browser
#下載PostgreSQL15.5版本
[root@pg01 ~]$ cd /app/temp-files/
[root@pg01 temp-files]$ wget https://ftp.postgresql.org/pub/source/v15.5/postgresql-15.5.tar.gz
編譯安裝
#解壓源碼包
[root@pg01 temp-files]$ tar -xzvf postgresql-15.5.tar.gz
# 將解壓后的文件夾(postgresql-15.5)移動到規(guī)劃的source目錄
[root@pg01 temp-files]$ mv postgresql-15.5 ../source/
# 切換到postgresql-14.10文件夾(系統(tǒng)當(dāng)前在root用戶根目錄下)
[root@pg01 temp-files]$ cd ../source/postgresql-15.5
# 配置安裝目錄:
[root@pg01 postgresql-15.5]$ ./configure --prefix=/app/pg15
# 編譯(耗時較長,耐心等待)
[root@pg01 postgresql-15.5]$ make
# 安裝
[root@pg01 postgresql-15.5]$ make install
# 創(chuàng)建PostgreSQL數(shù)據(jù)存放目錄(可根據(jù)實際情況自行配置數(shù)據(jù)存儲路徑)
[root@pg01 postgresql-15.5]$ mkdir -p /app/appdata/pg15/data
# 創(chuàng)建PostgreSQL日志存放目錄(可根據(jù)實際情況自行配置日志存儲路徑)
[root@pg01 postgresql-15.5]$ mkdir -p /app/appdata/pg15/logs
# 創(chuàng)建postgres用戶
[root@pg01 postgresql-15.5]$ adduser postgres
# 給postgres用戶授權(quán)訪問data和logs目錄
[root@pg01 postgresql-15.5]$ chown postgres /app/appdata/pg15/data
[root@pg01 postgresql-15.5]$ chown postgres /app/appdata/pg15/logs
# 切換到postgres用戶(數(shù)據(jù)庫操作不允許使用root用戶)
[root@pg01 postgresql-15.5]$ su - postgres
# 創(chuàng)建日志文件【postgres用戶】
[postgres@pg01 ~]$ touch /app/appdata/pg15/logs/server.log
# 初始化數(shù)據(jù)庫【postgres用戶】
[postgres@pg01 ~]$ /app/pg15/bin/initdb -D /app/appdata/pg15/data
# 啟動數(shù)據(jù)庫【postgres用戶】
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log start
# 創(chuàng)建test數(shù)據(jù)庫【postgres用戶】
[postgres@pg01 ~]$ /app/pg15/bin/createdb test ##創(chuàng)建test數(shù)據(jù)庫
# 連接test數(shù)據(jù)庫【postgres用戶】
[postgres@pg01 ~]$ /app/pg15/bin/psql test ##連接test數(shù)據(jù)庫
配置PostgreSQL
以下操作如無特殊說明,均采用postgres用戶(指操作系統(tǒng)普通用戶)操作命令。
修改數(shù)據(jù)庫密碼
# 我們從外部采用工具連接該數(shù)據(jù)庫,需要知道數(shù)據(jù)庫用戶和對應(yīng)的密碼
# 連接默認postgres數(shù)據(jù)庫;
[postgres@pg01 ~]$ /app/pg15/bin/psql
# 修改數(shù)據(jù)庫用戶postgres的密碼為postgres;
postgres=# ALTER USER postgres WITH PASSWORD 'postgres';
修改配置文件以支持遠程連接
需要修改的文件存放于postgresql的數(shù)據(jù)存儲目錄(/app/appdata/pg15/data)。
# pg_hba.conf 文件
# 待修改的行:
host all all 127.0.0.1/32 trust
# 修改為
host all all 0.0.0.0/0 md5
# postgresql.conf文件
# 待修改的行
#listen_addresses = 'localhost'
#移除前方的“#”,并將localhost修改為*
listen_addresses = '*'
重啟postgresql
#重啟postgresql
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log restart
操作系統(tǒng)配置
防火墻放行5432端口
以root用戶操作。
# 配置防火墻放行5432端口
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent
#防火墻重新加載配置文件
sudo firewall-cmd --reload
環(huán)境變量配置
我們想在安裝postgresql的服務(wù)器使用psql或其他提供的工具連接數(shù)據(jù)庫,就必須輸入psql的全路徑“/app/pg15/bin/psql",環(huán)境變量配置完畢后,我們可以以postgres用戶在任意位置輸入psql來使用psql工具。
以postgres用戶操作。
# 切換用戶目錄
[postgres@pg01 ~]$ cd ~
# 編輯用戶環(huán)境變量文件
[postgres@pg01 ~]$ vi .bash_profile
# 將下面兩行代碼添加文件末尾后保存退出
PATH=/app/pg15/bin:$PATH
export PATH
# 使配置文件生效
[postgres@pg01 ~]$ source .bash_profile
# 此時postgres用戶就可以直接輸入psql調(diào)用了
開機啟動配置
以root用戶操作。
PostgreSQL的開機自啟動配置模板在源碼目錄的“contrib/start-scripts”目錄下,其中l(wèi)inux文件為linux環(huán)境下的開機自啟動腳本模板,將其拷貝到“/etc/init.d”目錄下,并改名為postgresql:
# 切換至源碼開機腳本模版目錄
cd postgresql-15.5/contrib/start-scripts/
# 拷貝linux腳本拷貝至啟動目錄修改名稱為pgsql
cp linux /etc/init.d/pgsql
# 編輯啟動腳本
vi /etc/init.d/pgsql
# 在Selinux開啟Enforcing的情況,開啟仍然無法啟動,我們需要修復(fù)pgsql文件的安全上下文
# restorecon [選項】 文件或目錄
# -R:遞歸.當(dāng)前目錄和目錄下所有的子文件同時恢復(fù);
# -V:把恢復(fù)過程顯示到屏幕上;
# 執(zhí)行如下命令即可 (本文環(huán)境將selinux修改為寬容模式,不需要進行修復(fù))
# restorecon /etc/init.d/pgsql
# 給啟動腳本增加文件執(zhí)行權(quán)限
chmod a+x /etc/init.d/pgsql
#添加至開機啟動
chkconfig --add /etc/init.d/pgsql
“/etc/init.d/pgsql”需要編輯的內(nèi)容如下:
# 安裝位置,根據(jù)實際情況修改
prefix=/app/pg15
# Postgresql數(shù)據(jù)目錄,根據(jù)實際情況修改
PGDATA="/app/appdata/pg15/data"
# Who to run the postmaster as, usually "postgres". (NOT "root")
# 將啟動用戶修改為實際用戶,這里使用postgres,所以不變。
PGUSER=postgres
# Postgresql日志文件位置,根據(jù)實際情況修改
PGLOG="/app/appdata/pg15/logs/server.log"
重啟驗證即可。
創(chuàng)建一主二從
主庫配置:
# 創(chuàng)建同步賬號 psql下執(zhí)行:
postgres=# CREATE ROLE replica login replication encrypted password 'replica';
CREATE ROLE
# 修改postgresql.conf文件,添加同步參數(shù)
wal_level = replica
max_wal_senders = 8
wal_keep_size = 500
wal_sender_timeout = 60s
max_connections = 100
# pg_hba.conf 文件增加備庫訪問控制
# 文件末尾增加允許復(fù)制的從機
host replication replica 192.168.8.191/32 md5
host replication replica 192.168.8.192/32 md5
# 重啟主庫服務(wù)
[postgres@pg01 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log restart
# 從庫驗證是否可以連接主庫
# 返回輸入密碼即表示可訪問
[postgres@pg02 ~]$ psql -h 192.168.8.190 -U postgres
Password for user postgres:
從庫配置[pg02/03主機配置相同]
# 停掉從庫
[postgres@pg02 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log stop
# 清空從庫數(shù)據(jù)文件
[postgres@pg02 ~]$ rm -rf /app/appdata/pg15/data/*
[postgres@pg02 ~]$ ll /app/appdata/pg15/data
total 0
# 拉取主庫文件
[postgres@pg02 ~]$ pg_basebackup -h 192.168.8.80 -D /app/appdata/pg15/data -p 5432 -U replica -Fp -Xs -Pv -R --checkpoint=fast
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/D000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_17064"
50729/50729 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/D000100
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: syncing data to disk ...
pg_basebackup: base backup completed
[postgres@dj data]$ ll /app/appdata/pg15/data
total 128
-rw-------. 1 postgres postgres 224 Jul 12 03:43 backup_label
drwx------. 7 postgres postgres 4096 Jul 12 03:43 base
drwx------. 2 postgres postgres 4096 Jul 12 03:43 global
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_commit_ts
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_dynshmem
-rw-------. 1 postgres postgres 4886 Jul 12 03:43 pg_hba.conf
-rw-------. 1 postgres postgres 1636 Jul 12 03:43 pg_ident.conf
drwx------. 4 postgres postgres 4096 Jul 12 03:43 pg_logical
drwx------. 4 postgres postgres 4096 Jul 12 03:43 pg_multixact
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_notify
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_replslot
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_serial
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_snapshots
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_stat
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_stat_tmp
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_subtrans
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_tblspc
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_twophase
-rw-------. 1 postgres postgres 3 Jul 12 03:43 PG_VERSION
drwx------. 3 postgres postgres 4096 Jul 12 03:43 pg_wal
drwx------. 5 postgres postgres 4096 Jul 12 03:43 pg_walminer
drwx------. 2 postgres postgres 4096 Jul 12 03:43 pg_xact
-rw-------. 1 postgres postgres 267 Jul 12 03:43 postgresql.auto.conf
-rw-------. 1 postgres postgres 27115 Jul 12 03:43 postgresql.conf
-rw-------. 1 postgres postgres 30 Jul 12 03:43 postmaster.opts.bak
-rw-------. 1 postgres postgres 0 Jul 12 03:43 standby.signal
修改postgresql.conf配置:
# 從庫postgresql.conf修改
[postgres@pg02 ~]$ vi /app/appdata/pg15/data/postgresql.conf
# 1.注釋一下參數(shù),即是在前面加#
#wal_level = replica
#max_wal_senders = 8
#wal_keep_size = 500
#wal_sender_timeout = 60s
# 2.添加和修改一下參數(shù)
primary_conninfo = 'host=192.168.8.80 port=5432 user=replica password=replica'
recovery_target_timeline = latest
hot_standby = on
max_standby_streaming_delay = 30s
wal_receiver_status_interval = 10s
hot_standby_feedback = on
max_connections = 200 #大于主節(jié)點
max_worker_processes = 20
# 3.保存退出
重新啟動從庫:
# 啟動從庫
[postgres@pg02 ~]$ /app/pg15/bin/pg_ctl -D /app/appdata/pg15/data -l /app/appdata/pg15/logs/server.log start
主從同步驗證
將Pg02、Pg03主機都配置完成并啟動postgresql后,在主庫pg01上用postgres用戶進入psql,輸入如下查詢sql驗證同步狀態(tài):
# 主庫PSQL查詢
postgres=# select client_addr,usename,backend_start,application_name,sync_state,sync_priority FROM pg_stat_replication;
client_addr | usename | backend_start | application_name | sync_state | sync_priority
-----------------+---------+-------------------------------+------------------+------------+---------------
192.168.8.191 | replica | 2023-12-22 18:52:32.45571+08 | walreceiver | async | 0
192.168.8.192 | replica | 2023-12-22 19:04:32.92774+08 | walreceiver | async | 0
# 測試創(chuàng)建刪除數(shù)據(jù)庫觀察從庫是否同步
postgres=# create database test;
postgres=# drop database test;
# 在主庫上創(chuàng)建、刪除后可到從庫上查看是否一致。psql 輸入‘\l’可查看所有的數(shù)據(jù)庫。
postgres=# \l
至此,Postgresql 15.5的安裝和一主兩從配置結(jié)束。
開啟歸檔模式
主機pg01操作修改postgresql.conf文件
#調(diào)整如下兩個參數(shù)
archive_mode='on'
archive_command='test ! -f /app/appdata/pg15/archive/%f && cp %p /app/appdata/pg15/archive/%f'
同步在主庫(pg01)以及其他從他從庫(pg02/pg03)創(chuàng)建歸檔目錄:
# 創(chuàng)建歸檔目錄
mkdir -p /app/appdata/pg15/archive
# 給postgres用戶授權(quán)
chown -R postgres /app/appdata/pg15/archive
然后重啟主庫pg服務(wù)即可。
其他參考命令:文章來源:http://www.zghlxwxcb.cn/news/detail-762824.html
# 查詢歸檔參數(shù)SQL
select * from pg_settings where name in ('wal_level','archive_mode','archive_command');
# 查詢歸檔文件狀態(tài)
select * from pg_stat_get_archiver();
本文作者: Mr Liu
本文鏈接: https://it-liupp.gitee.io/2023/12/23/openeuler-install-pgsql14/
博客園鏈接:https://www.cnblogs.com/boyliupan/p/17935733.html
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協(xié)議。轉(zhuǎn)載請注明出處!文章來源地址http://www.zghlxwxcb.cn/news/detail-762824.html
到了這里,關(guān)于OpenEuler22.03安裝PostgreSQL15.5并配置一主二從的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!