天天看點

PolarDB for PostgreSQL 開源産品 FAQ一、部署使用類二、編譯類三、架構類四、運維操作類

一、部署使用類

1. 是否有提供docker鏡像

官方暫時沒有提供docker鏡像,但使用者可以通過指令一鍵建構docker鏡像。具體參考:

https://github.com/alibaba/PolarDB-for-PostgreSQL#deployment-using-docker-image

2. 預設ssh 端口非22 的時候,如何配置

目前程式中沒有針對修改ssh端口的配置,建議将ssh端口修改回預設22。

3. 有沒有提供相關配置清單,可以跑出一定性能的benchmark結果

暫時沒有。不同的硬體下會産生不同的benchmark結果。可以搭建polardb資料庫,使用pgbench作為benchamark工具進行性能測試。具體參考:

https://github.com/alibaba/PolarDB-for-PostgreSQL/blob/master/doc/polardb/benchmark.md

4. polardb是否有單點故障(搭建分布式的polardb)

沒有。通過onekey.sh all或者pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone指令部署得到的polardb預設是有三節點部署在同一台實體機器上的。通過将 polardb_paxos.conf配置檔案中localhost改為對應的機器ip,就可以避免單點故障。(注意三台機器的ssh需要被打通)

更改檔案示例:

datanodeMasterServers=(localhost) # none means this master is not available.

datanodeSlaveServers=(localhost) # value none means this slave is not available

datanodeLearnerServers=(localhost) # value none means this learner is not available

——>

datanodeMasterServers=(Server1 IP) # none means this master is not available.

datanodeSlaveServers=(Server2 IP) # value none means this slave is not available

datanodeLearnerServers=(Server3 IP) # value none means this learner is not available

5. XPaxos是否已經完全開源,包含了一個multi-paxos系統的所有特性

是的,已經開源。參考commit "3b2a3a8cea2a872c0179e8d0ebe50a482420bb0a"

6. 使用pgxc_ctl時報錯

使用pgxc_ctl -c $HOME/polardb/polardb_paxos.conf prepare standalone指令時報錯

答:需要使用非root使用者進行部署。pgxc_ctl會通過scp的方式在多台機器間分發二進制檔案等,是以需要對涉及到的機器打通ssh。可以使用ssh-copy-id指令,如"ssh-copy-id [email protected]"。

7. 使用pgxc_ctl時報錯

pgxc_ctl -c $HOME/polardb/polardb_paxos.conf init all初始化叢集時,報錯如下

答: 需要配置環境變量

vi ~/.bashrc

export PATH="$HOME/polardb/polardbhome/bin:$PATH"

export LD_LIBRARY_PATH="$HOME/polardb/polardbhome/lib:$LD_LIBRARY_PATH"

更多内容參考:

https://github.com/alibaba/PolarDB-for-PostgreSQL/#previous-preparation

8. PolarDB-for-PostgreSQL的文法相容性

文法文檔 除了

https://github.com/alibaba/PolarDB-for-PostgreSQL

,還有其它地方有嗎?

答:目前版本polardb for postgresql相容社群postgresql文法,在文法上可以認為和社群postgresql相同。

9. PolarDB-for-Postgresql開源版本目前隻支援單機版嗎?

是的,現在是複制高可用叢集。資料庫本身是單機形态。後續會釋出叢集版,請關注我們的github動态。

二、編譯類

1. docker build失敗

使用docker build -t polardb-for-postgresql -f ./docker/Dockerfile . 指令報錯

[ 80%] [ 80%] Building CXX object Source/CMakeFiles/CMakeLib.dir/cmNinjaUtilityTargetGenerator.cxx.o

Building CXX object Source/CMakeFiles/CMakeLib.dir/cmNinjaNormalTargetGenerator.cxx.o

�[91mg++: fatal error: Killed signal terminated program cc1plus

compilation terminated.

這是編譯安裝cmake時的報錯。可能是由記憶體不足引起,可以嘗試擴大虛拟機記憶體。

可以google搜尋“Killed signal terminated program cc1plus”嘗試各種方法來解決。

2. onekey.sh all 編譯報錯

執行onekey.sh all時,報錯:

checking for Python.h... no

configure: error: header file is required for Python

答:在執行onekey.sh前,需要先安裝python。

3. gcc 10.2.0編譯報錯

執行build.sh報錯

/root/PolarDB-for-PostgreSQL/src/backend/polar_dma/libconsensus/dependency/easy/src/thread/easy_uthread.c:266:17: error: ‘SIG_BLOCK’ undeclared (first use in this function)

答:這是gcc版本的問題。已經增加了gcc 10版本下的支援。另外在gcc 4.8或者7.2下也可以正确編譯。

4. 編譯時報錯 link error with SSL_* symbols

編譯報錯如下:

/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_num_locks'

/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_cleanup_all_ex_data'

/usr/bin/ld: ../../src/backend/polar_dma/lib//libpolar_consensus_wrapper.so: undefined reference to `CRYPTO_mem_leaks_fp'

collect2: error: ld returned 1 exit status

make[2]: *** [Makefile:71: postgres] Error 1

make[2]: Leaving directory '/home/ajung/src/PolarDB-for-PostgreSQL/src/backend'

make[1]: *** [Makefile:42: all-backend-recurse] Error 2

make[1]: Leaving directory '/home/ajung/src/PolarDB-for-PostgreSQL/src'

make: *** [GNUmakefile:11: all-src-recurse] Error 2

答: 在編譯前需要安裝openssl。需要安裝的其他内容參考:

https://github.com/alibaba/PolarDB-for-PostgreSQL#deployment-from-source-code

5. macOS上,PG的SPI函數是在哪個so裡面實作的?

PG的SPI函數在 src/backend/executor/spi.c 中。屬于核心子產品。并非編譯成so。

三、架構類

1. 是否會寫一些high-level的設計文檔

文檔在不斷完善補充中。目前已有的可以參考:

https://github.com/alibaba/PolarDB-for-PostgreSQL#architecture--roadmap

2. 相對于pg的代碼改動點有哪些

polardb會逐漸開源新特性。目前已經開源的特性主要包括HA增強(基于paxos的HA和基于streaming的HA),CTS等特性。歡迎關注後續即将釋出的各項增強功能。

3. 後續有計劃完整開源吧?想多機、 多DATANODE部署一下

有的,可以看一下roadmap的文檔。文檔位址:

4. 目前開源的版本基本pg哪個版本開發的

基于postgresql 11.2 版本開發

5. 開源版本最大僅支援三個節點的叢集嗎

可以支援多個副本部署。目前開源的版本本質上是多副本,隻有一個計算節點,是以可以在多台機器上部署多個副本,通常三副本就能滿足絕大部分場景的可靠性需求。後續會開源叢集版本,提供多個計算節點,敬請關注。

6. 這個叢集是類似oracle rac 這種share disk的架構嗎?

不是的。目前開源版本是單機資料庫,提供了多個副本,每個副本使用獨立的磁盤,并非shard disk。

四、運維操作類

1. autovacuum操作一月被觸發一次, 每次觸發的時候資料庫就慢

autovacuum觸發頻率可以由配置參數決定。vacuum的目的在于回收page中的dead tuple、freeze transaction xid,vacuum時會産生IO,也會對表加ShareUpdateExclusiveLock鎖。是以會對資料庫有性能影響。

更多原理和細節可以參考官方文檔:

https://www.postgresql.org/docs/11/runtime-config-autovacuum.html https://www.postgresql.org/docs/11/routine-vacuuming.html

2. pg12 主從+ patroni2.1 patroni leader 切換之後,pg 主從丢失這個是什麼情況?

正常時:

patroni 切換leader 之後, 在執行檢視主從指令,不再顯示。

原因:

解決patroni leader 故障切換之後,pg 主從也發生了切換。

3. 長事務導緻autovacuum不能推進oldest xmin解決方法

需要terminate該長事務。可以使用指令 select pg_terminate_backend($backend_pid);

4. 有什麼資料庫,對于非固定列的資料,存儲與查詢還有統計支援比較好的?

可以看下HBase 或者 MongoDB。

5. 開源版的polardb支援全文檢索嗎?性能如何?

全文檢索是社群postgresql原生提供的能力,開源版本postgresql for polardb繼承了這個能力,但沒有進行開發增強。

6. pglogical 插件比原生的邏輯複制有什麼優勢?

pglogical是一個獨立插件,原理與原生的邏輯複制是一樣的,pglogical有更加強大的沖突處理能力。具體可以參考:

https://www.2ndquadrant.com/en/resources/pglogical/

7. pg 的高可用 在生産環境有在使用pgpool的嗎?

pgpool可以使用。也可以看下Patroni是否滿足需要。

8. PG性能抖動怎麼記錄現場?日志記錄的執行計劃隻能看到執行計劃突然很慢,1000次隻有1次很慢。

可以嘗試下auto_explain。具體可以參考

https://github.com/digoal/blog/blob/master/202106/20210621_03.md

9. 阿裡雲的pg支援btree_gin之類的extension麼?

支援。

10. postgresql内置的copyfrom函數為什麼拷貝效率那麼高

copy在多個方面提高了拷貝效率。具體可以參考

https://stackoverflow.com/questions/46715354/how-does-copy-work-and-why-is-it-so-much-faster-than-insert

11. pg vacuum analyze 大表的時候,會寫很多wal日志嗎

如果vacuum修改了page,就會産生wal日志。産生的日志量取決于對表的修改量大小,跟表的大小并沒有直接關系。

12. 備份pg表時,為何主鍵和sequence 也被備份了

實體備份本來就含了主鍵和序列

13. 在pg裡面,我一個使用者要授予對所有資料庫隻有查詢和修改,但是沒有删除權限. 這要怎麼實作,我現在很多庫我不想一個一個庫去授權

資料庫沒有提供内置的功能。可以自行編寫腳本來對所有資料庫進行授權。授權和撤銷可以使用 grant和revoke指令。參考

https://www.postgresql.org/docs/11/sql-grant.html https://www.postgresql.org/docs/11/sql-revoke.html