基于postgresql11邏輯復(fù)制實(shí)現(xiàn)業(yè)務(wù)中心和數(shù)據(jù)中心數(shù)據(jù)訂閱同步方案

1 場(chǎng)景

  • 中臺(tái)的各個(gè)中心劃分較細(xì)违帆,主數(shù)據(jù)在用戶、渠道金蜀、會(huì)員刷后、商品這些中心,業(yè)務(wù)流程數(shù)據(jù)在支付渊抄、交易尝胆、庫(kù)存、結(jié)算等中心护桦,跨中心進(jìn)行數(shù)據(jù)查詢頻繁使用feign調(diào)用的方式太過笨重含衔。

2 方案

  • 搭建一個(gè)數(shù)據(jù)中心,通過pgsql-11提供的邏輯復(fù)制功能,實(shí)現(xiàn)各個(gè)業(yè)務(wù)中心的表數(shù)據(jù)實(shí)時(shí)同步到數(shù)據(jù)中心贪染,再由數(shù)據(jù)中心多表聯(lián)查提供對(duì)外的服務(wù)能力缓呛,也常用于讀寫分離,高可用的場(chǎng)景杭隙。
  • 本文基于開發(fā)環(huán)境進(jìn)行演示記錄强经,生產(chǎn)環(huán)境RDS類似。
  • 官方文檔:https://www.postgresql.org/docs/devel/logical-replication.html

3 兩臺(tái)pgsql的搭建和基本配置

  • 使用docker-compose部署業(yè)務(wù)和數(shù)據(jù)兩個(gè)數(shù)據(jù)庫(kù)

  • 在/home下新建pgsql-item/,pgsql-data/兩個(gè)文件夾寺渗,兩個(gè)docker-compose.yml文件如下:

    version: "3"
    services:
      postgres:
        image: postgres:11-alpine
        container_name: pgsql-item
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: 123456
          MAX_CONNECTIONS: 2000
          TZ: Asia/Shanghai
        volumes:
          - ./data:/var/lib/postgresql/data
        ports:
          - "15432:5432"
    
    version: "3"
    services:
      postgres:
        image: postgres:11-alpine
        container_name: pgsql-data
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: 123456
          MAX_CONNECTIONS: 2000
          TZ: Asia/Shanghai
        volumes:
          - ./data:/var/lib/postgresql/data
        ports:
          - "15433:5432"
    

    可以使用數(shù)據(jù)卷掛在data文件夾,這里掛到當(dāng)前目錄下為了方便修改配置文件

  • 發(fā)布端配置

    vim /home/pgsql-item/data/postgresql.conf
    
    wal_level = logical        #開啟邏輯復(fù)制模式
    max_replication_slots = 20 #該配置項(xiàng)表示發(fā)布端最多可以發(fā)布多個(gè)Publication
    max_wal_senders =40        #一般設(shè)置為max_replication_slots的2倍
    
  • 訂閱端配置

    vim /home/pgsql-data/data/postgresql.conf
    
    wal_level = logical        #開啟邏輯復(fù)制模式
    max_replication_slots=20   #訂閱端也需要配置該配置項(xiàng)兰迫,不能小于需要訂閱的數(shù)量
    max_logical_replication_workers=20 #訂閱端可以配置多個(gè)訂閱
    max_worker_processes=22    #最少為max_logical_replication_workers+1信殊。
    
  • 重啟兩臺(tái)pgsql

    docker restart pgsql-item pgsql-data
    

4 數(shù)據(jù)庫(kù)訂閱同步

  • pgsql-item創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)channel-center,3張表cc_store,cc_store_sku,cc_area

  • pgsql-data創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)data-center汁果,使用navicat數(shù)據(jù)傳輸工具同步2張表結(jié)構(gòu)cc_store涡拘,cc_store_sku

    發(fā)布節(jié)點(diǎn)和訂閱節(jié)點(diǎn)表的模式名、表名必須一致据德。

  • 發(fā)布端

    -- 創(chuàng)建發(fā)布
    create publication channel_center_pub for table cc_store,cc_store_sku;
    -- 發(fā)布端常用命令
    select * from pg_publication ; #查看發(fā)布者列表
    select * from pg_stat_replication; #查看邏輯復(fù)制的狀態(tài)
    select * from pg_publication_tables; #查看發(fā)布者發(fā)布了哪些數(shù)據(jù)表
    
  • 訂閱端

    -- 創(chuàng)建訂閱
    create subscription channel_center_sub connection 'host=192.168.31.167 port=15432 user=postgres password=devops dbname=channel_center' publication channel_center_pub;
    -- 訂閱端常用命令
    select * from pg_subscription; #查看訂閱者列表
    select * from pg_stat_subscription; #查看訂閱者狀態(tài)
    
  • 驗(yàn)證下鳄乏,在業(yè)務(wù)中心表的增刪改,金融級(jí)響應(yīng)速度同步到數(shù)據(jù)中心對(duì)應(yīng)的表

5 一些場(chǎng)景操作

  • 業(yè)務(wù)中心表結(jié)構(gòu)發(fā)生變更棘利,字段新增橱野、字段刪除、建立索引等操作善玫,會(huì)使訂閱失效

    處理方法:使用navicat結(jié)構(gòu)同步工具水援,同步表更的表到數(shù)據(jù)中心,保持兩端表結(jié)構(gòu)一致茅郎,訂閱即可恢復(fù)正常蜗元。

  • 一個(gè)發(fā)布修改發(fā)布的數(shù)據(jù)表,例如channel_center_pub的發(fā)布中2張表變更為3張表

    發(fā)布端修改發(fā)布:alter publication channel_center_pub set table cc_store,cc_store_sku,cc_area;

    訂閱端刷新訂閱:alter subscription channel_center_sub refresh publication;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末系冗,一起剝皮案震驚了整個(gè)濱河市奕扣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掌敬,老刑警劉巖惯豆,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奔害,居然都是意外死亡循帐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門舀武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拄养,“玉大人,你說我怎么就攤上這事”衲洌” “怎么了跛梗?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棋弥。 經(jīng)常有香客問我核偿,道長(zhǎng),這世上最難降的妖魔是什么顽染? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任漾岳,我火速辦了婚禮,結(jié)果婚禮上粉寞,老公的妹妹穿的比我還像新娘尼荆。我一直安慰自己,他們只是感情好唧垦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布捅儒。 她就那樣靜靜地躺著,像睡著了一般振亮。 火紅的嫁衣襯著肌膚如雪巧还。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天坊秸,我揣著相機(jī)與錄音麸祷,去河邊找鬼。 笑死褒搔,一個(gè)胖子當(dāng)著我的面吹牛摇锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播站超,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼荸恕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了死相?” 一聲冷哼從身側(cè)響起融求,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎算撮,沒想到半個(gè)月后生宛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肮柜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年陷舅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片审洞。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡莱睁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仰剿,我是刑警寧澤创淡,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站南吮,受9級(jí)特大地震影響琳彩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜部凑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一露乏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧涂邀,春花似錦瘟仿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瑞躺。三九已至敷搪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幢哨,已是汗流浹背赡勘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捞镰,地道東北人闸与。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像岸售,于是被迫代替她去往敵國(guó)和親践樱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容