在 OpenEuler24.03 源码安装 PG16.3

在ANOLIS 23上源码安装了16.1,在OpenEuler24.03上PG16.3,安装也是一样的吗?

抱着这样的态度,我试​着去安装,如果不关闭SELINUX,还是有一个差异的,同时,发现即使是最小安装,openeuler也是安装了PG源码安装需要的主要包。

同时,以前安装,都是直接搜的baidu的安装文档,但网上的文档,不给你解释为什么要安装这个包,其实,PG官方文档写的比较全,遇到问题,也可以有相关链接,本次安装主要是参照官方文档进行,特别是SELINUX部分。好了,还是看正文吧 。

目录

1.环境

2.参考文档

3.具体安装步骤

3.1 安装必要的包

3.2 安装可选的包

3.3 建立目录

3.4 创建用户

3.5 给目录授权

3.6 下载源码

3.7 解压

3.8 Configure

3.9 编译

3.10 安装

3.11 配置环境变量

3.12 配置SELINUX,使用ROOT用户去配置             --本步骤可选

3.13 创建数据库集群

3.14 修改数据库参数

3.15 配置自动启动服务

3.16 设置内核参数

3.17 设置资源限制

3.18 关闭透明大页 --可选(建议关闭)

3.19 启停PG

3.20 验证

4.保持联系


1.环境

先来看看我们的环境:

OpenEuler 24.03 

内核:6.6.0-35

最小安装

root@openeuler2403 ~]# cat /etc/os-release
NAME=”openEuler”
VERSION=”24.03 (LTS)”
ID=”openEuler”
VERSION_ID=”24.03”
PRETTY_NAME=”openEuler 24.03 (LTS)”
ANSI_COLOR=”0;31”

[root@openeuler2403 ~]#
[root@openeuler2403 ~]# uname -r
6.6.0-35.0.0.43.oe2403.x86_64

[root@openeuler2403 ~]# yum grouplist

Available Environment Groups:
服务器
虚拟化主机
Installed Environment Groups:
最小安装
Available Groups:
容器管理
开发工具
无图形终端系统管理工具
传统 UNIX 兼容性
网络服务器
科学记数法支持
安全性工具
系统工具

2.参考文档


平时,我们习惯到网上搜安装文档,,其实,官网上已经写的比较完整,而且更可信赖。

PostgreSQL: Documentation

PostgreSQL: Documentation: 16: PostgreSQL 16.3 Documentation

3.具体安装步骤


3.1 安装必要的包

参考:PostgreSQL: Documentation: 16: 17.1. Requirements

需要的软件包如下:


make    3.81以上版本
gcc       c99以上
tar        带gzip
readline and readline-devel
zlib
zlib-devel
ICU      用于全球化支持,是 internal components for Unicode 的缩写
libicu-devel

OpenEuler最小安装后,这里主要的包都安装了,不够,可以重新安装一下:
yum -y install make gcc tar readline readline-devel zlib zlib-devel icu libicu-devel


3.2 安装可选的包


Perl            5.14以上
Python       3.2 以上
Tcl              8.4以上
Gettext
OpenSSL  1.0.1以上
MIT, OpenLDAP, and/or PAM
LZ4 ,          用于TOTAST,WAL压缩
Zstandard  1.4.0以上,用于 wal压缩
Flex and Bison 用于git
libselinux libselinux-devel    用于SELINUX

发现,MIT,Zstandard ,YUM源里没有,不过,反正也不用,没有管它。

安装命令:

yum -y install perl python tcl gettext openssl mit openldap pam lz4 zstandard flex bison libselinux libselinux-devel

3.3 建立目录

由于习惯了ORACLE式的目录结构,个人觉得比较明了,因此,借鉴了ORACLE的目录结构

PG软件放在:/u01/app/用户名/product/版本/dbhome_1

PG数据目录:/u01/app/用户名/pgdata

源码目录:     /u01/setup/source

我们这里使用postgres用户安装,pg版本为:16.3,因此如下:


mkdir /u01/app/postgres/product/16.3/dbhome_1 -p
mkdir /u01/app/postgres/pgdata -p
mkdir /u01/setup/source -p


3.4 创建用户


groupadd postgres
useradd -g postgres postgres
echo “postgres” | passwd --stdin postgres


3.5 给目录授权


chown -R postgres:postgres /u01/app/postgres 
chmod -R 775 /u01/app/postgres

3.6 下载源码

su – postgres
cd /u01/setup/source
wget https://ftp.postgresql.org/pub/source/v16.3/postgresql-16.3.tar.gz


3.7 解压

$ tar xvf postgresql-16.3.tar.gz

3.8 Configure


$ cd /u01/setup/source/postgresql-16.3


./configure —prefix=/u01/app/postgres/product/16.3/dbhome_1 --with-selinux

如果系统关闭了selinux,就不用 with-selinux


3.9 编译


make world -j 16 (含所有功能及文档,等于完整安装)

-j 加并行,相对要快一些

3.10 安装


make install-world -j 16


3.11 配置环境变量


cat >> ~/.bash_profile <<”EOF”
export PGPORT=5432
export PGDATA=/u01/app/postgres/pgdata
export PGHOME=/u01/app/postgres/product/16.3/dbhome_1
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
export PGCLIENTENCODING=GBK
EOF

3.12 配置SELINUX,使用ROOT用户去配置             --本步骤可选


如果不想关闭SELINUX,就必须安装SELINUX 策略包

先安装selinux 策略软件包,否则,没有selinux相关包

yum install selinux-policy-devel

创建相关安全上下文

参见这个文档: SEPostgreSQL Administration - PostgreSQL wiki

   不过,这个文档写法有问题,
   ‘(./)?’ 应该为:’(/.)?’,否则,后面开启SELINUX时,一直无法正常启动PG。

   环境变量,前面已经说过:
   $PGDATA=/u01/app/postgres/pgdata 
   $PGHOME=/u01/app/postgres/product/16.3/dbhome_1

   设置上下文:

   # semanage fcontext -a -t usr_t ‘/u01/app/postgres/product/16.3/dbhome_1(/.*)?’
   # semanage fcontext -a -t bin_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin(/.*)?’
   # semanage fcontext -a -t lib_t ‘/u01/app/postgres/product/16.3/dbhome_1/lib(/.*)?’
   # semanage fcontext -a -t postgresql_exec_t          ‘/u01/app/postgres/product/16.3/dbhome_1/bin/postgres’
   # semanage fcontext -a -t postgresql_exec_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin/initdb’
   # semanage fcontext -a -t initrc_exec_t ‘/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl’
/sbin/restorecon -R /u01/app/postgres/product/16.3/dbhome_1
   # semanage fcontext -a -t postgresql_db_t ‘/u01/app/postgres/pgdata(/.*)?’
   # /sbin/restorecon -R /u01/app/postgres/pgdata

 欧拉需要这个,应该是默认没有打标,执行后,重启系统生效。

 # touch /.autorelabel;
# reboot


3.13 创建数据库集群

su - postgres
$ initdb -D /u01/app/postgres/pgdata -E UTF8 --locale=zh_CN.UTF8 -U postgres

3.14 修改数据库参数


cat >> $PGDATA/postgresql.conf << “EOF”
listen_addresses = ‘*’
port=5432
unix_socket_directories=’/u01/app/postgres/pgdata’
logging_collector = on
log_directory = ‘pg_log’
log_filename = ‘postgresql-%a.log’
log_truncate_on_rotation = on
max_connections = 500
shared_buffers = 2GB
EOF

cat >> $PGDATA/pg_hba.conf << “EOF”

TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
EOF

3.15 配置自动启动服务


cat > /etc/systemd/system/pg16.service <<”EOF”
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network.target

[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/u01/app/postgres/pgdata
OOMScoreAdjust=-1000
ExecStart=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl start -D ${PGDATA} -s -o “-p ${PGPORT}” -w -t 300
ExecStop=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/u01/app/postgres/product/16.3/dbhome_1/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target
EOF

配置生效
[root@openeuler2403 ~]# systemctl daemon-reload

验证

开启随系统启动而启动

[root@openeuler2403 ~]# systemctl enable pg16

3.16 设置内核参数


cat > /etc/sysctl.conf <<”EOF”
vm.swappiness=10
vm.zone_reclaim_mode=0
fs.aio-max-nr = 1048576
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
kernel.shmmax = 8589934592
kernel.shmall = 2097152
kernel.shmmni = 4096
kernel.sem = 250 32000 250 128
EOF

kernel.sem四个数字分别是:SEMMSL,SEMMNS,SEMOPM,SEMMNI
SEMMSL:            控制每个信号量集合的最大信号数。
SEMMNS:           控制系统范围内能使用的最大信号量数。
SEMOPM:semop()函数 用来操作信号量)每次调用锁能操作的一个信号量集中的最大信号量,
SEMMNI:             内核中信号量集的最大数量。
SEMMNS=SEMMSL*SEMMNI
SEMOPM=SEMMSL,这两个参数一般设置为相同,

SEMMNl>= ceil((max connections + autovacuum max workers + 4)/16)

3.17 设置资源限制


cat >> /etc/security/limits.conf <<”EOF”

soft nofile 131072
hard nofile 131072
soft nproc 131072
hard nproc 131072
soft core unlimited
hard core unlimited
soft memlock unlimited
hard memlock unlimited
EOF


3.18 关闭透明大页 --可选(建议关闭)

# grubby —update-kernel ALL --args transparent_hugepage=never

 重启生效

这个RHEL9以上版本就使用这种方式来更新启动配置脚本

3.19 启停PG


使用POSTGRES用户去执行
su - postgres
$ pg_ctl start
$ pg_ctl status
$ pg_ctl stop

使用root 用户去执行

su - root

# systemctl start pg16

# systemctl status pg16

# systemctl stop pg16

3.20 验证


[postgres@openeuler2403 pgdata]$ psql


 

到此,数据库安装完成

4.保持联系

----------------------------------------------------------------------
如果你对数据库技术感兴趣,我们还可以在微信群:水煮数据库 进行交流,主要交流日常运维中用到的数据库相关问题,包含但不限于:ORACLE,PG,MYSQL,SQLSERVER,OB,TIDB,达梦,TDSQL,OPENGAUSS,人大金仓,GBASE等等,加我微信吧:zq24803366,备注:水煮数据库, 我拉你入群。
----------------------------------------------------------------------

  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值