PostgreSQL生产环境的安装
选择硬件、存储及文件系统
调整系统内核参数
设置系统资源限制
设置SELINUX和防火墙
源码编译安装数据库
设置用户环境变量
手工初始化实例(initdb)
设置数据库参数
配置数据库定时备份
硬件、存储及文件系统选择
磁盘推荐SSD > 机械磁盘
cpu关闭numa
存储阵列级别推荐: raid10 > raid5
使用逻辑卷LVM
文件系统选择: xfs > ext4
多网卡绑定,分别连接到不同的交换机上
核心数据库选择raid10,非核心压力不大的数据库,从成本考虑可以选择raid5。
ext4有免费恢复软件,但数据安全更推荐采用数据备份(异地备份)的方式保护。
pg用0号cpu启动,那么0号cpu对应的内存就会大量使用,出现内存回收也是优先回收0号cpu对应内存。当被换出页被访问时就出现响应时间变慢的问题,引起性能严重抖动。关闭了numa,内存的地位就平等了,就不会出现类似的问题。
系统内核参数调整
推荐设置,支持系统 CentOS 6, 7
vim /etc/sysctl.conf
kernel.sem = 250 162500 250 650
kernel.shmall = 107374182 # 共享内存页数,linux默认共享内存页是4K,所以需要大于等于shmmax/4KB
kernel.shmmax = 274877906944 # 共享内存最大值,单位字节
Kernel.shmmni = 819200 # 一共能生成多少共享内存段,每个PG数据库集群至少2个共享内存段
1*4=2、1=3 信号量、信号量集。多个信号量可以进行原子操作,即一个信号集。信号集组里有多少个信号量,由第一个参数控制。有多少个信号集组由最后一个参数控制。总共有多少个信号量,则是由第二个参数控制,所以需要等于信号集中信号量数*总的信号集的数量,即参数一乘以参数四。 第三个参数控制一个操作可以同时对一个信号集组里多少个信号量进行控制,所以设置为跟信号集组内信号量(第一个参数)一致。postgres数据库信号集组内信号量设置为大于等于17即可不报错。信号集的数量,需要大于进程数/16。假设10000个数据库进程(连接)/16=625,所以信号集数量设置为650。同一个服务器安装多个数据库实例,需要设置的更大一些。所以最低值为20 13000 20 650,也可以按照oracle官方文档的要求,设置为250 162500 250 650。
kernel.shmall = 18446744073692774399
kernel.shmmax = 18446744073692774399
kernel.shmmni = 4096
vm.nr_hugepages= # 多少个2M的内存页,若设置需要大于数据库分配的共享内存
vm.swappiness=0 # 不回收计算内存,回收非计算内存
vm.overcommit_memory=2 # 默认0,申请内存可以超过物理内存总数。oom-killer 杀进程。2不要超分配的策略。
vm.overcommit_ratio=50 # 分配内存不能超过,物理内存*百分比+swap 128G 16G 85%左右比较合适 最多分配124GB
vm.dirty_background_ratio=1 # 超过1% 在后台刷
vm.dirty_ratio=2 # 超过2%开始刷
net.ipv4.tcp_tw_reuse=1 # 开启tcp连接复用功能,允许time_wait sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle=1 # 开启tcp连接中time_wait sockets的快速回收
net.ipv4.tcp_timestamps=0 # 时间戳用于避免序列号的饶卷,但如果客户端和服务器端均开启可能导致不能建立tcp连接
系统资源限制设置
vim /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
vim /etc/security/limits.d/20-nproc.conf
SELINUX和防火墙设置
selinux建议禁用
vi /etc/sysconfig/selinux
SELINUX=disabled
SELINUXTYPE=targeted
OS防火墙(建议按业务场景设置,不需要就先删除所有策略,并关闭服务)
/sbin/iptables -P INPUT ACCEPT # 设置默认接受所有请求
/sbin/iptables -F # 清除防火墙规则
或直接关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
源码编译安装数据库
创建PostgreSQL用户
useradd postgres
创建安装目录
[root@localhost ~]# mkdir /opt/pg12/data -p
[root@localhost ~]# chown -R postgres:postgres /opt/pg12
下载并解压
cd /opt
wget https://ftp.postgresql.org/pub/source/v12.21/postgresql-12.21.tar.gz
tar xfzv postgresql-12.21.tar.gz
chown -R postgres:postgres /opt/postgresql-12.21
源码编译安装数据库
依赖包安装
yum install -y openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel python-devel perl-ExtUtils-Embed readline readline-devel zlib zlib-devel gettext gettext-devel bison flex uuid-devel gcc gcc-c++
编译安装
cd /opt/postgresql-12.21
./configure --prefix=/opt/pg12 --with-pgport=6543 --with-openssl --with-perl --with-python --with-blocksize=16
make world && make install-world
设置用户环境变量
vi ~/.bashrc
export PGHOME=/opt/pg12
export PGPORT=6543
export PGDATA=/opt/pg12/data
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
source ~/.bashrc
初始化数据库实例
initdb -D /opt/pg12/data -E UTF8 --locale=zh_CN.utf8
pg_ctl -D /opt/pg12/data -l logfile start
注册系统服务
前提条件:编译时指定--with-systemd选项
https://www.postgresql.org/docs/12/server-start.html
数据库备份配置
利用linux的crontab定时执行备份脚本(第6章)
- pg_basebackup
- pg_dump
PostgreSQL生产环境的安装
未经允许不得转载:徐万新之路 » PostgreSQL生产环境的安装
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。