POSTGRESQL10.3 RPM包 主從搭建

germany006發表於2018-04-12
前言:一次次搭建失敗,終於成功了,這篇文章作為自己在測試環境搭建的一次成功案例,記錄下來,雖然都是最基本的功能,後續再完善補充,親測可以用哦

一、POSTGRESQL主從複製搭建

1、安裝POSTGRESQL
 
PGSQL10.3
下載地址:

下載
·         postgresql10 - PostgreSQL client programs and libraries
·         postgresql10-contrib - Contributed source and binaries distributed with PostgreSQL
·         postgresql10-libs - The shared libraries required for any PostgreSQL clients
·         postgresql10-server - The programs needed to create and run a PostgreSQL server
 
依次使用rpm –ivh 進行安裝(兩個節點都安裝)
安裝順序:
rpm -ivh postgresql10-libs-10.3-1PGDG.rhel6.x86_64.rpm
rpm -ivh postgresql10-10.3-1PGDG.rhel6.x86_64.rpm
rpm -ivh postgresql10-server-10.3-1PGDG.rhel6.x86_64.rpm
rpm -ivh postgresql10-contrib-10.3-1PGDG.rhel6.x86_64.rpm
 

2、啟動POSTGRESQL服務
(1)第一步啟動
service postgresql-10 initdb
(2)第二步啟動
service postgresql-10 start
 
3、修改監聽
(1)修改監聽地址
vi  /var/lib/pgsql/10/data/postgresql.conf
# - Connection Settings -
 #這裡原本是#listen_addresses ='localhost'修改為以下黃色字型
listen_addresses = '192.168.159.128'           
 
(2)檢視監聽
顯示黃色特色字型即可
netstat -anlp |grep post
tcp        0      0 192.168.159.128:5432        0.0.0.0:*                   LISTEN      4784/postmaster    
udp        0      0 ::1:57424                   ::1:57424                   ESTABLISHED 4784/postmaster    
unix  2      [ ACC ]     STREAM     LISTENING     30353  4784/postmaster     /var/run/postgresql/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     30356  4784/postmaster     /tmp/.s.PGSQL.5432
 
 
 

 
 
4、主從搭建
(1)主庫環境
su - postgres
psql
建立一個使用者複製的使用者replica
CREATE ROLE replica login replication encrypted password 'replica';
 
修改pg_hba.conf檔案,指定replica登入網路(最後一新增)
vi /var/lib/pgsql/10/data/pg_hba.conf
host    replication     replica            192.168.159.0/24         md5
host    all          replica           192.168.159.0/24         trust
 
主庫配置檔案修改以下幾項,其他不變
vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses = '*'
wal_level = hot_standby  #熱備模式
max_wal_senders= 6 #可以設定最多幾個流複製連結,差不多有幾個從,就設定多少
wal_keep_segments = 10240  #重要配置
wal_send_timeout = 60s
max_connections = 512 #從庫的 max_connections要大於主庫
archive_mode = on #允許歸檔
archive_command = 'cp %p /url/path%f'   #根據實際情況設定

(2)從庫環境
 
把備庫的資料資料夾目錄清空
rm -rf /var/lib/pgsql/10/data/*
在備庫上執行
pg_basebackup -F p --progress -D /var/lib/pgsql/10/data/ -h 192.168.159.128 -p 5432 -U replica --password

輸入密碼replica 

!!!注意,複製完成後,在備庫一定要將資料目錄下的所有檔案重新授權
chown -R postgres.postgres /var/lib/pgsql/10/data/
 
建立recovery.cnf 檔案
cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf
 
vi /var/lib/pgsql/10/data/recovery.conf

standby_mode = on
primary_conninfo = 'host=192.168.159.128 port=5432 user=replica password=replica'
recovery_target_timeline = 'latest'
trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'
 
vi /var/lib/pgsql/10/data/postgresql.conf
listen_addresses ='*'
wal_level = hot_standby
max_connections =1000 #一般從的最大連結要大於主的
hot_standby =on  #說明這臺機器不僅僅用於資料歸檔,也用於查詢
max_standby_streaming_delay =30s
wal_receiver_status_interval = 10s  #多久向主報告一次從的狀態
hot_standby_feedback = on   #如果有錯誤的資料複製,是否向主進行範例
 
啟動備庫
service postgresql-10 start
如果無法啟動,如下操作:
scp /var/lib/pgsql/10/data/postmaster.opts 192.168.159.129:/var/lib/pgsql/10/data/
 chown -R postgres.postgres /var/lib/pgsql/10/data/
chmod 700 data/

 
5、驗證主從功能
主庫查詢
su - postgres
psql
postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state
-----------------+------------
 192.168.159.129 | async
(1 row)
 
在主庫建立表
create table test2 (name varchar(3));
 
 
在從庫查詢表
\d

主庫查詢黃色字型
[root@ha1 data]# ps aux | grep postgres
postgres  4686  0.0  0.8 356584 15592 ?        S    15:22   0:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data
postgres  4688  0.0  0.0 209416  1572 ?        Ss   15:22   0:00 postgres: logger process                             
postgres  4690  0.0  0.1 356700  3744 ?        Ss   15:22   0:00 postgres: checkpointer process                       
postgres  4691  0.0  0.1 356584  3044 ?        Ss   15:22   0:00 postgres: writer process                             
postgres  4692  0.0  0.3 356584  5980 ?        Ss   15:22   0:00 postgres: wal writer process                         
postgres  4693  0.0  0.1 356992  2616 ?        Ss   15:22   0:00 postgres: autovacuum launcher process                
postgres  4694  0.0  0.0 211516  1540 ?        Ss   15:22   0:00 postgres: archiver process                           
postgres  4695  0.0  0.0 211648  1784 ?        Ss   15:22   0:02 postgres: stats collector process                    
postgres  4696  0.0  0.1 356876  2272 ?        Ss   15:22   0:00 postgres: bgworker: logical replication launcher     
postgres  4711  0.7  0.4 358576  8536 ?        Ss   15:24   0:35 postgres: dbuser exampledb 192.168.159.1(63172) idle 
postgres  4845  0.0  0.1 357384  3424 ?        Ss   15:39   0:00 postgres: wal sender process replica 192.168.159.129(46554) streaming 0/401B0A0
root      5049  0.0  0.0 103256   840 pts/3    S+   16:42   0:00 grep postgres
 
 
 
備庫查詢黃色字型
[root@ha2 data]# ps aux | grep postgres
postgres  4827  0.0  2.2 398228 42844 ?        S    15:39   0:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data
postgres  4829  0.0  0.0 209416  1536 ?        Ss   15:39   0:00 postgres: logger process                             
postgres  4830  0.0  0.2 398324  3948 ?        Ss   15:39   0:00 postgres: startup process   recovering 000000010000000000000004
postgres  4831  0.0  0.1 398228  3496 ?        Ss   15:39   0:00 postgres: checkpointer process                       
postgres  4832  0.0  0.1 398228  2772 ?        Ss   15:39   0:00 postgres: writer process                             
postgres  4833  0.0  0.0 211516  1604 ?        Ss   15:39   0:00 postgres: stats collector process                    
postgres  4834  0.1  0.1 405444  3688 ?        Ss   15:39   0:06 postgres: wal receiver process   streaming 0/401B0A0 
root      4912  0.0  0.0 103252   828 pts/3    S+   16:42   0:00 grep postgres



6、POSTGRESQL相關
(1)建立LINUX使用者
useradd dbuser
passwd dbuser
 
(2)建立資料庫使用者
CREATE USER dbuser WITH PASSWORD 'password';
 
(3)建立資料庫
CREATE DATABASE exampledb OWNER dbuser;
 
(4)賦予許可權
GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;
 
(5)以dbuser的身份連線資料庫exampledb
su - dbuser
psql -d exampledb
 
(6)網路登陸方式
vi /var/lib/pgsql/10/data/pg_hba.conf(在IPV4那裡新增以下)
host exampledb dbuser 192.168.159.0/24        trust

切換dbuser使用者登陸
psql -h 192.168.159.128 -U dbuser -p password -d exampledb -p 5432
 
 (7)重啟和停止命令
service postgresql-10 restart
service postgresql-10 stop

(8)重要配置檔案
pg_hba.conf
postgresql.conf
 
(9)PG的安裝目錄及命令目錄
檢視程式是否啟動,可以找到
命令目錄/usr/pgsql-10/bin/
安裝目錄/var/lib/pgsql/10/data
[root@ha1 ~]# ps -ef|grep post
root      1732     1  0 02:25 ?        00:00:00 /usr/libexec/postfix/master
postfix   1742  1732  0 02:25 ?        00:00:00 pickup -l -t fifo -u
postfix   1743  1732  0 02:25 ?        00:00:00 qmgr -l -t fifo -u
postgres  2322     1  1 02:38 ?        00:00:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data
postgres  2324  2322  0 02:38 ?        00:00:00 postgres: logger process                             
postgres  2329  2322  0 02:38 ?        00:00:00 postgres: checkpointer process                       
postgres  2330  2322  0 02:38 ?        00:00:00 postgres: writer process                             
postgres  2331  2322  0 02:38 ?        00:00:00 postgres: wal writer process                         
postgres  2332  2322  0 02:38 ?        00:00:00 postgres: autovacuum launcher process                
postgres  2333  2322  0 02:38 ?        00:00:00 postgres: stats collector process                    
postgres  2334  2322  0 02:38 ?        00:00:00 postgres: bgworker: logical replication launcher     
root      2336  2232  0 02:39 pts/0    00:00:00 grep post
 



7、主備手動切換
(1)建立備庫recovery.conf 檔案( 在備庫上操作192.168.159.149)
  cp /usr/pgsql-10/share/recovery.conf.sample /var/lib/pgsql/10/data/recovery.conf
  
配置以下引數  
standby_mode = 'on'  --標記PG為STANDBY SERVER
primary_conninfo = 'host=192.168.159.128 port=5432 user=replica password=replica'   --標識主庫資訊
trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'     --標識觸發器檔案
(2) 關閉主庫(在主庫上操作192.168.159.148)
service postgresql-10 stop
(3)啟用備庫到主庫狀態 ( 在備庫上操作192.168.159.149 )
   啟用備庫只要建立一個檔案即可,根據備庫 recovery.conf 配置檔案的引數 trigger_file 值,
  建立這個 trigger 檔案即可。 例如 "touch /var/lib/pgsql/10/data/trigger.kenyon"
  
touch /var/lib/pgsql/10/data/trigger.kenyon
過一會兒發現 recovery.conf 檔案變成 recovery.done ,說明備庫已經啟用。

檢視/var/lib/pgsql/10/data/log/目錄下的最新日誌,出現以下資訊即啟用
(我這裡的日誌是tail -100f postgresql-Tue.log)
2018-06-05 19:32:36.403 PDT [3969] LOG:  fetching timeline history file for timeline 2 from primary server
2018-06-05 19:32:36.429 PDT [3969] LOG:  started streaming WAL from primary at 0/3000000 on timeline 1
2018-06-05 19:32:36.461 PDT [3969] LOG:  replication terminated by primary server
2018-06-05 19:32:36.461 PDT [3969] DETAIL:  End of WAL reached on timeline 1 at 0/301B078.
2018-06-05 19:32:36.478 PDT [3916] LOG:  new target timeline is 2
2018-06-05 19:32:36.479 PDT [3969] LOG:  restarted WAL streaming at 0/3000000 on timeline 2
2018-06-05 19:32:37.044 PDT [3916] LOG:  redo starts at 0/301B078

(4)修改原來主庫的配置檔案(192.168.159.148)
vi /var/lib/pgsql/10/data/postgresql.conf
max_connections = 150

(5)
啟用原來的主庫,讓其轉變成從庫  (在原來的主庫上執行192.168.159.148) 
--建立 $PGDATA/recovery.conf 檔案,配置以下引數
vi /data/pg/data/recovery.conf
recovery_target_timeline = 'latest'
standby_mode = 'on'  --標記PG為STANDBY SERVER
primary_conninfo = 'host=192.168.159.149 port=1921 user=repuser '   --標識主庫資訊
trigger_file = '/var/lib/pgsql/10/data/trigger.kenyon'     --標識觸發器檔案

--修改 pg_hba.conf (現在的主庫上增加192.168.159.149),新增以下配置
vi /data/pg/data/pg_hba.conf
host    replication     replica            192.168.159.0/24         md5
host    all          replica           192.168.159.0/24         trust

注意這裡修改完配置檔案後需要重啟資料庫服務(192.168.159.149)
service postgresql-10 restart

啟動原來的主庫即現在的從庫(192.168.159.148)
service postgresql-10 start


主庫查詢
su - postgres
psql
postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state 
-----------------+------------
 192.168.159.148 | async
(1 row)


相關報錯:
(1)網路登入方式報錯
psql: FATAL:  no pg_hba.conf entry for host "192.168.159.128", user "dbuser", database "exampledb", SSL off
出現這個報錯,就要檢查pg_hba.conf檔案了,
新增設定host exampledb dbuser 192.168.159.0/24        trust  重啟資料庫即可解決

(2)發現登陸postgres時出現以下問題
-bash-4.1$ 
root使用者執行
cp /etc/skel/.bash* /var/lib/pgsql/
再次登陸即可變成
[postgres@node1 ~]$




--未完待續

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2152862/,如需轉載,請註明出處,否則將追究法律責任。

相關文章