91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么在PostgreSQL中配置一個邏輯復制功能

發布時間:2021-01-08 16:37:19 來源:億速云 閱讀:249 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關怎么在PostgreSQL中配置一個邏輯復制功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

PostgreSQL 安裝環境可見之前的搭建環境教程

分別在3臺服務器 pg_hba.conf 配置文件新增

host  all       all       10.10.56.0/0      md5
host  replication   all       10.10.56.0/0      trust

允許在 10.10.56.0 同一網段的服務器所有用戶 進行復制、連接等操作

分別在 16、17、19 服務器啟動服務,連接數據庫執行sql,檢查單個數據庫是否為單實例主庫

pocdb=# select pg_is_in_recovery();
 pg_is_in_recovery
-------------------
 f
(1 row)

如上查詢是否為備庫 ,f 為表示false,即為主庫,反之 t 為從庫

分別在 16、17、19 單實例數據上創建數據庫、用戶、分配權限

postgres@clw-db3:/home/postgres> /opt/pgsql-10/bin/psql -p 5432 postgres
psql (10.3)
Type "help" for help.
postgres=# create database pocdb;
CREATE DATABASE
pocdb=# CREATE USER l_repl PASSWORD '123456' REPLICATION;
CREATE ROLE

在 16、17 服務器上分別創建 p 表(即表示各自業務的表),并給邏輯復制的用戶 l_repl 分配權限。

pocdb=# CREATE TABLE p(id bigint primary key,ival int);
CREATE TABLE
pocdb=# GRANT ALL ON p TO l_repl;
pocdb=#
pocdb=#
pocdb=#
pocdb=#
pocdb=# \d+ p
                   Table "public.p"
 Column | Type  | Collation | Nullable | Default | Storage | Stats target | Description
--------+---------+-----------+----------+---------+---------+--------------+-------------
 id   | bigint |      | not null |     | plain  |       |
 ival  | integer |      |     |     | plain  |       |
Indexes:
  "p_pkey" PRIMARY KEY, btree (id)

在 16、17 服務器上分別創建發布者,即把自己的 p 表發布出去,使 訂閱者 可以訂閱

pocdb=# CREATE PUBLICATION p_pub FOR TABLE p WITH (publish = 'insert,update,delete');
CREATE PUBLICATION

在19上創建訂閱者,即分別訂閱 16、17 服務器各自發布的表

CREATE SUBSCRIPTION p1_sub CONNECTION 'host=10.10.56.16 port=5432 user=l_repl dbname=pocdb password=123456' PUBLICATION p_pub;
CREATE SUBSCRIPTION p2_sub CONNECTION 'host=10.10.56.17 port=5432 user=l_repl dbname=pocdb password=123456' PUBLICATION p_pub;

16 服務器插入奇數id 數據

pocdb=# INSERT INTO p (id,ival) VALUES (1,1);
INSERT 0 1
pocdb=#
pocdb=# select * from p;
 id | ival
----+------
 1 |  1
(1 row)

17 服務器插入偶數id數據

pocdb=# INSERT INTO p (id,ival) VALUES (2,2);
INSERT 0 1
pocdb=#
pocdb=#

注 意

在16和17服務器插入數據時,必須主鍵不能沖突,否則會出錯,在實際業務中,插入的數據主鍵永遠不會沖突

此處我們在16服務器插入主鍵為 奇數 的數據,17為 偶數 的數據

此時19服務器查看P表匯總的數據

pocdb=# select * from p;
 id | ival
----+------
 1 |  1
 2 |  2
(2 rows)

發現數據已經復制過來,達到我們需要的需求

創建R表

背 景

在實際業務需求中,我們可能會有一些數據字典之類的公共表,即現有A、B、C 獨立的數據庫,但是他們都需要共同的字典表 R 表,且R表的入口只能有一個,比如只能在A庫進行寫入,其他庫則需要同步該表,故通過邏輯復制來實現。

pocdb=# CREATE PUBLICATION r_pub FOR TABLE r WITH (publish = 'insert,update,delete,TRUNCATE');
CREATE PUBLICATION
pocdb=#

邏輯復制不支持 TRUNCATE 級聯刪除表數據

R 表的邏輯復制

在16、17、19 分別創建 R表

CREATE TABLE R (id bigint ,age int);

配置文件上述已經配置,同上,16 發布 R 表,17 與 19 分別 訂閱16服務器的R表,即可實現上述業務。

補充:PostgreSQL邏輯復制壓測方案

邏輯復制延遲壓測

本次壓力測試過程基于以上

56.16 –> 56.19 監控延遲腳本

創建腳本 query_logical_lag.sh,并分配權限

#!/bin/bash
/opt/pgsql-10/bin/psql pocdb<<EOF
select now();
select client_addr, application_name, write_lag, flush_lag, replay_lag from pg_stat_replication where usename='l_repl' and application_name='p1_sub';
\q
EOF
postgres@clw-db2:~> chmod +x query_logical_lag2.sh
postgres@clw-db2:~> ls -l
total 4
-rwxr-xr-x 1 postgres postgres 218 May 8 16:49 query_logical_lag2.sh

56.17 –> 56.19 延遲監測腳本

創建腳本 query_logical_lag2.sh

#!/bin/bash
/opt/pgsql-10/bin/psql pocdb<<EOF
select now();
select client_addr, application_name, write_lag, flush_lag, replay_lag from pg_stat_replication where usename='l_repl' and application_name='p2_sub';
\q
EOF

分配權限,不然無法執行腳本

postgres@clw-db2:~> chmod +x query_logical_lag2.sh
postgres@clw-db2:~> ls -l
total 4
-rwxr-xr-x 1 postgres postgres 218 May 8 16:49 query_logical_lag2.sh

執行監控延遲

在16服務器執行:

clw_db1
postgres@clw-db1:~> for i in {1..100000}
> do
> /home/postgres/query_logical_lag.sh >> /home/postgres/query_logical_lag1
> sleep 5
> done

表示:執行query_logical_lag.sh腳本 100000次,每執行一次等待5s,把查詢結果記錄到

query_logical_lag1文件

在17服務器執行

clw_db2
crontab -e 
for i in {1..10000000}
do
/home/postgres/query_logical_lag.sh >> /home/postgres/query_logical_lag2
sleep 5
done

創建sequence,使用sequence保證不同節點插入的數值是奇數或偶數

56.16

create sequence p_seq1 increment by 2 minvalue 1 maxvalue 100000000000000 cache 50 no cycle; ----cache是否需要調大

56.17 服務器創建序列

create sequence p_seq1 increment by 2 minvalue 2 maxvalue 100000000000000 cache 50 no cycle;

16、17 服務器分別創建壓測腳本 bench_script_for_insert.sql

\sleep 500ms
\set ival random(1, 500000000)
INSERT INTO p(id, ival) VALUES (nextval('p_seq1'),:ival);

16、17分別執行 pgbench 壓測命令

/opt/pgsql-10/bin/pgbench -c 150 -j 120 -T 600 -f /pgdata/10/poc/scripts/bench_script_for_insert.sql pocdb

nmon監控cpu、內存、網絡

chmod +x /home/super/pgsoft/nmon_x86_64_sles11
/home/super/pgsoft/nmon_x86_64_sles11 -f -c 120 -s 10

注:

-f 將結果存儲在當前目錄的文件中,以nmon結尾,自動生成

-c 總共統計120次

-s 每隔10s統計一次

chmod +x /home/pgsoft/nmon_x86_64_sles11
chmod +x /home/pgsoft/nmon_x86_64_sles11
/home/pgsoft/nmon_x86_64_sles11 -f -c 120 -s 10
/home/super/pgsoft/nmon_x86_64_sles11 -f -c 120 -s 10

看完上述內容,你們對怎么在PostgreSQL中配置一個邏輯復制功能有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建平县| 惠州市| 来宾市| 嫩江县| 咸丰县| 轮台县| 连山| 兰州市| 喀喇沁旗| 都兰县| 阿坝县| 那坡县| 九江县| 丹阳市| 天柱县| 万年县| 印江| 贵定县| 克什克腾旗| 青岛市| 麦盖提县| 汪清县| 青田县| 武山县| 西贡区| 依兰县| 北票市| 太原市| 汝南县| 龙川县| 铅山县| 铜鼓县| 绍兴市| 吉水县| 龙口市| 张家口市| 太仆寺旗| 佛坪县| 洛阳市| 淮安市| 江源县|