溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PostgresSQL 主從搭建

發(fā)布時間:2020-04-11 02:49:27 來源:網(wǎng)絡(luò) 閱讀:16191 作者:hsbxxl 欄目:數(shù)據(jù)庫

由于工作需要,最近開始接觸各種數(shù)據(jù)庫,并嘗試各種數(shù)據(jù)庫產(chǎn)品的高可用方案。

今天分享的是postgresSQL的主從配置,其實還是蠻簡單的,跟隨本文的步驟,保證能實現(xiàn)PG主從的搭建。


1. 安裝環(huán)境

192.168.0.136 主庫
192.168.0.160 從庫
PORT: 5432
USR: postgres

2. 主庫已經(jīng)運行一段時間,檢查主庫的version,保證主從數(shù)據(jù)庫的version相同。

# psql --version
psql (PostgreSQL) 9.4.11

# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64

3. 在從庫上安裝相同版本的軟件

檢查安裝情況,已經(jīng)安裝和primary相同的軟件版本

# rpm -qa|grep postgres
postgresql94-libs-9.4.11-1PGDG.rhel6.x86_64
postgresql94-server-9.4.11-1PGDG.rhel6.x86_64
postgresql94-9.4.11-1PGDG.rhel6.x86_64

4. 查詢主庫的數(shù)據(jù)庫位置

# su - postgres
$  echo $PGDATA
/var/lib/pgsql/9.4/data
$ cd /var/lib/pgsql/9.4/data
$ ls
base    pg_clog      pg_hba.conf    pg_log      pg_multixact 
pg_replslot  pg_snapshots  pg_stat_tmp  pg_tblspc    PG_VERSION  
postgresql.auto.conf  postmaster.opts global  pg_dynshmem  pg_ident.conf  
 pg_logical  pg_notify     pg_serial    pg_stat       pg_subtrans  
 pg_twophase  pg_xlog     postgresql.conf       postmaster.pid

確認配置文件位置

postgres=# show config_file;
  config_file               
-----------------------------------------
 /var/lib/pgsql/9.4/data/postgresql.conf

查看數(shù)據(jù)文件目錄

postgres=# show data_directory;
     data_directory      
-------------------------
 /var/lib/pgsql/9.4/data

5. 準(zhǔn)備修改主庫的參數(shù)文件,先查詢一下pg_hba.conf已有的參數(shù)內(nèi)容

$ cat pg_hba.conf|grep -v '^#'
local   all             all                                     peer
host    all             all             0.0.0.0/0            trust
host    all             all             ::1/128             ident

6. 在主庫的pg_hba.conf中添加

$ more pg_hba.conf
host    replication     replica     192.168.0.160                 md5

這樣,就設(shè)置了replica這個用戶可以從192.168.0.160 對應(yīng)的網(wǎng)段進行流復(fù)制請求。


7. 在主庫給postgres設(shè)置密碼,登錄和備份權(quán)限。

$psql
postgres# CREATE ROLE replica login replication encrypted password 'replica123'

8. 修改postgresql.conf,注意設(shè)置下下面幾個地方:

wal_level = hot_standby       # 這個是設(shè)置主為wal的主機
max_wal_senders = 10           # 這個設(shè)置了可以最多有幾個流復(fù)制連接,差不多有幾個從,就設(shè)置幾個
wal_keep_segments = 256        # 設(shè)置流復(fù)制保留的最多的xlog數(shù)目
wal_sender_timeout = 60s       # 設(shè)置流復(fù)制主機發(fā)送數(shù)據(jù)的超時時間
max_connections = 100           # 這個設(shè)置要注意下,從庫的max_connections必須要大于主庫的
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.4/archive/%f'

9. 創(chuàng)建對應(yīng)archive log存放路徑

mkdir -p /var/lib/pgsql/9.4/archive/

10. 重啟主庫,讓配置生效

# service postgresql-9.4 start
Starting postgresql-9.6 service:                           [  OK  ]

11. 在從庫遠程連接主數(shù)據(jù)庫,驗證replica用戶是否可以正常訪問

 psql -h IP-address -p 5432 dbname usename  
 psql -h 192.168.0.136 -p 5432 postgres replica

12. 然后在主庫做一次基礎(chǔ)備份(后面的Hot-standby主要使用data目錄下文件):

postgres=# SELECT pg_start_backup('bak20170905');
$tar czvf /var/lib/pgsql/9.4/backups/backup_data.tar.gz.20170905 /var/lib/pgsql/9.4/data
postgres=# SELECT pg_stop_backup();

13. 將備份文件sftp到從庫,并解壓,替換原有的data目錄

cd  /var/lib/pgsql/9.4/
mv data data_bk
mv backup_data.tar.gz.20170905 backup_data.tar.gz
tar -xzvf backup_data.tar.gz

14. 刪除一些就的身份信息,歸檔日志文件等

rm -rf data/pg_xlog/
mkdir -p data/pg_xlog/archive_status
rm data/postmaster.pid

15. 查找并拷貝recovery.conf.sample文件到data目錄下

find / -name recovery.conf.sample
/root/postgresql/postgresql-9.2.20/src/backend/access/transam/recovery.conf.sample 
/usr/pgsql-9.4/share/recovery.conf.sample
復(fù)制
cp /usr/pgsql-9.4/share/recovery.conf.sample /var/lib/pgsql/9.4/data/recovery.conf

16. 然后編輯recovery.conf:

standby_mode = on
restore_command = 'cp /var/lib/pgsql/9.4/archive/%f %p'   #這個參數(shù),我還需要確認具體含義
primary_conninfo = 'host=192.168.0.136 port=5432 user=replica password=replica123'                      # 主服務(wù)器的信息以及連接的用戶,這條信息最重要
recovery_target_timeline = 'latest'

17. 拷貝下面配置文件

cp  /var/lib/pgsql/9.4/data.bk/postgresql.conf  /var/lib/pgsql/9.4/data/postgresql.conf
cp  /var/lib/pgsql/9.4/data.bk/pg_hba.conf  /var/lib/pgsql/9.4/data/pg_hba.conf

18. 然后編輯pstgresql.conf:

hot_standby = on

19. 啟動Hot-Standby:

/usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data --port=5432

20. 驗證是否部署成功

在主節(jié)點上執(zhí)行,驗證已經(jīng)成功搭建,說明5.160是從服務(wù)器,在接收流,而且是異步流復(fù)制。

postgres=# select client_addr,sync_state from pg_stat_replication;
 client_addr | sync_state 
-------------+------------
 192.168.0.160 | async

21. 查詢更多數(shù)據(jù)同步信息:

postgres=# select usename,application_name,client_addr,client_port,backend_start,backend_xmin,state,sent_location,write_location,flush_location,replay_location,sync_priority,sync_state  from pg_stat_replication;
 usename | application_name | client_addr | client_port |         backend_start         | backend_xmin |   state   | sent_location | write_location | flush_location | replay_location | sync_priority | sync_state 
---------+------------------+-------------+-------------+-------------------------------+--------------+-----------+---------------+----------------+----------------+-----------------+---------------+------------
 replica | walreceiver      | 192.168.0.160 |       39375 | 2017-09-05 17:49:22.512393+08 |              | streaming |         5/1049488     | 5/1049488        | 5/1049488      |   5/1049488       |             0 |          async

22. 此外,還可以分別在主、從節(jié)點上運行 ps aux | grep postgres 來查看進程:

主服務(wù)器上,可以看到有一個 wal sender 進程,還有archiver進程等

# ps aux | grep postgres
postgres  1104  0.0  0.1 324652 15120 ?        S    14:26   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data                      
postgres  1111  0.0  0.0 324652  5844 ?        Ss   14:26   0:00 postgres: wal writer process                              
postgres  1113  0.0  0.0 179796  1544 ?        Ss   14:26   0:00 postgres: archiver process   last was 000000010000000500000000.00000060.backup
postgres  8515  0.0  0.0 325448  3108 ?        Ss   17:49   0:00 postgres: wal sender process replica 192.168.0.160(39375) streaming 5/103A1D0

從服務(wù)器上,可以看到 wal receiver 進程,和recovering進程正在恢復(fù)archive log

$ ps aux | grep postgres
postgres 11508  0.0  0.1 324684 15128 ?        S    17:49   0:00 /usr/pgsql-9.4/bin/postmaster -D /var/lib/pgsql/9.4/data
postgres 11510  0.0  0.0 324796  4336 ?        Ss   17:49   0:00 postgres: startup process   recovering 000000010000000500000001
postgres 11513  0.0  0.0 331892  3700 ?        Ss   17:49   0:00 postgres: wal receiver process   streaming 5/103A1D0

23. 可以在下面路徑中,看到從庫接收的archive log文件

# pwd
/var/lib/pgsql/9.4/data/pg_xlog
# ls
000000010000000500000001  000000010000000500000002  archive_status

至此,PostgreSQL主從流復(fù)制安裝部署完成。

在主服務(wù)器上插入數(shù)據(jù)或刪除數(shù)據(jù),在從服務(wù)器上能看到相應(yīng)的變化。從服務(wù)器上只能查詢,不能插入或刪除數(shù)據(jù)


24. 第12、13、14步驟,可以通過另一種拷貝主庫到從庫的方法,pg_basebackup命令拷貝文件

pg_basebackup -F p --progress -D /var/lib/pgsql/9.4/data2 -h 192.168.0.136 -p 5432 -U replica --password

進入到/var/lib/pgsql/9.4/data2目錄,修改recovery.conf,這個文件可以從pg的安裝目錄的share文件夾中獲取,比如

cp /usr/pgsql-9.6/share/recovery.conf.sample /var/lib/pgsql/9.6/data2/recovery.conf

確保文件夾權(quán)限是700,這個很關(guān)鍵,其他權(quán)限,不能正常啟動

$ chmod 0700 /var/lib/pgsql/9.6/data2

使用下面命令啟動standby

$ /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data2


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI