PostGreSql 12.6 的流複製(CentOS)

dl_lang發表於2021-04-16

PostGreSql 12.6 的流複製

流複製允許一臺後備伺服器比使用基於檔案的日誌傳送更能保持為最新的狀態。後備伺服器連線到主伺服器,主伺服器則在 WAL 記錄產生時即將它們以流式傳送給後備伺服器而不必等到 WAL 檔案被填充。

預設情況下流複製是非同步的。


主庫操作:

安裝之後,初始化資料庫:

[root@pg01 ~]#  /usr/pgsql-12/bin/postgresql-12-setup initdb

Initializing database ... OK


[postgres@pg01 ~]$ createdb mydb

[postgres@pg01 ~]$ psql

psql (12.6)

輸入 "help" 來獲取幫助資訊.


postgres=# \l

                                     資料庫列表

   名稱    |  擁有者  | 字元編碼 |  校對規則   |    Ctype    |       存取許可權

-----------+----------+----------+-------------+-------------+-----------------------

 mydb      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres          +

           |          |          |             |             | postgres=CTc/postgres

(4 行記錄)

##登入系統,新建測試DB, mydb

postgres=# CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'secret';

CREATE ROLE


修改引數

[postgres@pg01 data]$ cat pg_hba.conf

host    all             all             0.0.0.0/0            ident

host    replication     replicator      192.168.56.11/32        md5   

## Salve 伺服器IP地址是 11.

[postgres@pg01 data]$ pg_ctl restart -D $PGDATA

##reboot DB

[postgres@pg01 data]$ psql -c "select pg_is_in_recovery()"

 pg_is_in_recovery

-------------------

 f

(1 行記錄)

#false, 是Master 伺服器


[postgres@pg01 data]$ psql -x -c "select * from pg_stat_replication"

-[ RECORD 1 ]----+------------------------------

pid              | 4064

usesysid         | 16385

usename          | replicator

application_name | walreceiver

client_addr      | 192.168.56.11

client_hostname  |

client_port      | 47944

backend_start    | 2021-04-16 00:04:30.215703+08

backend_xmin     |

state            | streaming

sent_lsn         | 0/3000060

write_lsn        | 0/3000060

flush_lsn        | 0/3000060

replay_lsn       | 0/3000060

write_lag        |

flush_lag        |

replay_lag       |

sync_priority    | 0

sync_state       | async

reply_time       | 2021-04-16 00:04:50.920327+08



Salve 伺服器操作


[postgres@pg02 12]$ pg_basebackup -h 192.168.56.10 -U replicator -p 5432 -D $PGDATA -Fp -Xs -P -R

口令:

33514/33514 kB (100%), 1/1 表空間

###會自動產生standby.signal,一個標識為slave的空檔案,可以用touch 自建

[postgres@pg02 12]$ ls -al

總用量 8

drwx------.  5 postgres postgres   62 4月  16 00:02 .

drwx------.  3 postgres postgres   35 4月  14 15:50 ..

drwxrwxr-x.  2 postgres postgres    6 4月  13 10:54 archive

drwx------.  2 postgres postgres    6 2月  11 09:16 backups

drwx------. 20 postgres postgres 4096 4月  16 00:02 data

-rw-------.  1 postgres postgres  997 4月  14 15:50 initdb.log

[postgres@pg02 data]$ cat postgresql.auto.conf

# Do not edit this file manually!

# It will be overwritten by the ALTER SYSTEM command.

listen_addresses = '*'

primary_conninfo = 'user=replicator password=secret host=192.168.56.10 port=5432                                                                                         sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

[postgres@pg02 data]$ psql -c "select pg_is_in_recovery()"

 pg_is_in_recovery

-------------------

 t

(1 行記錄)

##Ture, 是Salve 伺服器


測試結果(Master操作)

postgres=# \c mydb

您現在已經連線到資料庫 "mydb",使用者 "postgres".

mydb=# create table t01(name char(50));

CREATE TABLE

mydb=# insert into t01 values('qqqqq');

INSERT 0 1

mydb=# insert into t01 values('mmmmm');

INSERT 0 1

mydb=# \q

Salve 檢視

[postgres@pg02 data]$ psql -x -c "select * from pg_stat_replication"

(0 行記錄)


[postgres@pg02 data]$ psql

psql (12.6)

輸入 "help" 來獲取幫助資訊.


postgres=# \l

                                     資料庫列表

   名稱    |  擁有者  | 字元編碼 |  校對規則   |    Ctype    |       存取許可權


-----------+----------+----------+-------------+-------------+------------------

-----

 mydb      | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |

 postgres  | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 |

 template0 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres

    +

           |          |          |             |             | postgres=CTc/post

gres

 template1 | postgres | UTF8     | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/postgres

    +

           |          |          |             |             | postgres=CTc/post

gres

(4 行記錄)


postgres=# \c mydb

您現在已經連線到資料庫 "mydb",使用者 "postgres".

mydb=# \d

              關聯列表

 架構模式 | 名稱 |  型別  |  擁有者

----------+------+--------+----------

 public   | t01  | 資料表 | postgres

(1 行記錄)


mydb=# select * from t01;

                        name

----------------------------------------------------

 qqqqq

 mmmmm

(2 行記錄)


##複製過來了,功能可以了。  比Oracle 的DG 簡單多了,和DB2的HADR 差不多有一拼。感覺不錯!!!





  





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

相關文章