文章结构如下:

一. 环境配置

1. 配置防火墙

查看IPTABLES 当前状态与关闭过程

chkconfig --list|grep iptables

关闭iptables

service iptables stop

chkconfig iptables off

关闭selinux

setenforce 0

vi /etc/sysconfig/selinux

将SELINUX值改为disabled

2.禁用Linux透明大页

1.查看透明大页是否启用

RHEL  6:

# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

[oracle@rhel 6 ~]$ cat /sys/kernel/mm/redhat_transparent_hugepage/enabled

[always] madvise never

RHEL  7:

# cat /sys/kernel/mm/transparent_hugepage/enabled

[root@rhel 7 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled

[always] madvise never

2.禁用透明大页

RHEL 6:

(1).编辑 /etc/grub.conf 文件,在kernel 那一行后面追加 transparent_hugepage=never

例如:

default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux 6 (2.6.32-642.el6.x86_64)

root (hd0,0)

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/rootvg-lvroot rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_LVM_LV=rootvg/lvswap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=rootvg/lvroot rd_NO_DM rhgb quiet transparent_hugepage=never

initrd /initramfs-2.6.32-642.el6.x86_64.img

(2).重启系统生效。

RHEL 7:

(1).编辑/etc/sysconfig/grub 文件,在 GRUB_CMDLINE_LINUX 那一行后面追加 transparent_hugepage=never

例如:

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"

GRUB_DEFAULT=saved

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rootvg/root rd.lvm.lv=rootvg/swap rhgb quiet transparent_hugepage=never"

GRUB_DISABLE_RECOVERY="true"

(2).再使用 grub2-mkconfig 生成grub.cfg配置文件。

# grub2-mkconfig -o /boot/grub2/grub.cfg

(3).重启系统使配置生效。

认为最简单方便的:查询大页配置

grep Huge /proc/meminfo

AnonHugePages:         0 kB  与透明大页有关,透明大页关闭,则显示0

HugePages_Total:   65560      大页总数量

HugePages_Free:    65560

HugePages_Rsvd:        0

HugePages_Surp:        0

Hugepagesize:       2048 kB

3.选择deadline IO调度

修改I/O调度器;需要在 /etc/grub.conf 加入elevator=deadline

kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=/dev/mapper/rootvg-lvroot rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_LVM_LV=rootvg/lvswap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=rootvg/lvroot rd_NO_DM rhgb quiet transparent_hugepage=never elevator=deadline rhgb quiet

重启后查看:

cat /sys/block/sda/queue/scheduler

二. 编译安装PG

1.安装依赖包

利用yum安装所需的源码包:

rm -f /etc/yum.repos.d/*

mount /dev/cdrom /mnt

vi /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-debuginfo]

name=rhel-debuginfo

baseurl=file:///mnt/

enabled=1

gpgcheck=0

yum clean all

yum -y install readline readline-develbison bison-devel flex flex-develzlib-devel gcc* c* lrzsz wget readline-devel uuid uuid-devel zlib* bison zlib-static readline-devel   --skip-broken

或者

yum -y install readline readline-develbison bison-devel flex flex-develzlib-devel gcc* c* lrzsz wget readline-devel uuid uuid-devel zlib* bison zlib-static readline-devel lib* rtld* e2fsprogs-deve*  --skip-broken

(yum一定要弄好,不行的话,建议网络yum)

2.下载源码

cd /usr/local/src

wget https://ftp.postgresql.org/pub/source/v9.6.3/postgresql-9.6.3.tar.gz

编译安装

mkdir -p /usr/local/pgsql

tar -zxvf postgresql-9.6.3.tar.gz

cd postgresql-9.6.3

./configure --with-ossp-uuid --prefix=/usr/local/pgsql

或者是:

./configure --prefix=/usr/pgsql-9.6 --with-perl --with-tcl --with-python --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --with-uuid=ossp

gmake world

gmake install-world

3.新建普通用户

groupadd postgres

useradd -g postgres postgres

创建数据库目录并授权

mkdir -p /pgsql/pg_data

mkdir -p /pgsql/pg_archive

mkdir -p /pgsql/pg_log

chown -R postgres:postgres /pgsql/pg_*

4. 配置环境变量

/home/postgres/.bash_profile

export PGHOME=/usr/local/pgsql

export PGDATA=/pgsql/pg_data

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

export PGUSER=postgres

export PGDATABASE=postgres

alias rm='rm -i'

alias ll='ls -lh'

export LANG="zh_CN.UTF8"

5.初始化数据库

su - postgres

source .bash_profile

initdb -D $PGDATA -E UTF-8 --locale=C -U postgres -W

6.postgresql.conf参数就设置

- 修改pg数据库配置文件,修改完成后如下(我的是虚拟机 8g内存):

cat /pgsql/pg_data/postgresql.conf | egrep -v '^#|^$' | grep '^[a-zA-Z]'

listen_addresses = '192.168.10.11'# what IP address(es) to listen on;  --监听IP

port = 5432# (change requires restart)

max_connections = 200# (change requires restart)

shared_buffers = 2GB# min 128kB  --建议为内存的1/4--1/2

temp_buffers = 256MB# min 800kB  --用于数据库会话访问临时表数据,可以在单独的session中对该参数进行设置,尤其是需要访问比较大的临时表时,将会有显著的性能提升。

work_mem = 12MB# min 64kB  --可以称之为工作内存或者操作内存。其负责内部的sort和hash操作,max_connections*work_mem+shared_buffers+temp_buffers+maintenance_work_mem+操作系统所需内存不能够超过整个的RAM大小,这是非常重要的

maintenance_work_mem = 512MB# min 1MB 要针对VACUUM,CREATE INDEX,REINDEX等操作。在对整个数据库进行VACUUM或者较大的index进行重建时,适当的调整该参数非常必要。

shared_preload_libraries = 'pg_stat_statements'# (change requires restart)

pg_stat_statements.max = 100

pg_stat_statements.track = all

wal_level = hot_standby # minimal, archive, or hot_standby

checkpoint_segments = 90 # in logfile segments, min 1, 16MB each  表示自动触发检查点时,当前最大的WAL日志文件段的数量

checkpoint_timeout = 5min # range 30s-1h 表示自动触发检查点的时间间隔。增大这个参数同样会延长系统崩溃后恢复的时间。

checkpoint_completion_target = 0.8# checkpoint target duration, 0.0 -1.0  该参数表示checkpoint的完成目标,系统默认值是0.5,也就是说每个checkpoint需要在checkpoints间隔时间的50%内完成

checkpoint_warning = 0# 0 disables 系统默认值是30秒,如果checkpoints的实际发生间隔小于该参数,将会在server log中写入写入一条相关信息。可以通过设置为0禁用信息写入。

archive_mode = on# allows archiving to be done

archive_command = 'test ! -f /pgsql/pg_archive/%f && cp %p /pgsql/pg\_archive/%f'# command to use to archive a logfile segment

archive_timeout = 0# force a logfile segment switch after this 这个参数只能在postgresql.conf文件中被设置。默认值是0。一般情况下,数据库只有在一个事务日志文件写满以后,才会切换到下一个事务日志文件,设定这个参数可以让数据库在一个事务日志文件尚未写满的情况下切换到下一个事务日志文件。

max_wal_senders = 6# max number of walsender processes  也就是说,max_wal_senders是为了让一个master端,带多个slave端用的,基本上每一对master--slave用一个链接。但是,还需要注意,pg_basebackup也会用到一个。

wal_keep_segments = 512 # in logfile segments, 16MB each; 0 disables WAL日志设置

synchronous_standby_names = ''# standby servers that provide sync rep

hot_standby = on# "on" allows queries during recovery

max_standby_streaming_delay = 30s# max delay before canceling queries

wal_receiver_status_interval = 10s# send replies at least this often 声明 pg_xlog 目录下所能保留的旧日志文件段的最小数目,备服务器需要获 取它们进行流复制

effective_cache_size = 5GB 优化器假设一个查询可以使用的最大内存(包括pg使用的和操作系统缓存),和shared_buffer等内存无关,只是给优化器生成计划使用的一个假设值。

log_destination = 'csvlog'# Valid values are combinations of stderr – 保存到.csv文件

logging_collector = on# Enable capturing of stderr and csvlog 是否将日志重定向至文件中,默认是off(该配置修改后,需要重启DB服务)

log_directory = '/pgsql/pg_log'# directory where log files are written,

log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'# log file name pattern,

log_rotation_age = 7d# Automatic rotation of logfiles will  单个日志文件的生存期,默认1天,在日志文件大小没有达到

log_rotation_size = 500MB# Automatic rotation of logfiles will 单个日志文件的大小,如果时间没有超过log_rotation_age

log_statement = 'mod'# none, ddl, mod, all 控制记录哪些SQL语句。将此配置设置为all可跟踪整个数据库执行的SQL语句。

log_timezone = 'America/Manaus' #日志时区 'Asia/Shanghai' 最好和服务器设置同一个时区,方便问题定位

track_activity_query_size = 3096 # (change requires restart)指定跟踪每个活动会话当前执行命令所保留的字节数,它们被用于pg_stat_activity.query域。默认值是1024。这个参数只能在服务器启动时被设置。

datestyle = 'iso, mdy'

timezone = 'America/Manaus'

lc_messages = 'C'# locale for system error message

lc_monetary = 'C'# locale for monetary formatting

lc_numeric = 'C'# locale for number formatting

lc_time = 'C'# locale for time formatting

default_text_search_config = 'pg_catalog.english'

7.pg_hba.conf 参数配置

TYPE 参数设置

TYPE 表示主机类型,值可能为:

若为 `local` 表示是unix-domain的socket连接,

若为 `host` 是TCP/IP socket

若为 `hostssl` 是SSL加密的TCP/IP socket 只能使用SSL TCP/IP连接,

DATABASE 参数设置

DATABASE 表示数据库名称,值可能为:

`all` ,`sameuser`,`samerole`,`replication`,`数据库名称` ,或者多个

数据库名称用 `逗号`,注意ALL不匹配 replication

USER 参数设置

USER 表示用户名称,值可以为:

`all`,`一个用户名`,`一组用户名` ,多个用户时,可以用 `,`逗号隔开,

或者在用户名称前缀 `+` ;在USER和DATABASE字段,也可以写一个单独的

文件名称用 `@` 前缀,该文件包含数据库名称或用户名称

ADDRESS 参数设置

该参数可以为 `主机名称` 或者`IP/32(IPV4) `或 `IP/128(IPV6)`,主机

名称以 `.`开头,`samehost`或`samenet` 匹配任意Ip地址

METHOD 参数设置

该值可以为"trust", "reject", "md5", "password", "scram-sha-256",

"gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"

注意 若为`password`则发送的为明文密码

ident是Linux下PostgreSQL默认的local认证方式,凡是能正确登录服务器的操作系统用户(注:不是数据库用户)就能使用本用户映射的数据库用户不需密码登录数据库。用户映射文件为pg_ident.conf,这个文件记录着与操作系统用户匹配的数据库用户,如果某操作系统用户在本文件中没有映射用户,则默认的映射数据库用户与操作系统用户同名。比如,服务器上有名为user1的操作系统用户,同时数据库上也有同名的数据库用户,user1登录操作系统后可以直接输入psql,以user1数据库用户身份登录数据库且不需密码。很多初学者都会遇到psql -U username登录数据库却出现“username ident 认证失败”的错误,明明数据库用户已经createuser。原因就在于此,使用了ident认证方式,却没有同名的操作系统用户或没有相应的映射用户。解决方案:1、在pg_ident.conf中添加映射用户;2、改变认证方式。

md5是常用的密码认证方式,如果你不使用ident,最好使用md5。密码是以md5形式传送给数据库,较安全,且不需建立同名的操作系统用户。

password是以明文密码传送给数据库,建议不要在生产环境中使用。

trust是只要知道数据库用户名就不需要密码或ident就能登录,建议不要在生产环境中使用。

reject是拒绝认证。

注意

修改该配置文件中的参数,必须重启 `postgreSql`服务,若要允许其它IP地址访问

该主机数据库,则必须修改 `postgresql.conf` 中的参数 `listen_addresses` 为 `*`

重启:pg_ctl reload 或者 执行 SELECT pg_reload_conf()

配置以下参数

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    all            all             10.10.56.17/32             md5

"pg_hba.conf" 99L, 4720C

参数说明

host   参数表示安装PostgreSQL的主机

all    第一个all 表示该主机上的所有数据库实例

all    第二个all 表示所有用户

10.10.56.17/32  表示需要连接到主机的IP地址,32表示IPV4

md5    表示验证方式

即上述表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库

也可以指定具体的数据库名称和 用户

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    test            pgtest           10.10.56.17/32             md5

即表示允许地址为 10.10.56.17 的用户 pgtest通过 MD5方式 加密的密码方式连接主机上的 test 数据库

也可以指定整个网段

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    test            pgtest           0.0.0.0/0               md5

即表示允许 任意iP 通过用户名为 pgtest 和md5的 密码 验证方式连接主机上 test 的数据库

不进行密码验证

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    test            pgtest           0.0.0.0/0               trust

表示任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库

8.开启数据库

pg_ctl start -D $PGDATA -l /home/pg_log/pgsql.log

pg_ctl -D /pgsql/pg_data/ reload

9. 其他参数修改

由于安装需要进行热备份,且归档模式开启

开启WAL归档进行热备

创建归档目录

目录已经创建并且权限已经修改:/pgsql/pg_archive/

修改WAL_LEVEL参数

Wal_level 参数可选值有 minimal,replica,logical 级别依次增高,在WAL中包含的信息越多,minimal 这一级别的无法开启WAL归档。所以WAL归档至少设置为replica。

alter system set wal_level='replica';

select * from pg_settings where name='wal_level';

需要重启生效。

修改ARCHIVE_MODE参数

select * from pg_settings where name='archive_mode';

该参数值为on,off,always,默认为off,开启归档需要修改为on

重启后:

修改ARCHIVE_COMMAND参数

Archive_mode值可以是一条shell命令或者一个复杂的脚本,默认值为空。修改archive_command不需要重启,只需要reload,如果命令设置不成功,他会周期性的重试,再次期间已有的WAL文件将不会被重复。

pg_basebackup的命令行参数:

-D指定吧备份写道那个目录。

-F指定输出格式,其中,format为p(plain) 或者t(tar)。

-x或者--xlog:备份时会把备份中产生的xlog文件也自动备份出来,这样在恢复数据库时,应用这些xlogs文件把数据库推到一个一致的时间点,然后正真打开这个备份的数据库。这个与”-X fetch” 完全一样的。使用时需要设置”wal_keep_segments” 参数,以保证备份的过程中,WAL日志不会被覆盖。

-P 允许在备份过程中实时打印备份进度。

-v 详细模式,使用-P后,还会打印出正在备份的具体文件的信息。

有关pg_basebackup创建基础备份

修改:pg_hba.conf

postgresql.conf文件中,修改max_wal_senders参数:

max_wal_senders = 2

重启生效。

11以前这个参数要初始化的时候,才能设置wal大小。

wal_keep_segments 参数,wal日志,默认16M,修改完后要重启生效。

wal_keep_segments=128  --即设置WAL生成的XLOG日志为128M

WAL日志维护

1. 参数max_wal_size/min_wal_size

9.5以前: (2 + checkpoint_completion_target) * checkpoint_segments + 1

9.5:PostgreSQL 9.5 将废弃checkpoint_segments 参数, 并引入max_wal_size 和 min_wal_size 参数,

通过max_wal_size和checkpoint_completion_target 参数来控制产生多少个XLOG后触发检查点,

通过min_wal_size和max_wal_size参数来控制哪些XLOG可以循环使用。

2. 参数wal_keep_segments

在流复制的环境中。使用流复制建好备库,如果备库由于某些原因接收日志较慢。导致备库还未接收到。就被覆盖了。导致主备无法同步。这个需要重建备库。

避免这种情况提供了该参数。每个日志文件大小16M。如果参数设置64. 占用大概64×16=1GB的空间。根据实际环境设置。

3. pg_resetxlog

在前面参数设置合理的话。是用不到pg_resetxlog命令。

centos 6.x 编译安装 pgsql 9.6的更多相关文章

  1. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...

  2. centos 7.0 编译安装php 7.0.3

    php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...

  3. CentOS 6.6编译安装Nginx1.6.2+MySQL5.6.21+PHP5.6.3

    http://www.osyunwei.com/archives/8867.html 一.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables #编辑防火墙配置 ...

  4. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13

    CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.132013-10-24 15:31:12标签:服务器 防火墙 file 配置文件 written 一.配置好I ...

  5. CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13+博客系统WordPress3.3.2

    说明: 操作系统:CentOS 6.2 32位 系统安装教程:CentOS 6.2安装(超级详细图解教程): http://www.osyunwei.com/archives/1537.html 准备 ...

  6. CentOS 6.4编译安装淘宝web服务器Tengine

    Tengine 是由淘宝核心系统部基于Nginx开发的Web服务器,它在Nginx的基础上,针对大访问量网站的需求,添加了很多功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,淘宝商城 ...

  7. CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27

    CentOS 6.8编译安装httpd2.2.31+MySQL5.6.31+PHP5.3.27   说明:   操作系统:CentOS 6.8 32位 准备篇: 一.系统约定    软件源代码包存放位 ...

  8. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  9. Centos 6.8编译安装LNMP环境

    Centos 6.8编译安装LNMP环境 参考资料: http://www.jb51.net/article/107429.htm https://phperzh.com/articles/1360 ...

随机推荐

  1. [LOJ3109][TJOI2019]甲苯先生的线段树:DP

    分析 首先,请允许我 orz HN队长zsy.链接 我们发现树上的链有两种类,一类是直上直下的,一类不是直上直下的(废话).并且,如果我们确定了左侧和右侧的链的长度和整条链上所有节点的编号之和,那么这 ...

  2. Yarn 内存分配管理机制及相关参数配置

    上一篇hive on tez 任务报错中提到了containter内存不足,现对yarn 内存分配管理进行介绍 一.相关配置情况 关于Yarn内存分配与管理,主要涉及到了ResourceManage. ...

  3. [JZOJ5398]:Adore(状压DP+记忆化搜索)

    题目描述 小$w$偶然间见到了一个$DAG$. 这个$DAG$有$m$层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有$k$个节点. 现在小$w$每次可以取反第$i(1<i< ...

  4. spark MLlib 概念 5: 余弦相似度(Cosine similarity)

    概述: 余弦相似度 是对两个向量相似度的描述,表现为两个向量的夹角的余弦值.当方向相同时(调度为0),余弦值为1,标识强相关:当相互垂直时(在线性代数里,两个维度垂直意味着他们相互独立),余弦值为0, ...

  5. CentOS 6.4 搭建 ntop 网络流量监控分析平台

    [前言] Ntop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观.详细.Ntop甚至可以列出每个节点计算机的网络带宽利用率. 功能: 自动从网络中识别有用的信息: ...

  6. Win7、win8、win10下实现精准截获Explorer拷贝行为

    介绍了windows下对Explorer的拷贝动作的精确截获,这个在企业数据安全dlp产品系列中减少审计的噪音很有效,方便运营人员做针对性的审计. 在企业数据安全中我通常需要监测用户的拷贝行为,特别像 ...

  7. css中相对定位和绝对定位

    相对定位: #box_relative { position: relative; left: 30px; top: 20px; } 绝对定位: #box_relative { position: a ...

  8. linux(centOS7)的基本操作(七) 其它

    本地与linux服务器之间的文件传输 本地下载的文件,如果想在远端的linux服务器上执行,需要文件传输.如果本地使用windows系统,则借助XFTP软件的图形界面即可.如果本地使用macOS系统, ...

  9. nginx不记录指定文件类型日志

    1.指定记录文件日志记录的内容. vim /usr/local/nginx/conf/nginx.conf如下部分: log_format dd '$remote_addr $http_x_forwa ...

  10. VirtualBox-5.2.8-121009-Win,虚拟机指令ifconfig不显示ip解决方法