正德厚生,臻于至善

PostgreSQL生产环境的安装

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
赞(0) 打赏
未经允许不得转载:徐万新之路 » PostgreSQL生产环境的安装

评论 抢沙发

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫

微信扫一扫

登录

找回密码

注册