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

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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月前
|
关系型数据库 Go 网络安全
go语言中PostgreSQL驱动安装
【11月更文挑战第2天】
85 5
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
1月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
112 3
|
1月前
|
数据库
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
94 2
|
1月前
|
存储 监控 Linux
在 CentOS 7 中如何进行磁盘分区和挂载的最佳实践
本文介绍了在 CentOS 7 中如何进行磁盘分区和挂载的最佳实践。通过合理规划和管理服务器磁盘空间,可以提高系统的稳定性和可维护性。具体步骤包括确认未使用的硬盘、创建分区、格式化分区、创建挂载点、临时和永久挂载分区,以及最佳实践分享。这些操作不仅有助于充分利用磁盘资源,还能提升服务器性能和可靠性。
54 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
160 2
|
1月前
|
存储 监控 Linux
以 CentOS 7 为例,详细介绍了如何对未使用的硬盘进行分区、格式化和挂载的最佳实践
随着业务发展和技术进步,有效管理服务器磁盘空间变得至关重要。本文以 CentOS 7 为例,详细介绍了如何对未使用的硬盘进行分区、格式化和挂载的最佳实践。通过合理规划分区和设置挂载点,可以充分利用磁盘资源,提高系统的稳定性和可维护性。具体步骤包括确认硬盘、创建分区、格式化分区、创建挂载点、临时和永久挂载分区,以及最佳实践建议。
46 3