POSTGRESQL10.8原始碼安裝主從搭建

germany006發表於2019-05-26

前言

自我感覺10.8和10.3安裝一樣的方式,沒有太大區別

注意:因為部落格有的寫命令的地方不知道為啥釋出完之後會出現空格

所以命令你們自己手動輸入哈!!!!!!!!!!!!!!!!!!!!!!!!!!


一、下載POSTGRESQL原始碼安裝包及主機配置

虛擬機器環境
node1  192.168.159.4
node2  192.168.159.5

作業系統為redhat7.6
資料庫為postgresql10.8

兩個節點均配置/etc/hosts
vi /etc/hosts
node1  192.168.159.4
node2  192.168.159.5



二、編譯安裝
(1)建立postgres使用者
useradd -m -r -s /bin/bash -u 5432 postgres
(2)安裝相關依賴包
yum install gettext gcc make perl python perl-ExtUtils-Embed   readline-devel   zlib-devel    openssl-devel   libxml2-devel  cmake  gcc-c++ libxslt-devel  openldap-devel  pam-devel  python-devel  cyrus-sasl-devel  libgcrypt-devel  libgpg-error-devel  libstdc++-devel


(3)配置POSTGRES

上傳解壓安裝包
cd /opt/

tar -zxvf 

cd /opt/

./configure --prefix=/opt/postgresql-10.8 --with-segsize=8 --with-wal-segsize=64 --with-wal-blocksize=16 --with-blocksize=16 --with-libedit-preferred --with-perl --with-python --with-openssl --with-libxml --with-libxslt --enable-thread-safety --enable-nls=zh_CN


注意編譯的時候一定不要加引數--enable-profiling  --enable-debug  這引數會導致不必要的日誌產生,

而且增長極快,會導致磁碟空間迅速爆滿,手動刪除還可能有一些不好的影響,所以不要配這引數就好。

而且這引數說明也是用於測試開發用的,不適用於生產系統

configure 編譯選項:
--prefix=PREFIX 指定安裝目錄,預設為 /usr/local/pgsql
--bindir= 可執行檔案目錄,預設 /PREFIX/bin
--sysconfdir= 配置檔案目錄,預設 /PREFIX/etc
--libdir= 庫檔案目錄,預設 /PREFIX/lib
--includedir= 標頭檔案目錄,預設 /PREFIX/include
--datarootdir=DATAROOTDIR 設定只讀共享檔案目錄,預設為 /PREFIX/share
--mandir= man手冊目錄,預設 /DATAROOTDIR/man
--with-extra-version=STRING 在版本號後面追加 STRING 字串,用作自定義版本標識
--with-pgport=NUMBER 指定伺服器端與客戶端的預設埠號,預設為 5432
--with-openssl 編譯 ssl 支援,需要事先安裝 OpenSSL 包
--with-pam 編譯 PAM 支援
--with-ldap 編譯 LDAP 支援,需要事先安裝 OpenLDAP 包
--with-segsize= 設定 segment size ,以 gigabytes(GB) 為單位,預設為 1GB ,大型的表會按 segsize 被分割成多個檔案
--with-blocksize= 指定塊大小,是表記憶體儲和 I/O 的基本單位,預設 8Kbytes ,通常無需變更,取值範圍 1-32KB
--with-wal-segsize= 設定 WAL(Write-Ahead Logging) 的 segment size ,以 megabytes(MB) 為單位,預設 16MB ,取值範圍 1-64MB
--with-wal-blocksize= 指定 WAL 的塊大小,這是 WAL 預寫式日誌儲存和 I/O 的基本單位,以 Kbytes 為單位,預設 8KB ,取值範圍 1-64KB
--enable-debug (Compiles all programs and libraries with debugging symbols. This means that you can run the programs in a debugger to analyze problems),使用 GCC 編譯器時可用於生產環境,其它編譯器會影響效能;多用於開發
--enable-profiling GCC編譯器下,所有程式和庫將被編譯成可進行效能分析,後端退出時生成的 gmon.out 用於效能分析;多用於開發
--enable-coverage 程式碼覆蓋率測試,僅用於開發
--enable-cassert 開啟伺服器的 assertion(斷言) 檢查,僅用於開發
--enable-depend (Enables automatic dependency tracking. With this option, the makefiles are set up so that all affected object files will be rebuilt when any header file is changed),僅用於開發
--enable-dtrace 編譯動態追蹤工具 Dtrace 支援,當前尚不能用於 Linux 平臺,可用於 FreeBSD、Solaris
--with-systemd 開啟 systemd 支援,需9.6及以上版本


最後幾行出現以下黃色輸出即配置正確,否則根據報錯提示繼續安裝依賴包

checking thread safety of required library functions... yes

checking whether gcc supports -Wl,--as-needed... yes

configure: using compiler=gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36)

configure: using CFLAGS=-Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -pg -DLINUX_PROFILE -O2

configure: using CPPFLAGS= -D_GNU_SOURCE -I/usr/include/libxml2 

configure: using LDFLAGS=  -Wl,--as-needed

configure: creating ./config.status

config.status: creating GNUmakefile

config.status: creating src/Makefile.global

config.status: creating src/include/pg_config.h

config.status: creating src/include/pg_config_ext.h

config.status: creating src/interfaces/ecpg/include/ecpg_config.h

config.status: linking src/backend/port/tas/dummy.s to src/backend/port/tas.s

config.status: linking src/backend/port/dynloader/linux.c to src/backend/port/dynloader.c

config.status: linking src/backend/port/posix_sema.c to src/backend/port/pg_sema.c

config.status: linking src/backend/port/sysv_shmem.c to src/backend/port/pg_shmem.c

config.status: linking src/backend/port/dynloader/linux.h to src/include/dynloader.h

config.status: linking src/include/port/linux.h to src/include/pg_config_os.h

config.status: linking src/makefiles/Makefile.linux to src/Makefile.port


或者馬上輸入echo $?得到輸出是0就可以了

(4)編譯
make && make install

最後幾行出現以下黃色輸出即配置正確

make[2]: 離開目錄“/opt/postgresql-10.8/src/test/perl”

/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/src'

/usr/bin/install -c -m 644 Makefile.global '/opt/postgresql-10.8/lib/pgxs/src/Makefile.global'

/usr/bin/install -c -m 644 Makefile.port '/opt/postgresql-10.8/lib/pgxs/src/Makefile.port'

/usr/bin/install -c -m 644 ./Makefile.shlib '/opt/postgresql-10.8/lib/pgxs/src/Makefile.shlib'

/usr/bin/install -c -m 644 ./nls-global.mk '/opt/postgresql-10.8/lib/pgxs/src/nls-global.mk'

make[1]: 離開目錄“/opt/postgresql-10.8/src”

make -C config install

make[1]: 進入目錄“/opt/postgresql-10.8/config”

/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/config'

/usr/bin/install -c -m 755 ./install-sh '/opt/postgresql-10.8/lib/pgxs/config/install-sh'

/usr/bin/install -c -m 755 ./missing '/opt/postgresql-10.8/lib/pgxs/config/missing'

make[1]: 離開目錄“/opt/postgresql-10.8/config”

PostgreSQL installation complete.



或者馬上輸入echo $?得到輸出是0就可以了


(5)安裝
make world && make install -world

最後幾行出現以下黃色輸出即配置正確

/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/src'

/usr/bin/install -c -m 644 Makefile.global '/opt/postgresql-10.8/lib/pgxs/src/Makefile.global'

/usr/bin/install -c -m 644 Makefile.port '/opt/postgresql-10.8/lib/pgxs/src/Makefile.port'

/usr/bin/install -c -m 644 ./Makefile.shlib '/opt/postgresql-10.8/lib/pgxs/src/Makefile.shlib'

/usr/bin/install -c -m 644 ./nls-global.mk '/opt/postgresql-10.8/lib/pgxs/src/nls-global.mk'

make[1]: 離開目錄“/opt/postgresql-10.8/src”

make -C config install

make[1]: 進入目錄“/opt/postgresql-10.8/config”

/usr/bin/mkdir -p '/opt/postgresql-10.8/lib/pgxs/config'

/usr/bin/install -c -m 755 ./install-sh '/opt/postgresql-10.8/lib/pgxs/config/install-sh'

/usr/bin/install -c -m 755 ./missing '/opt/postgresql-10.8/lib/pgxs/config/missing'

make[1]: 離開目錄“/opt/postgresql-10.8/config”

PostgreSQL installation complete.

make: 離開目錄“/opt/postgresql-10.8”



或者馬上輸入echo $?得到輸出是0就可以了


(6)建立相關目錄及配置環境變數

mkdir -p /home/postgresql10.8/serverlog
mkdir -p /home/postgresql10.8/pg/pgdata


su - postgres
vi .bash_profile  (刪除原來的所有,以下黃色部分直接複製貼上)
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH

# postgres
#PostgreSQL埠
PGPORT=5432

#PostgreSQL資料目錄
PGDATA=/home/postgresql10.8/pg/pgdata
export PGPORT PGDATA 

#所使用的語言
export LANG=zh_CN.utf8

#PostgreSQL 安裝目錄
export PGHOME= /home/postgresql10.8/pg/pgdata


#PostgreSQL 連線庫檔案
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`

#將PostgreSQL的命令列新增到 PATH 環境變數
export PATH=$PGHOME/bin:$PATH

#PostgreSQL的 man 手冊
export MANPATH=$PGHOME/share/man:$MANPATH

#PostgreSQL的預設使用者
export PGUSER=postgres

#PostgreSQL預設主機地址
export PGHOST=127.0.0.1

#預設的資料庫名
export PGDATABASE=postgres

#定義日誌存放目錄
PGLOG="$PGDATA/serverlog"




source .bash_profile


(7)初始化資料庫
#執行資料庫初始化指令碼
root使用者登入

chown -R postgres.postgres /home/postgresql10.8
su - postgres
/opt/postgresql-10.8/bin/initdb --encoding=utf8 -D /home/postgresql10.8/pg/pgdata/




警告:為本地連線啟動了 "trust" 認證.
你可以透過編輯 pg_hba.conf 更改或你下次
行 initdb 時使用 -A或者--auth-local和--auth-host選項.


Success. You can now start the database server using:


啟動資料庫
su - postgres
/opt/postgresql-10.8/bin/pg_ctl -D '/home/postgresql10.8/pg/pgdata/' -l logfile start



(8)相關命令複製
root使用者

mkdir /home/postgresql10.8/pg/pgdata/bin
cp /opt/postgresql-10.8/bin/*  /home/postgresql10.8/pg/pgdata/bin
chown -R postgres.postgres /home/postgresql10.8/pg/pgdata/bin






三、postgresql主從搭建

1、主庫配置

(1)建立一個使用者複製的使用者replica
su - postgres
psql
CREATE ROLE replica login replication encrypted password ' replica';

 

(2)修改pg_hba.conf檔案,指定replica登入網路(最後一行新增)
vi /home/postgresql10.8/pg/pgdata/pg_hba.conf

host    replication     replica         192.168.159.0/24        md5

host    all             replica         192.168.159.0/24        md5

host    all             all             192.168.159.0/24        md5

host    all             all             0.0.0.0/0               md5

 
(3)主庫配置檔案修改以下幾項,其他不變
vi  /home/postgresql10.8/pg/pgdata/ postgresql.conf
listen_addresses = '*'
wal_level = hot_standby  #熱備模式
max_wal_senders= 10 #可以設定最多幾個流複製連結,差不多有幾個從,就設定多少
wal_keep_segments = 100  #重要配置
wal_send_timeout = 60s
max_connections = 3000 #從庫的 max_connections要大於主庫
archive_mode = on #允許歸檔
archive_command = 'cp %p  /home/postgresql10.8/pg/archivedir/%f'    #根據實際情況設定

checkpoint_timeout = 30min
max_wal_size = 2GB
min_wal_size = 1GB

mkdir /home/postgresql10.8/pg/archivedir


2、從庫環境
(1)把備庫的資料資料夾目錄清空
rm -rf  /home/postgresql10.8/pg/*
(2)在備庫上執行
/opt/postgresql-10.8/bin/pg_basebackup -F p --progress -D /home/postgresql10.8/pg/pgdata -h 192.168.159.4 -p 5432 -U replica --password
輸入密碼replica 
!!!注意,複製完成後,在備庫一定要將資料目錄下的所有檔案重新授權
chown -R postgres.postgres /home/postgresql10.8/pg/pgdata

 

(3)建立recovery.conf 檔案
cp  /opt/postgresql-10.8/share/recovery.conf.sample /home/postgresql10.8/pg/pgdata/recovery.conf

 

vi  /home/postgresql10.8/pg/pgdata/recovery.conf
standby_mode = on
primary_conninfo = 'host=192.168.159.4 port=5432 user=replica password=replica'
recovery_target_timeline = 'latest'
trigger_file = ' /home/postgresql10.8/pg/pgdata/ trigger.kenyon'

 

(4)配置 postgresql.conf檔案
vi  /home/postgresql10.8/pg/pgdata /postgresql.conf
listen_addresses ='*'
wal_level = hot_standby
max_connections =1000  #一般從的最大連結要大於主的
hot_standby =on   #說明這臺機器不僅僅用於資料歸檔,也用於查詢
max_standby_streaming_delay =30s
wal_receiver_status_interval = 10s   #多久向主報告一次從的狀態
hot_standby_feedback = on    #如果有錯誤的資料複製,是否向主進行範例



(5) 啟動備庫

su - postgres
/opt/postgresql-10.8/bin/pg_ctl -D '/home/postgresql10.8/pg/pgdata/' -l logfile start
如果無法啟動,到主庫複製檔案 postmaster.opts到備庫如下操作:
scp  /home/postgresql10.8/pg/pgdata/postmaster.opts 192.168.159.5: /home/postgresql10.8/pg/pgdata/

chown -R postgres.postgres  /home/postgresql10.8/pg/pgdata/

cd /home/postgresql10.8/pg/

chmod 700 pgdata/

 

3、驗證主從功能
主庫查詢
su - postgres
psql
postgres=# select client_addr,sync_state from pg_stat_replication;
   client_addr   | sync_state
-----------------+------------
 192.168.159.5 | async
(1 row)




注意一個問題,生產庫要注意時區問題

找到配置檔案postgresql.conf

其中引數

timezone = 'PRC'


PRC代表是上海時區



注意:

作業系統是CENTOS6.5的會遇到這麼個情況

如果你在登入PG的時候遇到以下報錯:

su - postgres

psql

psql: symbol lookup error: psql: undefined symbol: PQconnectdbParams


那就是你的lib庫沒設定

mkdir /home/postgresql10.8/pg/pgdata/lib/

cp -r /opt/postgresql-10.8/lib/*  /home/postgresql10.8/pg/pgdata/lib

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2645631/,如需轉載,請註明出處,否則將追究法律責任。

相關文章