资讯专栏INFORMATION COLUMN

PG安装部署

IT那活儿 / 842人阅读
PG安装部署
点击上方“IT那活儿”,关注后了解更多精彩内容!!!

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。

PostgreSQL 开发者把它念作 post-gress-Q-L。

PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。



PostgreSQL 特征

函数:通过函数,可以在数据库服务器端执行指令程序。
索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。
触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。
规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。
数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。
全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。
NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。
数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。

Linux 上安装 PostgreSQL

打开 PostgreSQL 官网:
 https://www.postgresql.org/,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 。
Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台,点击具体的平台链接,即可查看安装方法:
点击上图中的 file browser,我们还能下载 PostgreSQL 最新的源码。


基础环境配置

1、关闭selinux

vim /etc/sysconfig/seliunx
selinux=disabled


2、调整用户限制


vim /etc/security/limit.conf
* soft nofile 655360
* hard nofile 655360
* soft nproc 655360
* hard nproc 655360
* soft memlock unlimited
* hard memlock unlimited
* soft core unlimited
* hard core unlimited
* soft stack unlimited
* hard stack unlimited

3、关闭防火墙

systemctl stop firewalld.service
systemctl disable firewalld.service


4、关闭NUMA和透明大页以及设置磁盘预读大小

NUMA架构会优先在请求线程所在的CPU的local内存上分配空间,如果local内存不足,优先淘汰local内存中无用的页面,会导致每个CPU上的内存分配不均。因此建议关闭NUMA。
vi /etc/default/grub的GRUB_CMDLINE_LINUX行最后添加 numa=off
GRUB_CMDLINE_LINUX=”crashkernel=auto …… rhgb quiet numa=off
#执行grub2-mkconfig命令
grub2-mkconfig -o /boot/grub2/grub.cfg


透明大页(transparent_hugepage)在运行时动态分配内存,而运行时的内存分配会有延误,对于数据库管理系统来说并不友好,所以建议关闭透明大页


  • 临时关闭:

[root@localhost ~]# echo never >
/sys/kernel/mm/transparent_hugepage/enabled
[root@localhost ~]# echo never >
/sys/kernel/mm/transparent_hugepage/defrag


  • 永久关闭:


[root@localhost ~]# vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
/sbin/blockdev --setra 16384 /dev/sdb /dev/sdc
授予执行权限
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
source /etc/rc.local命令生效

5、关闭RemoveIPC,CentOS默认为关闭

vi /etc/systemd/logind.conf
RemoveIPC=no


6、调整内核参数

HugePages配置:
Linux内存页默认为4K,当内存很大时,如果页很小,整体性能就会变差。启用了huge_pages后,相应的内存页表就会变小,进而提高内存管理的性能。
cat /proc/meminfo | grep -i huge 查看是否启动了huge_pages
[postgres@PG-1 ~]$ cat /proc/meminfo | grep Huge
AnonHugePages: 2048 kB
HugePages_Total: 4000 #设置的大页个数
HugePages_Free: 3687 ##当前剩余的大页数量,但实际上真正可用的并没有这么多,因为PG锁定了3129个大页
HugePages_Rsvd: 3129 ##启动PostgreSQL数据库使用的大页数量
HugePages_Surp: 0
Hugepagesize: 2048 kB
计算nr_hugepages的配置:
安装完成后,启动数据库。
pid = `cat $PGDATA/postmaster.pid`
pg_mem = `cat /proc/${pid}/status | greo VmPeak`
huge_size = `cat /proc/meminfo| grep -i Hugepagesize`
result = $((pg_mem / huge_size))
sysctl -w vm.nr_hugepages=${result}
或者 shared_buffers/huge_size
fs.aio-max-nr=1048576
fs.file-max=76724600
fs.nr_open=20480000
kernel.sem=4096 2147483647 2147483646 512000
kernel.shmall=5033164 #Total_MEM [按页计算]#建设设置内存的80%,以页为单位4K
kernel.shmmax=20615843030 #Total_mem * 80% #单个共享内存段的大小
kernel.shmmax=20615843030 #Total_mem * 80% #单个共享内存段的大小
kernel.shmmni=819200 #一共能生成多个共享内存段,每个PG数据库集群至少2个共享内存段
net.core.netdev_max_backlog=10000
net.core.wmem_max = 21299200
net.core.rmem_max = 21299200
net.core.wmem_default = 21299200
net.core.rmem_default = 21299200
net.core.somaxconn=65535
net.ipv4.tcp_max_tw_buckets=262144
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 20
net.ipv4.tcp_retries1=5
net.ipv4.tcp_syn_retries=5
net.ipv4.tcp_synack_retries=5
net.ipv4.tcp_retries2=12
net.ipv4.tcp_rmem = 8192 250000 16777216
net.ipv4.tcp_wmem = 8192 250000 16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_local_port_range=40000 65535
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_max_syn_backlog=65535
net.ipv4.tcp_mem=8388608 12582912 16777216
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
vm.swappiness=0
vm.zone_reclaim_mode=0
vm.numa_balancing=0
vm.extfrag_threshold = 500
vm.mim_free_kbytes=1048576 #建议每32GB保留1GB;指定强制Linux VM保留的内存
最新值,单位Kb
vm.overcommit_memory = 2
vm.overcommit_ratio=90
vm.dirty_ratio=10 #指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如10%),系统不得不开始处理缓存脏页
vm.dirty_background_ratio=5 #指定了当文件系统缓存脏页数量达到系统内存百分之多少时(如5%)就会触发
pdflush/flush/kdmflush等后台回写进程运行,将一定缓存的脏页异步地刷入外存
vm.dirty_writeback_centisecs=80
vm.mmap_min_addr=65536 #指定用户进程通过mmap可使用的最小虚拟内存地址,以
避免其在低地址空间产生映射导致安全问题
vm.nr_hugepages=0 #设置大页的个数

7、调整磁盘IO调度

CentOS7:
grubby --update-kernel=ALL --args="elevator=defaline"
CentOS6:
vim /boot/grub/menu.lst
更改到如下内容: ## 在 rhgb quiet 前添加 elevator=deadline
kernel /boot/vmlinuz-2632-504.el6 ro root=LABEL=/ elevator=deadline
rhgb quiet

8、调整磁盘参数 noatime,nodirtime等参数,数据盘目录

/dev/mapper/vg_data-lv_data /data xfs defaults
noatime,nodiratime,barrier=0 0 0

9、安装依赖包

  • 9.1安装依赖包

yum install -y rsync sysstat glib2 glib2-devel gcc gcc-c++ icu
libicu libicu-devel flex flex-devel python python-devel tcl tcldevel perl perl-devel bison bison-devel perl-ExtUtils* readline
readline-devel zlib zlib-devel openssl openssl-devel pam pam-devel
libxml2 libxml2-devel libxslt libxslt-devel openldap openldap-devel
ldapjdk ldapjdk-devel uuid uuid-devel systemd* bzip2 bzip2-devel
bzip2-libs libevent libevent-devel libcurl libcurl-devel libyml
libyml-devel libyaml libyaml-devel libaio libaio-devel uuid uuiddevel logrotate lz4 lz4-devel perl-Time-HiRes perl-DBI perl-DBD-Pg
  • 9.2 安装CMAKE,3.5版本以上

./configure && gmake -j 7 && gmake install
  • 9.3 安装LLVM

LLVM 不支持在源目录中构建LLVM,需要创建一个目录。
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=/usr
/local/bin/c++ -DCMAKE_C_COMPILER=/usr/local/bin/gcc
gmake -j 7 && gmake install
  • 9.4 安装CLANG

不允许在源码目录中进行CMAKE。
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_CXX_COMPILER=/usr
/local/bin/c++ -DCMAKE_C_COMPILER=/usr/local/bin/gcc
gmake -j 7 && gmake install




数据库软件安装及初始化

1、源码编译安装

../configure --prefix=/opt/pgsql/pg132 --exec-prefix=/opt/pgsql/pg132 --
enable-thread-safety --with-pgport=5432 
--with-blocksize=8 --with-segsize=1 --with-wal-blocksize=8 --with-llvm -
-with-icu --with-tcl --with-perl --with-python
--with-gssapi --with-pam --with-ldap --with-selinux --with-systemd --
with-readline --with-libedit-preferred --with-ossp-uuid
--with-libxml --with-libxslt --with-zlib --with-lz4 --with-gnu-ld --withopenssl
make
make world
make install
make install-world
make install-docs
PG14.0
../configure --prefix=/opt/pg140 --exec-prefix=/opt/pg140 --enablethread-safety --with-pgport=5432 --with-blocksize=32 --with-segsize=1 --
with-wal-blocksize=32 --with-llvm --with-icu --with-tcl --with-perl --
with-python --with-gssapi --with-pam --with-ldap --with-selinux --withsystemd --with-readline --with-libedit-preferred --with-ossp-uuid --withlibxml --with-libxslt --with-zlib --with-lz4 --with-gun-ld --with-openssl
AIO:
--with-liburing --with-posix-aio

2、数据库初始化

initdb -D $PGDATA -E UTF8 -A MD5 -U postgres -W --wal-
segsize=256 -k 10020836730533


3、PG连接数据库

  • 数据库的命令窗口

PostgreSQL 命令窗口中,我们可以命令提示符后面输入 SQL 语句:
postgres=#
使用 l 用于查看已经存在的数据库:
postgres=# l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+---------+-------+-----------------------
postgres |
 postgres | UTF8 | C | C |
runoobdb | postgres | UTF8 | C | C |
template0 |
 postgres | UTF8 | C | C | =c/postgres +
| |          | |       | postgres=CTc/postgres
template1 |
 postgres | UTF8 | C | C | =c/postgres +
| |          | |       | postgres=CTc/postgres
(4 rows)
接下来我们可以使用 c + 数据库名 来进入数据库:
postgres=# c runoobdb
You are now connected to database "runoobdb" as user "postgres".
runoobdb=#
  • 系统命令行窗口

在系统的命令行查看,我们可以在连接数据库后面添加数据库名来选择数据库:
$ psql -h localhost -p 5432 -U postgress runoobdb
Password for user postgress: ****
psql (11.3)
Type "help" for help.
You are now connected to database "runoobdb" as user "postgres".
runoobdb=#





END




更多精彩干货分享

点击下方名片关注

IT那活儿

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129731.html

相关文章

  • Docker 部署 Kong 网关

    摘要:自定义配置文件镜像的配置文件路径为如需自定义配置文件,自行挂载即可。配置项手册管理网关的的使用教程这里就不写了,自行觅食吧简单的看看下面这篇可以的集成插件服务网关 Kong 镜像: https://hub.docker.com/_/kong 官网给定的用户安装手册上并没有设置 PG 的密码,导致如下问题无法启动 nginx: [error] init_by_lua error: /us...

    zhouzhou 评论0 收藏0
  • 初识Postgres-XL

    摘要:所有节点中分为三种角色全局事务管理器协调器和数据节点。一旦故障,整个集群立刻无法访问,此时可以切换到节点上。 第一节 简介Postgres-XL是一款开源的PG集群软件,XL代表eXtensible Lattice,即可扩展的PG格子之意,以下简称PGXL。官方称其既适合写操作压力较大的OLTP应用,又适合读操作为主的大数据应用。它的前身是Postgres-XC(简称PGXC),...

    JasinYip 评论0 收藏0
  • Kong网关部署

    摘要:是一个成熟的网关解决方案。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供发布管理维护等主要功能。   Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API...

    hiyang 评论0 收藏0
  • Kong网关部署

    摘要:是一个成熟的网关解决方案。网关的下一层,是内部服务,内部服务只需开发和关注具体业务相关的实现。网关可以提供发布管理维护等主要功能。   Kong是一个使用了lua-nginx-module运行在Nginx之上的Lua应用。Kong是一个成熟的API网关解决方案。API 网关,即API Gateway,是大型分布式系统中,为了保护内部服务而设计的一道屏障,可以提供高性能、高可用的 API...

    XiNGRZ 评论0 收藏0
  • PostgreSQL对接SequoiaDB

    摘要:是一款开源的数据库,支持标准,用户可以通过驱动连接进行应用程序开发。本文就针对如何扩展功能,实现对接进行介绍。直接在中修改配置文件,只能在当前中生效,重新登录需要重新设置。 PostgreSQL是一款开源的SQL数据库,支持标准SQL,用户可以通过JDBC驱动连接PostgreSQL进行应用程序开发。用户通过扩展PostgreSQL功能,让开发者可以使用SQL语句访问SequoiaDB...

    TZLLOG 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<