測試用機器資訊如下
主192.168.1.1 CentOS release 6.9 (Final)
從192.168.1.2 CentOS release 6.10 (Final)
紅色是指令
主服務器先創一個資料夾
[root@rosalie-mysql01 opt]# mkdir -p /opt/pgsql/pg_archive
切換使用者並登入,接著建立一個使用者reporting
[root@rosalie-mysql01 pg_archive]# su - postgres
-bash-4.1$ psql
psql (10.10)
Type "help" for help.
創一個使用者
postgres=# CREATE ROLE reporting login replication encrypted password '1234';
CREATE ROLE
離開
postgres=# \q
修改用戶端身份驗證由組態檔案pg_hba.conf的位置,看原本服務是安裝在哪
-bash-4.1$ vi /var/lib/pgsql/10/data/pg_hba.conf
內容很多,但只要加入兩行
-------------------------------------------------------
host       all                     all                 192.168.1.2/32    trust #允許從IP連接到主服務器
host       replication        reporting      192.168.1.2/32    md5   #允許從IP使用reporting用戶來複製
修改參數配置
-bash-4.1$ vi /var/lib/pgsql/10/data/postgresql.conf
-------------------------------------------------------
listen_addresses = '*'   
# 監控所有IP
archive_mode = on  
# 設置自動歸檔
wal_level = replica 
# 預寫日誌模式,增加wal歸檔資訊,包括唯讀伺服器需要的資訊。
archive_command = 'cp %p /opt/pgsql/pg_archive/%f'  
# 用此命令進行歸檔logfile segment
max_wal_senders = 3 
# 默認是0,設置指最多有幾個複製連接,如幾個從就設幾個,但pg_basebackup會使用到一個
wal_keep_segments = 256 
# 默認是0,設置複製保留的最多的xlog數目
wal_sender_timeout = 60s 
# 設置複製主機發送數據的超過時間
max_connections = 100 
# 這個設置要留意,主庫必需要比從庫大
hot_standby = on
full_page_writes = on       
# 開啟全頁寫入pg_rewind前提條件,如果不將整個page寫入wal中,在介質恢復的時候WAL中記錄的數據不足以實現完整的恢復
wal_log_hints = on          
# pg_rewind 前提條件
min_wal_size = 512MB        
# 最小的wal空間
max_wal_size = 2GB          
# max_wal_size = (3 * checkpoint_segments) * 16MB CheckPointSegments得到的值范圍是 max_wal_size 的 1/3 ~ 1/2,最小為1
設置完成後重啟服務
[root@rosalie-mysql01 ~]# service postgresql-10 restart
Stopping postgresql-10 service:                            [  OK  ]
Starting postgresql-10 service:                            [  OK  ]
從伺服器配置
刪除數據庫下的文件,然後從主伺服器同步複製數據至從伺服器
[root@rosalie-mysql02 opt]# service postgresql-10 stop
Stopping postgresql-10 service:                            [  OK  ]
[root@rosalie-mysql02 opt]# rm -rf /var/lib/pgsql/10/data/
[root@rosalie-mysql02 opt]# pg_basebackup -h 192.168.1.1 -U reporting -D /var/lib/pgsql/10/data -X stream -P
Password:   (會要求輸入密碼)
24010/24010 kB (100%), 1/1 tablespace
[root@rosalie-mysql02 pg_archive]# chown -R postgres:postgres /var/lib/pgsql/10/data/
pg_basebackup參數說明如下:
選項說明
-h指定連接的數據庫的主機名或IP地址
-U指定連接的用戶名
-F指定了輸出的格式,支持p(原樣輸出)或者t(tar格式輸出)
-X表示備份開始後,啟動另一個流複製連接從主庫接收WAL日誌
-P表示允許在備份過程中實時的打印備份的進度
-R表示會在備份結束後自動生成recovery.conf文件
-D指定備份寫入的數據目錄,需要與數據庫配置的數據庫目錄一致,初次備份之前從庫的數據目錄需要手動清空
-l表示指定一個備份的標識
修改recovery.conf參數
[root@rosalie-mysql02 opt]# vi /var/lib/pgsql/10/data/recovery.conf
standby_mode = on 
 # 表示此節點為從服務器
primary_conninfo = 'host=192.168.1.1 port=5432 user=reporting password=1234 sslmode=disable sslcompression=1 target_session_attrs=any' 
# 主服服務的信息以及連接的用戶
restore_command = '/usr/bin/rsync -a %f /opt/pgsql/pg_archive/%p'
#表示日誌文件名 %p表示目標路徑和文件名
archive_cleanup_command = 'pg_archivecleanup /opt/pgsql/pg_archive %r'
recovery_target_timeline = 'latest'
重啟從服務器
[root@rosalie-mysql02 pgsql]# service postgresql-10 restart
Stopping postgresql-10 service:                            [  OK  ]
Starting postgresql-10 service:                            [  OK  ]
接著主伺服器查詢
[root@rosalie-mysql01 ~]# ps -ef |grep postgres
postgres  9188     1  0 11:12 ?        00:00:00 /usr/pgsql-10/bin/postmaster -D /var/lib/pgsql/10/data
postgres  9190  9188  0 11:12 ?        00:00:00 postgres: logger process                              
postgres  9192  9188  0 11:12 ?        00:00:00 postgres: checkpointer process                        
postgres  9193  9188  0 11:12 ?        00:00:00 postgres: writer process                              
postgres  9194  9188  0 11:12 ?        00:00:00 postgres: wal writer process                          
postgres  9195  9188  0 11:12 ?        00:00:00 postgres: autovacuum launcher process                 
postgres  9197  9188  0 11:12 ?        00:00:00 postgres: stats collector process                     
postgres  9198  9188  0 11:12 ?        00:00:00 postgres: bgworker: logical replication launcher      
postgres  9204  9188  0 11:12 ?        00:00:00 postgres: wal sender process reporting 192.168.1.2(48262) streaming 0/B000098
root      9206  7033  0 11:12 pts/0    00:00:00 grep postgres
或登入postgres用指令查詢
[root@rosalie-mysql01 ~]# su - postgres
-bash-4.1$ psql
psql (10.10)
Type "help" for help.
postgres=# select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;
 pid  |   state   |  client_addr  | sync_priority | sync_state 
------+-----------+---------------+---------------+------------
 9204 | streaming | 192.168.1.2 |             0 | async
(1 row)
從伺服器查詢
[root@rosalie-mysql02 data]# su - postgres
-bash-4.1$ psql
psql (10.10)
Type "help" for help.
postgres=# select * from pg_stat_replication;
 pid  | usesysid |  usename  | application_name |  client_addr  | client_hostname | client_port |         backend_start         | back
end_xmin |   state   | sent_lsn  | write_lsn | flush_lsn | replay_lsn |    write_lag    |   flush_lag   |   replay_lag    | sync_prior
ity | sync_state 
------+----------+-----------+------------------+---------------+-----------------+-------------+-------------------------------+-----
---------+-----------+-----------+-----------+-----------+------------+-----------------+---------------+-----------------+-----------
----+------------
 9204 |    16384 | reporting | walreceiver      | 192.168.1.2 |                 |       48262 | 2019-10-30 11:12:41.816703+08 |     
         | streaming | 0/B0000D0 | 0/B0000D0 | 0/B0000D0 | 0/B0000D0  | 00:00:00.000136 | 00:00:00.0003 | 00:00:00.000426 |           
  0 | async
(1 row)
postgres=# select pg_is_in_recovery();
 pg_is_in_recovery 
-------------------
 t
(1 row)
 
沒有留言:
張貼留言