PostgreSQL[9.4-9.6]——伺服器管理

來源:互聯網
上載者:User

標籤:程式碼涵蓋範圍   option   核心源碼   illegal   分割   賬戶   cpp   獨立   term   

 一、編譯安裝:

  • 環境準備:
    • GNU make 版本 >=3.8 (make --version)
    • ISO/ANSI C 編譯器,至少須相容 C89 標準,GCC 或 intel 編譯器等均可
    • gzip 、bzip2 、tar ,源碼解包
    • GNU Readline 庫,用於 psql 操作曆史命令
    • 安全相關模組:Kerberos、OpenSSL、OpenLDAP、PAM 等,需要事先安裝好對應的包
    • 如果要使用 PL/Python、PL/Perl、PL/Tcl 等過程語言,須保証語言本身及相關的開發庫安裝到位
    • 如果使用的是 Git 中的源碼或需要做伺服器端開發,則另外需要 GNU Flex(>=2.5.31) 及 Bison(>=1.875),不能使用其它 lex 或 yacc 程式
    • 磁碟空間:編譯過程源碼樹佔用 100M+,產生的程式檔案 20M+,一個空資料庫 data 目錄 30M+,迴歸測試空間 150M+;註:一個資料庫所佔的空間大約是儲存同等資料的一般檔案所佔空間的五倍
  • 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及以上版本
  • configure 環境變數,可以在命令列上指定環境變數,形如: ./configure CC=/opt/bin/gcc CFLAGS=‘-O2 -pipe‘
    • CC 指定 C 編譯器
    • CFLAGS 設定 C 編譯器選項
    • CPP 指定 C 預編譯器
    • CPPFLAGS 設定 C 預編譯器選項
  • make 選項:
    • make 按預設配置編譯
    • make world 同時編譯文檔及附加模組(contrib)
    • make check 迴歸測試,用於安裝完成後測試功能完整性,不能以 root 身份運行
    • make install 安裝程式
    • make install-docs 安裝文檔(info、man手冊)
    • make install-world 安裝所有可安裝的
    • make uninstall 刪除安裝的檔案(產生的目錄無法刪除)
    • make clean 清除 make 產生的檔案,但保留 configure 產生的檔案
    • make distclean 將源碼恢複為原始狀態,即同時刪除 make 與 configure 階段產生的檔案
    • make -C 指定源檔案目錄,僅安裝程式的特定部分;如只安裝用戶端應用和介面:make -C src/bin install; make -C src/include install; make -C src/interfaces install; make -C doc install

二、安裝後設定

  • 共用庫
    • 法一:在 /etc/profile 或 ~/.bash_profile 中寫入:export LD_LIBRARY_PATH=/usr/local/pgsql/lib ,目標須目錄與安裝時指定的一致
    • 法二:在 /etc/ld.so.conf.d/ 目錄下建立 pgsql.conf 或直接操作 /etc/ld.so.conf 檔案,寫入 /usr/local/pgsql/lib ,之後運行 ldconfig 更新緩存
  •  環境變數
    • 在 /etc/profile 或 ~/.bash_profile 中寫入:
      • export PATH=/usr/local/pgsql/bin:$PATH
      • export MANPATH=/usr/local/pgsql/man:$MANPATH
    • 變數 PGHOST 與 PGPORT 用於為用戶端應用指定資料庫伺服器的主機和連接埠,它會覆蓋編譯時的預設項

三、伺服器設定和操作

  • PostgreSQL 使用者賬戶
    • 建議性原則:建立一個獨立的私人賬戶,專用於運行 PostgreSQL 伺服器端,作為資料庫 data 目錄及其父目錄的屬主,但不能把可執行檔安裝為屬於這個使用者
    • useradd 添加系統使用者,createuser 建立對應的 PostgreSQL 同名使用者,createdb 建立資料庫
  • Creating a Database Cluster(catalog cluster)
    • initdb -D /usr/local/pgsql/data
    • 或 設定 PGDATA環境變數後直接執行 initdb 或 pg_ctl initdb
    • 或 pg_ctl -D /usr/local/pgsql/data initdb
  • 使用單獨的資料分區
    • 不要將分區的項層目錄(掛載點)作為 Database Cluster 目錄,應在其上建立一個目錄(父目錄),然後在其中建立資料目錄,在避免出現許可權問題的同時,可防止由於掛載點斷線造成的資料紊亂
  • Starting the Database Server
    • pg_ctl start -l logfile -D /PATH/TO/data 或 postgres -D /PATH/TO/data >serverlog 2>&1 & ,serverlog 須替換成實際的記錄檔路徑
    • 設定 PostgreSQL 開機啟動時,不能以 root 或其它使用者啟動,應在啟動指令碼中使用類似:su postgres -c ‘pg_ctl start -l serverlog -D /PATH/TO/data‘
    • 伺服器運行時,PID 被儲存在 data 目錄下的 postmaster.pid檔案中的第一行
  • 服務啟動常見問題
    • 連接埠被佔用(已有正在啟動並執行 PostgreSQL 進程或其它程式)
    • 試圖使用一個保留連接埠 (<1024),如:postgres -p 666
    • 共用記憶體 (System-V-style shared memory) 或 訊號量 (System V semaphores) 不足,能常是由於核心限制或根本沒有開啟對應的支援項 (If you get an "illegal system call" error,it is likely that shared memory or semaphores are not supported in your kernel at all)
  •  用戶端串連常見問題
    • 伺服器沒有啟動或沒有配置成允許 TCP/IP 串連,通常會收到 ‘psql: could not connect to server: ...‘ 類似的錯誤提示
    • 用戶端自身網路問題等
  • 共用記憶體 (shm) 與訊號量 (sem)
    • 修改 /etc/sysctl.conf 中的 kernel.shmmax 等,立即生效需執行 sysctl -p
    • 或 更改 /proc/sys/kernel/shmall 等
  • 系統資源限制 (/proc/sys/fs/file-max 等)
    • the number of processes per user
    • the number of open files per process
    • the amount of memory available to each process
  • 應對 out-of-memory (OOM) killer
    • Pid=`head -n 1 /PATH/TO/postmaster.pid` && echo -1000 > /proc/$Pid/oom_score_adj 首選
    • 或 Pid=`pidof postgres` && echo -17 > /proc/$Pid/oom_adj 通常用於 2.6 版本以前的核心
    • 核心源碼參見:...src/linux/include/uapi/linux/oom.h
  • 使用 Linux 大頁記憶體
    • 更改 /proc/sys/vm/nr_hugepages 的值
    • 或 設定 /etc/sysctl.conf 中 vm.nr_hugepages=
  • 關閉伺服器
    • 通常使用 SIGTERM(等待所有進程正常關閉後退出,包括備份) 或 SIGINT(與 SIGTERM 類同,但不會等待備份進程) 訊號,不推薦使用 SIGQUIT(5 秒種內沒有正常退出的進程將被直接關閉) 和 SIGKILL(立即無條件退出,此訊號不能同時關閉子進程,且來不及釋放共用記憶體與訊號量) 
    • 如:kill -INT `head -1 /PATH/TO/postmaster.pid`
    • 註:可以指定的給子進程發送訊號
  • Upgrading a PostgreSQL Cluster
    • 對於次版本號碼之間的升級,直接更新可執行檔並重啟伺服器即可
    • The traditional method for moving data to a new major version is to dump and reload the database, though this can be slow
      1. pg_dumpall > outputfile
      2. pg_ctl stop
      3. mv /usr/local/pgsql /usr/local/pgsql.old 備份舊版本可執行檔
      4. Install the new version of PostgreSQL
      5. Create a new database cluster if needed:/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
      6. 配置新伺服器的 pg_hba.conf 與 postgresql.conf 等
      7. Start the new database server:pg_ctl start -D /usr/local/pgsql/data
      8. Finally, restore your data from backup with:/usr/local/pgsql/bin/psql  -f outputfile
    • 通過 pg_upgrade 升級:https://www.postgresql.org/docs/9.6/static/pgupgrade.html
      1. pg_upgrade -b oldbindir -B newbindir -d olddatadir -D newdatadir [option...]
      2. ...

四、Encryption and Secure

  • Preventing Server Spoofing

PostgreSQL[9.4-9.6]——伺服器管理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.