您好,登錄后才能下訂單哦!
由于工作需要,最近開始接觸各種數據庫,并嘗試各種數據庫產品的高可用方案。
今天分享的是postgresSQL的主從配置,其實還是蠻簡單的,跟隨本文的步驟,保證能實現PG主從的搭建。
1. 安裝環境
192.168.0.136 主庫 192.168.0.160 從庫 PORT: 5432 USR: postgres
2. 主庫已經運行一段時間,檢查主庫的version,保證主從數據庫的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. 在從庫上安裝相同版本的軟件
檢查安裝情況,已經安裝和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. 查詢主庫的數據庫位置
# 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
查看數據文件目錄
postgres=# show data_directory; data_directory ------------------------- /var/lib/pgsql/9.4/data
5. 準備修改主庫的參數文件,先查詢一下pg_hba.conf已有的參數內容
$ 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
這樣,就設置了replica這個用戶可以從192.168.0.160 對應的網段進行流復制請求。
7. 在主庫給postgres設置密碼,登錄和備份權限。
$psql postgres# CREATE ROLE replica login replication encrypted password 'replica123'
8. 修改postgresql.conf,注意設置下下面幾個地方:
wal_level = hot_standby # 這個是設置主為wal的主機 max_wal_senders = 10 # 這個設置了可以最多有幾個流復制連接,差不多有幾個從,就設置幾個 wal_keep_segments = 256 # 設置流復制保留的最多的xlog數目 wal_sender_timeout = 60s # 設置流復制主機發送數據的超時時間 max_connections = 100 # 這個設置要注意下,從庫的max_connections必須要大于主庫的 archive_mode = on archive_command = 'cp %p /var/lib/pgsql/9.4/archive/%f'
9. 創建對應archive log存放路徑
mkdir -p /var/lib/pgsql/9.4/archive/
10. 重啟主庫,讓配置生效
# service postgresql-9.4 start Starting postgresql-9.6 service: [ OK ]
11. 在從庫遠程連接主數據庫,驗證replica用戶是否可以正常訪問
psql -h IP-address -p 5432 dbname usename psql -h 192.168.0.136 -p 5432 postgres replica
12. 然后在主庫做一次基礎備份(后面的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 復制 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' #這個參數,我還需要確認具體含義 primary_conninfo = 'host=192.168.0.136 port=5432 user=replica password=replica123' # 主服務器的信息以及連接的用戶,這條信息最重要 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. 驗證是否部署成功
在主節點上執行,驗證已經成功搭建,說明5.160是從服務器,在接收流,而且是異步流復制。
postgres=# select client_addr,sync_state from pg_stat_replication; client_addr | sync_state -------------+------------ 192.168.0.160 | async
21. 查詢更多數據同步信息:
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. 此外,還可以分別在主、從節點上運行 ps aux | grep postgres 來查看進程:
主服務器上,可以看到有一個 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
從服務器上,可以看到 wal receiver 進程,和recovering進程正在恢復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主從流復制安裝部署完成。
在主服務器上插入數據或刪除數據,在從服務器上能看到相應的變化。從服務器上只能查詢,不能插入或刪除數據。
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
確保文件夾權限是700,這個很關鍵,其他權限,不能正常啟動
$ chmod 0700 /var/lib/pgsql/9.6/data2
使用下面命令啟動standby
$ /usr/pgsql-9.6/bin/postmaster -D /var/lib/pgsql/9.6/data2
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。