Skip to content

Latest commit

 

History

History
340 lines (245 loc) · 13.6 KB

20141119_01.md

File metadata and controls

340 lines (245 loc) · 13.6 KB

PostgreSQL 的 rpm(yum) 安装方法

作者

digoal

日期

2014-11-19

标签

PostgreSQL , yum , rpm , install


背景

一般情况下, 我们安装PostgreSQL都是通过源码编译安装的, 如果你的场景中不允许使用make或gcc的话, 可以选择下载rpm包安装或下载EDB提供的bin文件安装.

EDB :

http://www.enterprisedb.com/products-services-training/pgdownload

rpm :

http://yum.postgresql.org/

当然, 你也可以自己创建属于自己的rpm

http://www.rpm.org/max-rpm-snapshot/rpmbuild.8.html

使用rpm安装的例子

我这个例子在docker环境中安装测试 :

首先至少要下载以下4个rpm包.

PostgreSQL Database Server 9.3 PGDG

postgresql93 - PostgreSQL client programs and libraries  
  
postgresql93-contrib - Contributed source and binaries distributed with PostgreSQL  
  
postgresql93-libs - The shared libraries required for any PostgreSQL clients  
  
postgresql93-server - The programs needed to create and run a PostgreSQL server  

到这里下载 :

http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/

地址(如果你需要其他的插件,下载即可,比如plpython,下载相应的RPM安装之) :

http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-server-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-contrib-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-libs-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-pltcl-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-plperl-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-plpython-9.3.5-1PGDG.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgfincore93-1.1.1-1.rhel6.x86_64.rpm
http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/postgresql93-devel-9.3.5-1PGDG.rhel6.x86_64.rpm

下载好后, 启动一个docker, 把包拷贝到container环境中, 直接安装.

如果你不是在docker中安装,请忽略。

注意contrib, 以及几个函数语言包可能需要依赖一些包, 如果在docker image中么有的话, 建议使用yum安装, 自动安装依赖的包.

从centos 6 x64的镜像启动container :

[root@150 ~]# docker run -t -i --rm --net="host" centos:centos6 /bin/bash  
  
bash-4.1# rpm -ivh postgresql93-libs-9.3.5-1PGDG.rhel6.x86_64.rpm  
bash-4.1# rpm -ivh postgresql93-9.3.5-1PGDG.rhel6.x86_64.rpm  
bash-4.1# rpm -ivh postgresql93-server-9.3.5-1PGDG.rhel6.x86_64.rpm  
bash-4.1# yum install -y postgresql93-contrib-9.3.5-1PGDG.rhel6.x86_64.rpm  
bash-4.1# yum install -y postgresql93-plperl-9.3.5-1PGDG.rhel6.x86_64.rpm postgresql93-plpython-9.3.5-1PGDG.rhel6.x86_64.rpm postgresql93-pltcl-9.3.5-1PGDG.rhel6.x86_64.rpm  
bash-4.1# yum install -y postgresql93-devel-9.3.5-1PGDG.rhel6.x86_64.rpm pgfincore93-1.1.1-1.rhel6.x86_64.rpm  

安装好后, 使用rpm -ql检查一下安装到哪里去了,因为我们需要编写环境变量.

bash-4.1# rpm -ql postgresql93-server  
/etc/pam.d/postgresql93  
/etc/rc.d/init.d/postgresql-9.3  
/etc/sysconfig/pgsql  
/usr/pgsql-9.3/bin/initdb  
/usr/pgsql-9.3/bin/pg_controldata  
/usr/pgsql-9.3/bin/pg_ctl  
/usr/pgsql-9.3/bin/pg_resetxlog  
/usr/pgsql-9.3/bin/postgres  
/usr/pgsql-9.3/bin/postmaster  
...  

大部分文件在/usr/pgsql-9.3, 作为$PGHOME

到postgres用户下, 修改.bash_profile

bash-4.1# su - postgres  
  
-bash-4.1$ vi .bash_profile   
  
[ -f /etc/profile ] && source /etc/profile  
PGDATA=/var/lib/pgsql/9.3/data  
export PGDATA  
  
export PGHOME=/usr/pgsql-9.3  
export PATH=$PGHOME/bin:$PATH  
export MANPATH=$PGHOME/share/man:$MANPATH  
alias rm='rm -i'  
alias ll='ls -la'  

查看一下postgresql rpm包的编译参数 :

-bash-4.1$ pg_config  
  
BINDIR = /usr/pgsql-9.3/bin  
DOCDIR = /usr/share/doc/pgsql  
HTMLDIR = /usr/share/doc/pgsql  
INCLUDEDIR = /usr/pgsql-9.3/include  
PKGINCLUDEDIR = /usr/pgsql-9.3/include  
INCLUDEDIR-SERVER = /usr/pgsql-9.3/include/server  
LIBDIR = /usr/pgsql-9.3/lib  
PKGLIBDIR = /usr/pgsql-9.3/lib  
LOCALEDIR = /usr/pgsql-9.3/share/locale  
MANDIR = /usr/pgsql-9.3/share/man  
SHAREDIR = /usr/pgsql-9.3/share  
SYSCONFDIR = /etc/sysconfig/pgsql  
PGXS = /usr/pgsql-9.3/lib/pgxs/src/makefiles/pgxs.mk  
CONFIGURE = '--disable-rpath' '--prefix=/usr/pgsql-9.3' '--includedir=/usr/pgsql-9.3/include' '--mandir=/usr/pgsql-9.3/share/man' '--datadir=/usr/pgsql-9.3/share' '--with-perl' '--with-python' '--with-tcl' '--with-tclconfig=/usr/lib64' '--with-openssl' '--with-pam' '--with-krb5' '--with-gssapi' '--with-includes=/usr/include' '--with-libraries=/usr/lib64' '--enable-nls' '--with-ossp-uuid' '--with-libxml' '--with-libxslt' '--with-ldap' '--with-system-tzdata=/usr/share/zoneinfo' '--sysconfdir=/etc/sysconfig/pgsql' '--docdir=/usr/share/doc' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/include/et' 'CPPFLAGS= -I/usr/include/et'  
CC = gcc  
CPPFLAGS = -I/usr/include/et -D_GNU_SOURCE -I/usr/include/libxml2 -I/usr/include  
CFLAGS = -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -I/usr/include/et -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv  
CFLAGS_SL = -fpic  
LDFLAGS = -L../../../src/common -L/usr/lib64 -Wl,--as-needed  
LDFLAGS_EX =   
LDFLAGS_SL =   
LIBS = -lpgport -lpgcommon -lxslt -lxml2 -lpam -lssl -lcrypto -lgssapi_krb5 -lz -lreadline -lcrypt -ldl -lm   
VERSION = PostgreSQL 9.3.5  

初始化一个数据库集群

bash-4.1# su - postgres  
-bash-4.1$ initdb -D ./pg_root -E UTF8 --locale=C -U postgres -W  

打包 docker 镜像 :

[root@150 ~]# docker commit -a "digoal" -m "postgres9.3.5 install by rpm on Centos6 x64" -p 57da29cec89e 172.16.3.221:5000/postgres:9.3.5_rpm  
59d6cd3a518139fb28d2f6cef228cafeb1d3582a29851b19d4f1e03b0175e45d  
  
[root@150 ~]# docker push 172.16.3.221:5000/postgres:9.3.5_rpm  

[参考]
1. http://yum.postgresql.org/

2. http://yum.postgresql.org/files/PostgreSQL-RPM-Installation-PGDG.pdf

3. http://www.postgresql.org/download/linux/redhat/

4. http://www.postgresql.org/download/linux/redhat/#yum

5. http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/

6. https://wiki.postgresql.org/wiki/YUM_Installation

PG 12 yum 安装 on CentOS 7.x x64补充

vi /etc/sysctl.conf

# add by digoal.zhou
fs.aio-max-nr = 1048576
fs.file-max = 76724600
kernel.core_pattern= /data01/corefiles/core_%e_%u_%t_%s.%p         
# /data01/corefiles事先建好,权限777,如果是软链接,对应的目录修改为777
kernel.sem = 4096 2147483647 2147483646 512000    
# 信号量, ipcs -l 或 -u 查看,每16个进程一组,每组信号量需要17个信号量。
kernel.shmall = 107374182      
# 所有共享内存段相加大小限制(建议内存的80%)
kernel.shmmax = 274877906944   
# 最大单个共享内存段大小(建议为内存一半), >9.2的版本已大幅降低共享内存的使用
kernel.shmmni = 819200         
# 一共能生成多少共享内存段,每个PG数据库集群至少2个共享内存段
net.core.netdev_max_backlog = 10000
net.core.rmem_default = 262144       
# The default setting of the socket receive buffer in bytes.
net.core.rmem_max = 4194304          
# The maximum receive socket buffer size in bytes
net.core.wmem_default = 262144       
# The default setting (in bytes) of the socket send buffer.
net.core.wmem_max = 4194304          
# The maximum send socket buffer size in bytes.
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_mem = 8388608 12582912 16777216
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1    
# 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击
net.ipv4.tcp_timestamps = 1    
# 减少time_wait
net.ipv4.tcp_tw_recycle = 0    
# 如果=1则开启TCP连接中TIME-WAIT套接字的快速回收,但是NAT环境可能导致连接失败,建议服务端关闭它
net.ipv4.tcp_tw_reuse = 1      
# 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接
net.ipv4.tcp_max_tw_buckets = 262144
net.ipv4.tcp_rmem = 8192 87380 16777216
net.ipv4.tcp_wmem = 8192 65536 16777216
net.nf_conntrack_max = 1200000
net.netfilter.nf_conntrack_max = 1200000
vm.dirty_background_bytes = 409600000       
#  系统脏页到达这个值,系统后台刷脏页调度进程 pdflush(或其他) 自动将(dirty_expire_centisecs/100)秒前的脏页刷到磁盘
vm.dirty_expire_centisecs = 3000             
#  比这个值老的脏页,将被刷到磁盘。3000表示30秒。
vm.dirty_ratio = 95                          
#  如果系统进程刷脏页太慢,使得系统脏页超过内存 95 % 时,则用户进程如果有写磁盘的操作(如fsync, fdatasync等调用),则需要主动把系统脏页刷出。
#  有效防止用户进程刷脏页,在单机多实例,并且使用CGROUP限制单实例IOPS的情况下非常有效。  
vm.dirty_writeback_centisecs = 100            
#  pdflush(或其他)后台刷脏页进程的唤醒间隔, 100表示1秒。
vm.mmap_min_addr = 65536
vm.overcommit_memory = 0     
#  在分配内存时,允许少量over malloc, 如果设置为 1, 则认为总是有足够的内存,内存较少的测试环境可以使用 1 .  
vm.overcommit_ratio = 90     
#  当overcommit_memory = 2 时,用于参与计算允许指派的内存大小。
vm.swappiness = 0            
#  关闭交换分区
vm.zone_reclaim_mode = 0     
# 禁用 numa, 或者在vmlinux中禁止. 
net.ipv4.ip_local_port_range = 40000 65535    
# 本地自动分配的TCP, UDP端口号范围
fs.nr_open=20480000
# 单个进程允许打开的文件句柄上限
net.ipv4.tcp_max_syn_backlog = 16384
net.core.somaxconn = 16384

# 以下参数请注意
# vm.extra_free_kbytes = 4096000
# vm.min_free_kbytes = 2097152 # vm.min_free_kbytes 建议每32G内存分配1G vm.min_free_kbytes
# 如果是小内存机器,以上两个值不建议设置
# vm.nr_hugepages = 66536    
#  建议shared buffer设置超过64GB时 使用大页,页大小 /proc/meminfo Hugepagesize
# vm.lowmem_reserve_ratio = 1 1 1
# 对于内存大于64G时,建议设置,否则建议默认值 256 256 32
vi /etc/security/limits.conf

* soft    nofile  1024000
* hard    nofile  1024000
* soft    nproc   unlimited
* hard    nproc   unlimited
* soft    core    unlimited
* hard    core    unlimited
* soft    memlock unlimited
* hard    memlock unlimited
干掉 /etc/security/limits.d/xxx
yum -y install coreutils glib2 lrzsz mpstat dstat sysstat e4fsprogs xfsprogs ntp readline-devel zlib-devel openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc make smartmontools flex bison perl-devel perl-ExtUtils* openldap-devel jadetex  openjade bzip2

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum install centos-release-scl

yum install -y postgresql12*
su - postgres

vi .bash_profile

# 追加           
export PS1="$USER@`/bin/hostname -s`-> "              
export LANG=en_US.utf8            
export PGHOME=/usr/pgsql-12            
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"`            
export PATH=$PGHOME/bin:$PATH:.            
export MANPATH=$PGHOME/share/man:$MANPATH             
alias rm='rm -i'            
alias ll='ls -lh'            
unalias vi 

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

digoal's wechat