接上篇《初識Postgres-XL》https://segmentfault.com/a/11…
寫一下Postgres-XL(簡稱PGXL)的部署與測試。
第一節 安裝
安裝很簡單,原始碼安裝,和PG的安裝基本相同,可能比PG多一個依賴庫。在所有節點上執行相同操作。
./configure
make
make install
如果執行./configure報錯則根據提示安裝相應的庫即可,如readline-devel等。預設的安裝目錄是/usr/local/pgsql,和原生PG相同,很順手。需要注意的是pgxc_ctl這個工具需要單獨編譯安裝,在原始碼包的contrib/pgxc_ctl/目錄下執行make && make install即可。
第二節 配置
叢集的配置可以通過兩種方式完成:
第一種,手動配置:首先通過initgtm、initdb命令在相應的節點上初始化GTM、GTM Proxy(非必須)初始化Coordinator和Datanode節點,然後依次啟動GTM、Coordinator和Datanode。不推介這種方式,不細說。
第二種,通過pgxc_ctl這個工具配置管理叢集:使用pgxc_ctl配置叢集之前需要在當前節點和叢集各個節點之間做ssh免密碼認證,執行pgxc_ctl的節點可以是叢集內的任意一個節點也可以是叢集外的節點。這個工具的原理大概是通過ssh執行各種bash命令完成叢集各節點的配置與啟動,非常方便,可以完全控制整個叢集與各個節點。pgxc_ctl的官方操作手冊在這裡:http://files.postgres-xl.org/…
配置過程如下:
直接執行pgxc_ctl,進入pgxc_ctl命令列環境,第一次執行會在主目錄下生成pgxc_ctl目錄,其中包括配置檔案與日誌,首次執行pgxc_ctl會提示沒找到配置檔案,因為此時還沒有配置檔案,在pgxc_ctl命令列中執行prepare,會生成預設的配置檔案pgxc_ctl.conf,此時q退出命令列,編輯生成的配置檔案,再次執行pgxc_ctl時就會使用這個配置檔案。
我的叢集配置是這樣的:三臺機器,地址分別是172.17.0.2、172.17.0.4、172.17.0.5,一臺跑GTM,另外兩臺同時跑Coordinator和Datanode節點,暫不考慮高可用配置。下面將我在pgxc_ctl.conf中的配置貼出來,省去了無關配置與註釋:
#---- OVERALL -----------------------------------------------------
pgxcOwner=postgres # owner of the Postgres-XC databaseo cluster.
pgxcUser=$pgxcOwner # OS user of Postgres-XC owner
tmpDir=/tmp # temporary dir used in XC servers
localTmpDir=$tmpDir # temporary dir used here locally
configBackup=n # If you want config file backup, specify y to this value.
#---- GTM Master --------------------------------------------------
gtmName=gtm
gtmMasterServer=172.17.0.2
gtmMasterPort=6666
gtmMasterDir=/pgdata/gtm
gtmExtraConfig=none # Will be added gtm.conf for both Master and Slave (done at initilization only)
gtmMasterSpecificExtraConfig=none # Will be added to Master`s gtm.conf (done at initialization only)
#---- GTM Slave -----------------------------------------------
gtmSlave=n # Specify y if you configure GTM Slave.
#---- GTM Proxy -----------------------------------------------
gtmProxy=n
#---- Coordinators ------------------------------------------------
#---- shortcuts ----------
coordMasterDir=/pgdata/coord
coordSlaveDir=/pgdata/coord
coordArchLogDir=/pgdata/coord/archive
#---- Overall ------------
coordNames=(c1 c2) # Master and slave use the same name
coordPorts=(5432 5432) # Master ports
poolerPorts=(5433 5433) # Master pooler ports
coordPgHbaEntries=(0.0.0.0/0) #
#---- Master -------------
coordMasterServers=(172.17.0.4 172.17.0.5) # none means this master is not available
coordMasterDirs=($coordMasterDir $coordMasterDir)
coordMaxWALsernder=0 # max_wal_senders
coordMaxWALSenders=($coordMaxWALsernder $coordMaxWALsernder) #
#---- Slave -------------
coordSlave=n
#---- Configuration files---
coordExtraConfig=coordExtraConfig # Extra configuration file for coordinators.
cat > $coordExtraConfig <<EOF
#================================================
# Added to all the coordinator postgresql.conf
# Original: $coordExtraConfig
log_destination = `stderr`
logging_collector = on
log_directory = `pg_log`
listen_addresses = `*`
coordSpecificExtraConfig=(none none)
coordExtraPgHba=none # Extra entry for pg_hba.conf.
coordSpecificExtraPgHba=(none none)
#---- Datanodes ---------------------------------------------------
#---- Shortcuts --------------
datanodeMasterDir=/pgdata/datanode
datanodeSlaveDir=/pgdata/datanode
datanodeArchLogDir=/pgdata/datanode/archive
#---- Overall ---------------
datanodeNames=(d1 d2)
datanodePorts=(15432 15432) # Master ports
datanodePoolerPorts=(5434 5434) # Master pooler ports
datanodePgHbaEntries=(0.0.0.0/0) #
#---- Master ----------------
datanodeMasterServers=(172.17.0.4 172.17.0.5) # none means this master is not available.
datanodeMasterDirs=($datanodeMasterDir $datanodeMasterDir)
datanodeMaxWalSender=0
datanodeMaxWALSenders=($datanodeMaxWalSender $datanodeMaxWalSender)
#---- Slave -----------------
datanodeSlave=n
# ---- Configuration files ---
datanodeExtraConfig=none # Extra configuration file for datanodes.
datanodeSpecificExtraConfig=(none none)
datanodeExtraPgHba=none # Extra entry for pg_hba.conf.
datanodeSpecificExtraPgHba=(none none)
#---- WAL archives ----------------------------------------------
walArchive=n
# ----End of Configuration Section----
配置檔案看著挺長,其實理順了之後發現要配置的地方其實就那麼幾塊。
完成配置檔案之後,一切就變得隨心所欲,你需要做的只是執行pgxc_ctl,在其互動式環境中執行init all 即可完成所有節點的初始化可啟動。之後執行monitor all 檢視所有節點的狀態。pgxc_ctl還能完成啟停節點、增刪節點等一系列操作,具體可以參考官方操作文件:http://files.postgres-xl.org/…
先到這裡,有時間的話寫一下我在試用PGXL過程中遇到的問題以及可用性評估等。