PostgreSQL 9.6 for Centos7.4 最佳实践安装

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: postgresql9.6 的最佳安装

概述

PostgreSQL9.6 是PG一个非常经典的稳定版本,现在还有许多用户在使用这个版本。本篇就教大家如何最佳实践安装PG9.6数据库

PG9.6的主要新增功能

PostgreSQL 9.6的主要增强功能包括:

  • 并行执行顺序扫描,连接和聚合
  • 在真空冻结操作期间避免不必要地扫描页面
  • 同步复制现在允许多个备用服务器以提高可靠性
  • 全文搜索现在可以搜索短语(多个相邻的单词)
  • postgres_fdw现在支持远程连接,排序,UPDATE s和DELETE小号
  • 实质性的改进,特别是在多CPU服务器的可扩展性方面

系统的最佳实践

关闭防火墙

  1. 查看防火墙的状态

    firewall-cmd --state
    [root@localhost sas_data]# firewall-cmd --state
    not running

  2. 关闭防火墙
    临时关闭 :
systemctl stop firewalld

禁止开机启动:

systemctl disable firewalld

关闭selinux

  1. 查看selinux状态:
# getenforce  

Disabled 关闭,其他的都表示开启状态

# sestatus -v
SELinux status: enabled/disabled
  1. 关闭selinux
    1.假设selinux是正在运行的,我们可以使用setenforce 命令设置临时关闭,不用重启生效。
# setenforce 0

2.改变配置文件,需要重启生效

# vi /etc/selinux/config

将SELINUX=enforcing改为SELINUX=disabled,保存重启即可

文件系统预读设置

在Linux文件系统中,当执行向前的顺序的读操作时,Linux内核里的预读会在应用读取数据请求之前,预先读取磁盘上的数据对于当下较快的驱动,预读操作是获取高性能读取的关键所在。pg数据库安装之前,要根据业务的类型与具体情况设置该值

用户可以通过blockdev 命令查看当前预读取值得大小,如

[root@GuangFa_PG9 ~]# blockdev  --getra /dev/sda
8192

该值的单位为512字节,对于现在的硬件,通常大小为 4096~16384
可通过如下命令修改

[root@GuangFa_PG9 ~]# blockdev  --setra 4096  /dev/sda
[root@GuangFa_PG9 ~]# 
[root@GuangFa_PG9 ~]# blockdev  --getra /dev/sda
4096

文件访问时间

用户每次访问Linux 上的文件时,文件都会更新一个叫做=作上次访问时间(atime)的属性。读取数据时,这种开销成了稳定的写入流,在数据库中,这可不是一个受欢迎的开销。在/etc/fstab中,用户可以将 noatime 添加到卷挂载选项中来禁止这种行为。例如

/dev/sda  ext3   noatime,errors=remount-ro 0 1

透明大页的关闭

可以看到,默认时开启的,我们需要将其关闭

[root@GuangFa_PG9 usr]# cat /sys/kernel/mm/*transparent_hugepage/enabled
[always] madvise never

安装PG9.6

下载源码包

进入PG官网,进入源码下载界面,选择Pg9.6进行下载(一般的,大版本下的小版本都是进行一些bug修复,维护等,所以一般的都建议使用最新的,比如9.6.x中最新的为9.6.11)

解压源代码

将源码包下载到系统之上

tar -xvzf postgresql-9.6.0.tar.gz
[root@GuangFa_PG9 opt]# cd postgresql-9.6.0
[root@GuangFa_PG9 postgresql-9.6.0]# ls
aclocal.m4  config  configure  configure.in  contrib  COPYRIGHT  doc  GNUmakefile.in  HISTORY  INSTALL  Makefile  README  src

查看编译选项

编译安装时需要查看编译选项,这里挑几个重要的参数

[root@GuangFa_PG9 postgresql-9.6.0]# ./configure --help
  • --prefix=PREFIX: 指定安装目录,默认安装位置为/usr/local/pgsql
  • --includedir=DIR: 指定一个C和C++的头文件目录
  • --with-pgport=PORTNUM:指定初始化数据目录的默认端口
  • --with-blocksize=BLOCKSIZE:指定数据文件的块大小,默认为8KB
  • --with-wal-blocksize=BLOCKSIZE:指定wal文件得块大小默认为8kB
  • --with-wal-segsize=SEGSIZE:指定wal文件得大小,默认为16MB

编译安装

直接进行编译安装,若有依赖用yum解决依赖即可(PG的依赖需求非常少,所以是非常好编的)

./configure --prefix=/usr/pgsql9.6
make
make install

添加用户

[root@GuangFa_PG9 ~]# useradd -U postgres

配置用户环境变量

export PATH=/usr/pgsql/bin:$PATH
export LD_LIBRARY_PATH=/usr/pgsql/lib:$LD_LIBRARY_PATH
export PGDATA=/pgdata/
export PGHOST=/tmp

配置好目录

将数据库数据目录和安装目录分别准备好

[root@GuangFa_PG9 ~]# mkdir /pgdata
[root@GuangFa_PG9 ~]# cd /usr/
[root@GuangFa_PG9 usr]# ln -s pgsql9.6 pgsql
[root@GuangFa_PG9 usr]# chown -R postgres:postgres /pgdata
[root@GuangFa_PG9 usr]# chown -R postgres:postgres pgsql
[root@GuangFa_PG9 usr]# chown -R postgres:postgres pgsql9.6
[root@GuangFa_PG9 usr]# chmod 700 /pgdata/

初始化

直接在postgres 运行initdb,即可初始化数据库

[postgres@GuangFa_PG9 ~]$ initdb 
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /pgdata ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.

Success. You can now start the database server using:

    pg_ctl -D /pgdata/ -l logfile start

数据库参数设置

在初始化完成之后,可以根据给定的启动语句直接将数据库启动,但是由于此时的数据库设置完全为默认,可以修改一下配置在启动

日志策略

在初始化完成之后,Pg默认时不会打开日志的,所以报错或是提示什么的就直接输出到屏幕上,这对运维当然是不方便,所以可以配置一下日志策略

  • 将日志收集打开
    logging_collector = on
    log_directory = 'pg_log'

这两个参数要设置好,这个参数修改是需要重启的。

这边是一般情况下的日志策略,我选了三个比较经典的贴了出来。一般情况下这三个策略是可以满足一般的日志要求了。如下

  • 每天生成一个新的文件
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    log_truncate_on_rotation = off
    log_rotation_age = 1d
    log_rotation_size = 0
  • 每当日志写满一定的大小,(如10M),则切换一个日志
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    log_truncate_on_rotation = off
    log_rotation_age = 0
    log_rotation_size = 10M
  • 只保留七天的日志,进行循环覆盖
    log_filename = 'postgresql-%a.log'
    log_truncate_on_rotation = on
    log_rotation_age = 1d
    log_rotation_size = 0

监听IP

一般的都会改为*,允许远程连接

#listen_addresses = 'localhost'         # what IP address(es) to listen on;
listen_addresses = '*'

在pg_hba.conf 文件中,将自己需要访问的IP段添加上去,以保证远程访问服务器正常

内存参数的设置

安装完成之后,可以修改以下两个主要的内存参数

  • shared_buffer : 共享内存的大小,主要用于共享数据块
  • work_mem : 单个SQL执行的时候,排序,hash jion所使用的的内存。SQL运行完之后,内存就释放了

shared_buffer 默认值为32MB,work_mem为1MB,如果你的机器上有足够的内存,可以把这个值设置的大一点,这样数据库就能缓存更多的数据块。当读取数据时,就可以从共享内存中读取,而不需要再去从文件上读取

work_mem 设置的大一点会让排序操作变得快一些

tips

在pg的配置文件postgressql.conf中一个个的修改这些配置文件是比较麻烦的,其实可以直接这些参数设置写到安装目录下的 postgresql.auto.conf 文件中,此文件在初始化成功后自动生成,且是空的。 在数据库启动时,PG会先读取此配置文件下的相关配置,优先级要比postgresql.conf 要高,适合刚开始的批量修改

启动数据库

[postgres@GuangFa_PG9 ~]$ pg_ctl start
server starting
[postgres@GuangFa_PG9 ~]$ LOG:  redirecting log output to logging collector process
HINT:  Future log output will appear in directory "pg_log".

[postgres@GuangFa_PG9 ~]$ 
[postgres@GuangFa_PG9 ~]$ 
[postgres@GuangFa_PG9 ~]$ 
[postgres@GuangFa_PG9 ~]$ psql
psql (9.6.0)
Type "help" for help.

postgres=# 

至此,最佳实践安装PostgreSQL9.6 结束

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
Linux 网络安全 数据安全/隐私保护
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
144 0
|
2月前
|
关系型数据库 MySQL Linux
centos7.0环境下安装MySql_8.0.12
centos7.0环境下安装MySql_8.0.12
|
1月前
|
存储 JavaScript Linux
Linux环境下安装nmp(Centos环境)保姆级教学 一步到位
Linux环境下安装nmp(Centos环境)保姆级教学 一步到位
|
3天前
|
关系型数据库 MySQL Linux
centos7安装mysql-带网盘安装包
centos7安装mysql-带网盘安装包
33 2
|
10天前
|
关系型数据库 PostgreSQL
postgresql安装
postgresql安装
29 8
|
10天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
19 0
|
10天前
|
分布式计算 Hadoop Java
centos 部署Hadoop-3.0-高性能集群(一)安装
centos 部署Hadoop-3.0-高性能集群(一)安装
12 0
|
10天前
|
关系型数据库 MySQL Linux
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
CentOS 7 下使用yum安装MySQL5.7.20 最简单 图文详解
47 0
|
16天前
|
IDE Linux 开发工具
CentOS7.4+REDHAWK2.3.1安装教程——折腾篇
CentOS7.4+REDHAWK2.3.1安装教程——折腾篇
18 0
|
21天前
|
Linux Shell 开发工具
CentOS8中Docker安装及部署
CentOS8中Docker安装及部署
67 0