久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

使用Bucardo5怎么實現PostgreSQL主數據庫復制

193次閱讀
沒有評論

共計 5312 個字符,預計需要花費 14 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關使用 Bucardo5 怎么實現 PostgreSQL 主數據庫復制,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

為了演示方便,我使用了亞馬遜 Web 服務(AWS)提供的可快速創建、隨意使用的服務器,即運行 Amazon Linux 的基本 t1.micro 服務器。如果你按照提示繼續的話,它將免費而且簡單地給你創建一個服務器實例。一旦實例創建成功,我們就可以使用 ec2-user 賬戶通過 SSH 協議登陸到服務器,這時就可以開始安裝 PostgreSQL 和 Bucardo 了。
 

# Always a good idea:
$ sudo yum update
# This also installs other postgresql packages:
$ sudo yum install postgresql-plperl
# Create a new Postgres cluster:
$ initdb btest

此時,我們仍然不能期待哦你個 PostgreSQL,因為這個發布版的 socket 通信目錄使用的是 /var/run/postgresql 和 /tmp。我們調整了第一個目錄的權限后就可以啟動 PostgreSQL 了,然后創建第一個測試數據庫:
 

$ sudo chmod 777 /var/run/postgresql
$ pg_ctl -D btest -l logfile start
$ createdb shake1

接下來我們就可以進行數據庫復制了!為了得到樣例數據,我使用了開放源代碼的 Shakespeare 項目。它有一個易于裝載的小型的、可任意使用的、簡單的數據庫模式。github 上的這個小型項目就包含了一個現成的 PostgreSQL 數據庫模式,現在我們將可以把它裝載到新的數據庫了:
 

$ sudo yum install git
$ git clone -q https://github.com/catherinedevlin/opensourceshakespeare.git
$ psql shake1 -q -f opensourceshakespeare/shakespeare.sql
# You can safely ignore the  role does not exist  errors

我們打算創建這個數據庫的副本,這些副本可被當作其他數據源。換個說法,這些服務器擁有相同的數據而且可以寫入。實現這些非常簡單:
 

$ createdb shake2 -T shake1
$ createdb shake3 -T shake1

Bucardo 需要安裝一些依賴包。如果你安裝的操作系統發布不同,那么你可能要安裝的依賴包就不同:下面是我寫這篇文章的時候 Amazon Linux 需要安裝的依賴包。(如果幸運的話,你的發布包可能已經包含了 Bucardo,在這種情況下,下面的執行步驟就不需要執行了,你只要運行 yum install bucard 就可以了 - 不過要確定一下你使用的是版本 5 或者更好的版本!(通過 yum info bucardo 查看))
 

$ sudo yum install perl-ExtUtils-MakeMaker perl-DBD-Pg \
  perl-Encode-Locale perl-Sys-Syslog perl-boolean \
  perl-Time-HiRes perl-Test-Simple perl-Pod-Parser
$ sudo yum install cpan
$ echo y | cpan DBIx::Safe

在這個系統的 yum 軟件倉庫里不包含 Perl 模塊 DBIx::Safe,因此我們需要通過 CPAN 來安裝這個模塊。一旦上面的所有依賴都安裝成功,這時我們就準備安裝 Bucardo。我們將獲取官方壓縮包,驗證、解壓,接著安裝:
 

$ wget -nv http://bucardo.org/Bucardo.tar.gz
$ wget -nv http://bucardo.org/Bucardo.tar.gz.asc
$ gpg -q --keyserver pgp.mit.edu --recv-key 14964AC8
$ gpg --verify Bucardo.tar.gz.asc
$ tar xfz Bucardo.tar.gz $ ln -s Bucardo-5.0.0 bucardo
$ cd bucardo
$ perl Makefile.PL
$ make
$ sudo make install

我們對 bucardorc 文件 (設置某些全局信息的文件)進行某些小的調整。然后運行 bucardo install , 這條命令將創建 bucardo 的主數據庫,其中包含 Bucardo 服務進程所需的信息:
 

$ mkdir pid
$ echo -e  piddir=pid\nlogdest=.    .bucardorc
$ bucardo install --batch --quiet
Creating superuser  bucardo

現在已經安裝好 Bucardo, 接下來就準備復制了。此時,我們有了三個可以彼此復制的數據庫。下面我們只使用了兩條命令就可以實現三數據庫彼此復制:
 

 bucardo add dbs s1,s2,s3 dbname=shake1,shake2,shake3
Added databases  s1 , s2 , s3 
$ bucardo add sync bard dbs=s1:source,s2:source,s3:source tables=all
Added sync  bard 
Created a new relgroup named  bard 
Created a new dbgroup named  bard 
 Added table  public.chapter 
 Added table  public.character 
 Added table  public.character_work 
 Added table  public.paragraph 
 Added table  public.wordform 
 Added table  public.work

第一條命令,我們告訴 Bucardo 如何連接到三個數據庫,我們告訴 Bucardo 數據庫的名字,然后 Bucardo 把這三個數據庫看作 (s1,s2,s3)。你還可以指定端口和主機,不過在這個例子里,默認的端口為 5432,而且不需要主機(采用的是 Unix Socket 通信機制)。

第二條命令創建了一個已命名的復制系統,其 sync 名稱為 bard。Bucardo 需要知道復制到哪兒和如何復制,因此我們告訴它使用三個數據庫 s1,s2 和 s3。每一個數據庫都可以作為源數據庫,因此我們給它們添加了這樣的信息。最后我們需要知道要復制什么。在這個例子里,我們需要復制的是所有表(或者更精確點,復制具有主鍵或者唯一索引的所有數據庫)。注意: Bucardo 總是把數據庫和表放在命名組里 - 在這個例子里我們只是硬編碼其為 10,然而通常這個值是表格視圖控制器數組的長度。現在例子里,這一切都是自動進行的,dbgroup 和 relgroup 都是以 sync 的名字命名的。

我們驗證一下復制是否運行,即檢查一下更新行是否復制到 sync 里包含的所有數據庫了:
 

$ bucardo start
$ psql shake1 -c \
   update character set speechcount=123 where charname= Hamlet 
UPDATE 1
$ for i in {1,2,3}; do psql shake$i -tc  select \
  current_database(), speechcount from character \
  where charname= Hamlet  done | grep s
 shake1 | 123
 shake2 | 123
 shake3 | 123

我們還可以查看 Bucardo 的日志文件 log.bucardo , 看看是否有復制操作:
 

$ tail -2 log.bucardo
(25181) KID (bard) Delta count for s1.public. character : 1
(25181) KID (bard) Totals: deletes=2 inserts=2 conflicts=0

上面出現了兩條 delete 和兩條 insert 命令,這是因為更新一行意味著在其他兩個數據庫上首先運行的是 delete,然后才運行 insert(技術上采用的 COPY)。接下來我們看看 Bucardo 是怎么處理沖突的。我們將對所有服務器上的同一行進行更新,這樣就會產生沖突:
 

$ for i in {1,2,3}; do psql shake$i -tc \
   update character set speechcount=$i$i$i \
  where charname= Hamlet  done
UPDATE 1
UPDATE 1
UPDATE 1

查看日志表明確實存在沖突,而且也很好的解決了沖突。默認的沖突解決方案表明:最后一個更新的數據庫是獲勝者,現在所有三個數據庫具有與最后一個更新數據庫相同的行。
 

$ tail log.bucardo
(25181) KID (bard) Delta count for s1.public. character : 1
(25181) KID (bard) Delta count for s2.public. character : 1
(25181) KID (bard) Delta count for s3.public. character : 1
(25181) KID (bard) Conflicts for public. character : 1
(25181) KID (bard) Conflicts have been resolved
(25181) KID (bard) Totals: deletes=2 inserts=2 conflicts=1
 
$ for i in {1,2,3}; do psql shake$i -tc \
   select current_database(), speechcount \
  from character where charname= Hamlet  done | grep s
 shake1 | 333
 shake2 | 333
 shake3 | 333

我們開發這個示例的時候,Bucardo 有時運行的非常快,所以沒有發生沖突。也就是說,因為更新時順序執行的。所以在下一個更新之前,存在一個時間窗口可以讓 Bucardo 完成更新的復制。另外,“暫停 sync 功能也非常方便,只要在你需要暫時停止運行 sync 的情況下,運行下面命令即可:
 

$ bucardo pause bard
Syncs paused: bard
$ psql shake1 -c  update character set speechcount=1234 where charname= Hamlet 
UPDATE 1
$ psql shake2 -c  update character set speechcount=4321 where charname= Hamlet 
UPDATE 1
$ bucardo resume bard
Syncs resumed: bard
 
$ tail log.bucardo
(27344) KID (bard) Delta count for s1.public. character : 1
(27344) KID (bard) Delta count for s2.public. character : 1
(27344) KID (bard) Conflicts for public. character : 1
(27344) KID (bard) Conflicts have been resolved
(27344) KID (bard) Totals: deletes=2 inserts=2 conflicts=1

Bucardo 5 比我們在這兒演示的功能多很多。以后的博客文章里我們將包含它可以完成的其他功能,從復制到比如 Oracle、Mysql 或者 MongoDB 等非 PostgreSQL 系統到使用自定義的沖突解決方案。以及復制時對正在運行的數據實行轉換。如果你有任何問題,請在下面的評論里說明,或者寫一封短信給 Bucardo 郵件列表 bucardo-general@bucardo.org。

上述就是丸趣 TV 小編為大家分享的使用 Bucardo5 怎么實現 PostgreSQL 主數據庫復制了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計5312字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 勃利县| 讷河市| 信丰县| 华坪县| 铜鼓县| 枣强县| 绩溪县| 阳东县| 九龙县| 元朗区| 通江县| 金川县| 莱西市| 合江县| 金坛市| 布拖县| 桓台县| 温泉县| 武平县| 大英县| 大城县| 吉首市| 故城县| 阜宁县| 砀山县| 镇远县| 庄浪县| 介休市| 农安县| 浙江省| 仙桃市| 宜宾市| 乃东县| 丁青县| 德格县| 安阳市| 襄垣县| 霍林郭勒市| 清涧县| 德庆县| 昌乐县|