自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PostgreSQL主從復(fù)制--物理復(fù)制

數(shù)據(jù)庫 PostgreSQL
PostgreSQL支持物理復(fù)制(流復(fù)制)及邏輯復(fù)制2種。通過流復(fù)制技術(shù),可以從實(shí)例級(jí)復(fù)制出一個(gè)與主庫一模一樣的實(shí)例級(jí)的從庫。流復(fù)制同步方式有同步、異步兩種。另一種復(fù)制方式為邏輯復(fù)制,區(qū)別于物理復(fù)制的是物理復(fù)制是基于實(shí)例級(jí)的復(fù)制,只能復(fù)制整個(gè)PostgreSQL實(shí)例,而不能基于部分庫及表。

1、復(fù)制類型

PostgreSQL支持物理復(fù)制(流復(fù)制)及邏輯復(fù)制2種。通過流復(fù)制技術(shù),可以從實(shí)例級(jí)復(fù)制出一個(gè)與主庫一模一樣的實(shí)例級(jí)的從庫。流復(fù)制同步方式有同步、異步兩種。

另一種復(fù)制方式為邏輯復(fù)制,區(qū)別于物理復(fù)制的是物理復(fù)制是基于實(shí)例級(jí)的復(fù)制,只能復(fù)制整個(gè)PostgreSQL實(shí)例,而不能基于部分庫及表。從PostgreSQL10開始,出現(xiàn)了基于表級(jí)別的復(fù)制,即邏輯復(fù)制。

2、流復(fù)制

主庫安裝及從庫編譯此處就省略了,直接進(jìn)入主從復(fù)制的安裝環(huán)節(jié)。

(1) 修改主庫配置文件postgresql.conf

/*  除了基礎(chǔ)參數(shù),搭建備庫至少需要配置如下參數(shù) */
listen_address = '*'
wal_level = replica
archive_mode = on
archive_command = 'cp %p /data/postgresql/archive/%f '
max_wal_senders= 10
wal_keep_segments=1024
hot_standby = on

參數(shù)簡要說明:

  • listen_address: 按需設(shè)置,本次測(cè)試配置為所有主機(jī)均可以訪問,生產(chǎn)環(huán)境可以按需配置網(wǎng)段或IP等。
  • wal_level: 設(shè)置流復(fù)制模式至少設(shè)置為replica。
  • archive_mode: 本次啟用歸檔。
  • archive_command:WAL日志歸檔命令,生產(chǎn)環(huán)境可以將歸檔拷貝到對(duì)應(yīng)目錄或其他機(jī)器上,本次測(cè)試配置為歸檔到本機(jī)的另一個(gè)目錄下。
  • max_wal_senders:最大WAL發(fā)送進(jìn)程數(shù),此數(shù)量需大于等于從庫個(gè)數(shù)且比max_connections小。
  • wal_keep_segments:pg_wal目錄下保留WAL日志的個(gè)數(shù),每個(gè)WAL文件默認(rèn)16M,為保障從庫能在應(yīng)用歸檔落后時(shí)依舊能追上主庫,此值建議設(shè)置較大一點(diǎn)。
  • hot_standby:此參數(shù)控制在恢復(fù)歸檔期間是否支持只讀操作,設(shè)置為ON后從庫為只讀模式。

注意:上述參數(shù)中有涉及歸檔日志的路徑,需手動(dòng)創(chuàng)建

mkdir -p  /data/postgresql/archive/

(2)創(chuàng)建復(fù)制賬號(hào)

為了數(shù)據(jù)安全及便于權(quán)限控制,創(chuàng)建一個(gè)復(fù)制專用的數(shù)據(jù)庫賬號(hào)。

postgres=# create user repl  REPLICATION  LOGIN ENCRYPTED  PASSWORD 'repl123';
CREATE ROLE

(3)修改配置文件pg_hba.conf

添加復(fù)制賬號(hào)的權(quán)限,因可能會(huì)主從切換,因此 主從機(jī)器的IP均添加。也可以設(shè)置網(wǎng)段,以便于后期添加從庫。

# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host replication repl 192.168.56.33/24 md5
host replication repl 192.168.56.32/24 md5

(4)備份數(shù)據(jù)

從機(jī)上在線備份主庫數(shù)據(jù),并將數(shù)據(jù)放在指定路徑,此路徑建議與主庫路徑一致??梢允褂胮g_basebackup。

命令在線熱備份,具體命令如下:

pg_basebackup -h 192.168.56.32 -U repl -p 5432 -F p   -X s  -v -P -R -D /data/postgresql/data/ -l postgres32

pg_basebackup命令中的參數(shù)說明:

  • -h 指定連接的數(shù)據(jù)庫的主機(jī)名或IP地址,這里就是主庫的ip。
  • -U 指定連接的用戶名,此處是我們剛才創(chuàng)建的專門負(fù)責(zé)流復(fù)制的repl用戶。
  • -F 指定生成備份的數(shù)據(jù)格式,支持p(plain原樣輸出)或者t(tar格式輸出)。
  • -X 表示備份開始后,啟動(dòng)另一個(gè)流復(fù)制連接從主庫接收WAL日志,有 f(fetch)和s (stream)兩種方式,建議使用s方式。
  • -P 表示顯示數(shù)據(jù)文件、表空間傳輸?shù)慕瓢俜直?允許在備份過程中實(shí)時(shí)的打印備份的進(jìn)度。
  • -v 表示啟用verbose模式,命令執(zhí)行過程中會(huì)打印各階段日志,建議啟用。
  • -R 表示會(huì)在備份結(jié)束后自動(dòng)生成recovery.conf文件,這樣也就避免了手動(dòng)創(chuàng)建。
  • -D 指定把備份寫到哪個(gè)目錄,這里尤其要注意一點(diǎn)就是做基礎(chǔ)備份之前從庫的數(shù)據(jù)目錄(/data/postgresql/data)目錄需要手動(dòng)清空。
  • -l 表示指定個(gè)備份的標(biāo)識(shí),運(yùn)行命令后可以看到進(jìn)度提示。

以上備份命令輸出過程如下:

[postgres@PG33 data]$ pg_basebackup -h 192.168.56.32 -U repl -p 5432 -F p   -X s  -v -P -R -D /data/postgresql/data/ -l postgres32
Password:
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 0/2000028 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: created temporary replication slot "pg_basebackup_17737"
56041/56041 kB (100%), 1/1 tablespace
pg_basebackup: write-ahead log end point: 0/20000F8
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed

從以上日志信息看出pg_basebackup命令首先對(duì)數(shù)據(jù)庫做一次checkpoint,之后基于時(shí)間點(diǎn)做一個(gè)全庫基準(zhǔn)備份,全備過程中會(huì)拷貝$PGDATA數(shù)據(jù)文件和表空間文件到備庫節(jié)點(diǎn)對(duì)應(yīng)目錄。

(5)修改recovery.conf

以上備份命令中生成了recovery.conf 文件,因此簡單修改即可。

standby_mode = 'on'
primary_conninfo = 'user=repl password=repl123 host=192.168.56.32 port=5432 sslmode=disable sslcompression=0 target_session_attrs=any'
## 添加如下信息
recovery_target_timeline = 'latest'

參數(shù)說明:

  • standby_mode:設(shè)置是否啟用數(shù)據(jù)庫為備庫,如果設(shè)置成on,備庫會(huì)不停地從主庫上獲取WAL日志流,直到獲取主庫上最新的WAL日志流
  • primary_conninfo:設(shè)置主庫的連接信息,這里設(shè)置了主庫IP、端口、用戶名信息等,此處是明文密碼,生產(chǎn)環(huán)境建議配置非明文密碼,而是將密碼配置在另一個(gè)隱藏文件中
  • covery_target_timeline:設(shè)置恢復(fù)的時(shí)間線(timeline),默認(rèn)情況下是恢復(fù)到基準(zhǔn)備份生成時(shí)的時(shí)間線,設(shè)置成latest表示從備份中恢復(fù)到最近的時(shí)間線,通常流復(fù)制環(huán)境設(shè)置此參數(shù)為latest,復(fù)雜的恢復(fù)場(chǎng)景可將此參數(shù)設(shè)置成其他值

(6)啟動(dòng)從庫

直接使用pg_ctl或配置服務(wù)啟動(dòng)從庫即可。

pg_ctl  -D /data/postgresql/data/  -l pg33.log  start

如果啟動(dòng)過程中出現(xiàn)如下錯(cuò)誤。

waiting for server to start....2019-09-26 10:40:54.327 CST [10267] FATAL:  data directory "/data/postgresql/data" has invalid permissions
2019-09-26 10:40:54.327 CST [10267] DETAIL: Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
stopped waiting
pg_ctl: could not start serve
Examine the log output.

則需要先修改權(quán)限,再啟動(dòng)即可。

[postgres@PG33 data]$ chmod 0750 /data/postgresql/data/
[postgres@PG33 data]$ pg_ctl -D /data/postgresql/data/ -l pg33.log start
waiting for server to start.... done
server started

(7)測(cè)試主從同步

在主庫創(chuàng)建表并新增數(shù)據(jù)。

[postgres@PG32 ~]$ psql
psql (11.4)
Type "help" for help.
postgres=# create table test2(id int primary key, name varchar(20));
CREATE TABLE
postgres=# insert into test2 values(1,'aaa'),(2,'abc');
INSERT 0 2

在從庫查看。

[postgres@PG33 data]$ psql
psql (11.4)
Type "help" for help.
postgres=# select * from test2;
id | name
----+------
1 | aaa
2 | abc

數(shù)據(jù)已正常同步。

(8)查看復(fù)制狀態(tài)

通過pg_stat_replication視圖可以查看復(fù)制狀態(tài)

postgres=# select  pid ,usesysid,usename,client_addr,state,sync_state  from  pg_stat_replication;
pid | usesysid | usename | client_addr | state | sync_state
-------+----------+---------+----------------+-----------+------------
25123 | 16797 | repl | 192.168.56.33 | streaming | async
(1 row)

以上查詢結(jié)果sync_state字段值為async,表示主備數(shù)據(jù)復(fù)制使用異步方式;state值為streaming,表示流復(fù)制方式。

(9)調(diào)整為同步復(fù)制

前面的步驟部署的為異步復(fù)制,如想配置為同步復(fù)制,則調(diào)整recovery.conf配置文件里的 synchronous_commit及synchronous_standby_names 后重啟或reload即可。

synchronous_commit = remote_write
synchronous_standby_names = 'PG33'

之后再查看結(jié)果如下:

postgres=# select  pid ,usesysid,usename,client_addr,state,sync_state  from  pg_stat_replication;
pid | usesysid | usename | client_addr | state | sync_state
-------+----------+---------+----------------+-----------+------------
16265 | 16797 | repl | 192.168.56.33 | streaming | sync
(1 row)

此時(shí)狀態(tài)已變?yōu)橥綇?fù)制了。

注:synchronous_commit 有多種方式,在流復(fù)制模式下,主要設(shè)置情況如下:

  • remote_write: 當(dāng)流復(fù)制主庫提交事務(wù)時(shí),需等待備庫接收主庫發(fā)送的WAL日志流并寫入備節(jié)點(diǎn)操作系統(tǒng)緩存中,之后向客戶端返回成功,這種情況下備庫實(shí)例出現(xiàn)異常關(guān)閉時(shí)不會(huì)有已傳送的WAL日志丟失風(fēng)險(xiǎn),但備庫操作系統(tǒng)異常宕機(jī)就有已傳送的WAL丟失風(fēng)險(xiǎn)了,此時(shí)WAL可能還沒完全寫入備節(jié)點(diǎn)WAL文件中,簡單地說remote_write表示本地WAL已落盤,備庫的WAL還在備庫操作系統(tǒng)緩存中,也就是說只有一份持久化的WAL,這個(gè)選項(xiàng)帶來的事務(wù)響應(yīng)時(shí)間較低
  • on: 設(shè)置成on表示流復(fù)制主庫提交事務(wù)時(shí),需等待備庫接收主庫發(fā)送的WAL日志流并寫入WAL文件,之后才向客戶端返回成功,簡單地說on表示本地WAL已落盤,備庫的WAL也已落盤,也就是說有兩份持久化的WAL,但備庫此時(shí)還沒有完成重做,這個(gè)選項(xiàng)帶來的事務(wù)響應(yīng)時(shí)間較高
  • remote_apply: 表示表示流復(fù)制主庫提交事務(wù)時(shí),需等待備庫接收主庫發(fā)送的WAL并寫入WAL文件,同時(shí)備庫已經(jīng)完成重做,之后才向客戶端返回成功,簡單地說remote_apply表示本地WAL已落盤,備庫WAL已落盤并且已完成重做,這個(gè)設(shè)置保證了擁有兩份持久化的WAL,同時(shí)備庫也完成了重做,這個(gè)選項(xiàng)帶來的事務(wù)響應(yīng)時(shí)間最高,即性能最差。
責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2023-03-19 22:38:12

邏輯復(fù)制PostgreSQL

2023-07-03 08:57:45

Master服務(wù)TCP

2023-09-24 14:32:15

2024-03-01 18:33:59

MySQL節(jié)點(diǎn)數(shù)據(jù)

2021-06-08 07:48:27

MySQL主從配置

2024-07-04 08:00:24

2025-02-10 10:55:16

2023-12-25 08:02:09

2021-03-19 11:33:42

MySQL數(shù)據(jù)庫備份

2017-09-05 16:00:49

MySQL主從復(fù)制備份

2017-10-11 15:40:20

MySQL主從復(fù)制拓?fù)浣Y(jié)構(gòu)

2021-05-20 06:49:45

MongoDB高可用數(shù)據(jù)庫

2022-12-20 08:46:41

MySQL主從復(fù)制

2025-01-15 15:47:36

2022-01-10 07:59:14

PostgreSQl 主從流復(fù)制歸檔配置

2021-01-12 09:03:17

MySQL復(fù)制半同步

2024-07-04 17:22:23

2020-04-14 16:26:22

MySQL線程同步

2023-04-06 13:15:48

MySQL復(fù)制原理應(yīng)用實(shí)踐

2017-06-23 22:00:13

MySqlsslcentos
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)